From 286e1f804d2676d65846be31296bc422d8c64431 Mon Sep 17 00:00:00 2001 From: Nastya Rusina Date: Sun, 24 Apr 2022 15:40:02 -0700 Subject: [PATCH 01/93] chore: move src to a new location Signed-off-by: Nastya Rusina --- .../zapp/console/src}/assets/SmallArrow.svg | 0 .../zapp/console/src}/assets/favicon.png | Bin .../zapp/console/src}/assets/index.html | 0 .../src}/basics/FeatureFlags/AdminFlag.tsx | 0 .../src}/basics/FeatureFlags/FEATURE_FLAGS.md | 0 .../basics/FeatureFlags/FeatureFlags.test.tsx | 0 .../src}/basics/FeatureFlags/FeatureFlags.tsx | 0 .../src}/basics/FeatureFlags/defaultConfig.ts | 0 .../src}/basics/FeatureFlags/index.tsx | 0 .../basics/LocalCache/ContextProvider.tsx | 0 .../src}/basics/LocalCache/defaultConfig.ts | 0 .../console/src}/basics/LocalCache/index.tsx | 0 .../basics/LocalCache/localCache.test.tsx | 0 .../LocalCache/onlyMineDefaultConfig.ts | 0 .../zapp/console/src}/basics/Locale/index.ts | 0 {src => packages/zapp/console/src}/client.tsx | 0 .../zapp/console/src}/common/constants.ts | 0 .../zapp/console/src}/common/env.ts | 0 .../zapp/console/src}/common/formatters.ts | 0 .../zapp/console/src}/common/layout.ts | 0 .../zapp/console/src}/common/linkify.ts | 0 .../zapp/console/src}/common/log.ts | 0 .../zapp/console/src}/common/promiseUtils.ts | 0 .../src}/common/test/formatters.spec.ts | 0 .../console/src}/common/test/linkify.test.ts | 0 .../console/src}/common/test/utils.spec.ts | 0 .../zapp/console/src}/common/timer.ts | 0 .../zapp/console/src}/common/timezone.ts | 0 .../zapp/console/src}/common/typeCheckers.ts | 0 .../zapp/console/src}/common/types.ts | 0 .../zapp/console/src}/common/utils.ts | 0 .../zapp/console/src}/components/App/App.tsx | 0 .../src}/components/Cache/CacheContext.ts | 0 .../src}/components/Cache/createCache.ts | 0 .../console/src}/components/Cache/utils.ts | 0 .../components/Entities/EntityDescription.tsx | 0 .../components/Entities/EntityDetails.tsx | 0 .../Entities/EntityDetailsHeader.tsx | 0 .../components/Entities/EntityExecutions.tsx | 0 .../Entities/EntityExecutionsBarChart.tsx | 0 .../components/Entities/EntitySchedules.tsx | 0 .../components/Entities/EntityVersions.tsx | 0 .../src}/components/Entities/constants.ts | 0 .../src}/components/Entities/generators.ts | 0 .../src}/components/Entities/strings.ts | 0 .../Entities/test/EntitySchedules.test.tsx | 0 .../src}/components/Errors/DataError.tsx | 0 .../Errors/__stories__/DataError.stories.tsx | 0 .../components/Errors/test/DataError.test.tsx | 0 .../ExecutionChildrenLoader.tsx | 0 .../ExecutionDetails/ExecutionDetails.tsx | 0 .../ExecutionDetailsAppBarContent.tsx | 0 .../ExecutionDetails/ExecutionMetadata.tsx | 0 .../ExecutionMetadataExtra.tsx | 0 .../ExecutionDetails/ExecutionNodeViews.tsx | 0 .../ExecutionWorkflowGraph.tsx | 0 .../NodeExecutionDetailsPanelContent.tsx | 0 .../NodeExecutionTabs/NodeExecutionInputs.tsx | 0 .../NodeExecutionOutputs.tsx | 0 .../NodeExecutionTabs/index.tsx | 0 .../RelaunchExecutionForm.tsx | 0 .../StatusIndicator.tsx | 0 .../TaskExecutionNode.tsx | 0 .../TaskExecutionNodeRenderer.tsx | 0 .../Timeline/ExecutionTimeline.tsx | 0 .../Timeline/ExecutionTimelineFooter.tsx | 0 .../Timeline/NodeExecutionName.tsx | 0 .../TimelineChart/TimelineChart.stories.tsx | 0 .../TimelineChartSingleItem.stories.tsx | 0 .../Timeline/TimelineChart/barOptions.ts | 0 .../Timeline/TimelineChart/chartData.ts | 0 .../Timeline/TimelineChart/index.tsx | 0 .../Timeline/TimelineChart/utils.ts | 0 .../ExecutionDetails/Timeline/chartHeader.tsx | 0 .../ExecutionDetails/Timeline/context.ts | 0 .../ExecutionDetails/Timeline/helpers.ts | 0 .../ExecutionDetails/Timeline/index.tsx | 0 .../Timeline/scaleContext.tsx | 0 .../ExecutionDetails/Timeline/taskNames.tsx | 0 .../Executions/ExecutionDetails/constants.ts | 0 .../ExecutionDetailsAppBarContent.test.tsx | 0 .../test/ExecutionMetadata.test.tsx | 0 .../test/ExecutionNodeViews.test.tsx | 0 .../test/NodeExecutionDetails.test.tsx | 0 .../test/RelaunchExecutionForm.test.tsx | 0 .../ExecutionDetails/test/Timeline.test.tsx | 0 .../test/TimelineChart.test.tsx | 0 .../test/__mocks__/NodeExecution.mock.ts | 0 .../Executions/ExecutionDetails/types.ts | 0 .../useExecutionNodeViewsState.ts | 0 .../useRecoverExecutionState.ts | 0 .../Executions/ExecutionDetails/utils.ts | 0 .../Executions/ExecutionFilters.tsx | 0 .../ExecutionInputsOutputsModal.tsx | 0 .../Executions/ExecutionStatusBadge.tsx | 0 .../Executions/NodeExecutionCacheStatus.tsx | 0 .../Tables/ExecutionsTableHeader.tsx | 0 .../Tables/ExpandableExecutionError.tsx | 0 .../Executions/Tables/NoExecutionsContent.tsx | 0 .../Tables/NodeExecutionChildren.tsx | 0 .../Executions/Tables/NodeExecutionRow.tsx | 0 .../Executions/Tables/NodeExecutionsTable.tsx | 0 .../Executions/Tables/RowExpander.tsx | 0 .../Tables/SelectNodeExecutionLink.tsx | 0 .../Tables/WorkflowExecutionLink.tsx | 0 .../WorkflowExecutionRow.tsx | 0 .../Tables/WorkflowExecutionTable/cells.tsx | 0 .../Tables/WorkflowExecutionTable/strings.ts | 0 .../Tables/WorkflowExecutionTable/styles.ts | 0 .../useWorkflowExecutionsTableColumns.tsx | 0 .../Tables/WorkflowExecutionsTable.tsx | 0 .../Executions/Tables/WorkflowVersionRow.tsx | 0 .../Tables/WorkflowVersionsTable.tsx | 0 .../__mocks__/WorkflowExecutionsTable.tsx | 0 .../NodeExecutionsTable.stories.tsx | 0 .../WorkflowExecutionsTable.stories.tsx | 0 .../components/Executions/Tables/constants.ts | 0 .../components/Executions/Tables/contexts.ts | 0 .../Tables/nodeExecutionColumns.tsx | 0 .../components/Executions/Tables/styles.ts | 0 .../Tables/test/NodeExecutionsTable.test.tsx | 0 .../components/Executions/Tables/types.ts | 0 .../Tables/useWorkflowExecutionTableState.ts | 0 .../useWorkflowVersionsTableColumns.tsx | 0 .../components/Executions/Tables/utils.ts | 0 .../MapTaskExecutionListItem.tsx | 0 .../TaskExecutionDetails.tsx | 0 .../TaskExecutionsList/TaskExecutionError.tsx | 0 .../TaskExecutionsList/TaskExecutionLogs.tsx | 0 .../TaskExecutions.mocks.ts | 0 .../TaskExecutionsList/TaskExecutionsList.tsx | 0 .../TaskExecutionsListContent.stories.tsx | 0 .../TaskExecutionsListItem.tsx | 0 .../test/TaskExecutionsList.test.tsx | 0 .../TaskExecutionsList/test/utils.spec.ts | 0 .../Executions/TaskExecutionsList/utils.ts | 0 .../TerminateExecutionButton.tsx | 0 .../TerminateExecutionForm.tsx | 0 .../useTerminateExecutionState.ts | 0 .../__stories__/ExecutionFilters.stories.tsx | 0 .../src}/components/Executions/constants.ts | 0 .../createExecutionArray.tsx | 0 .../getTaskThroughExecution.ts | 0 .../NodeExecutionDetails/index.tsx | 0 .../NodeExecutionDetails/types.ts | 0 .../src}/components/Executions/contexts.ts | 0 .../Executions/filters/constants.ts | 0 .../Executions/filters/durationFilters.ts | 0 .../Executions/filters/startTimeFilters.ts | 0 .../Executions/filters/statusFilters.ts | 0 .../components/Executions/filters/types.ts | 0 .../filters/useExecutionArchiveState.ts | 0 .../filters/useExecutionFiltersState.ts | 0 .../filters/useFilterButtonState.ts | 0 .../Executions/filters/useMultiFilterState.ts | 0 .../filters/useOnlyMyExecutionsFilterState.ts | 0 .../filters/useSearchFilterState.ts | 0 .../filters/useSingleFilterState.ts | 0 .../Executions/nodeExecutionQueries.ts | 0 .../Executions/taskExecutionQueries.ts | 0 .../Executions/test/ExecutionFilters.test.tsx | 0 .../useOnlyMyExecutionsFilterState.test.ts | 0 .../components/Executions/test/utils.test.ts | 0 .../src}/components/Executions/types.ts | 0 .../Executions/useTaskExecutions.ts | 0 .../Executions/useWorkflowExecution.ts | 0 .../src}/components/Executions/utils.ts | 0 .../Executions/workflowExecutionQueries.ts | 0 .../Launch/LaunchForm/BlobInput.tsx | 0 .../Launch/LaunchForm/CollectionInput.tsx | 0 .../Launch/LaunchForm/DatetimeInput.tsx | 0 .../Launch/LaunchForm/LaunchForm.tsx | 0 .../Launch/LaunchForm/LaunchFormActions.tsx | 0 .../LaunchForm/LaunchFormAdvancedInputs.tsx | 0 .../Launch/LaunchForm/LaunchFormHeader.tsx | 0 .../Launch/LaunchForm/LaunchFormInputs.tsx | 0 .../LaunchForm/LaunchInterruptibleInput.tsx | 0 .../Launch/LaunchForm/LaunchRoleInput.tsx | 0 .../Launch/LaunchForm/LaunchTaskForm.tsx | 0 .../Launch/LaunchForm/LaunchWorkflowForm.tsx | 0 .../Launch/LaunchForm/NoInputsNeeded.tsx | 0 .../Launch/LaunchForm/SearchableSelector.tsx | 0 .../Launch/LaunchForm/SimpleInput.tsx | 0 .../Launch/LaunchForm/StructInput.tsx | 0 .../Launch/LaunchForm/UnsupportedInput.tsx | 0 .../UnsupportedRequiredInputsError.tsx | 0 .../Launch/LaunchForm/__mocks__/mockInputs.ts | 0 .../Launch/LaunchForm/__mocks__/utils.ts | 0 .../__stories__/LaunchForm.stories.tsx | 0 .../__stories__/WorkflowSelector.stories.tsx | 0 .../components/Launch/LaunchForm/constants.ts | 0 .../components/Launch/LaunchForm/getInputs.ts | 0 .../components/Launch/LaunchForm/handlers.ts | 0 .../Launch/LaunchForm/inputHelpers/blob.ts | 0 .../Launch/LaunchForm/inputHelpers/boolean.ts | 0 .../LaunchForm/inputHelpers/collection.ts | 0 .../LaunchForm/inputHelpers/constants.ts | 0 .../LaunchForm/inputHelpers/datetime.ts | 0 .../LaunchForm/inputHelpers/duration.ts | 0 .../Launch/LaunchForm/inputHelpers/float.ts | 0 .../inputHelpers/getHelperForInput.ts | 0 .../LaunchForm/inputHelpers/inputHelpers.ts | 0 .../Launch/LaunchForm/inputHelpers/integer.ts | 0 .../Launch/LaunchForm/inputHelpers/none.ts | 0 .../LaunchForm/inputHelpers/parseJson.ts | 0 .../Launch/LaunchForm/inputHelpers/schema.ts | 0 .../Launch/LaunchForm/inputHelpers/string.ts | 0 .../Launch/LaunchForm/inputHelpers/struct.ts | 0 .../inputHelpers/test/inputHelpers.test.ts | 0 .../inputHelpers/test/structTestCases.ts | 0 .../LaunchForm/inputHelpers/test/testCases.ts | 0 .../inputHelpers/test/utils.test.ts | 0 .../Launch/LaunchForm/inputHelpers/types.ts | 0 .../Launch/LaunchForm/inputHelpers/utils.ts | 0 .../Launch/LaunchForm/inputValueCache.ts | 0 .../Launch/LaunchForm/launchMachine.ts | 0 .../components/Launch/LaunchForm/services.ts | 0 .../components/Launch/LaunchForm/styles.ts | 0 .../LaunchForm/test/LaunchTaskForm.test.tsx | 0 .../test/LaunchWorkflowForm.test.tsx | 0 .../Launch/LaunchForm/test/constants.ts | 0 .../Launch/LaunchForm/test/getInputs.test.ts | 0 .../Launch/LaunchForm/test/utils.ts | 0 .../components/Launch/LaunchForm/types.ts | 0 .../Launch/LaunchForm/useFormInputsState.ts | 0 .../LaunchForm/useLaunchTaskFormState.ts | 0 .../LaunchForm/useLaunchWorkflowFormState.ts | 0 .../useMappedExecutionInputValues.ts | 0 .../LaunchForm/useTaskSourceSelectorState.ts | 0 .../LaunchForm/useVersionSelectorOptions.ts | 0 .../useWorkflowSourceSelectorState.ts | 0 .../components/Launch/LaunchForm/utils.ts | 0 .../Literals/LiteralCollectionViewer.tsx | 0 .../components/Literals/LiteralMapViewer.tsx | 0 .../src}/components/Literals/LiteralValue.tsx | 0 .../src}/components/Literals/PrintList.tsx | 0 .../src}/components/Literals/PrintValue.tsx | 0 .../Literals/Scalar/BinaryValue.tsx | 0 .../components/Literals/Scalar/BlobValue.tsx | 0 .../components/Literals/Scalar/ErrorValue.tsx | 0 .../Literals/Scalar/NoneTypeValue.tsx | 0 .../Literals/Scalar/PrimitiveValue.tsx | 0 .../Literals/Scalar/ProtobufStructValue.tsx | 0 .../Literals/Scalar/ScalarValue.tsx | 0 .../Literals/Scalar/SchemaValue.tsx | 0 .../Scalar/test/PrimitiveValue.test.tsx | 0 .../Scalar/test/ProtobufStructValue.test.tsx | 0 .../components/Literals/UnsupportedType.tsx | 0 .../src}/components/Literals/ValueLabel.tsx | 0 .../Literals/__stories__/CardDecorator.tsx | 0 .../__stories__/Collection.stories.tsx | 0 .../Literals/__stories__/Map.stories.tsx | 0 .../__stories__/ProtobufStruct.stories.tsx | 0 .../Literals/__stories__/Scalar.stories.tsx | 0 .../Literals/__stories__/binaryValues.ts | 0 .../Literals/__stories__/blobValues.ts | 0 .../Literals/__stories__/errorValues.ts | 0 .../Literals/__stories__/literalValues.ts | 0 .../Literals/__stories__/primitiveValues.ts | 0 .../Literals/__stories__/protobufValues.ts | 0 .../Literals/__stories__/scalarValues.ts | 0 .../Literals/__stories__/schemaValues.ts | 0 .../src}/components/Literals/constants.ts | 0 .../src}/components/Literals/styles.ts | 0 .../Literals/test/LiteralMapViewer.test.tsx | 0 .../Navigation/DefaultAppBarContent.tsx | 0 .../src}/components/Navigation/NavBar.tsx | 0 .../components/Navigation/NavBarContent.tsx | 0 .../Navigation/ProjectNavigation.tsx | 0 .../components/Navigation/ProjectSelector.tsx | 0 .../Navigation/SearchableProjectList.tsx | 0 .../components/Navigation/SideNavigation.tsx | 0 .../components/Navigation/UserInformation.tsx | 0 .../Navigation/VersionDisplayModal.tsx | 0 .../Navigation/__stories__/Navbar.stories.tsx | 0 .../__stories__/ProjectSelector.stories.tsx | 0 .../__stories__/SideNavigation.stories.tsx | 0 .../Navigation/test/ProjectSelector.test.tsx | 0 .../Navigation/test/UserInformation.test.tsx | 0 .../Navigation/withSideNavigation.tsx | 0 .../src}/components/NotFound/NotFound.tsx | 0 .../NotFound/__stories__/NotFound.stories.tsx | 0 .../Notifications/SystemStatusBanner.tsx | 0 .../SystemStatusBanner.stories.tsx | 0 .../test/SystemStatusBanner.test.tsx | 0 .../Notifications/useSystemStatus.ts | 0 .../components/Project/ProjectDashboard.tsx | 0 .../components/Project/ProjectDetails.tsx | 0 .../components/Project/ProjectStatusBar.tsx | 0 .../src}/components/Project/ProjectTasks.tsx | 0 .../components/Project/ProjectWorkflows.tsx | 0 .../src}/components/Project/constants.ts | 0 .../src}/components/Project/strings.ts | 0 .../Project/test/ProjectDashboard.test.tsx | 0 .../Project/test/ProjectTask.test.tsx | 0 .../Project/test/ProjectWorkflows.test.tsx | 0 .../components/SelectProject/ProjectList.tsx | 0 .../SelectProject/SelectProject.tsx | 0 .../components/SelectProject/constants.ts | 0 .../src}/components/Tables/DataList.tsx | 0 .../components/Tables/LoadMoreRowContent.tsx | 0 .../components/Tables/PaginatedDataList.tsx | 0 .../src}/components/Tables/constants.ts | 0 .../Tables/filters/FilterPopoverButton.tsx | 0 .../Task/SearchableTaskNameList.tsx | 0 .../components/Task/SimpleTaskInterface.tsx | 0 .../src}/components/Task/TaskDetails.tsx | 0 .../SearchableTaskNameList.stories.tsx | 0 .../src}/components/Task/taskQueries.ts | 0 .../Task/test/SimpleTaskInterface.test.tsx | 0 .../src}/components/Task/useLatestTask.ts | 0 .../Task/useTaskShowArchivedState.ts | 0 .../console/src}/components/Task/utils.ts | 0 .../src}/components/Theme/colorSpectrum.ts | 0 .../src}/components/Theme/constants.ts | 0 .../console/src}/components/Theme/muiTheme.ts | 0 .../console/src}/components/Theme/useTheme.ts | 0 .../Workflow/SearchableWorkflowNameList.tsx | 0 .../Workflow/StaticGraphContainer.tsx | 0 .../components/Workflow/WorkflowDetails.tsx | 0 .../Workflow/WorkflowVersionDetails.tsx | 0 .../SearchableWorkflowNameList.stories.tsx | 0 .../filters/useWorkflowShowArchivedState.ts | 0 .../console/src}/components/Workflow/types.ts | 0 .../Workflow/useWorkflowInfoItem.ts | 0 .../Workflow/useWorkflowInfoList.ts | 0 .../console/src}/components/Workflow/utils.ts | 0 .../components/Workflow/workflowQueries.ts | 0 .../WorkflowGraph/InputOutputNodeRenderer.tsx | 0 .../WorkflowGraph/TaskNodeRenderer.tsx | 0 .../WorkflowGraph/WorkflowGraph.tsx | 0 .../__stories__/WorkflowGraph.stories.tsx | 0 .../WorkflowGraph/__stories__/rich.json | 0 .../WorkflowGraph/test/utils.test.ts | 0 .../transformerWorkflowToDag.tsx | 0 .../src}/components/WorkflowGraph/utils.ts | 0 .../src}/components/common/BarChart.tsx | 0 .../common/ButtonCircularProgress.tsx | 0 .../src}/components/common/ButtonLink.tsx | 0 .../components/common/ClosableDialogTitle.tsx | 0 .../components/common/ContentContainer.tsx | 0 .../src}/components/common/DataTable.tsx | 0 .../src}/components/common/DelayedMount.tsx | 0 .../src}/components/common/DetailsGroup.tsx | 0 .../src}/components/common/DetailsPanel.tsx | 0 .../components/common/DetailsPanelContent.tsx | 0 .../common/DomainSettingsSection.tsx | 0 .../common/DropDownWindowButton.tsx | 0 .../src}/components/common/DumpJSON.tsx | 0 .../console/src}/components/common/Empty.tsx | 0 .../src}/components/common/ErrorBoundary.tsx | 0 .../common/ExpandableContentLink.tsx | 0 .../common/ExpandableMonospaceText.tsx | 0 .../common/FilterableNamedEntityList.tsx | 0 .../src}/components/common/FlyteLogo.tsx | 0 .../src}/components/common/Icons/InfoIcon.tsx | 0 .../src}/components/common/Icons/interface.ts | 0 .../src}/components/common/LinkifiedText.tsx | 0 .../src}/components/common/LoadingSpinner.tsx | 0 .../MapTaskStatusInfo.stories.tsx | 0 .../MapTaskStatusInfo.test.tsx | 0 .../MapTaskStatusInfo.tsx | 0 .../components/common/MoreOptionsMenu.tsx | 0 .../components/common/MultiSelectForm.tsx | 0 .../src}/components/common/NewTargetLink.tsx | 0 .../src}/components/common/NoResults.tsx | 0 .../src}/components/common/NonIdealState.tsx | 0 .../components/common/PanelSection/index.tsx | 0 .../common/PublishedWithChanges.tsx | 0 .../components/common/SearchInputForm.tsx | 0 .../src}/components/common/SearchableList.tsx | 0 .../common/SearchableNamedEntityList.tsx | 0 .../src}/components/common/SectionHeader.tsx | 0 .../src}/components/common/Shimmer.tsx | 0 .../components/common/SingleSelectForm.tsx | 0 .../src}/components/common/WaitForData.tsx | 0 .../src}/components/common/WaitForQuery.tsx | 0 .../common/__stories__/BarChart.stories.tsx | 0 .../ButtonCircularProgress.stories.tsx | 0 .../common/__stories__/Decorators.tsx | 0 .../__stories__/ErrorBoundary.stories.tsx | 0 .../ExpandableContentLink.stories.tsx | 0 .../ExpandableMonospaceText.stories.tsx | 0 .../common/__stories__/FlyteLogo.stories.tsx | 0 .../__stories__/LoadingSpinner.stories.tsx | 0 .../__stories__/NonIdealState.stories.tsx | 0 .../common/__stories__/Typography.stories.tsx | 0 .../src}/components/common/constants.ts | 0 .../src}/components/common/keyboardEvents.ts | 0 .../src}/components/common/scopedContext.ts | 0 .../console/src}/components/common/strings.ts | 0 .../console/src}/components/common/styles.ts | 0 .../common/test/ContentContainer.spec.tsx | 0 .../components/common/test/DataTable.test.tsx | 0 .../test/DomainSettingsSection.test.tsx | 0 .../common/test/LoadingSpinner.test.tsx | 0 .../common/test/MoreOptionsMenu.test.tsx | 0 .../common/test/NewTargetLink.spec.tsx | 0 .../common/test/SearchableList.spec.tsx | 0 .../ContentContainer.spec.tsx.snap | 0 .../console/src}/components/common/types.ts | 0 .../components/common/useLinkifiedChunks.ts | 0 .../common/useSearchableListState.ts | 0 .../console/src}/components/common/utils.ts | 0 .../components/common/withRouteParams.tsx | 0 .../data/QueryAuthorizationObserver.tsx | 0 .../components/data/__mocks__/apiContext.ts | 0 .../src}/components/data/apiContext.ts | 0 .../src}/components/data/queryCache.ts | 0 .../src}/components/data/queryUtils.ts | 0 .../components/data/test/queryUtils.test.ts | 0 .../console/src}/components/data/types.ts | 0 .../console/src}/components/data/utils.ts | 0 .../src}/components/flytegraph/Arrowhead.tsx | 0 .../flytegraph/DragAllowingClickHandler.ts | 0 .../flytegraph/InteractiveViewBox.tsx | 0 .../src}/components/flytegraph/Layout.tsx | 0 .../src}/components/flytegraph/Node.tsx | 0 .../src}/components/flytegraph/NodeLink.tsx | 0 .../src}/components/flytegraph/NodeText.tsx | 0 .../flytegraph/ReactFlow/NodeStatusLegend.tsx | 0 .../ReactFlow/ReactFlowGraphComponent.tsx | 0 .../flytegraph/ReactFlow/ReactFlowWrapper.tsx | 0 .../ReactFlow/customNodeComponents.tsx | 0 .../ReactFlow/transformDAGToReactFlowV2.tsx | 0 .../components/flytegraph/ReactFlow/types.ts | 0 .../components/flytegraph/ReactFlow/utils.tsx | 0 .../components/flytegraph/RenderedGraph.tsx | 0 .../flytegraph/__stories__/batchTasks.json | 0 .../flytegraph/__stories__/largeGraph.json | 0 .../flytegraph/__stories__/rich.json | 0 .../flytegraph/__stories__/simple.json | 0 .../src}/components/flytegraph/constants.ts | 0 .../src}/components/flytegraph/layoutUtils.ts | 0 .../src}/components/flytegraph/theme.ts | 0 .../src}/components/flytegraph/timer.ts | 0 .../src}/components/flytegraph/types.ts | 0 .../src}/components/flytegraph/utils.ts | 0 .../hooks/__mocks__/fetchableData.ts | 0 .../src}/components/hooks/fetchMachine.ts | 0 .../hooks/test/useDebouncedValue.test.tsx | 0 .../hooks/test/useFetchableData.test.tsx | 0 .../hooks/test/usePagination.test.tsx | 0 .../src}/components/hooks/test/utils.test.ts | 0 .../console/src}/components/hooks/types.ts | 0 .../src}/components/hooks/useChartState.ts | 0 .../components/hooks/useConditionalQuery.ts | 0 .../src}/components/hooks/useDataRefresher.ts | 0 .../components/hooks/useDebouncedValue.ts | 0 .../src}/components/hooks/useDelayedValue.ts | 0 .../src}/components/hooks/useFetchableData.ts | 0 .../src}/components/hooks/useLaunchPlans.ts | 0 .../src}/components/hooks/useLocationState.ts | 0 .../src}/components/hooks/useNamedEntity.ts | 0 .../src}/components/hooks/useNodeExecution.ts | 0 .../hooks/useOnlyMineSelectedValue.ts | 0 .../src}/components/hooks/usePagination.ts | 0 .../src}/components/hooks/useProjects.ts | 0 .../src}/components/hooks/useQueryState.ts | 0 .../src}/components/hooks/useTabState.ts | 0 .../console/src}/components/hooks/useTask.ts | 0 .../src}/components/hooks/useTaskExecution.ts | 0 .../src}/components/hooks/useUserProfile.ts | 0 .../src}/components/hooks/useVersion.ts | 0 .../components/hooks/useWorkflowExecutions.ts | 0 .../components/hooks/useWorkflowSchedules.ts | 0 .../components/hooks/useWorkflowVersions.ts | 0 .../console/src}/components/hooks/utils.ts | 0 .../zapp/console/src}/config/types.ts | 0 .../zapp/console/src}/errors/fetchErrors.ts | 0 .../console/src}/errors/parameterErrors.ts | 0 .../console/src}/errors/protobufErrors.ts | 0 .../console/src}/errors/validationErrors.ts | 0 .../zapp/console/src}/flyteidl/index.ts | 0 .../console/src}/mocks/createAdminServer.ts | 0 .../zapp/console/src}/mocks/data/constants.ts | 0 .../data/fixtures/basicPythonWorkflow.ts | 0 .../fixtures/dynamicExternalSubworkflow.ts | 0 .../data/fixtures/dynamicPythonWorkflow.ts | 0 .../data/fixtures/oneFailedTaskWorkflow.ts | 0 .../console/src}/mocks/data/fixtures/types.ts | 0 .../console/src}/mocks/data/generators.ts | 0 .../console/src}/mocks/data/insertFixture.ts | 0 .../zapp/console/src}/mocks/data/projects.ts | 0 .../zapp/console/src}/mocks/data/utils.ts | 0 .../zapp/console/src}/mocks/errors.ts | 0 .../console/src}/mocks/insertDefaultData.ts | 0 .../zapp/console/src}/mocks/server.ts | 0 .../zapp/console/src}/mocks/utils.ts | 0 .../src}/models/AdminEntity/AdminApiQuery.ts | 0 .../src}/models/AdminEntity/AdminEntity.ts | 0 .../src}/models/AdminEntity/constants.ts | 0 .../AdminEntity/test/AdminApiQuery.spec.ts | 0 .../AdminEntity/test/AdminEntity.spec.ts | 0 .../models/AdminEntity/test/utils.spec.ts | 0 .../AdminEntity/transformRequestError.ts | 0 .../console/src}/models/AdminEntity/types.ts | 0 .../console/src}/models/AdminEntity/utils.ts | 0 .../zapp/console/src}/models/Common/api.ts | 0 .../console/src}/models/Common/constants.ts | 0 .../zapp/console/src}/models/Common/types.ts | 0 .../zapp/console/src}/models/Common/utils.ts | 0 .../models/Execution/__mocks__/constants.ts | 0 .../__mocks__/mockNodeExecutionsData.ts | 0 .../__mocks__/mockTaskExecutionsData.ts | 0 .../__mocks__/mockWorkflowExecutionsData.ts | 0 .../__mocks__/sampleExecutionError.ts | 0 .../zapp/console/src}/models/Execution/api.ts | 0 .../src}/models/Execution/constants.ts | 0 .../console/src}/models/Execution/enums.ts | 0 .../console/src}/models/Execution/types.ts | 0 .../console/src}/models/Execution/utils.ts | 0 .../models/Graph/convertFlyteGraphToDAG.ts | 0 .../zapp/console/src}/models/Graph/types.ts | 0 .../zapp/console/src}/models/Launch/api.ts | 0 .../console/src}/models/Launch/constants.ts | 0 .../zapp/console/src}/models/Launch/types.ts | 0 .../zapp/console/src}/models/Launch/utils.ts | 0 .../models/Node/__mocks__/mockNodeData.ts | 0 .../console/src}/models/Node/constants.ts | 0 .../zapp/console/src}/models/Node/types.ts | 0 .../zapp/console/src}/models/Project/api.ts | 0 .../src}/models/Project/test/api.test.ts | 0 .../zapp/console/src}/models/Project/types.ts | 0 .../zapp/console/src}/models/Project/utils.ts | 0 .../models/Task/__mocks__/mockTaskData.ts | 0 .../zapp/console/src}/models/Task/api.ts | 0 .../console/src}/models/Task/constants.ts | 0 .../console/src}/models/Task/task.test.ts | 0 .../zapp/console/src}/models/Task/types.ts | 0 .../zapp/console/src}/models/Task/utils.ts | 0 .../zapp/console/src}/models/Workflow/api.ts | 0 .../console/src}/models/Workflow/constants.ts | 0 .../console/src}/models/Workflow/types.ts | 0 .../console/src}/models/Workflow/utils.ts | 0 .../src}/models/__mocks__/executionsData.ts | 0 .../models/__mocks__/graphWorkflowData.ts | 0 .../src}/models/__mocks__/launchPlanData.ts | 0 .../src}/models/__mocks__/projectData.ts | 0 .../src}/models/__mocks__/sampleTaskNames.ts | 0 .../models/__mocks__/sampleWorkflowNames.ts | 0 .../models/__mocks__/simpleTaskClosure.json | 0 .../__mocks__/simpleWorkflowClosure.json | 0 .../console/src}/models/__mocks__/taskData.ts | 0 .../src}/models/__mocks__/workflowData.ts | 0 .../zapp/console/src}/models/enums.ts | 0 .../zapp/console/src}/protobuf.ts | 0 .../console/src}/routes/ApplicationRouter.tsx | 0 .../zapp/console/src}/routes/NavBarRouter.tsx | 0 .../zapp/console/src}/routes/components.ts | 0 .../zapp/console/src}/routes/constants.ts | 0 .../zapp/console/src}/routes/history.ts | 0 .../zapp/console/src}/routes/routes.ts | 0 .../zapp/console/src}/routes/types.ts | 0 .../zapp/console/src}/routes/utils.ts | 0 {src => packages/zapp/console/src}/server.ts | 0 .../zapp/console/src}/test/modelUtils.ts | 0 .../zapp/console/src}/test/setupTests.ts | 0 .../zapp/console/src}/test/utils.ts | 0 packages/zapp/console/src/tsd/contrast.d.ts | 4 + packages/zapp/console/src/tsd/d3-dag.d.ts | 276 ++++++++++++++++ .../zapp/console/src}/tsd/globals.d.ts | 3 +- .../zapp/console/src}/tsd/index.d.ts | 0 packages/zapp/console/src/tsd/window.d.ts | 10 + src/tsd/contrast.d.ts | 4 - src/tsd/d3-dag.d.ts | 300 ------------------ src/tsd/window.d.ts | 10 - 567 files changed, 291 insertions(+), 316 deletions(-) rename {src => packages/zapp/console/src}/assets/SmallArrow.svg (100%) rename {src => packages/zapp/console/src}/assets/favicon.png (100%) rename {src => packages/zapp/console/src}/assets/index.html (100%) rename {src => packages/zapp/console/src}/basics/FeatureFlags/AdminFlag.tsx (100%) rename {src => packages/zapp/console/src}/basics/FeatureFlags/FEATURE_FLAGS.md (100%) rename {src => packages/zapp/console/src}/basics/FeatureFlags/FeatureFlags.test.tsx (100%) rename {src => packages/zapp/console/src}/basics/FeatureFlags/FeatureFlags.tsx (100%) rename {src => packages/zapp/console/src}/basics/FeatureFlags/defaultConfig.ts (100%) rename {src => packages/zapp/console/src}/basics/FeatureFlags/index.tsx (100%) rename {src => packages/zapp/console/src}/basics/LocalCache/ContextProvider.tsx (100%) rename {src => packages/zapp/console/src}/basics/LocalCache/defaultConfig.ts (100%) rename {src => packages/zapp/console/src}/basics/LocalCache/index.tsx (100%) rename {src => packages/zapp/console/src}/basics/LocalCache/localCache.test.tsx (100%) rename {src => packages/zapp/console/src}/basics/LocalCache/onlyMineDefaultConfig.ts (100%) rename {src => packages/zapp/console/src}/basics/Locale/index.ts (100%) rename {src => packages/zapp/console/src}/client.tsx (100%) rename {src => packages/zapp/console/src}/common/constants.ts (100%) rename {src => packages/zapp/console/src}/common/env.ts (100%) rename {src => packages/zapp/console/src}/common/formatters.ts (100%) rename {src => packages/zapp/console/src}/common/layout.ts (100%) rename {src => packages/zapp/console/src}/common/linkify.ts (100%) rename {src => packages/zapp/console/src}/common/log.ts (100%) rename {src => packages/zapp/console/src}/common/promiseUtils.ts (100%) rename {src => packages/zapp/console/src}/common/test/formatters.spec.ts (100%) rename {src => packages/zapp/console/src}/common/test/linkify.test.ts (100%) rename {src => packages/zapp/console/src}/common/test/utils.spec.ts (100%) rename {src => packages/zapp/console/src}/common/timer.ts (100%) rename {src => packages/zapp/console/src}/common/timezone.ts (100%) rename {src => packages/zapp/console/src}/common/typeCheckers.ts (100%) rename {src => packages/zapp/console/src}/common/types.ts (100%) rename {src => packages/zapp/console/src}/common/utils.ts (100%) rename {src => packages/zapp/console/src}/components/App/App.tsx (100%) rename {src => packages/zapp/console/src}/components/Cache/CacheContext.ts (100%) rename {src => packages/zapp/console/src}/components/Cache/createCache.ts (100%) rename {src => packages/zapp/console/src}/components/Cache/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Entities/EntityDescription.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/EntityDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/EntityDetailsHeader.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/EntityExecutions.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/EntityExecutionsBarChart.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/EntitySchedules.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/EntityVersions.tsx (100%) rename {src => packages/zapp/console/src}/components/Entities/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Entities/generators.ts (100%) rename {src => packages/zapp/console/src}/components/Entities/strings.ts (100%) rename {src => packages/zapp/console/src}/components/Entities/test/EntitySchedules.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Errors/DataError.tsx (100%) rename {src => packages/zapp/console/src}/components/Errors/__stories__/DataError.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Errors/test/DataError.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionChildrenLoader.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionDetailsAppBarContent.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionMetadata.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionNodeViews.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionInputs.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionOutputs.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/RelaunchExecutionForm.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNode.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNodeRenderer.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/ExecutionTimeline.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/ExecutionTimelineFooter.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/NodeExecutionName.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChart.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChartSingleItem.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/TimelineChart/barOptions.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/TimelineChart/chartData.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/TimelineChart/index.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/TimelineChart/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/chartHeader.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/context.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/helpers.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/index.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/scaleContext.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/Timeline/taskNames.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/ExecutionDetailsAppBarContent.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/ExecutionMetadata.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/ExecutionNodeViews.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/NodeExecutionDetails.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/RelaunchExecutionForm.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/Timeline.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/TimelineChart.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/test/__mocks__/NodeExecution.mock.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/types.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/useExecutionNodeViewsState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/useRecoverExecutionState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionDetails/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionFilters.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionInputsOutputsModal.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/ExecutionStatusBadge.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/NodeExecutionCacheStatus.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/ExecutionsTableHeader.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/ExpandableExecutionError.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/NoExecutionsContent.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/NodeExecutionChildren.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/NodeExecutionRow.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/NodeExecutionsTable.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/RowExpander.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/SelectNodeExecutionLink.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionLink.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionTable/WorkflowExecutionRow.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionTable/cells.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionTable/strings.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionTable/styles.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionTable/useWorkflowExecutionsTableColumns.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowExecutionsTable.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowVersionRow.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/WorkflowVersionsTable.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/__mocks__/WorkflowExecutionsTable.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/__stories__/NodeExecutionsTable.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/__stories__/WorkflowExecutionsTable.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/contexts.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/nodeExecutionColumns.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/styles.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/test/NodeExecutionsTable.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/types.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/useWorkflowExecutionTableState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/useWorkflowVersionsTableColumns.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/Tables/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutionError.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutionLogs.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutions.mocks.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutionsListContent.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/test/utils.spec.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/TaskExecutionsList/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/TerminateExecution/TerminateExecutionButton.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TerminateExecution/TerminateExecutionForm.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/TerminateExecution/useTerminateExecutionState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/__stories__/ExecutionFilters.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/contextProvider/NodeExecutionDetails/getTaskThroughExecution.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/contextProvider/NodeExecutionDetails/index.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/contextProvider/NodeExecutionDetails/types.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/contexts.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/durationFilters.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/startTimeFilters.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/statusFilters.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/types.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useExecutionArchiveState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useExecutionFiltersState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useFilterButtonState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useMultiFilterState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useOnlyMyExecutionsFilterState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useSearchFilterState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/filters/useSingleFilterState.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/nodeExecutionQueries.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/taskExecutionQueries.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/test/ExecutionFilters.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Executions/test/useOnlyMyExecutionsFilterState.test.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/test/utils.test.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/types.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/useTaskExecutions.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/useWorkflowExecution.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Executions/workflowExecutionQueries.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/BlobInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/CollectionInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/DatetimeInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchForm.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchFormActions.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchFormAdvancedInputs.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchFormHeader.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchFormInputs.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchInterruptibleInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchRoleInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchTaskForm.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/LaunchWorkflowForm.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/NoInputsNeeded.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/SearchableSelector.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/SimpleInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/StructInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/UnsupportedInput.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/UnsupportedRequiredInputsError.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/__mocks__/mockInputs.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/__mocks__/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/__stories__/LaunchForm.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/__stories__/WorkflowSelector.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/getInputs.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/handlers.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/blob.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/boolean.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/collection.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/datetime.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/duration.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/float.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/getHelperForInput.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/inputHelpers.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/integer.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/none.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/parseJson.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/schema.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/string.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/struct.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/test/inputHelpers.test.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/test/structTestCases.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/test/testCases.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/test/utils.test.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/types.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputHelpers/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/inputValueCache.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/launchMachine.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/services.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/styles.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/test/LaunchTaskForm.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/test/LaunchWorkflowForm.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/test/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/test/getInputs.test.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/test/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/types.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useFormInputsState.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useLaunchTaskFormState.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useLaunchWorkflowFormState.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useMappedExecutionInputValues.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useTaskSourceSelectorState.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useVersionSelectorOptions.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/useWorkflowSourceSelectorState.ts (100%) rename {src => packages/zapp/console/src}/components/Launch/LaunchForm/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/LiteralCollectionViewer.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/LiteralMapViewer.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/LiteralValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/PrintList.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/PrintValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/BinaryValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/BlobValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/ErrorValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/NoneTypeValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/PrimitiveValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/ProtobufStructValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/ScalarValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/SchemaValue.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/test/PrimitiveValue.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/Scalar/test/ProtobufStructValue.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/UnsupportedType.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/ValueLabel.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/CardDecorator.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/Collection.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/Map.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/ProtobufStruct.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/Scalar.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/binaryValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/blobValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/errorValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/literalValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/primitiveValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/protobufValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/scalarValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/__stories__/schemaValues.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/styles.ts (100%) rename {src => packages/zapp/console/src}/components/Literals/test/LiteralMapViewer.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/DefaultAppBarContent.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/NavBar.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/NavBarContent.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/ProjectNavigation.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/ProjectSelector.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/SearchableProjectList.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/SideNavigation.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/UserInformation.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/VersionDisplayModal.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/__stories__/Navbar.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/__stories__/ProjectSelector.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/__stories__/SideNavigation.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/test/ProjectSelector.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/test/UserInformation.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/withSideNavigation.tsx (100%) rename {src => packages/zapp/console/src}/components/NotFound/NotFound.tsx (100%) rename {src => packages/zapp/console/src}/components/NotFound/__stories__/NotFound.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Notifications/SystemStatusBanner.tsx (100%) rename {src => packages/zapp/console/src}/components/Notifications/__stories__/SystemStatusBanner.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Notifications/test/SystemStatusBanner.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Notifications/useSystemStatus.ts (100%) rename {src => packages/zapp/console/src}/components/Project/ProjectDashboard.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/ProjectDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/ProjectStatusBar.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/ProjectTasks.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/ProjectWorkflows.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Project/strings.ts (100%) rename {src => packages/zapp/console/src}/components/Project/test/ProjectDashboard.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/test/ProjectTask.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Project/test/ProjectWorkflows.test.tsx (100%) rename {src => packages/zapp/console/src}/components/SelectProject/ProjectList.tsx (100%) rename {src => packages/zapp/console/src}/components/SelectProject/SelectProject.tsx (100%) rename {src => packages/zapp/console/src}/components/SelectProject/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Tables/DataList.tsx (100%) rename {src => packages/zapp/console/src}/components/Tables/LoadMoreRowContent.tsx (100%) rename {src => packages/zapp/console/src}/components/Tables/PaginatedDataList.tsx (100%) rename {src => packages/zapp/console/src}/components/Tables/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Tables/filters/FilterPopoverButton.tsx (100%) rename {src => packages/zapp/console/src}/components/Task/SearchableTaskNameList.tsx (100%) rename {src => packages/zapp/console/src}/components/Task/SimpleTaskInterface.tsx (100%) rename {src => packages/zapp/console/src}/components/Task/TaskDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Task/__stories__/SearchableTaskNameList.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Task/taskQueries.ts (100%) rename {src => packages/zapp/console/src}/components/Task/test/SimpleTaskInterface.test.tsx (100%) rename {src => packages/zapp/console/src}/components/Task/useLatestTask.ts (100%) rename {src => packages/zapp/console/src}/components/Task/useTaskShowArchivedState.ts (100%) rename {src => packages/zapp/console/src}/components/Task/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Theme/colorSpectrum.ts (100%) rename {src => packages/zapp/console/src}/components/Theme/constants.ts (100%) rename {src => packages/zapp/console/src}/components/Theme/muiTheme.ts (100%) rename {src => packages/zapp/console/src}/components/Theme/useTheme.ts (100%) rename {src => packages/zapp/console/src}/components/Workflow/SearchableWorkflowNameList.tsx (100%) rename {src => packages/zapp/console/src}/components/Workflow/StaticGraphContainer.tsx (100%) rename {src => packages/zapp/console/src}/components/Workflow/WorkflowDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Workflow/WorkflowVersionDetails.tsx (100%) rename {src => packages/zapp/console/src}/components/Workflow/__stories__/SearchableWorkflowNameList.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/Workflow/filters/useWorkflowShowArchivedState.ts (100%) rename {src => packages/zapp/console/src}/components/Workflow/types.ts (100%) rename {src => packages/zapp/console/src}/components/Workflow/useWorkflowInfoItem.ts (100%) rename {src => packages/zapp/console/src}/components/Workflow/useWorkflowInfoList.ts (100%) rename {src => packages/zapp/console/src}/components/Workflow/utils.ts (100%) rename {src => packages/zapp/console/src}/components/Workflow/workflowQueries.ts (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/InputOutputNodeRenderer.tsx (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/TaskNodeRenderer.tsx (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/WorkflowGraph.tsx (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/__stories__/rich.json (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/test/utils.test.ts (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/transformerWorkflowToDag.tsx (100%) rename {src => packages/zapp/console/src}/components/WorkflowGraph/utils.ts (100%) rename {src => packages/zapp/console/src}/components/common/BarChart.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ButtonCircularProgress.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ButtonLink.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ClosableDialogTitle.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ContentContainer.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DataTable.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DelayedMount.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DetailsGroup.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DetailsPanel.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DetailsPanelContent.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DomainSettingsSection.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DropDownWindowButton.tsx (100%) rename {src => packages/zapp/console/src}/components/common/DumpJSON.tsx (100%) rename {src => packages/zapp/console/src}/components/common/Empty.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ErrorBoundary.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ExpandableContentLink.tsx (100%) rename {src => packages/zapp/console/src}/components/common/ExpandableMonospaceText.tsx (100%) rename {src => packages/zapp/console/src}/components/common/FilterableNamedEntityList.tsx (100%) rename {src => packages/zapp/console/src}/components/common/FlyteLogo.tsx (100%) rename {src => packages/zapp/console/src}/components/common/Icons/InfoIcon.tsx (100%) rename {src => packages/zapp/console/src}/components/common/Icons/interface.ts (100%) rename {src => packages/zapp/console/src}/components/common/LinkifiedText.tsx (100%) rename {src => packages/zapp/console/src}/components/common/LoadingSpinner.tsx (100%) rename {src => packages/zapp/console/src}/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx (100%) rename {src => packages/zapp/console/src}/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx (100%) rename {src => packages/zapp/console/src}/components/common/MoreOptionsMenu.tsx (100%) rename {src => packages/zapp/console/src}/components/common/MultiSelectForm.tsx (100%) rename {src => packages/zapp/console/src}/components/common/NewTargetLink.tsx (100%) rename {src => packages/zapp/console/src}/components/common/NoResults.tsx (100%) rename {src => packages/zapp/console/src}/components/common/NonIdealState.tsx (100%) rename {src => packages/zapp/console/src}/components/common/PanelSection/index.tsx (100%) rename {src => packages/zapp/console/src}/components/common/PublishedWithChanges.tsx (100%) rename {src => packages/zapp/console/src}/components/common/SearchInputForm.tsx (100%) rename {src => packages/zapp/console/src}/components/common/SearchableList.tsx (100%) rename {src => packages/zapp/console/src}/components/common/SearchableNamedEntityList.tsx (100%) rename {src => packages/zapp/console/src}/components/common/SectionHeader.tsx (100%) rename {src => packages/zapp/console/src}/components/common/Shimmer.tsx (100%) rename {src => packages/zapp/console/src}/components/common/SingleSelectForm.tsx (100%) rename {src => packages/zapp/console/src}/components/common/WaitForData.tsx (100%) rename {src => packages/zapp/console/src}/components/common/WaitForQuery.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/BarChart.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/ButtonCircularProgress.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/Decorators.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/ErrorBoundary.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/ExpandableContentLink.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/ExpandableMonospaceText.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/FlyteLogo.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/LoadingSpinner.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/NonIdealState.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/__stories__/Typography.stories.tsx (100%) rename {src => packages/zapp/console/src}/components/common/constants.ts (100%) rename {src => packages/zapp/console/src}/components/common/keyboardEvents.ts (100%) rename {src => packages/zapp/console/src}/components/common/scopedContext.ts (100%) rename {src => packages/zapp/console/src}/components/common/strings.ts (100%) rename {src => packages/zapp/console/src}/components/common/styles.ts (100%) rename {src => packages/zapp/console/src}/components/common/test/ContentContainer.spec.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/DataTable.test.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/DomainSettingsSection.test.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/LoadingSpinner.test.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/MoreOptionsMenu.test.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/NewTargetLink.spec.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/SearchableList.spec.tsx (100%) rename {src => packages/zapp/console/src}/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap (100%) rename {src => packages/zapp/console/src}/components/common/types.ts (100%) rename {src => packages/zapp/console/src}/components/common/useLinkifiedChunks.ts (100%) rename {src => packages/zapp/console/src}/components/common/useSearchableListState.ts (100%) rename {src => packages/zapp/console/src}/components/common/utils.ts (100%) rename {src => packages/zapp/console/src}/components/common/withRouteParams.tsx (100%) rename {src => packages/zapp/console/src}/components/data/QueryAuthorizationObserver.tsx (100%) rename {src => packages/zapp/console/src}/components/data/__mocks__/apiContext.ts (100%) rename {src => packages/zapp/console/src}/components/data/apiContext.ts (100%) rename {src => packages/zapp/console/src}/components/data/queryCache.ts (100%) rename {src => packages/zapp/console/src}/components/data/queryUtils.ts (100%) rename {src => packages/zapp/console/src}/components/data/test/queryUtils.test.ts (100%) rename {src => packages/zapp/console/src}/components/data/types.ts (100%) rename {src => packages/zapp/console/src}/components/data/utils.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/Arrowhead.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/DragAllowingClickHandler.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/InteractiveViewBox.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/Layout.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/Node.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/NodeLink.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/NodeText.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/NodeStatusLegend.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/ReactFlowWrapper.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/customNodeComponents.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/types.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/ReactFlow/utils.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/RenderedGraph.tsx (100%) rename {src => packages/zapp/console/src}/components/flytegraph/__stories__/batchTasks.json (100%) rename {src => packages/zapp/console/src}/components/flytegraph/__stories__/largeGraph.json (100%) rename {src => packages/zapp/console/src}/components/flytegraph/__stories__/rich.json (100%) rename {src => packages/zapp/console/src}/components/flytegraph/__stories__/simple.json (100%) rename {src => packages/zapp/console/src}/components/flytegraph/constants.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/layoutUtils.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/theme.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/timer.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/types.ts (100%) rename {src => packages/zapp/console/src}/components/flytegraph/utils.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/__mocks__/fetchableData.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/fetchMachine.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/test/useDebouncedValue.test.tsx (100%) rename {src => packages/zapp/console/src}/components/hooks/test/useFetchableData.test.tsx (100%) rename {src => packages/zapp/console/src}/components/hooks/test/usePagination.test.tsx (100%) rename {src => packages/zapp/console/src}/components/hooks/test/utils.test.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/types.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useChartState.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useConditionalQuery.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useDataRefresher.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useDebouncedValue.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useDelayedValue.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useFetchableData.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useLaunchPlans.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useLocationState.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useNamedEntity.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useNodeExecution.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useOnlyMineSelectedValue.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/usePagination.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useProjects.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useQueryState.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useTabState.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useTask.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useTaskExecution.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useUserProfile.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useVersion.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useWorkflowExecutions.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useWorkflowSchedules.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/useWorkflowVersions.ts (100%) rename {src => packages/zapp/console/src}/components/hooks/utils.ts (100%) rename {src => packages/zapp/console/src}/config/types.ts (100%) rename {src => packages/zapp/console/src}/errors/fetchErrors.ts (100%) rename {src => packages/zapp/console/src}/errors/parameterErrors.ts (100%) rename {src => packages/zapp/console/src}/errors/protobufErrors.ts (100%) rename {src => packages/zapp/console/src}/errors/validationErrors.ts (100%) rename {src => packages/zapp/console/src}/flyteidl/index.ts (100%) rename {src => packages/zapp/console/src}/mocks/createAdminServer.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/constants.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/fixtures/basicPythonWorkflow.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/fixtures/dynamicExternalSubworkflow.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/fixtures/dynamicPythonWorkflow.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/fixtures/oneFailedTaskWorkflow.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/fixtures/types.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/generators.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/insertFixture.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/projects.ts (100%) rename {src => packages/zapp/console/src}/mocks/data/utils.ts (100%) rename {src => packages/zapp/console/src}/mocks/errors.ts (100%) rename {src => packages/zapp/console/src}/mocks/insertDefaultData.ts (100%) rename {src => packages/zapp/console/src}/mocks/server.ts (100%) rename {src => packages/zapp/console/src}/mocks/utils.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/AdminApiQuery.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/AdminEntity.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/constants.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/test/AdminApiQuery.spec.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/test/AdminEntity.spec.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/test/utils.spec.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/transformRequestError.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/types.ts (100%) rename {src => packages/zapp/console/src}/models/AdminEntity/utils.ts (100%) rename {src => packages/zapp/console/src}/models/Common/api.ts (100%) rename {src => packages/zapp/console/src}/models/Common/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Common/types.ts (100%) rename {src => packages/zapp/console/src}/models/Common/utils.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/__mocks__/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/__mocks__/mockNodeExecutionsData.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/__mocks__/mockTaskExecutionsData.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/__mocks__/mockWorkflowExecutionsData.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/__mocks__/sampleExecutionError.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/api.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/enums.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/types.ts (100%) rename {src => packages/zapp/console/src}/models/Execution/utils.ts (100%) rename {src => packages/zapp/console/src}/models/Graph/convertFlyteGraphToDAG.ts (100%) rename {src => packages/zapp/console/src}/models/Graph/types.ts (100%) rename {src => packages/zapp/console/src}/models/Launch/api.ts (100%) rename {src => packages/zapp/console/src}/models/Launch/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Launch/types.ts (100%) rename {src => packages/zapp/console/src}/models/Launch/utils.ts (100%) rename {src => packages/zapp/console/src}/models/Node/__mocks__/mockNodeData.ts (100%) rename {src => packages/zapp/console/src}/models/Node/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Node/types.ts (100%) rename {src => packages/zapp/console/src}/models/Project/api.ts (100%) rename {src => packages/zapp/console/src}/models/Project/test/api.test.ts (100%) rename {src => packages/zapp/console/src}/models/Project/types.ts (100%) rename {src => packages/zapp/console/src}/models/Project/utils.ts (100%) rename {src => packages/zapp/console/src}/models/Task/__mocks__/mockTaskData.ts (100%) rename {src => packages/zapp/console/src}/models/Task/api.ts (100%) rename {src => packages/zapp/console/src}/models/Task/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Task/task.test.ts (100%) rename {src => packages/zapp/console/src}/models/Task/types.ts (100%) rename {src => packages/zapp/console/src}/models/Task/utils.ts (100%) rename {src => packages/zapp/console/src}/models/Workflow/api.ts (100%) rename {src => packages/zapp/console/src}/models/Workflow/constants.ts (100%) rename {src => packages/zapp/console/src}/models/Workflow/types.ts (100%) rename {src => packages/zapp/console/src}/models/Workflow/utils.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/executionsData.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/graphWorkflowData.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/launchPlanData.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/projectData.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/sampleTaskNames.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/sampleWorkflowNames.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/simpleTaskClosure.json (100%) rename {src => packages/zapp/console/src}/models/__mocks__/simpleWorkflowClosure.json (100%) rename {src => packages/zapp/console/src}/models/__mocks__/taskData.ts (100%) rename {src => packages/zapp/console/src}/models/__mocks__/workflowData.ts (100%) rename {src => packages/zapp/console/src}/models/enums.ts (100%) rename {src => packages/zapp/console/src}/protobuf.ts (100%) rename {src => packages/zapp/console/src}/routes/ApplicationRouter.tsx (100%) rename {src => packages/zapp/console/src}/routes/NavBarRouter.tsx (100%) rename {src => packages/zapp/console/src}/routes/components.ts (100%) rename {src => packages/zapp/console/src}/routes/constants.ts (100%) rename {src => packages/zapp/console/src}/routes/history.ts (100%) rename {src => packages/zapp/console/src}/routes/routes.ts (100%) rename {src => packages/zapp/console/src}/routes/types.ts (100%) rename {src => packages/zapp/console/src}/routes/utils.ts (100%) rename {src => packages/zapp/console/src}/server.ts (100%) rename {src => packages/zapp/console/src}/test/modelUtils.ts (100%) rename {src => packages/zapp/console/src}/test/setupTests.ts (100%) rename {src => packages/zapp/console/src}/test/utils.ts (100%) create mode 100644 packages/zapp/console/src/tsd/contrast.d.ts create mode 100644 packages/zapp/console/src/tsd/d3-dag.d.ts rename {src => packages/zapp/console/src}/tsd/globals.d.ts (85%) rename {src => packages/zapp/console/src}/tsd/index.d.ts (100%) create mode 100644 packages/zapp/console/src/tsd/window.d.ts delete mode 100644 src/tsd/contrast.d.ts delete mode 100644 src/tsd/d3-dag.d.ts delete mode 100644 src/tsd/window.d.ts diff --git a/src/assets/SmallArrow.svg b/packages/zapp/console/src/assets/SmallArrow.svg similarity index 100% rename from src/assets/SmallArrow.svg rename to packages/zapp/console/src/assets/SmallArrow.svg diff --git a/src/assets/favicon.png b/packages/zapp/console/src/assets/favicon.png similarity index 100% rename from src/assets/favicon.png rename to packages/zapp/console/src/assets/favicon.png diff --git a/src/assets/index.html b/packages/zapp/console/src/assets/index.html similarity index 100% rename from src/assets/index.html rename to packages/zapp/console/src/assets/index.html diff --git a/src/basics/FeatureFlags/AdminFlag.tsx b/packages/zapp/console/src/basics/FeatureFlags/AdminFlag.tsx similarity index 100% rename from src/basics/FeatureFlags/AdminFlag.tsx rename to packages/zapp/console/src/basics/FeatureFlags/AdminFlag.tsx diff --git a/src/basics/FeatureFlags/FEATURE_FLAGS.md b/packages/zapp/console/src/basics/FeatureFlags/FEATURE_FLAGS.md similarity index 100% rename from src/basics/FeatureFlags/FEATURE_FLAGS.md rename to packages/zapp/console/src/basics/FeatureFlags/FEATURE_FLAGS.md diff --git a/src/basics/FeatureFlags/FeatureFlags.test.tsx b/packages/zapp/console/src/basics/FeatureFlags/FeatureFlags.test.tsx similarity index 100% rename from src/basics/FeatureFlags/FeatureFlags.test.tsx rename to packages/zapp/console/src/basics/FeatureFlags/FeatureFlags.test.tsx diff --git a/src/basics/FeatureFlags/FeatureFlags.tsx b/packages/zapp/console/src/basics/FeatureFlags/FeatureFlags.tsx similarity index 100% rename from src/basics/FeatureFlags/FeatureFlags.tsx rename to packages/zapp/console/src/basics/FeatureFlags/FeatureFlags.tsx diff --git a/src/basics/FeatureFlags/defaultConfig.ts b/packages/zapp/console/src/basics/FeatureFlags/defaultConfig.ts similarity index 100% rename from src/basics/FeatureFlags/defaultConfig.ts rename to packages/zapp/console/src/basics/FeatureFlags/defaultConfig.ts diff --git a/src/basics/FeatureFlags/index.tsx b/packages/zapp/console/src/basics/FeatureFlags/index.tsx similarity index 100% rename from src/basics/FeatureFlags/index.tsx rename to packages/zapp/console/src/basics/FeatureFlags/index.tsx diff --git a/src/basics/LocalCache/ContextProvider.tsx b/packages/zapp/console/src/basics/LocalCache/ContextProvider.tsx similarity index 100% rename from src/basics/LocalCache/ContextProvider.tsx rename to packages/zapp/console/src/basics/LocalCache/ContextProvider.tsx diff --git a/src/basics/LocalCache/defaultConfig.ts b/packages/zapp/console/src/basics/LocalCache/defaultConfig.ts similarity index 100% rename from src/basics/LocalCache/defaultConfig.ts rename to packages/zapp/console/src/basics/LocalCache/defaultConfig.ts diff --git a/src/basics/LocalCache/index.tsx b/packages/zapp/console/src/basics/LocalCache/index.tsx similarity index 100% rename from src/basics/LocalCache/index.tsx rename to packages/zapp/console/src/basics/LocalCache/index.tsx diff --git a/src/basics/LocalCache/localCache.test.tsx b/packages/zapp/console/src/basics/LocalCache/localCache.test.tsx similarity index 100% rename from src/basics/LocalCache/localCache.test.tsx rename to packages/zapp/console/src/basics/LocalCache/localCache.test.tsx diff --git a/src/basics/LocalCache/onlyMineDefaultConfig.ts b/packages/zapp/console/src/basics/LocalCache/onlyMineDefaultConfig.ts similarity index 100% rename from src/basics/LocalCache/onlyMineDefaultConfig.ts rename to packages/zapp/console/src/basics/LocalCache/onlyMineDefaultConfig.ts diff --git a/src/basics/Locale/index.ts b/packages/zapp/console/src/basics/Locale/index.ts similarity index 100% rename from src/basics/Locale/index.ts rename to packages/zapp/console/src/basics/Locale/index.ts diff --git a/src/client.tsx b/packages/zapp/console/src/client.tsx similarity index 100% rename from src/client.tsx rename to packages/zapp/console/src/client.tsx diff --git a/src/common/constants.ts b/packages/zapp/console/src/common/constants.ts similarity index 100% rename from src/common/constants.ts rename to packages/zapp/console/src/common/constants.ts diff --git a/src/common/env.ts b/packages/zapp/console/src/common/env.ts similarity index 100% rename from src/common/env.ts rename to packages/zapp/console/src/common/env.ts diff --git a/src/common/formatters.ts b/packages/zapp/console/src/common/formatters.ts similarity index 100% rename from src/common/formatters.ts rename to packages/zapp/console/src/common/formatters.ts diff --git a/src/common/layout.ts b/packages/zapp/console/src/common/layout.ts similarity index 100% rename from src/common/layout.ts rename to packages/zapp/console/src/common/layout.ts diff --git a/src/common/linkify.ts b/packages/zapp/console/src/common/linkify.ts similarity index 100% rename from src/common/linkify.ts rename to packages/zapp/console/src/common/linkify.ts diff --git a/src/common/log.ts b/packages/zapp/console/src/common/log.ts similarity index 100% rename from src/common/log.ts rename to packages/zapp/console/src/common/log.ts diff --git a/src/common/promiseUtils.ts b/packages/zapp/console/src/common/promiseUtils.ts similarity index 100% rename from src/common/promiseUtils.ts rename to packages/zapp/console/src/common/promiseUtils.ts diff --git a/src/common/test/formatters.spec.ts b/packages/zapp/console/src/common/test/formatters.spec.ts similarity index 100% rename from src/common/test/formatters.spec.ts rename to packages/zapp/console/src/common/test/formatters.spec.ts diff --git a/src/common/test/linkify.test.ts b/packages/zapp/console/src/common/test/linkify.test.ts similarity index 100% rename from src/common/test/linkify.test.ts rename to packages/zapp/console/src/common/test/linkify.test.ts diff --git a/src/common/test/utils.spec.ts b/packages/zapp/console/src/common/test/utils.spec.ts similarity index 100% rename from src/common/test/utils.spec.ts rename to packages/zapp/console/src/common/test/utils.spec.ts diff --git a/src/common/timer.ts b/packages/zapp/console/src/common/timer.ts similarity index 100% rename from src/common/timer.ts rename to packages/zapp/console/src/common/timer.ts diff --git a/src/common/timezone.ts b/packages/zapp/console/src/common/timezone.ts similarity index 100% rename from src/common/timezone.ts rename to packages/zapp/console/src/common/timezone.ts diff --git a/src/common/typeCheckers.ts b/packages/zapp/console/src/common/typeCheckers.ts similarity index 100% rename from src/common/typeCheckers.ts rename to packages/zapp/console/src/common/typeCheckers.ts diff --git a/src/common/types.ts b/packages/zapp/console/src/common/types.ts similarity index 100% rename from src/common/types.ts rename to packages/zapp/console/src/common/types.ts diff --git a/src/common/utils.ts b/packages/zapp/console/src/common/utils.ts similarity index 100% rename from src/common/utils.ts rename to packages/zapp/console/src/common/utils.ts diff --git a/src/components/App/App.tsx b/packages/zapp/console/src/components/App/App.tsx similarity index 100% rename from src/components/App/App.tsx rename to packages/zapp/console/src/components/App/App.tsx diff --git a/src/components/Cache/CacheContext.ts b/packages/zapp/console/src/components/Cache/CacheContext.ts similarity index 100% rename from src/components/Cache/CacheContext.ts rename to packages/zapp/console/src/components/Cache/CacheContext.ts diff --git a/src/components/Cache/createCache.ts b/packages/zapp/console/src/components/Cache/createCache.ts similarity index 100% rename from src/components/Cache/createCache.ts rename to packages/zapp/console/src/components/Cache/createCache.ts diff --git a/src/components/Cache/utils.ts b/packages/zapp/console/src/components/Cache/utils.ts similarity index 100% rename from src/components/Cache/utils.ts rename to packages/zapp/console/src/components/Cache/utils.ts diff --git a/src/components/Entities/EntityDescription.tsx b/packages/zapp/console/src/components/Entities/EntityDescription.tsx similarity index 100% rename from src/components/Entities/EntityDescription.tsx rename to packages/zapp/console/src/components/Entities/EntityDescription.tsx diff --git a/src/components/Entities/EntityDetails.tsx b/packages/zapp/console/src/components/Entities/EntityDetails.tsx similarity index 100% rename from src/components/Entities/EntityDetails.tsx rename to packages/zapp/console/src/components/Entities/EntityDetails.tsx diff --git a/src/components/Entities/EntityDetailsHeader.tsx b/packages/zapp/console/src/components/Entities/EntityDetailsHeader.tsx similarity index 100% rename from src/components/Entities/EntityDetailsHeader.tsx rename to packages/zapp/console/src/components/Entities/EntityDetailsHeader.tsx diff --git a/src/components/Entities/EntityExecutions.tsx b/packages/zapp/console/src/components/Entities/EntityExecutions.tsx similarity index 100% rename from src/components/Entities/EntityExecutions.tsx rename to packages/zapp/console/src/components/Entities/EntityExecutions.tsx diff --git a/src/components/Entities/EntityExecutionsBarChart.tsx b/packages/zapp/console/src/components/Entities/EntityExecutionsBarChart.tsx similarity index 100% rename from src/components/Entities/EntityExecutionsBarChart.tsx rename to packages/zapp/console/src/components/Entities/EntityExecutionsBarChart.tsx diff --git a/src/components/Entities/EntitySchedules.tsx b/packages/zapp/console/src/components/Entities/EntitySchedules.tsx similarity index 100% rename from src/components/Entities/EntitySchedules.tsx rename to packages/zapp/console/src/components/Entities/EntitySchedules.tsx diff --git a/src/components/Entities/EntityVersions.tsx b/packages/zapp/console/src/components/Entities/EntityVersions.tsx similarity index 100% rename from src/components/Entities/EntityVersions.tsx rename to packages/zapp/console/src/components/Entities/EntityVersions.tsx diff --git a/src/components/Entities/constants.ts b/packages/zapp/console/src/components/Entities/constants.ts similarity index 100% rename from src/components/Entities/constants.ts rename to packages/zapp/console/src/components/Entities/constants.ts diff --git a/src/components/Entities/generators.ts b/packages/zapp/console/src/components/Entities/generators.ts similarity index 100% rename from src/components/Entities/generators.ts rename to packages/zapp/console/src/components/Entities/generators.ts diff --git a/src/components/Entities/strings.ts b/packages/zapp/console/src/components/Entities/strings.ts similarity index 100% rename from src/components/Entities/strings.ts rename to packages/zapp/console/src/components/Entities/strings.ts diff --git a/src/components/Entities/test/EntitySchedules.test.tsx b/packages/zapp/console/src/components/Entities/test/EntitySchedules.test.tsx similarity index 100% rename from src/components/Entities/test/EntitySchedules.test.tsx rename to packages/zapp/console/src/components/Entities/test/EntitySchedules.test.tsx diff --git a/src/components/Errors/DataError.tsx b/packages/zapp/console/src/components/Errors/DataError.tsx similarity index 100% rename from src/components/Errors/DataError.tsx rename to packages/zapp/console/src/components/Errors/DataError.tsx diff --git a/src/components/Errors/__stories__/DataError.stories.tsx b/packages/zapp/console/src/components/Errors/__stories__/DataError.stories.tsx similarity index 100% rename from src/components/Errors/__stories__/DataError.stories.tsx rename to packages/zapp/console/src/components/Errors/__stories__/DataError.stories.tsx diff --git a/src/components/Errors/test/DataError.test.tsx b/packages/zapp/console/src/components/Errors/test/DataError.test.tsx similarity index 100% rename from src/components/Errors/test/DataError.test.tsx rename to packages/zapp/console/src/components/Errors/test/DataError.test.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionChildrenLoader.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionChildrenLoader.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionChildrenLoader.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionChildrenLoader.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionDetails.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetails.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionDetails.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetails.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionDetailsAppBarContent.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsAppBarContent.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionDetailsAppBarContent.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsAppBarContent.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionMetadata.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadata.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionMetadata.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadata.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionNodeViews.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionNodeViews.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionNodeViews.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionNodeViews.tsx diff --git a/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx diff --git a/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx diff --git a/src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionInputs.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionInputs.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionInputs.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionInputs.tsx diff --git a/src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionOutputs.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionOutputs.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionOutputs.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/NodeExecutionOutputs.tsx diff --git a/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx diff --git a/src/components/Executions/ExecutionDetails/RelaunchExecutionForm.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/RelaunchExecutionForm.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/RelaunchExecutionForm.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/RelaunchExecutionForm.tsx diff --git a/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx diff --git a/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNode.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNode.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNode.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNode.tsx diff --git a/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNodeRenderer.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNodeRenderer.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNodeRenderer.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/TaskExecutionNodeRenderer.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/ExecutionTimeline.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/ExecutionTimeline.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/ExecutionTimeline.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/ExecutionTimeline.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/ExecutionTimelineFooter.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/ExecutionTimelineFooter.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/ExecutionTimelineFooter.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/ExecutionTimelineFooter.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/NodeExecutionName.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/NodeExecutionName.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/NodeExecutionName.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/NodeExecutionName.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChart.stories.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChart.stories.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChart.stories.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChart.stories.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChartSingleItem.stories.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChartSingleItem.stories.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChartSingleItem.stories.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/TimelineChartSingleItem.stories.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/barOptions.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/barOptions.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/TimelineChart/barOptions.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/barOptions.ts diff --git a/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/chartData.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/chartData.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/TimelineChart/chartData.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/chartData.ts diff --git a/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/index.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/index.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/TimelineChart/index.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/index.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/utils.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/utils.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/TimelineChart/utils.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/TimelineChart/utils.ts diff --git a/src/components/Executions/ExecutionDetails/Timeline/chartHeader.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/chartHeader.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/chartHeader.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/chartHeader.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/context.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/context.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/context.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/context.ts diff --git a/src/components/Executions/ExecutionDetails/Timeline/helpers.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/helpers.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/helpers.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/helpers.ts diff --git a/src/components/Executions/ExecutionDetails/Timeline/index.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/index.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/index.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/index.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/scaleContext.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/scaleContext.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/scaleContext.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/scaleContext.tsx diff --git a/src/components/Executions/ExecutionDetails/Timeline/taskNames.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/taskNames.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/Timeline/taskNames.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/Timeline/taskNames.tsx diff --git a/src/components/Executions/ExecutionDetails/constants.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/constants.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/constants.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/constants.ts diff --git a/src/components/Executions/ExecutionDetails/test/ExecutionDetailsAppBarContent.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/ExecutionDetailsAppBarContent.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/ExecutionDetailsAppBarContent.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/ExecutionDetailsAppBarContent.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/ExecutionMetadata.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/ExecutionMetadata.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/ExecutionMetadata.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/ExecutionMetadata.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/ExecutionNodeViews.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/ExecutionNodeViews.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/ExecutionNodeViews.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/ExecutionNodeViews.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/NodeExecutionDetails.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/NodeExecutionDetails.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/NodeExecutionDetails.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/NodeExecutionDetails.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/RelaunchExecutionForm.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/RelaunchExecutionForm.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/RelaunchExecutionForm.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/RelaunchExecutionForm.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/Timeline.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/Timeline.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/Timeline.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/Timeline.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/TimelineChart.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/TimelineChart.test.tsx similarity index 100% rename from src/components/Executions/ExecutionDetails/test/TimelineChart.test.tsx rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/TimelineChart.test.tsx diff --git a/src/components/Executions/ExecutionDetails/test/__mocks__/NodeExecution.mock.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/test/__mocks__/NodeExecution.mock.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/test/__mocks__/NodeExecution.mock.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/test/__mocks__/NodeExecution.mock.ts diff --git a/src/components/Executions/ExecutionDetails/types.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/types.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/types.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/types.ts diff --git a/src/components/Executions/ExecutionDetails/useExecutionNodeViewsState.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/useExecutionNodeViewsState.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/useExecutionNodeViewsState.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/useExecutionNodeViewsState.ts diff --git a/src/components/Executions/ExecutionDetails/useRecoverExecutionState.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/useRecoverExecutionState.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/useRecoverExecutionState.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/useRecoverExecutionState.ts diff --git a/src/components/Executions/ExecutionDetails/utils.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/utils.ts similarity index 100% rename from src/components/Executions/ExecutionDetails/utils.ts rename to packages/zapp/console/src/components/Executions/ExecutionDetails/utils.ts diff --git a/src/components/Executions/ExecutionFilters.tsx b/packages/zapp/console/src/components/Executions/ExecutionFilters.tsx similarity index 100% rename from src/components/Executions/ExecutionFilters.tsx rename to packages/zapp/console/src/components/Executions/ExecutionFilters.tsx diff --git a/src/components/Executions/ExecutionInputsOutputsModal.tsx b/packages/zapp/console/src/components/Executions/ExecutionInputsOutputsModal.tsx similarity index 100% rename from src/components/Executions/ExecutionInputsOutputsModal.tsx rename to packages/zapp/console/src/components/Executions/ExecutionInputsOutputsModal.tsx diff --git a/src/components/Executions/ExecutionStatusBadge.tsx b/packages/zapp/console/src/components/Executions/ExecutionStatusBadge.tsx similarity index 100% rename from src/components/Executions/ExecutionStatusBadge.tsx rename to packages/zapp/console/src/components/Executions/ExecutionStatusBadge.tsx diff --git a/src/components/Executions/NodeExecutionCacheStatus.tsx b/packages/zapp/console/src/components/Executions/NodeExecutionCacheStatus.tsx similarity index 100% rename from src/components/Executions/NodeExecutionCacheStatus.tsx rename to packages/zapp/console/src/components/Executions/NodeExecutionCacheStatus.tsx diff --git a/src/components/Executions/Tables/ExecutionsTableHeader.tsx b/packages/zapp/console/src/components/Executions/Tables/ExecutionsTableHeader.tsx similarity index 100% rename from src/components/Executions/Tables/ExecutionsTableHeader.tsx rename to packages/zapp/console/src/components/Executions/Tables/ExecutionsTableHeader.tsx diff --git a/src/components/Executions/Tables/ExpandableExecutionError.tsx b/packages/zapp/console/src/components/Executions/Tables/ExpandableExecutionError.tsx similarity index 100% rename from src/components/Executions/Tables/ExpandableExecutionError.tsx rename to packages/zapp/console/src/components/Executions/Tables/ExpandableExecutionError.tsx diff --git a/src/components/Executions/Tables/NoExecutionsContent.tsx b/packages/zapp/console/src/components/Executions/Tables/NoExecutionsContent.tsx similarity index 100% rename from src/components/Executions/Tables/NoExecutionsContent.tsx rename to packages/zapp/console/src/components/Executions/Tables/NoExecutionsContent.tsx diff --git a/src/components/Executions/Tables/NodeExecutionChildren.tsx b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionChildren.tsx similarity index 100% rename from src/components/Executions/Tables/NodeExecutionChildren.tsx rename to packages/zapp/console/src/components/Executions/Tables/NodeExecutionChildren.tsx diff --git a/src/components/Executions/Tables/NodeExecutionRow.tsx b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionRow.tsx similarity index 100% rename from src/components/Executions/Tables/NodeExecutionRow.tsx rename to packages/zapp/console/src/components/Executions/Tables/NodeExecutionRow.tsx diff --git a/src/components/Executions/Tables/NodeExecutionsTable.tsx b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionsTable.tsx similarity index 100% rename from src/components/Executions/Tables/NodeExecutionsTable.tsx rename to packages/zapp/console/src/components/Executions/Tables/NodeExecutionsTable.tsx diff --git a/src/components/Executions/Tables/RowExpander.tsx b/packages/zapp/console/src/components/Executions/Tables/RowExpander.tsx similarity index 100% rename from src/components/Executions/Tables/RowExpander.tsx rename to packages/zapp/console/src/components/Executions/Tables/RowExpander.tsx diff --git a/src/components/Executions/Tables/SelectNodeExecutionLink.tsx b/packages/zapp/console/src/components/Executions/Tables/SelectNodeExecutionLink.tsx similarity index 100% rename from src/components/Executions/Tables/SelectNodeExecutionLink.tsx rename to packages/zapp/console/src/components/Executions/Tables/SelectNodeExecutionLink.tsx diff --git a/src/components/Executions/Tables/WorkflowExecutionLink.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionLink.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionLink.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionLink.tsx diff --git a/src/components/Executions/Tables/WorkflowExecutionTable/WorkflowExecutionRow.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/WorkflowExecutionRow.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionTable/WorkflowExecutionRow.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/WorkflowExecutionRow.tsx diff --git a/src/components/Executions/Tables/WorkflowExecutionTable/cells.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/cells.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionTable/cells.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/cells.tsx diff --git a/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionTable/strings.ts rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts diff --git a/src/components/Executions/Tables/WorkflowExecutionTable/styles.ts b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/styles.ts similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionTable/styles.ts rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/styles.ts diff --git a/src/components/Executions/Tables/WorkflowExecutionTable/useWorkflowExecutionsTableColumns.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/useWorkflowExecutionsTableColumns.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionTable/useWorkflowExecutionsTableColumns.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/useWorkflowExecutionsTableColumns.tsx diff --git a/src/components/Executions/Tables/WorkflowExecutionsTable.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionsTable.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowExecutionsTable.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionsTable.tsx diff --git a/src/components/Executions/Tables/WorkflowVersionRow.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowVersionRow.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowVersionRow.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowVersionRow.tsx diff --git a/src/components/Executions/Tables/WorkflowVersionsTable.tsx b/packages/zapp/console/src/components/Executions/Tables/WorkflowVersionsTable.tsx similarity index 100% rename from src/components/Executions/Tables/WorkflowVersionsTable.tsx rename to packages/zapp/console/src/components/Executions/Tables/WorkflowVersionsTable.tsx diff --git a/src/components/Executions/Tables/__mocks__/WorkflowExecutionsTable.tsx b/packages/zapp/console/src/components/Executions/Tables/__mocks__/WorkflowExecutionsTable.tsx similarity index 100% rename from src/components/Executions/Tables/__mocks__/WorkflowExecutionsTable.tsx rename to packages/zapp/console/src/components/Executions/Tables/__mocks__/WorkflowExecutionsTable.tsx diff --git a/src/components/Executions/Tables/__stories__/NodeExecutionsTable.stories.tsx b/packages/zapp/console/src/components/Executions/Tables/__stories__/NodeExecutionsTable.stories.tsx similarity index 100% rename from src/components/Executions/Tables/__stories__/NodeExecutionsTable.stories.tsx rename to packages/zapp/console/src/components/Executions/Tables/__stories__/NodeExecutionsTable.stories.tsx diff --git a/src/components/Executions/Tables/__stories__/WorkflowExecutionsTable.stories.tsx b/packages/zapp/console/src/components/Executions/Tables/__stories__/WorkflowExecutionsTable.stories.tsx similarity index 100% rename from src/components/Executions/Tables/__stories__/WorkflowExecutionsTable.stories.tsx rename to packages/zapp/console/src/components/Executions/Tables/__stories__/WorkflowExecutionsTable.stories.tsx diff --git a/src/components/Executions/Tables/constants.ts b/packages/zapp/console/src/components/Executions/Tables/constants.ts similarity index 100% rename from src/components/Executions/Tables/constants.ts rename to packages/zapp/console/src/components/Executions/Tables/constants.ts diff --git a/src/components/Executions/Tables/contexts.ts b/packages/zapp/console/src/components/Executions/Tables/contexts.ts similarity index 100% rename from src/components/Executions/Tables/contexts.ts rename to packages/zapp/console/src/components/Executions/Tables/contexts.ts diff --git a/src/components/Executions/Tables/nodeExecutionColumns.tsx b/packages/zapp/console/src/components/Executions/Tables/nodeExecutionColumns.tsx similarity index 100% rename from src/components/Executions/Tables/nodeExecutionColumns.tsx rename to packages/zapp/console/src/components/Executions/Tables/nodeExecutionColumns.tsx diff --git a/src/components/Executions/Tables/styles.ts b/packages/zapp/console/src/components/Executions/Tables/styles.ts similarity index 100% rename from src/components/Executions/Tables/styles.ts rename to packages/zapp/console/src/components/Executions/Tables/styles.ts diff --git a/src/components/Executions/Tables/test/NodeExecutionsTable.test.tsx b/packages/zapp/console/src/components/Executions/Tables/test/NodeExecutionsTable.test.tsx similarity index 100% rename from src/components/Executions/Tables/test/NodeExecutionsTable.test.tsx rename to packages/zapp/console/src/components/Executions/Tables/test/NodeExecutionsTable.test.tsx diff --git a/src/components/Executions/Tables/types.ts b/packages/zapp/console/src/components/Executions/Tables/types.ts similarity index 100% rename from src/components/Executions/Tables/types.ts rename to packages/zapp/console/src/components/Executions/Tables/types.ts diff --git a/src/components/Executions/Tables/useWorkflowExecutionTableState.ts b/packages/zapp/console/src/components/Executions/Tables/useWorkflowExecutionTableState.ts similarity index 100% rename from src/components/Executions/Tables/useWorkflowExecutionTableState.ts rename to packages/zapp/console/src/components/Executions/Tables/useWorkflowExecutionTableState.ts diff --git a/src/components/Executions/Tables/useWorkflowVersionsTableColumns.tsx b/packages/zapp/console/src/components/Executions/Tables/useWorkflowVersionsTableColumns.tsx similarity index 100% rename from src/components/Executions/Tables/useWorkflowVersionsTableColumns.tsx rename to packages/zapp/console/src/components/Executions/Tables/useWorkflowVersionsTableColumns.tsx diff --git a/src/components/Executions/Tables/utils.ts b/packages/zapp/console/src/components/Executions/Tables/utils.ts similarity index 100% rename from src/components/Executions/Tables/utils.ts rename to packages/zapp/console/src/components/Executions/Tables/utils.ts diff --git a/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutionError.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionError.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutionError.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionError.tsx diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutionLogs.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionLogs.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutionLogs.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionLogs.tsx diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutions.mocks.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutions.mocks.ts similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutions.mocks.ts rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutions.mocks.ts diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutionsListContent.stories.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListContent.stories.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutionsListContent.stories.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListContent.stories.tsx diff --git a/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx diff --git a/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx similarity index 100% rename from src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx diff --git a/src/components/Executions/TaskExecutionsList/test/utils.spec.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/utils.spec.ts similarity index 100% rename from src/components/Executions/TaskExecutionsList/test/utils.spec.ts rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/test/utils.spec.ts diff --git a/src/components/Executions/TaskExecutionsList/utils.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts similarity index 100% rename from src/components/Executions/TaskExecutionsList/utils.ts rename to packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts diff --git a/src/components/Executions/TerminateExecution/TerminateExecutionButton.tsx b/packages/zapp/console/src/components/Executions/TerminateExecution/TerminateExecutionButton.tsx similarity index 100% rename from src/components/Executions/TerminateExecution/TerminateExecutionButton.tsx rename to packages/zapp/console/src/components/Executions/TerminateExecution/TerminateExecutionButton.tsx diff --git a/src/components/Executions/TerminateExecution/TerminateExecutionForm.tsx b/packages/zapp/console/src/components/Executions/TerminateExecution/TerminateExecutionForm.tsx similarity index 100% rename from src/components/Executions/TerminateExecution/TerminateExecutionForm.tsx rename to packages/zapp/console/src/components/Executions/TerminateExecution/TerminateExecutionForm.tsx diff --git a/src/components/Executions/TerminateExecution/useTerminateExecutionState.ts b/packages/zapp/console/src/components/Executions/TerminateExecution/useTerminateExecutionState.ts similarity index 100% rename from src/components/Executions/TerminateExecution/useTerminateExecutionState.ts rename to packages/zapp/console/src/components/Executions/TerminateExecution/useTerminateExecutionState.ts diff --git a/src/components/Executions/__stories__/ExecutionFilters.stories.tsx b/packages/zapp/console/src/components/Executions/__stories__/ExecutionFilters.stories.tsx similarity index 100% rename from src/components/Executions/__stories__/ExecutionFilters.stories.tsx rename to packages/zapp/console/src/components/Executions/__stories__/ExecutionFilters.stories.tsx diff --git a/src/components/Executions/constants.ts b/packages/zapp/console/src/components/Executions/constants.ts similarity index 100% rename from src/components/Executions/constants.ts rename to packages/zapp/console/src/components/Executions/constants.ts diff --git a/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx b/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx similarity index 100% rename from src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx rename to packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx diff --git a/src/components/Executions/contextProvider/NodeExecutionDetails/getTaskThroughExecution.ts b/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/getTaskThroughExecution.ts similarity index 100% rename from src/components/Executions/contextProvider/NodeExecutionDetails/getTaskThroughExecution.ts rename to packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/getTaskThroughExecution.ts diff --git a/src/components/Executions/contextProvider/NodeExecutionDetails/index.tsx b/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/index.tsx similarity index 100% rename from src/components/Executions/contextProvider/NodeExecutionDetails/index.tsx rename to packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/index.tsx diff --git a/src/components/Executions/contextProvider/NodeExecutionDetails/types.ts b/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/types.ts similarity index 100% rename from src/components/Executions/contextProvider/NodeExecutionDetails/types.ts rename to packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/types.ts diff --git a/src/components/Executions/contexts.ts b/packages/zapp/console/src/components/Executions/contexts.ts similarity index 100% rename from src/components/Executions/contexts.ts rename to packages/zapp/console/src/components/Executions/contexts.ts diff --git a/src/components/Executions/filters/constants.ts b/packages/zapp/console/src/components/Executions/filters/constants.ts similarity index 100% rename from src/components/Executions/filters/constants.ts rename to packages/zapp/console/src/components/Executions/filters/constants.ts diff --git a/src/components/Executions/filters/durationFilters.ts b/packages/zapp/console/src/components/Executions/filters/durationFilters.ts similarity index 100% rename from src/components/Executions/filters/durationFilters.ts rename to packages/zapp/console/src/components/Executions/filters/durationFilters.ts diff --git a/src/components/Executions/filters/startTimeFilters.ts b/packages/zapp/console/src/components/Executions/filters/startTimeFilters.ts similarity index 100% rename from src/components/Executions/filters/startTimeFilters.ts rename to packages/zapp/console/src/components/Executions/filters/startTimeFilters.ts diff --git a/src/components/Executions/filters/statusFilters.ts b/packages/zapp/console/src/components/Executions/filters/statusFilters.ts similarity index 100% rename from src/components/Executions/filters/statusFilters.ts rename to packages/zapp/console/src/components/Executions/filters/statusFilters.ts diff --git a/src/components/Executions/filters/types.ts b/packages/zapp/console/src/components/Executions/filters/types.ts similarity index 100% rename from src/components/Executions/filters/types.ts rename to packages/zapp/console/src/components/Executions/filters/types.ts diff --git a/src/components/Executions/filters/useExecutionArchiveState.ts b/packages/zapp/console/src/components/Executions/filters/useExecutionArchiveState.ts similarity index 100% rename from src/components/Executions/filters/useExecutionArchiveState.ts rename to packages/zapp/console/src/components/Executions/filters/useExecutionArchiveState.ts diff --git a/src/components/Executions/filters/useExecutionFiltersState.ts b/packages/zapp/console/src/components/Executions/filters/useExecutionFiltersState.ts similarity index 100% rename from src/components/Executions/filters/useExecutionFiltersState.ts rename to packages/zapp/console/src/components/Executions/filters/useExecutionFiltersState.ts diff --git a/src/components/Executions/filters/useFilterButtonState.ts b/packages/zapp/console/src/components/Executions/filters/useFilterButtonState.ts similarity index 100% rename from src/components/Executions/filters/useFilterButtonState.ts rename to packages/zapp/console/src/components/Executions/filters/useFilterButtonState.ts diff --git a/src/components/Executions/filters/useMultiFilterState.ts b/packages/zapp/console/src/components/Executions/filters/useMultiFilterState.ts similarity index 100% rename from src/components/Executions/filters/useMultiFilterState.ts rename to packages/zapp/console/src/components/Executions/filters/useMultiFilterState.ts diff --git a/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts b/packages/zapp/console/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts similarity index 100% rename from src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts rename to packages/zapp/console/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts diff --git a/src/components/Executions/filters/useSearchFilterState.ts b/packages/zapp/console/src/components/Executions/filters/useSearchFilterState.ts similarity index 100% rename from src/components/Executions/filters/useSearchFilterState.ts rename to packages/zapp/console/src/components/Executions/filters/useSearchFilterState.ts diff --git a/src/components/Executions/filters/useSingleFilterState.ts b/packages/zapp/console/src/components/Executions/filters/useSingleFilterState.ts similarity index 100% rename from src/components/Executions/filters/useSingleFilterState.ts rename to packages/zapp/console/src/components/Executions/filters/useSingleFilterState.ts diff --git a/src/components/Executions/nodeExecutionQueries.ts b/packages/zapp/console/src/components/Executions/nodeExecutionQueries.ts similarity index 100% rename from src/components/Executions/nodeExecutionQueries.ts rename to packages/zapp/console/src/components/Executions/nodeExecutionQueries.ts diff --git a/src/components/Executions/taskExecutionQueries.ts b/packages/zapp/console/src/components/Executions/taskExecutionQueries.ts similarity index 100% rename from src/components/Executions/taskExecutionQueries.ts rename to packages/zapp/console/src/components/Executions/taskExecutionQueries.ts diff --git a/src/components/Executions/test/ExecutionFilters.test.tsx b/packages/zapp/console/src/components/Executions/test/ExecutionFilters.test.tsx similarity index 100% rename from src/components/Executions/test/ExecutionFilters.test.tsx rename to packages/zapp/console/src/components/Executions/test/ExecutionFilters.test.tsx diff --git a/src/components/Executions/test/useOnlyMyExecutionsFilterState.test.ts b/packages/zapp/console/src/components/Executions/test/useOnlyMyExecutionsFilterState.test.ts similarity index 100% rename from src/components/Executions/test/useOnlyMyExecutionsFilterState.test.ts rename to packages/zapp/console/src/components/Executions/test/useOnlyMyExecutionsFilterState.test.ts diff --git a/src/components/Executions/test/utils.test.ts b/packages/zapp/console/src/components/Executions/test/utils.test.ts similarity index 100% rename from src/components/Executions/test/utils.test.ts rename to packages/zapp/console/src/components/Executions/test/utils.test.ts diff --git a/src/components/Executions/types.ts b/packages/zapp/console/src/components/Executions/types.ts similarity index 100% rename from src/components/Executions/types.ts rename to packages/zapp/console/src/components/Executions/types.ts diff --git a/src/components/Executions/useTaskExecutions.ts b/packages/zapp/console/src/components/Executions/useTaskExecutions.ts similarity index 100% rename from src/components/Executions/useTaskExecutions.ts rename to packages/zapp/console/src/components/Executions/useTaskExecutions.ts diff --git a/src/components/Executions/useWorkflowExecution.ts b/packages/zapp/console/src/components/Executions/useWorkflowExecution.ts similarity index 100% rename from src/components/Executions/useWorkflowExecution.ts rename to packages/zapp/console/src/components/Executions/useWorkflowExecution.ts diff --git a/src/components/Executions/utils.ts b/packages/zapp/console/src/components/Executions/utils.ts similarity index 100% rename from src/components/Executions/utils.ts rename to packages/zapp/console/src/components/Executions/utils.ts diff --git a/src/components/Executions/workflowExecutionQueries.ts b/packages/zapp/console/src/components/Executions/workflowExecutionQueries.ts similarity index 100% rename from src/components/Executions/workflowExecutionQueries.ts rename to packages/zapp/console/src/components/Executions/workflowExecutionQueries.ts diff --git a/src/components/Launch/LaunchForm/BlobInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/BlobInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/BlobInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/BlobInput.tsx diff --git a/src/components/Launch/LaunchForm/CollectionInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/CollectionInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/CollectionInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/CollectionInput.tsx diff --git a/src/components/Launch/LaunchForm/DatetimeInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/DatetimeInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/DatetimeInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/DatetimeInput.tsx diff --git a/src/components/Launch/LaunchForm/LaunchForm.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchForm.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchForm.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchForm.tsx diff --git a/src/components/Launch/LaunchForm/LaunchFormActions.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormActions.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchFormActions.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormActions.tsx diff --git a/src/components/Launch/LaunchForm/LaunchFormAdvancedInputs.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormAdvancedInputs.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchFormAdvancedInputs.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormAdvancedInputs.tsx diff --git a/src/components/Launch/LaunchForm/LaunchFormHeader.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormHeader.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchFormHeader.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormHeader.tsx diff --git a/src/components/Launch/LaunchForm/LaunchFormInputs.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormInputs.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchFormInputs.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormInputs.tsx diff --git a/src/components/Launch/LaunchForm/LaunchInterruptibleInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchInterruptibleInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchInterruptibleInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchInterruptibleInput.tsx diff --git a/src/components/Launch/LaunchForm/LaunchRoleInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchRoleInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchRoleInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchRoleInput.tsx diff --git a/src/components/Launch/LaunchForm/LaunchTaskForm.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchTaskForm.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchTaskForm.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchTaskForm.tsx diff --git a/src/components/Launch/LaunchForm/LaunchWorkflowForm.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchWorkflowForm.tsx similarity index 100% rename from src/components/Launch/LaunchForm/LaunchWorkflowForm.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/LaunchWorkflowForm.tsx diff --git a/src/components/Launch/LaunchForm/NoInputsNeeded.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/NoInputsNeeded.tsx similarity index 100% rename from src/components/Launch/LaunchForm/NoInputsNeeded.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/NoInputsNeeded.tsx diff --git a/src/components/Launch/LaunchForm/SearchableSelector.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/SearchableSelector.tsx similarity index 100% rename from src/components/Launch/LaunchForm/SearchableSelector.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/SearchableSelector.tsx diff --git a/src/components/Launch/LaunchForm/SimpleInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/SimpleInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/SimpleInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/SimpleInput.tsx diff --git a/src/components/Launch/LaunchForm/StructInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/StructInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/StructInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/StructInput.tsx diff --git a/src/components/Launch/LaunchForm/UnsupportedInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/UnsupportedInput.tsx similarity index 100% rename from src/components/Launch/LaunchForm/UnsupportedInput.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/UnsupportedInput.tsx diff --git a/src/components/Launch/LaunchForm/UnsupportedRequiredInputsError.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/UnsupportedRequiredInputsError.tsx similarity index 100% rename from src/components/Launch/LaunchForm/UnsupportedRequiredInputsError.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/UnsupportedRequiredInputsError.tsx diff --git a/src/components/Launch/LaunchForm/__mocks__/mockInputs.ts b/packages/zapp/console/src/components/Launch/LaunchForm/__mocks__/mockInputs.ts similarity index 100% rename from src/components/Launch/LaunchForm/__mocks__/mockInputs.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/__mocks__/mockInputs.ts diff --git a/src/components/Launch/LaunchForm/__mocks__/utils.ts b/packages/zapp/console/src/components/Launch/LaunchForm/__mocks__/utils.ts similarity index 100% rename from src/components/Launch/LaunchForm/__mocks__/utils.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/__mocks__/utils.ts diff --git a/src/components/Launch/LaunchForm/__stories__/LaunchForm.stories.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/__stories__/LaunchForm.stories.tsx similarity index 100% rename from src/components/Launch/LaunchForm/__stories__/LaunchForm.stories.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/__stories__/LaunchForm.stories.tsx diff --git a/src/components/Launch/LaunchForm/__stories__/WorkflowSelector.stories.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/__stories__/WorkflowSelector.stories.tsx similarity index 100% rename from src/components/Launch/LaunchForm/__stories__/WorkflowSelector.stories.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/__stories__/WorkflowSelector.stories.tsx diff --git a/src/components/Launch/LaunchForm/constants.ts b/packages/zapp/console/src/components/Launch/LaunchForm/constants.ts similarity index 100% rename from src/components/Launch/LaunchForm/constants.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/constants.ts diff --git a/src/components/Launch/LaunchForm/getInputs.ts b/packages/zapp/console/src/components/Launch/LaunchForm/getInputs.ts similarity index 100% rename from src/components/Launch/LaunchForm/getInputs.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/getInputs.ts diff --git a/src/components/Launch/LaunchForm/handlers.ts b/packages/zapp/console/src/components/Launch/LaunchForm/handlers.ts similarity index 100% rename from src/components/Launch/LaunchForm/handlers.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/handlers.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/blob.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/blob.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/blob.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/blob.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/boolean.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/boolean.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/boolean.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/boolean.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/collection.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/collection.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/collection.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/collection.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/constants.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/constants.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/constants.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/constants.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/datetime.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/datetime.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/datetime.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/datetime.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/duration.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/duration.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/duration.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/duration.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/float.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/float.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/float.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/float.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/getHelperForInput.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/getHelperForInput.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/getHelperForInput.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/getHelperForInput.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/inputHelpers.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/inputHelpers.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/inputHelpers.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/inputHelpers.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/integer.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/integer.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/integer.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/integer.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/none.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/none.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/none.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/none.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/parseJson.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/parseJson.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/parseJson.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/parseJson.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/schema.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/schema.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/schema.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/schema.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/string.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/string.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/string.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/string.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/struct.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/struct.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/struct.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/struct.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/test/inputHelpers.test.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/inputHelpers.test.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/test/inputHelpers.test.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/inputHelpers.test.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/test/structTestCases.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/structTestCases.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/test/structTestCases.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/structTestCases.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/test/testCases.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/testCases.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/test/testCases.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/testCases.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/test/utils.test.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/utils.test.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/test/utils.test.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/test/utils.test.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/types.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/types.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/types.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/types.ts diff --git a/src/components/Launch/LaunchForm/inputHelpers/utils.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/utils.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputHelpers/utils.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputHelpers/utils.ts diff --git a/src/components/Launch/LaunchForm/inputValueCache.ts b/packages/zapp/console/src/components/Launch/LaunchForm/inputValueCache.ts similarity index 100% rename from src/components/Launch/LaunchForm/inputValueCache.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/inputValueCache.ts diff --git a/src/components/Launch/LaunchForm/launchMachine.ts b/packages/zapp/console/src/components/Launch/LaunchForm/launchMachine.ts similarity index 100% rename from src/components/Launch/LaunchForm/launchMachine.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/launchMachine.ts diff --git a/src/components/Launch/LaunchForm/services.ts b/packages/zapp/console/src/components/Launch/LaunchForm/services.ts similarity index 100% rename from src/components/Launch/LaunchForm/services.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/services.ts diff --git a/src/components/Launch/LaunchForm/styles.ts b/packages/zapp/console/src/components/Launch/LaunchForm/styles.ts similarity index 100% rename from src/components/Launch/LaunchForm/styles.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/styles.ts diff --git a/src/components/Launch/LaunchForm/test/LaunchTaskForm.test.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/test/LaunchTaskForm.test.tsx similarity index 100% rename from src/components/Launch/LaunchForm/test/LaunchTaskForm.test.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/test/LaunchTaskForm.test.tsx diff --git a/src/components/Launch/LaunchForm/test/LaunchWorkflowForm.test.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/test/LaunchWorkflowForm.test.tsx similarity index 100% rename from src/components/Launch/LaunchForm/test/LaunchWorkflowForm.test.tsx rename to packages/zapp/console/src/components/Launch/LaunchForm/test/LaunchWorkflowForm.test.tsx diff --git a/src/components/Launch/LaunchForm/test/constants.ts b/packages/zapp/console/src/components/Launch/LaunchForm/test/constants.ts similarity index 100% rename from src/components/Launch/LaunchForm/test/constants.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/test/constants.ts diff --git a/src/components/Launch/LaunchForm/test/getInputs.test.ts b/packages/zapp/console/src/components/Launch/LaunchForm/test/getInputs.test.ts similarity index 100% rename from src/components/Launch/LaunchForm/test/getInputs.test.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/test/getInputs.test.ts diff --git a/src/components/Launch/LaunchForm/test/utils.ts b/packages/zapp/console/src/components/Launch/LaunchForm/test/utils.ts similarity index 100% rename from src/components/Launch/LaunchForm/test/utils.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/test/utils.ts diff --git a/src/components/Launch/LaunchForm/types.ts b/packages/zapp/console/src/components/Launch/LaunchForm/types.ts similarity index 100% rename from src/components/Launch/LaunchForm/types.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/types.ts diff --git a/src/components/Launch/LaunchForm/useFormInputsState.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useFormInputsState.ts similarity index 100% rename from src/components/Launch/LaunchForm/useFormInputsState.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useFormInputsState.ts diff --git a/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts similarity index 100% rename from src/components/Launch/LaunchForm/useLaunchTaskFormState.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts diff --git a/src/components/Launch/LaunchForm/useLaunchWorkflowFormState.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useLaunchWorkflowFormState.ts similarity index 100% rename from src/components/Launch/LaunchForm/useLaunchWorkflowFormState.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useLaunchWorkflowFormState.ts diff --git a/src/components/Launch/LaunchForm/useMappedExecutionInputValues.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useMappedExecutionInputValues.ts similarity index 100% rename from src/components/Launch/LaunchForm/useMappedExecutionInputValues.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useMappedExecutionInputValues.ts diff --git a/src/components/Launch/LaunchForm/useTaskSourceSelectorState.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useTaskSourceSelectorState.ts similarity index 100% rename from src/components/Launch/LaunchForm/useTaskSourceSelectorState.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useTaskSourceSelectorState.ts diff --git a/src/components/Launch/LaunchForm/useVersionSelectorOptions.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useVersionSelectorOptions.ts similarity index 100% rename from src/components/Launch/LaunchForm/useVersionSelectorOptions.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useVersionSelectorOptions.ts diff --git a/src/components/Launch/LaunchForm/useWorkflowSourceSelectorState.ts b/packages/zapp/console/src/components/Launch/LaunchForm/useWorkflowSourceSelectorState.ts similarity index 100% rename from src/components/Launch/LaunchForm/useWorkflowSourceSelectorState.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/useWorkflowSourceSelectorState.ts diff --git a/src/components/Launch/LaunchForm/utils.ts b/packages/zapp/console/src/components/Launch/LaunchForm/utils.ts similarity index 100% rename from src/components/Launch/LaunchForm/utils.ts rename to packages/zapp/console/src/components/Launch/LaunchForm/utils.ts diff --git a/src/components/Literals/LiteralCollectionViewer.tsx b/packages/zapp/console/src/components/Literals/LiteralCollectionViewer.tsx similarity index 100% rename from src/components/Literals/LiteralCollectionViewer.tsx rename to packages/zapp/console/src/components/Literals/LiteralCollectionViewer.tsx diff --git a/src/components/Literals/LiteralMapViewer.tsx b/packages/zapp/console/src/components/Literals/LiteralMapViewer.tsx similarity index 100% rename from src/components/Literals/LiteralMapViewer.tsx rename to packages/zapp/console/src/components/Literals/LiteralMapViewer.tsx diff --git a/src/components/Literals/LiteralValue.tsx b/packages/zapp/console/src/components/Literals/LiteralValue.tsx similarity index 100% rename from src/components/Literals/LiteralValue.tsx rename to packages/zapp/console/src/components/Literals/LiteralValue.tsx diff --git a/src/components/Literals/PrintList.tsx b/packages/zapp/console/src/components/Literals/PrintList.tsx similarity index 100% rename from src/components/Literals/PrintList.tsx rename to packages/zapp/console/src/components/Literals/PrintList.tsx diff --git a/src/components/Literals/PrintValue.tsx b/packages/zapp/console/src/components/Literals/PrintValue.tsx similarity index 100% rename from src/components/Literals/PrintValue.tsx rename to packages/zapp/console/src/components/Literals/PrintValue.tsx diff --git a/src/components/Literals/Scalar/BinaryValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/BinaryValue.tsx similarity index 100% rename from src/components/Literals/Scalar/BinaryValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/BinaryValue.tsx diff --git a/src/components/Literals/Scalar/BlobValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/BlobValue.tsx similarity index 100% rename from src/components/Literals/Scalar/BlobValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/BlobValue.tsx diff --git a/src/components/Literals/Scalar/ErrorValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/ErrorValue.tsx similarity index 100% rename from src/components/Literals/Scalar/ErrorValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/ErrorValue.tsx diff --git a/src/components/Literals/Scalar/NoneTypeValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/NoneTypeValue.tsx similarity index 100% rename from src/components/Literals/Scalar/NoneTypeValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/NoneTypeValue.tsx diff --git a/src/components/Literals/Scalar/PrimitiveValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/PrimitiveValue.tsx similarity index 100% rename from src/components/Literals/Scalar/PrimitiveValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/PrimitiveValue.tsx diff --git a/src/components/Literals/Scalar/ProtobufStructValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/ProtobufStructValue.tsx similarity index 100% rename from src/components/Literals/Scalar/ProtobufStructValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/ProtobufStructValue.tsx diff --git a/src/components/Literals/Scalar/ScalarValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/ScalarValue.tsx similarity index 100% rename from src/components/Literals/Scalar/ScalarValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/ScalarValue.tsx diff --git a/src/components/Literals/Scalar/SchemaValue.tsx b/packages/zapp/console/src/components/Literals/Scalar/SchemaValue.tsx similarity index 100% rename from src/components/Literals/Scalar/SchemaValue.tsx rename to packages/zapp/console/src/components/Literals/Scalar/SchemaValue.tsx diff --git a/src/components/Literals/Scalar/test/PrimitiveValue.test.tsx b/packages/zapp/console/src/components/Literals/Scalar/test/PrimitiveValue.test.tsx similarity index 100% rename from src/components/Literals/Scalar/test/PrimitiveValue.test.tsx rename to packages/zapp/console/src/components/Literals/Scalar/test/PrimitiveValue.test.tsx diff --git a/src/components/Literals/Scalar/test/ProtobufStructValue.test.tsx b/packages/zapp/console/src/components/Literals/Scalar/test/ProtobufStructValue.test.tsx similarity index 100% rename from src/components/Literals/Scalar/test/ProtobufStructValue.test.tsx rename to packages/zapp/console/src/components/Literals/Scalar/test/ProtobufStructValue.test.tsx diff --git a/src/components/Literals/UnsupportedType.tsx b/packages/zapp/console/src/components/Literals/UnsupportedType.tsx similarity index 100% rename from src/components/Literals/UnsupportedType.tsx rename to packages/zapp/console/src/components/Literals/UnsupportedType.tsx diff --git a/src/components/Literals/ValueLabel.tsx b/packages/zapp/console/src/components/Literals/ValueLabel.tsx similarity index 100% rename from src/components/Literals/ValueLabel.tsx rename to packages/zapp/console/src/components/Literals/ValueLabel.tsx diff --git a/src/components/Literals/__stories__/CardDecorator.tsx b/packages/zapp/console/src/components/Literals/__stories__/CardDecorator.tsx similarity index 100% rename from src/components/Literals/__stories__/CardDecorator.tsx rename to packages/zapp/console/src/components/Literals/__stories__/CardDecorator.tsx diff --git a/src/components/Literals/__stories__/Collection.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/Collection.stories.tsx similarity index 100% rename from src/components/Literals/__stories__/Collection.stories.tsx rename to packages/zapp/console/src/components/Literals/__stories__/Collection.stories.tsx diff --git a/src/components/Literals/__stories__/Map.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/Map.stories.tsx similarity index 100% rename from src/components/Literals/__stories__/Map.stories.tsx rename to packages/zapp/console/src/components/Literals/__stories__/Map.stories.tsx diff --git a/src/components/Literals/__stories__/ProtobufStruct.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/ProtobufStruct.stories.tsx similarity index 100% rename from src/components/Literals/__stories__/ProtobufStruct.stories.tsx rename to packages/zapp/console/src/components/Literals/__stories__/ProtobufStruct.stories.tsx diff --git a/src/components/Literals/__stories__/Scalar.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/Scalar.stories.tsx similarity index 100% rename from src/components/Literals/__stories__/Scalar.stories.tsx rename to packages/zapp/console/src/components/Literals/__stories__/Scalar.stories.tsx diff --git a/src/components/Literals/__stories__/binaryValues.ts b/packages/zapp/console/src/components/Literals/__stories__/binaryValues.ts similarity index 100% rename from src/components/Literals/__stories__/binaryValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/binaryValues.ts diff --git a/src/components/Literals/__stories__/blobValues.ts b/packages/zapp/console/src/components/Literals/__stories__/blobValues.ts similarity index 100% rename from src/components/Literals/__stories__/blobValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/blobValues.ts diff --git a/src/components/Literals/__stories__/errorValues.ts b/packages/zapp/console/src/components/Literals/__stories__/errorValues.ts similarity index 100% rename from src/components/Literals/__stories__/errorValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/errorValues.ts diff --git a/src/components/Literals/__stories__/literalValues.ts b/packages/zapp/console/src/components/Literals/__stories__/literalValues.ts similarity index 100% rename from src/components/Literals/__stories__/literalValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/literalValues.ts diff --git a/src/components/Literals/__stories__/primitiveValues.ts b/packages/zapp/console/src/components/Literals/__stories__/primitiveValues.ts similarity index 100% rename from src/components/Literals/__stories__/primitiveValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/primitiveValues.ts diff --git a/src/components/Literals/__stories__/protobufValues.ts b/packages/zapp/console/src/components/Literals/__stories__/protobufValues.ts similarity index 100% rename from src/components/Literals/__stories__/protobufValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/protobufValues.ts diff --git a/src/components/Literals/__stories__/scalarValues.ts b/packages/zapp/console/src/components/Literals/__stories__/scalarValues.ts similarity index 100% rename from src/components/Literals/__stories__/scalarValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/scalarValues.ts diff --git a/src/components/Literals/__stories__/schemaValues.ts b/packages/zapp/console/src/components/Literals/__stories__/schemaValues.ts similarity index 100% rename from src/components/Literals/__stories__/schemaValues.ts rename to packages/zapp/console/src/components/Literals/__stories__/schemaValues.ts diff --git a/src/components/Literals/constants.ts b/packages/zapp/console/src/components/Literals/constants.ts similarity index 100% rename from src/components/Literals/constants.ts rename to packages/zapp/console/src/components/Literals/constants.ts diff --git a/src/components/Literals/styles.ts b/packages/zapp/console/src/components/Literals/styles.ts similarity index 100% rename from src/components/Literals/styles.ts rename to packages/zapp/console/src/components/Literals/styles.ts diff --git a/src/components/Literals/test/LiteralMapViewer.test.tsx b/packages/zapp/console/src/components/Literals/test/LiteralMapViewer.test.tsx similarity index 100% rename from src/components/Literals/test/LiteralMapViewer.test.tsx rename to packages/zapp/console/src/components/Literals/test/LiteralMapViewer.test.tsx diff --git a/src/components/Navigation/DefaultAppBarContent.tsx b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx similarity index 100% rename from src/components/Navigation/DefaultAppBarContent.tsx rename to packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx diff --git a/src/components/Navigation/NavBar.tsx b/packages/zapp/console/src/components/Navigation/NavBar.tsx similarity index 100% rename from src/components/Navigation/NavBar.tsx rename to packages/zapp/console/src/components/Navigation/NavBar.tsx diff --git a/src/components/Navigation/NavBarContent.tsx b/packages/zapp/console/src/components/Navigation/NavBarContent.tsx similarity index 100% rename from src/components/Navigation/NavBarContent.tsx rename to packages/zapp/console/src/components/Navigation/NavBarContent.tsx diff --git a/src/components/Navigation/ProjectNavigation.tsx b/packages/zapp/console/src/components/Navigation/ProjectNavigation.tsx similarity index 100% rename from src/components/Navigation/ProjectNavigation.tsx rename to packages/zapp/console/src/components/Navigation/ProjectNavigation.tsx diff --git a/src/components/Navigation/ProjectSelector.tsx b/packages/zapp/console/src/components/Navigation/ProjectSelector.tsx similarity index 100% rename from src/components/Navigation/ProjectSelector.tsx rename to packages/zapp/console/src/components/Navigation/ProjectSelector.tsx diff --git a/src/components/Navigation/SearchableProjectList.tsx b/packages/zapp/console/src/components/Navigation/SearchableProjectList.tsx similarity index 100% rename from src/components/Navigation/SearchableProjectList.tsx rename to packages/zapp/console/src/components/Navigation/SearchableProjectList.tsx diff --git a/src/components/Navigation/SideNavigation.tsx b/packages/zapp/console/src/components/Navigation/SideNavigation.tsx similarity index 100% rename from src/components/Navigation/SideNavigation.tsx rename to packages/zapp/console/src/components/Navigation/SideNavigation.tsx diff --git a/src/components/Navigation/UserInformation.tsx b/packages/zapp/console/src/components/Navigation/UserInformation.tsx similarity index 100% rename from src/components/Navigation/UserInformation.tsx rename to packages/zapp/console/src/components/Navigation/UserInformation.tsx diff --git a/src/components/Navigation/VersionDisplayModal.tsx b/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx similarity index 100% rename from src/components/Navigation/VersionDisplayModal.tsx rename to packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx diff --git a/src/components/Navigation/__stories__/Navbar.stories.tsx b/packages/zapp/console/src/components/Navigation/__stories__/Navbar.stories.tsx similarity index 100% rename from src/components/Navigation/__stories__/Navbar.stories.tsx rename to packages/zapp/console/src/components/Navigation/__stories__/Navbar.stories.tsx diff --git a/src/components/Navigation/__stories__/ProjectSelector.stories.tsx b/packages/zapp/console/src/components/Navigation/__stories__/ProjectSelector.stories.tsx similarity index 100% rename from src/components/Navigation/__stories__/ProjectSelector.stories.tsx rename to packages/zapp/console/src/components/Navigation/__stories__/ProjectSelector.stories.tsx diff --git a/src/components/Navigation/__stories__/SideNavigation.stories.tsx b/packages/zapp/console/src/components/Navigation/__stories__/SideNavigation.stories.tsx similarity index 100% rename from src/components/Navigation/__stories__/SideNavigation.stories.tsx rename to packages/zapp/console/src/components/Navigation/__stories__/SideNavigation.stories.tsx diff --git a/src/components/Navigation/test/ProjectSelector.test.tsx b/packages/zapp/console/src/components/Navigation/test/ProjectSelector.test.tsx similarity index 100% rename from src/components/Navigation/test/ProjectSelector.test.tsx rename to packages/zapp/console/src/components/Navigation/test/ProjectSelector.test.tsx diff --git a/src/components/Navigation/test/UserInformation.test.tsx b/packages/zapp/console/src/components/Navigation/test/UserInformation.test.tsx similarity index 100% rename from src/components/Navigation/test/UserInformation.test.tsx rename to packages/zapp/console/src/components/Navigation/test/UserInformation.test.tsx diff --git a/src/components/Navigation/withSideNavigation.tsx b/packages/zapp/console/src/components/Navigation/withSideNavigation.tsx similarity index 100% rename from src/components/Navigation/withSideNavigation.tsx rename to packages/zapp/console/src/components/Navigation/withSideNavigation.tsx diff --git a/src/components/NotFound/NotFound.tsx b/packages/zapp/console/src/components/NotFound/NotFound.tsx similarity index 100% rename from src/components/NotFound/NotFound.tsx rename to packages/zapp/console/src/components/NotFound/NotFound.tsx diff --git a/src/components/NotFound/__stories__/NotFound.stories.tsx b/packages/zapp/console/src/components/NotFound/__stories__/NotFound.stories.tsx similarity index 100% rename from src/components/NotFound/__stories__/NotFound.stories.tsx rename to packages/zapp/console/src/components/NotFound/__stories__/NotFound.stories.tsx diff --git a/src/components/Notifications/SystemStatusBanner.tsx b/packages/zapp/console/src/components/Notifications/SystemStatusBanner.tsx similarity index 100% rename from src/components/Notifications/SystemStatusBanner.tsx rename to packages/zapp/console/src/components/Notifications/SystemStatusBanner.tsx diff --git a/src/components/Notifications/__stories__/SystemStatusBanner.stories.tsx b/packages/zapp/console/src/components/Notifications/__stories__/SystemStatusBanner.stories.tsx similarity index 100% rename from src/components/Notifications/__stories__/SystemStatusBanner.stories.tsx rename to packages/zapp/console/src/components/Notifications/__stories__/SystemStatusBanner.stories.tsx diff --git a/src/components/Notifications/test/SystemStatusBanner.test.tsx b/packages/zapp/console/src/components/Notifications/test/SystemStatusBanner.test.tsx similarity index 100% rename from src/components/Notifications/test/SystemStatusBanner.test.tsx rename to packages/zapp/console/src/components/Notifications/test/SystemStatusBanner.test.tsx diff --git a/src/components/Notifications/useSystemStatus.ts b/packages/zapp/console/src/components/Notifications/useSystemStatus.ts similarity index 100% rename from src/components/Notifications/useSystemStatus.ts rename to packages/zapp/console/src/components/Notifications/useSystemStatus.ts diff --git a/src/components/Project/ProjectDashboard.tsx b/packages/zapp/console/src/components/Project/ProjectDashboard.tsx similarity index 100% rename from src/components/Project/ProjectDashboard.tsx rename to packages/zapp/console/src/components/Project/ProjectDashboard.tsx diff --git a/src/components/Project/ProjectDetails.tsx b/packages/zapp/console/src/components/Project/ProjectDetails.tsx similarity index 100% rename from src/components/Project/ProjectDetails.tsx rename to packages/zapp/console/src/components/Project/ProjectDetails.tsx diff --git a/src/components/Project/ProjectStatusBar.tsx b/packages/zapp/console/src/components/Project/ProjectStatusBar.tsx similarity index 100% rename from src/components/Project/ProjectStatusBar.tsx rename to packages/zapp/console/src/components/Project/ProjectStatusBar.tsx diff --git a/src/components/Project/ProjectTasks.tsx b/packages/zapp/console/src/components/Project/ProjectTasks.tsx similarity index 100% rename from src/components/Project/ProjectTasks.tsx rename to packages/zapp/console/src/components/Project/ProjectTasks.tsx diff --git a/src/components/Project/ProjectWorkflows.tsx b/packages/zapp/console/src/components/Project/ProjectWorkflows.tsx similarity index 100% rename from src/components/Project/ProjectWorkflows.tsx rename to packages/zapp/console/src/components/Project/ProjectWorkflows.tsx diff --git a/src/components/Project/constants.ts b/packages/zapp/console/src/components/Project/constants.ts similarity index 100% rename from src/components/Project/constants.ts rename to packages/zapp/console/src/components/Project/constants.ts diff --git a/src/components/Project/strings.ts b/packages/zapp/console/src/components/Project/strings.ts similarity index 100% rename from src/components/Project/strings.ts rename to packages/zapp/console/src/components/Project/strings.ts diff --git a/src/components/Project/test/ProjectDashboard.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx similarity index 100% rename from src/components/Project/test/ProjectDashboard.test.tsx rename to packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx diff --git a/src/components/Project/test/ProjectTask.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectTask.test.tsx similarity index 100% rename from src/components/Project/test/ProjectTask.test.tsx rename to packages/zapp/console/src/components/Project/test/ProjectTask.test.tsx diff --git a/src/components/Project/test/ProjectWorkflows.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectWorkflows.test.tsx similarity index 100% rename from src/components/Project/test/ProjectWorkflows.test.tsx rename to packages/zapp/console/src/components/Project/test/ProjectWorkflows.test.tsx diff --git a/src/components/SelectProject/ProjectList.tsx b/packages/zapp/console/src/components/SelectProject/ProjectList.tsx similarity index 100% rename from src/components/SelectProject/ProjectList.tsx rename to packages/zapp/console/src/components/SelectProject/ProjectList.tsx diff --git a/src/components/SelectProject/SelectProject.tsx b/packages/zapp/console/src/components/SelectProject/SelectProject.tsx similarity index 100% rename from src/components/SelectProject/SelectProject.tsx rename to packages/zapp/console/src/components/SelectProject/SelectProject.tsx diff --git a/src/components/SelectProject/constants.ts b/packages/zapp/console/src/components/SelectProject/constants.ts similarity index 100% rename from src/components/SelectProject/constants.ts rename to packages/zapp/console/src/components/SelectProject/constants.ts diff --git a/src/components/Tables/DataList.tsx b/packages/zapp/console/src/components/Tables/DataList.tsx similarity index 100% rename from src/components/Tables/DataList.tsx rename to packages/zapp/console/src/components/Tables/DataList.tsx diff --git a/src/components/Tables/LoadMoreRowContent.tsx b/packages/zapp/console/src/components/Tables/LoadMoreRowContent.tsx similarity index 100% rename from src/components/Tables/LoadMoreRowContent.tsx rename to packages/zapp/console/src/components/Tables/LoadMoreRowContent.tsx diff --git a/src/components/Tables/PaginatedDataList.tsx b/packages/zapp/console/src/components/Tables/PaginatedDataList.tsx similarity index 100% rename from src/components/Tables/PaginatedDataList.tsx rename to packages/zapp/console/src/components/Tables/PaginatedDataList.tsx diff --git a/src/components/Tables/constants.ts b/packages/zapp/console/src/components/Tables/constants.ts similarity index 100% rename from src/components/Tables/constants.ts rename to packages/zapp/console/src/components/Tables/constants.ts diff --git a/src/components/Tables/filters/FilterPopoverButton.tsx b/packages/zapp/console/src/components/Tables/filters/FilterPopoverButton.tsx similarity index 100% rename from src/components/Tables/filters/FilterPopoverButton.tsx rename to packages/zapp/console/src/components/Tables/filters/FilterPopoverButton.tsx diff --git a/src/components/Task/SearchableTaskNameList.tsx b/packages/zapp/console/src/components/Task/SearchableTaskNameList.tsx similarity index 100% rename from src/components/Task/SearchableTaskNameList.tsx rename to packages/zapp/console/src/components/Task/SearchableTaskNameList.tsx diff --git a/src/components/Task/SimpleTaskInterface.tsx b/packages/zapp/console/src/components/Task/SimpleTaskInterface.tsx similarity index 100% rename from src/components/Task/SimpleTaskInterface.tsx rename to packages/zapp/console/src/components/Task/SimpleTaskInterface.tsx diff --git a/src/components/Task/TaskDetails.tsx b/packages/zapp/console/src/components/Task/TaskDetails.tsx similarity index 100% rename from src/components/Task/TaskDetails.tsx rename to packages/zapp/console/src/components/Task/TaskDetails.tsx diff --git a/src/components/Task/__stories__/SearchableTaskNameList.stories.tsx b/packages/zapp/console/src/components/Task/__stories__/SearchableTaskNameList.stories.tsx similarity index 100% rename from src/components/Task/__stories__/SearchableTaskNameList.stories.tsx rename to packages/zapp/console/src/components/Task/__stories__/SearchableTaskNameList.stories.tsx diff --git a/src/components/Task/taskQueries.ts b/packages/zapp/console/src/components/Task/taskQueries.ts similarity index 100% rename from src/components/Task/taskQueries.ts rename to packages/zapp/console/src/components/Task/taskQueries.ts diff --git a/src/components/Task/test/SimpleTaskInterface.test.tsx b/packages/zapp/console/src/components/Task/test/SimpleTaskInterface.test.tsx similarity index 100% rename from src/components/Task/test/SimpleTaskInterface.test.tsx rename to packages/zapp/console/src/components/Task/test/SimpleTaskInterface.test.tsx diff --git a/src/components/Task/useLatestTask.ts b/packages/zapp/console/src/components/Task/useLatestTask.ts similarity index 100% rename from src/components/Task/useLatestTask.ts rename to packages/zapp/console/src/components/Task/useLatestTask.ts diff --git a/src/components/Task/useTaskShowArchivedState.ts b/packages/zapp/console/src/components/Task/useTaskShowArchivedState.ts similarity index 100% rename from src/components/Task/useTaskShowArchivedState.ts rename to packages/zapp/console/src/components/Task/useTaskShowArchivedState.ts diff --git a/src/components/Task/utils.ts b/packages/zapp/console/src/components/Task/utils.ts similarity index 100% rename from src/components/Task/utils.ts rename to packages/zapp/console/src/components/Task/utils.ts diff --git a/src/components/Theme/colorSpectrum.ts b/packages/zapp/console/src/components/Theme/colorSpectrum.ts similarity index 100% rename from src/components/Theme/colorSpectrum.ts rename to packages/zapp/console/src/components/Theme/colorSpectrum.ts diff --git a/src/components/Theme/constants.ts b/packages/zapp/console/src/components/Theme/constants.ts similarity index 100% rename from src/components/Theme/constants.ts rename to packages/zapp/console/src/components/Theme/constants.ts diff --git a/src/components/Theme/muiTheme.ts b/packages/zapp/console/src/components/Theme/muiTheme.ts similarity index 100% rename from src/components/Theme/muiTheme.ts rename to packages/zapp/console/src/components/Theme/muiTheme.ts diff --git a/src/components/Theme/useTheme.ts b/packages/zapp/console/src/components/Theme/useTheme.ts similarity index 100% rename from src/components/Theme/useTheme.ts rename to packages/zapp/console/src/components/Theme/useTheme.ts diff --git a/src/components/Workflow/SearchableWorkflowNameList.tsx b/packages/zapp/console/src/components/Workflow/SearchableWorkflowNameList.tsx similarity index 100% rename from src/components/Workflow/SearchableWorkflowNameList.tsx rename to packages/zapp/console/src/components/Workflow/SearchableWorkflowNameList.tsx diff --git a/src/components/Workflow/StaticGraphContainer.tsx b/packages/zapp/console/src/components/Workflow/StaticGraphContainer.tsx similarity index 100% rename from src/components/Workflow/StaticGraphContainer.tsx rename to packages/zapp/console/src/components/Workflow/StaticGraphContainer.tsx diff --git a/src/components/Workflow/WorkflowDetails.tsx b/packages/zapp/console/src/components/Workflow/WorkflowDetails.tsx similarity index 100% rename from src/components/Workflow/WorkflowDetails.tsx rename to packages/zapp/console/src/components/Workflow/WorkflowDetails.tsx diff --git a/src/components/Workflow/WorkflowVersionDetails.tsx b/packages/zapp/console/src/components/Workflow/WorkflowVersionDetails.tsx similarity index 100% rename from src/components/Workflow/WorkflowVersionDetails.tsx rename to packages/zapp/console/src/components/Workflow/WorkflowVersionDetails.tsx diff --git a/src/components/Workflow/__stories__/SearchableWorkflowNameList.stories.tsx b/packages/zapp/console/src/components/Workflow/__stories__/SearchableWorkflowNameList.stories.tsx similarity index 100% rename from src/components/Workflow/__stories__/SearchableWorkflowNameList.stories.tsx rename to packages/zapp/console/src/components/Workflow/__stories__/SearchableWorkflowNameList.stories.tsx diff --git a/src/components/Workflow/filters/useWorkflowShowArchivedState.ts b/packages/zapp/console/src/components/Workflow/filters/useWorkflowShowArchivedState.ts similarity index 100% rename from src/components/Workflow/filters/useWorkflowShowArchivedState.ts rename to packages/zapp/console/src/components/Workflow/filters/useWorkflowShowArchivedState.ts diff --git a/src/components/Workflow/types.ts b/packages/zapp/console/src/components/Workflow/types.ts similarity index 100% rename from src/components/Workflow/types.ts rename to packages/zapp/console/src/components/Workflow/types.ts diff --git a/src/components/Workflow/useWorkflowInfoItem.ts b/packages/zapp/console/src/components/Workflow/useWorkflowInfoItem.ts similarity index 100% rename from src/components/Workflow/useWorkflowInfoItem.ts rename to packages/zapp/console/src/components/Workflow/useWorkflowInfoItem.ts diff --git a/src/components/Workflow/useWorkflowInfoList.ts b/packages/zapp/console/src/components/Workflow/useWorkflowInfoList.ts similarity index 100% rename from src/components/Workflow/useWorkflowInfoList.ts rename to packages/zapp/console/src/components/Workflow/useWorkflowInfoList.ts diff --git a/src/components/Workflow/utils.ts b/packages/zapp/console/src/components/Workflow/utils.ts similarity index 100% rename from src/components/Workflow/utils.ts rename to packages/zapp/console/src/components/Workflow/utils.ts diff --git a/src/components/Workflow/workflowQueries.ts b/packages/zapp/console/src/components/Workflow/workflowQueries.ts similarity index 100% rename from src/components/Workflow/workflowQueries.ts rename to packages/zapp/console/src/components/Workflow/workflowQueries.ts diff --git a/src/components/WorkflowGraph/InputOutputNodeRenderer.tsx b/packages/zapp/console/src/components/WorkflowGraph/InputOutputNodeRenderer.tsx similarity index 100% rename from src/components/WorkflowGraph/InputOutputNodeRenderer.tsx rename to packages/zapp/console/src/components/WorkflowGraph/InputOutputNodeRenderer.tsx diff --git a/src/components/WorkflowGraph/TaskNodeRenderer.tsx b/packages/zapp/console/src/components/WorkflowGraph/TaskNodeRenderer.tsx similarity index 100% rename from src/components/WorkflowGraph/TaskNodeRenderer.tsx rename to packages/zapp/console/src/components/WorkflowGraph/TaskNodeRenderer.tsx diff --git a/src/components/WorkflowGraph/WorkflowGraph.tsx b/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx similarity index 100% rename from src/components/WorkflowGraph/WorkflowGraph.tsx rename to packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx diff --git a/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx b/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx similarity index 100% rename from src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx rename to packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx diff --git a/src/components/WorkflowGraph/__stories__/rich.json b/packages/zapp/console/src/components/WorkflowGraph/__stories__/rich.json similarity index 100% rename from src/components/WorkflowGraph/__stories__/rich.json rename to packages/zapp/console/src/components/WorkflowGraph/__stories__/rich.json diff --git a/src/components/WorkflowGraph/test/utils.test.ts b/packages/zapp/console/src/components/WorkflowGraph/test/utils.test.ts similarity index 100% rename from src/components/WorkflowGraph/test/utils.test.ts rename to packages/zapp/console/src/components/WorkflowGraph/test/utils.test.ts diff --git a/src/components/WorkflowGraph/transformerWorkflowToDag.tsx b/packages/zapp/console/src/components/WorkflowGraph/transformerWorkflowToDag.tsx similarity index 100% rename from src/components/WorkflowGraph/transformerWorkflowToDag.tsx rename to packages/zapp/console/src/components/WorkflowGraph/transformerWorkflowToDag.tsx diff --git a/src/components/WorkflowGraph/utils.ts b/packages/zapp/console/src/components/WorkflowGraph/utils.ts similarity index 100% rename from src/components/WorkflowGraph/utils.ts rename to packages/zapp/console/src/components/WorkflowGraph/utils.ts diff --git a/src/components/common/BarChart.tsx b/packages/zapp/console/src/components/common/BarChart.tsx similarity index 100% rename from src/components/common/BarChart.tsx rename to packages/zapp/console/src/components/common/BarChart.tsx diff --git a/src/components/common/ButtonCircularProgress.tsx b/packages/zapp/console/src/components/common/ButtonCircularProgress.tsx similarity index 100% rename from src/components/common/ButtonCircularProgress.tsx rename to packages/zapp/console/src/components/common/ButtonCircularProgress.tsx diff --git a/src/components/common/ButtonLink.tsx b/packages/zapp/console/src/components/common/ButtonLink.tsx similarity index 100% rename from src/components/common/ButtonLink.tsx rename to packages/zapp/console/src/components/common/ButtonLink.tsx diff --git a/src/components/common/ClosableDialogTitle.tsx b/packages/zapp/console/src/components/common/ClosableDialogTitle.tsx similarity index 100% rename from src/components/common/ClosableDialogTitle.tsx rename to packages/zapp/console/src/components/common/ClosableDialogTitle.tsx diff --git a/src/components/common/ContentContainer.tsx b/packages/zapp/console/src/components/common/ContentContainer.tsx similarity index 100% rename from src/components/common/ContentContainer.tsx rename to packages/zapp/console/src/components/common/ContentContainer.tsx diff --git a/src/components/common/DataTable.tsx b/packages/zapp/console/src/components/common/DataTable.tsx similarity index 100% rename from src/components/common/DataTable.tsx rename to packages/zapp/console/src/components/common/DataTable.tsx diff --git a/src/components/common/DelayedMount.tsx b/packages/zapp/console/src/components/common/DelayedMount.tsx similarity index 100% rename from src/components/common/DelayedMount.tsx rename to packages/zapp/console/src/components/common/DelayedMount.tsx diff --git a/src/components/common/DetailsGroup.tsx b/packages/zapp/console/src/components/common/DetailsGroup.tsx similarity index 100% rename from src/components/common/DetailsGroup.tsx rename to packages/zapp/console/src/components/common/DetailsGroup.tsx diff --git a/src/components/common/DetailsPanel.tsx b/packages/zapp/console/src/components/common/DetailsPanel.tsx similarity index 100% rename from src/components/common/DetailsPanel.tsx rename to packages/zapp/console/src/components/common/DetailsPanel.tsx diff --git a/src/components/common/DetailsPanelContent.tsx b/packages/zapp/console/src/components/common/DetailsPanelContent.tsx similarity index 100% rename from src/components/common/DetailsPanelContent.tsx rename to packages/zapp/console/src/components/common/DetailsPanelContent.tsx diff --git a/src/components/common/DomainSettingsSection.tsx b/packages/zapp/console/src/components/common/DomainSettingsSection.tsx similarity index 100% rename from src/components/common/DomainSettingsSection.tsx rename to packages/zapp/console/src/components/common/DomainSettingsSection.tsx diff --git a/src/components/common/DropDownWindowButton.tsx b/packages/zapp/console/src/components/common/DropDownWindowButton.tsx similarity index 100% rename from src/components/common/DropDownWindowButton.tsx rename to packages/zapp/console/src/components/common/DropDownWindowButton.tsx diff --git a/src/components/common/DumpJSON.tsx b/packages/zapp/console/src/components/common/DumpJSON.tsx similarity index 100% rename from src/components/common/DumpJSON.tsx rename to packages/zapp/console/src/components/common/DumpJSON.tsx diff --git a/src/components/common/Empty.tsx b/packages/zapp/console/src/components/common/Empty.tsx similarity index 100% rename from src/components/common/Empty.tsx rename to packages/zapp/console/src/components/common/Empty.tsx diff --git a/src/components/common/ErrorBoundary.tsx b/packages/zapp/console/src/components/common/ErrorBoundary.tsx similarity index 100% rename from src/components/common/ErrorBoundary.tsx rename to packages/zapp/console/src/components/common/ErrorBoundary.tsx diff --git a/src/components/common/ExpandableContentLink.tsx b/packages/zapp/console/src/components/common/ExpandableContentLink.tsx similarity index 100% rename from src/components/common/ExpandableContentLink.tsx rename to packages/zapp/console/src/components/common/ExpandableContentLink.tsx diff --git a/src/components/common/ExpandableMonospaceText.tsx b/packages/zapp/console/src/components/common/ExpandableMonospaceText.tsx similarity index 100% rename from src/components/common/ExpandableMonospaceText.tsx rename to packages/zapp/console/src/components/common/ExpandableMonospaceText.tsx diff --git a/src/components/common/FilterableNamedEntityList.tsx b/packages/zapp/console/src/components/common/FilterableNamedEntityList.tsx similarity index 100% rename from src/components/common/FilterableNamedEntityList.tsx rename to packages/zapp/console/src/components/common/FilterableNamedEntityList.tsx diff --git a/src/components/common/FlyteLogo.tsx b/packages/zapp/console/src/components/common/FlyteLogo.tsx similarity index 100% rename from src/components/common/FlyteLogo.tsx rename to packages/zapp/console/src/components/common/FlyteLogo.tsx diff --git a/src/components/common/Icons/InfoIcon.tsx b/packages/zapp/console/src/components/common/Icons/InfoIcon.tsx similarity index 100% rename from src/components/common/Icons/InfoIcon.tsx rename to packages/zapp/console/src/components/common/Icons/InfoIcon.tsx diff --git a/src/components/common/Icons/interface.ts b/packages/zapp/console/src/components/common/Icons/interface.ts similarity index 100% rename from src/components/common/Icons/interface.ts rename to packages/zapp/console/src/components/common/Icons/interface.ts diff --git a/src/components/common/LinkifiedText.tsx b/packages/zapp/console/src/components/common/LinkifiedText.tsx similarity index 100% rename from src/components/common/LinkifiedText.tsx rename to packages/zapp/console/src/components/common/LinkifiedText.tsx diff --git a/src/components/common/LoadingSpinner.tsx b/packages/zapp/console/src/components/common/LoadingSpinner.tsx similarity index 100% rename from src/components/common/LoadingSpinner.tsx rename to packages/zapp/console/src/components/common/LoadingSpinner.tsx diff --git a/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx similarity index 100% rename from src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx rename to packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx diff --git a/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx similarity index 100% rename from src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx rename to packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx diff --git a/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx similarity index 100% rename from src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx rename to packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx diff --git a/src/components/common/MoreOptionsMenu.tsx b/packages/zapp/console/src/components/common/MoreOptionsMenu.tsx similarity index 100% rename from src/components/common/MoreOptionsMenu.tsx rename to packages/zapp/console/src/components/common/MoreOptionsMenu.tsx diff --git a/src/components/common/MultiSelectForm.tsx b/packages/zapp/console/src/components/common/MultiSelectForm.tsx similarity index 100% rename from src/components/common/MultiSelectForm.tsx rename to packages/zapp/console/src/components/common/MultiSelectForm.tsx diff --git a/src/components/common/NewTargetLink.tsx b/packages/zapp/console/src/components/common/NewTargetLink.tsx similarity index 100% rename from src/components/common/NewTargetLink.tsx rename to packages/zapp/console/src/components/common/NewTargetLink.tsx diff --git a/src/components/common/NoResults.tsx b/packages/zapp/console/src/components/common/NoResults.tsx similarity index 100% rename from src/components/common/NoResults.tsx rename to packages/zapp/console/src/components/common/NoResults.tsx diff --git a/src/components/common/NonIdealState.tsx b/packages/zapp/console/src/components/common/NonIdealState.tsx similarity index 100% rename from src/components/common/NonIdealState.tsx rename to packages/zapp/console/src/components/common/NonIdealState.tsx diff --git a/src/components/common/PanelSection/index.tsx b/packages/zapp/console/src/components/common/PanelSection/index.tsx similarity index 100% rename from src/components/common/PanelSection/index.tsx rename to packages/zapp/console/src/components/common/PanelSection/index.tsx diff --git a/src/components/common/PublishedWithChanges.tsx b/packages/zapp/console/src/components/common/PublishedWithChanges.tsx similarity index 100% rename from src/components/common/PublishedWithChanges.tsx rename to packages/zapp/console/src/components/common/PublishedWithChanges.tsx diff --git a/src/components/common/SearchInputForm.tsx b/packages/zapp/console/src/components/common/SearchInputForm.tsx similarity index 100% rename from src/components/common/SearchInputForm.tsx rename to packages/zapp/console/src/components/common/SearchInputForm.tsx diff --git a/src/components/common/SearchableList.tsx b/packages/zapp/console/src/components/common/SearchableList.tsx similarity index 100% rename from src/components/common/SearchableList.tsx rename to packages/zapp/console/src/components/common/SearchableList.tsx diff --git a/src/components/common/SearchableNamedEntityList.tsx b/packages/zapp/console/src/components/common/SearchableNamedEntityList.tsx similarity index 100% rename from src/components/common/SearchableNamedEntityList.tsx rename to packages/zapp/console/src/components/common/SearchableNamedEntityList.tsx diff --git a/src/components/common/SectionHeader.tsx b/packages/zapp/console/src/components/common/SectionHeader.tsx similarity index 100% rename from src/components/common/SectionHeader.tsx rename to packages/zapp/console/src/components/common/SectionHeader.tsx diff --git a/src/components/common/Shimmer.tsx b/packages/zapp/console/src/components/common/Shimmer.tsx similarity index 100% rename from src/components/common/Shimmer.tsx rename to packages/zapp/console/src/components/common/Shimmer.tsx diff --git a/src/components/common/SingleSelectForm.tsx b/packages/zapp/console/src/components/common/SingleSelectForm.tsx similarity index 100% rename from src/components/common/SingleSelectForm.tsx rename to packages/zapp/console/src/components/common/SingleSelectForm.tsx diff --git a/src/components/common/WaitForData.tsx b/packages/zapp/console/src/components/common/WaitForData.tsx similarity index 100% rename from src/components/common/WaitForData.tsx rename to packages/zapp/console/src/components/common/WaitForData.tsx diff --git a/src/components/common/WaitForQuery.tsx b/packages/zapp/console/src/components/common/WaitForQuery.tsx similarity index 100% rename from src/components/common/WaitForQuery.tsx rename to packages/zapp/console/src/components/common/WaitForQuery.tsx diff --git a/src/components/common/__stories__/BarChart.stories.tsx b/packages/zapp/console/src/components/common/__stories__/BarChart.stories.tsx similarity index 100% rename from src/components/common/__stories__/BarChart.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/BarChart.stories.tsx diff --git a/src/components/common/__stories__/ButtonCircularProgress.stories.tsx b/packages/zapp/console/src/components/common/__stories__/ButtonCircularProgress.stories.tsx similarity index 100% rename from src/components/common/__stories__/ButtonCircularProgress.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/ButtonCircularProgress.stories.tsx diff --git a/src/components/common/__stories__/Decorators.tsx b/packages/zapp/console/src/components/common/__stories__/Decorators.tsx similarity index 100% rename from src/components/common/__stories__/Decorators.tsx rename to packages/zapp/console/src/components/common/__stories__/Decorators.tsx diff --git a/src/components/common/__stories__/ErrorBoundary.stories.tsx b/packages/zapp/console/src/components/common/__stories__/ErrorBoundary.stories.tsx similarity index 100% rename from src/components/common/__stories__/ErrorBoundary.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/ErrorBoundary.stories.tsx diff --git a/src/components/common/__stories__/ExpandableContentLink.stories.tsx b/packages/zapp/console/src/components/common/__stories__/ExpandableContentLink.stories.tsx similarity index 100% rename from src/components/common/__stories__/ExpandableContentLink.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/ExpandableContentLink.stories.tsx diff --git a/src/components/common/__stories__/ExpandableMonospaceText.stories.tsx b/packages/zapp/console/src/components/common/__stories__/ExpandableMonospaceText.stories.tsx similarity index 100% rename from src/components/common/__stories__/ExpandableMonospaceText.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/ExpandableMonospaceText.stories.tsx diff --git a/src/components/common/__stories__/FlyteLogo.stories.tsx b/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx similarity index 100% rename from src/components/common/__stories__/FlyteLogo.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx diff --git a/src/components/common/__stories__/LoadingSpinner.stories.tsx b/packages/zapp/console/src/components/common/__stories__/LoadingSpinner.stories.tsx similarity index 100% rename from src/components/common/__stories__/LoadingSpinner.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/LoadingSpinner.stories.tsx diff --git a/src/components/common/__stories__/NonIdealState.stories.tsx b/packages/zapp/console/src/components/common/__stories__/NonIdealState.stories.tsx similarity index 100% rename from src/components/common/__stories__/NonIdealState.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/NonIdealState.stories.tsx diff --git a/src/components/common/__stories__/Typography.stories.tsx b/packages/zapp/console/src/components/common/__stories__/Typography.stories.tsx similarity index 100% rename from src/components/common/__stories__/Typography.stories.tsx rename to packages/zapp/console/src/components/common/__stories__/Typography.stories.tsx diff --git a/src/components/common/constants.ts b/packages/zapp/console/src/components/common/constants.ts similarity index 100% rename from src/components/common/constants.ts rename to packages/zapp/console/src/components/common/constants.ts diff --git a/src/components/common/keyboardEvents.ts b/packages/zapp/console/src/components/common/keyboardEvents.ts similarity index 100% rename from src/components/common/keyboardEvents.ts rename to packages/zapp/console/src/components/common/keyboardEvents.ts diff --git a/src/components/common/scopedContext.ts b/packages/zapp/console/src/components/common/scopedContext.ts similarity index 100% rename from src/components/common/scopedContext.ts rename to packages/zapp/console/src/components/common/scopedContext.ts diff --git a/src/components/common/strings.ts b/packages/zapp/console/src/components/common/strings.ts similarity index 100% rename from src/components/common/strings.ts rename to packages/zapp/console/src/components/common/strings.ts diff --git a/src/components/common/styles.ts b/packages/zapp/console/src/components/common/styles.ts similarity index 100% rename from src/components/common/styles.ts rename to packages/zapp/console/src/components/common/styles.ts diff --git a/src/components/common/test/ContentContainer.spec.tsx b/packages/zapp/console/src/components/common/test/ContentContainer.spec.tsx similarity index 100% rename from src/components/common/test/ContentContainer.spec.tsx rename to packages/zapp/console/src/components/common/test/ContentContainer.spec.tsx diff --git a/src/components/common/test/DataTable.test.tsx b/packages/zapp/console/src/components/common/test/DataTable.test.tsx similarity index 100% rename from src/components/common/test/DataTable.test.tsx rename to packages/zapp/console/src/components/common/test/DataTable.test.tsx diff --git a/src/components/common/test/DomainSettingsSection.test.tsx b/packages/zapp/console/src/components/common/test/DomainSettingsSection.test.tsx similarity index 100% rename from src/components/common/test/DomainSettingsSection.test.tsx rename to packages/zapp/console/src/components/common/test/DomainSettingsSection.test.tsx diff --git a/src/components/common/test/LoadingSpinner.test.tsx b/packages/zapp/console/src/components/common/test/LoadingSpinner.test.tsx similarity index 100% rename from src/components/common/test/LoadingSpinner.test.tsx rename to packages/zapp/console/src/components/common/test/LoadingSpinner.test.tsx diff --git a/src/components/common/test/MoreOptionsMenu.test.tsx b/packages/zapp/console/src/components/common/test/MoreOptionsMenu.test.tsx similarity index 100% rename from src/components/common/test/MoreOptionsMenu.test.tsx rename to packages/zapp/console/src/components/common/test/MoreOptionsMenu.test.tsx diff --git a/src/components/common/test/NewTargetLink.spec.tsx b/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx similarity index 100% rename from src/components/common/test/NewTargetLink.spec.tsx rename to packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx diff --git a/src/components/common/test/SearchableList.spec.tsx b/packages/zapp/console/src/components/common/test/SearchableList.spec.tsx similarity index 100% rename from src/components/common/test/SearchableList.spec.tsx rename to packages/zapp/console/src/components/common/test/SearchableList.spec.tsx diff --git a/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap b/packages/zapp/console/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap similarity index 100% rename from src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap rename to packages/zapp/console/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap diff --git a/src/components/common/types.ts b/packages/zapp/console/src/components/common/types.ts similarity index 100% rename from src/components/common/types.ts rename to packages/zapp/console/src/components/common/types.ts diff --git a/src/components/common/useLinkifiedChunks.ts b/packages/zapp/console/src/components/common/useLinkifiedChunks.ts similarity index 100% rename from src/components/common/useLinkifiedChunks.ts rename to packages/zapp/console/src/components/common/useLinkifiedChunks.ts diff --git a/src/components/common/useSearchableListState.ts b/packages/zapp/console/src/components/common/useSearchableListState.ts similarity index 100% rename from src/components/common/useSearchableListState.ts rename to packages/zapp/console/src/components/common/useSearchableListState.ts diff --git a/src/components/common/utils.ts b/packages/zapp/console/src/components/common/utils.ts similarity index 100% rename from src/components/common/utils.ts rename to packages/zapp/console/src/components/common/utils.ts diff --git a/src/components/common/withRouteParams.tsx b/packages/zapp/console/src/components/common/withRouteParams.tsx similarity index 100% rename from src/components/common/withRouteParams.tsx rename to packages/zapp/console/src/components/common/withRouteParams.tsx diff --git a/src/components/data/QueryAuthorizationObserver.tsx b/packages/zapp/console/src/components/data/QueryAuthorizationObserver.tsx similarity index 100% rename from src/components/data/QueryAuthorizationObserver.tsx rename to packages/zapp/console/src/components/data/QueryAuthorizationObserver.tsx diff --git a/src/components/data/__mocks__/apiContext.ts b/packages/zapp/console/src/components/data/__mocks__/apiContext.ts similarity index 100% rename from src/components/data/__mocks__/apiContext.ts rename to packages/zapp/console/src/components/data/__mocks__/apiContext.ts diff --git a/src/components/data/apiContext.ts b/packages/zapp/console/src/components/data/apiContext.ts similarity index 100% rename from src/components/data/apiContext.ts rename to packages/zapp/console/src/components/data/apiContext.ts diff --git a/src/components/data/queryCache.ts b/packages/zapp/console/src/components/data/queryCache.ts similarity index 100% rename from src/components/data/queryCache.ts rename to packages/zapp/console/src/components/data/queryCache.ts diff --git a/src/components/data/queryUtils.ts b/packages/zapp/console/src/components/data/queryUtils.ts similarity index 100% rename from src/components/data/queryUtils.ts rename to packages/zapp/console/src/components/data/queryUtils.ts diff --git a/src/components/data/test/queryUtils.test.ts b/packages/zapp/console/src/components/data/test/queryUtils.test.ts similarity index 100% rename from src/components/data/test/queryUtils.test.ts rename to packages/zapp/console/src/components/data/test/queryUtils.test.ts diff --git a/src/components/data/types.ts b/packages/zapp/console/src/components/data/types.ts similarity index 100% rename from src/components/data/types.ts rename to packages/zapp/console/src/components/data/types.ts diff --git a/src/components/data/utils.ts b/packages/zapp/console/src/components/data/utils.ts similarity index 100% rename from src/components/data/utils.ts rename to packages/zapp/console/src/components/data/utils.ts diff --git a/src/components/flytegraph/Arrowhead.tsx b/packages/zapp/console/src/components/flytegraph/Arrowhead.tsx similarity index 100% rename from src/components/flytegraph/Arrowhead.tsx rename to packages/zapp/console/src/components/flytegraph/Arrowhead.tsx diff --git a/src/components/flytegraph/DragAllowingClickHandler.ts b/packages/zapp/console/src/components/flytegraph/DragAllowingClickHandler.ts similarity index 100% rename from src/components/flytegraph/DragAllowingClickHandler.ts rename to packages/zapp/console/src/components/flytegraph/DragAllowingClickHandler.ts diff --git a/src/components/flytegraph/InteractiveViewBox.tsx b/packages/zapp/console/src/components/flytegraph/InteractiveViewBox.tsx similarity index 100% rename from src/components/flytegraph/InteractiveViewBox.tsx rename to packages/zapp/console/src/components/flytegraph/InteractiveViewBox.tsx diff --git a/src/components/flytegraph/Layout.tsx b/packages/zapp/console/src/components/flytegraph/Layout.tsx similarity index 100% rename from src/components/flytegraph/Layout.tsx rename to packages/zapp/console/src/components/flytegraph/Layout.tsx diff --git a/src/components/flytegraph/Node.tsx b/packages/zapp/console/src/components/flytegraph/Node.tsx similarity index 100% rename from src/components/flytegraph/Node.tsx rename to packages/zapp/console/src/components/flytegraph/Node.tsx diff --git a/src/components/flytegraph/NodeLink.tsx b/packages/zapp/console/src/components/flytegraph/NodeLink.tsx similarity index 100% rename from src/components/flytegraph/NodeLink.tsx rename to packages/zapp/console/src/components/flytegraph/NodeLink.tsx diff --git a/src/components/flytegraph/NodeText.tsx b/packages/zapp/console/src/components/flytegraph/NodeText.tsx similarity index 100% rename from src/components/flytegraph/NodeText.tsx rename to packages/zapp/console/src/components/flytegraph/NodeText.tsx diff --git a/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx similarity index 100% rename from src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx rename to packages/zapp/console/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx diff --git a/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx similarity index 100% rename from src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx rename to packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx diff --git a/src/components/flytegraph/ReactFlow/ReactFlowWrapper.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowWrapper.tsx similarity index 100% rename from src/components/flytegraph/ReactFlow/ReactFlowWrapper.tsx rename to packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowWrapper.tsx diff --git a/src/components/flytegraph/ReactFlow/customNodeComponents.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx similarity index 100% rename from src/components/flytegraph/ReactFlow/customNodeComponents.tsx rename to packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx diff --git a/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx similarity index 100% rename from src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx rename to packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx diff --git a/src/components/flytegraph/ReactFlow/types.ts b/packages/zapp/console/src/components/flytegraph/ReactFlow/types.ts similarity index 100% rename from src/components/flytegraph/ReactFlow/types.ts rename to packages/zapp/console/src/components/flytegraph/ReactFlow/types.ts diff --git a/src/components/flytegraph/ReactFlow/utils.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx similarity index 100% rename from src/components/flytegraph/ReactFlow/utils.tsx rename to packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx diff --git a/src/components/flytegraph/RenderedGraph.tsx b/packages/zapp/console/src/components/flytegraph/RenderedGraph.tsx similarity index 100% rename from src/components/flytegraph/RenderedGraph.tsx rename to packages/zapp/console/src/components/flytegraph/RenderedGraph.tsx diff --git a/src/components/flytegraph/__stories__/batchTasks.json b/packages/zapp/console/src/components/flytegraph/__stories__/batchTasks.json similarity index 100% rename from src/components/flytegraph/__stories__/batchTasks.json rename to packages/zapp/console/src/components/flytegraph/__stories__/batchTasks.json diff --git a/src/components/flytegraph/__stories__/largeGraph.json b/packages/zapp/console/src/components/flytegraph/__stories__/largeGraph.json similarity index 100% rename from src/components/flytegraph/__stories__/largeGraph.json rename to packages/zapp/console/src/components/flytegraph/__stories__/largeGraph.json diff --git a/src/components/flytegraph/__stories__/rich.json b/packages/zapp/console/src/components/flytegraph/__stories__/rich.json similarity index 100% rename from src/components/flytegraph/__stories__/rich.json rename to packages/zapp/console/src/components/flytegraph/__stories__/rich.json diff --git a/src/components/flytegraph/__stories__/simple.json b/packages/zapp/console/src/components/flytegraph/__stories__/simple.json similarity index 100% rename from src/components/flytegraph/__stories__/simple.json rename to packages/zapp/console/src/components/flytegraph/__stories__/simple.json diff --git a/src/components/flytegraph/constants.ts b/packages/zapp/console/src/components/flytegraph/constants.ts similarity index 100% rename from src/components/flytegraph/constants.ts rename to packages/zapp/console/src/components/flytegraph/constants.ts diff --git a/src/components/flytegraph/layoutUtils.ts b/packages/zapp/console/src/components/flytegraph/layoutUtils.ts similarity index 100% rename from src/components/flytegraph/layoutUtils.ts rename to packages/zapp/console/src/components/flytegraph/layoutUtils.ts diff --git a/src/components/flytegraph/theme.ts b/packages/zapp/console/src/components/flytegraph/theme.ts similarity index 100% rename from src/components/flytegraph/theme.ts rename to packages/zapp/console/src/components/flytegraph/theme.ts diff --git a/src/components/flytegraph/timer.ts b/packages/zapp/console/src/components/flytegraph/timer.ts similarity index 100% rename from src/components/flytegraph/timer.ts rename to packages/zapp/console/src/components/flytegraph/timer.ts diff --git a/src/components/flytegraph/types.ts b/packages/zapp/console/src/components/flytegraph/types.ts similarity index 100% rename from src/components/flytegraph/types.ts rename to packages/zapp/console/src/components/flytegraph/types.ts diff --git a/src/components/flytegraph/utils.ts b/packages/zapp/console/src/components/flytegraph/utils.ts similarity index 100% rename from src/components/flytegraph/utils.ts rename to packages/zapp/console/src/components/flytegraph/utils.ts diff --git a/src/components/hooks/__mocks__/fetchableData.ts b/packages/zapp/console/src/components/hooks/__mocks__/fetchableData.ts similarity index 100% rename from src/components/hooks/__mocks__/fetchableData.ts rename to packages/zapp/console/src/components/hooks/__mocks__/fetchableData.ts diff --git a/src/components/hooks/fetchMachine.ts b/packages/zapp/console/src/components/hooks/fetchMachine.ts similarity index 100% rename from src/components/hooks/fetchMachine.ts rename to packages/zapp/console/src/components/hooks/fetchMachine.ts diff --git a/src/components/hooks/test/useDebouncedValue.test.tsx b/packages/zapp/console/src/components/hooks/test/useDebouncedValue.test.tsx similarity index 100% rename from src/components/hooks/test/useDebouncedValue.test.tsx rename to packages/zapp/console/src/components/hooks/test/useDebouncedValue.test.tsx diff --git a/src/components/hooks/test/useFetchableData.test.tsx b/packages/zapp/console/src/components/hooks/test/useFetchableData.test.tsx similarity index 100% rename from src/components/hooks/test/useFetchableData.test.tsx rename to packages/zapp/console/src/components/hooks/test/useFetchableData.test.tsx diff --git a/src/components/hooks/test/usePagination.test.tsx b/packages/zapp/console/src/components/hooks/test/usePagination.test.tsx similarity index 100% rename from src/components/hooks/test/usePagination.test.tsx rename to packages/zapp/console/src/components/hooks/test/usePagination.test.tsx diff --git a/src/components/hooks/test/utils.test.ts b/packages/zapp/console/src/components/hooks/test/utils.test.ts similarity index 100% rename from src/components/hooks/test/utils.test.ts rename to packages/zapp/console/src/components/hooks/test/utils.test.ts diff --git a/src/components/hooks/types.ts b/packages/zapp/console/src/components/hooks/types.ts similarity index 100% rename from src/components/hooks/types.ts rename to packages/zapp/console/src/components/hooks/types.ts diff --git a/src/components/hooks/useChartState.ts b/packages/zapp/console/src/components/hooks/useChartState.ts similarity index 100% rename from src/components/hooks/useChartState.ts rename to packages/zapp/console/src/components/hooks/useChartState.ts diff --git a/src/components/hooks/useConditionalQuery.ts b/packages/zapp/console/src/components/hooks/useConditionalQuery.ts similarity index 100% rename from src/components/hooks/useConditionalQuery.ts rename to packages/zapp/console/src/components/hooks/useConditionalQuery.ts diff --git a/src/components/hooks/useDataRefresher.ts b/packages/zapp/console/src/components/hooks/useDataRefresher.ts similarity index 100% rename from src/components/hooks/useDataRefresher.ts rename to packages/zapp/console/src/components/hooks/useDataRefresher.ts diff --git a/src/components/hooks/useDebouncedValue.ts b/packages/zapp/console/src/components/hooks/useDebouncedValue.ts similarity index 100% rename from src/components/hooks/useDebouncedValue.ts rename to packages/zapp/console/src/components/hooks/useDebouncedValue.ts diff --git a/src/components/hooks/useDelayedValue.ts b/packages/zapp/console/src/components/hooks/useDelayedValue.ts similarity index 100% rename from src/components/hooks/useDelayedValue.ts rename to packages/zapp/console/src/components/hooks/useDelayedValue.ts diff --git a/src/components/hooks/useFetchableData.ts b/packages/zapp/console/src/components/hooks/useFetchableData.ts similarity index 100% rename from src/components/hooks/useFetchableData.ts rename to packages/zapp/console/src/components/hooks/useFetchableData.ts diff --git a/src/components/hooks/useLaunchPlans.ts b/packages/zapp/console/src/components/hooks/useLaunchPlans.ts similarity index 100% rename from src/components/hooks/useLaunchPlans.ts rename to packages/zapp/console/src/components/hooks/useLaunchPlans.ts diff --git a/src/components/hooks/useLocationState.ts b/packages/zapp/console/src/components/hooks/useLocationState.ts similarity index 100% rename from src/components/hooks/useLocationState.ts rename to packages/zapp/console/src/components/hooks/useLocationState.ts diff --git a/src/components/hooks/useNamedEntity.ts b/packages/zapp/console/src/components/hooks/useNamedEntity.ts similarity index 100% rename from src/components/hooks/useNamedEntity.ts rename to packages/zapp/console/src/components/hooks/useNamedEntity.ts diff --git a/src/components/hooks/useNodeExecution.ts b/packages/zapp/console/src/components/hooks/useNodeExecution.ts similarity index 100% rename from src/components/hooks/useNodeExecution.ts rename to packages/zapp/console/src/components/hooks/useNodeExecution.ts diff --git a/src/components/hooks/useOnlyMineSelectedValue.ts b/packages/zapp/console/src/components/hooks/useOnlyMineSelectedValue.ts similarity index 100% rename from src/components/hooks/useOnlyMineSelectedValue.ts rename to packages/zapp/console/src/components/hooks/useOnlyMineSelectedValue.ts diff --git a/src/components/hooks/usePagination.ts b/packages/zapp/console/src/components/hooks/usePagination.ts similarity index 100% rename from src/components/hooks/usePagination.ts rename to packages/zapp/console/src/components/hooks/usePagination.ts diff --git a/src/components/hooks/useProjects.ts b/packages/zapp/console/src/components/hooks/useProjects.ts similarity index 100% rename from src/components/hooks/useProjects.ts rename to packages/zapp/console/src/components/hooks/useProjects.ts diff --git a/src/components/hooks/useQueryState.ts b/packages/zapp/console/src/components/hooks/useQueryState.ts similarity index 100% rename from src/components/hooks/useQueryState.ts rename to packages/zapp/console/src/components/hooks/useQueryState.ts diff --git a/src/components/hooks/useTabState.ts b/packages/zapp/console/src/components/hooks/useTabState.ts similarity index 100% rename from src/components/hooks/useTabState.ts rename to packages/zapp/console/src/components/hooks/useTabState.ts diff --git a/src/components/hooks/useTask.ts b/packages/zapp/console/src/components/hooks/useTask.ts similarity index 100% rename from src/components/hooks/useTask.ts rename to packages/zapp/console/src/components/hooks/useTask.ts diff --git a/src/components/hooks/useTaskExecution.ts b/packages/zapp/console/src/components/hooks/useTaskExecution.ts similarity index 100% rename from src/components/hooks/useTaskExecution.ts rename to packages/zapp/console/src/components/hooks/useTaskExecution.ts diff --git a/src/components/hooks/useUserProfile.ts b/packages/zapp/console/src/components/hooks/useUserProfile.ts similarity index 100% rename from src/components/hooks/useUserProfile.ts rename to packages/zapp/console/src/components/hooks/useUserProfile.ts diff --git a/src/components/hooks/useVersion.ts b/packages/zapp/console/src/components/hooks/useVersion.ts similarity index 100% rename from src/components/hooks/useVersion.ts rename to packages/zapp/console/src/components/hooks/useVersion.ts diff --git a/src/components/hooks/useWorkflowExecutions.ts b/packages/zapp/console/src/components/hooks/useWorkflowExecutions.ts similarity index 100% rename from src/components/hooks/useWorkflowExecutions.ts rename to packages/zapp/console/src/components/hooks/useWorkflowExecutions.ts diff --git a/src/components/hooks/useWorkflowSchedules.ts b/packages/zapp/console/src/components/hooks/useWorkflowSchedules.ts similarity index 100% rename from src/components/hooks/useWorkflowSchedules.ts rename to packages/zapp/console/src/components/hooks/useWorkflowSchedules.ts diff --git a/src/components/hooks/useWorkflowVersions.ts b/packages/zapp/console/src/components/hooks/useWorkflowVersions.ts similarity index 100% rename from src/components/hooks/useWorkflowVersions.ts rename to packages/zapp/console/src/components/hooks/useWorkflowVersions.ts diff --git a/src/components/hooks/utils.ts b/packages/zapp/console/src/components/hooks/utils.ts similarity index 100% rename from src/components/hooks/utils.ts rename to packages/zapp/console/src/components/hooks/utils.ts diff --git a/src/config/types.ts b/packages/zapp/console/src/config/types.ts similarity index 100% rename from src/config/types.ts rename to packages/zapp/console/src/config/types.ts diff --git a/src/errors/fetchErrors.ts b/packages/zapp/console/src/errors/fetchErrors.ts similarity index 100% rename from src/errors/fetchErrors.ts rename to packages/zapp/console/src/errors/fetchErrors.ts diff --git a/src/errors/parameterErrors.ts b/packages/zapp/console/src/errors/parameterErrors.ts similarity index 100% rename from src/errors/parameterErrors.ts rename to packages/zapp/console/src/errors/parameterErrors.ts diff --git a/src/errors/protobufErrors.ts b/packages/zapp/console/src/errors/protobufErrors.ts similarity index 100% rename from src/errors/protobufErrors.ts rename to packages/zapp/console/src/errors/protobufErrors.ts diff --git a/src/errors/validationErrors.ts b/packages/zapp/console/src/errors/validationErrors.ts similarity index 100% rename from src/errors/validationErrors.ts rename to packages/zapp/console/src/errors/validationErrors.ts diff --git a/src/flyteidl/index.ts b/packages/zapp/console/src/flyteidl/index.ts similarity index 100% rename from src/flyteidl/index.ts rename to packages/zapp/console/src/flyteidl/index.ts diff --git a/src/mocks/createAdminServer.ts b/packages/zapp/console/src/mocks/createAdminServer.ts similarity index 100% rename from src/mocks/createAdminServer.ts rename to packages/zapp/console/src/mocks/createAdminServer.ts diff --git a/src/mocks/data/constants.ts b/packages/zapp/console/src/mocks/data/constants.ts similarity index 100% rename from src/mocks/data/constants.ts rename to packages/zapp/console/src/mocks/data/constants.ts diff --git a/src/mocks/data/fixtures/basicPythonWorkflow.ts b/packages/zapp/console/src/mocks/data/fixtures/basicPythonWorkflow.ts similarity index 100% rename from src/mocks/data/fixtures/basicPythonWorkflow.ts rename to packages/zapp/console/src/mocks/data/fixtures/basicPythonWorkflow.ts diff --git a/src/mocks/data/fixtures/dynamicExternalSubworkflow.ts b/packages/zapp/console/src/mocks/data/fixtures/dynamicExternalSubworkflow.ts similarity index 100% rename from src/mocks/data/fixtures/dynamicExternalSubworkflow.ts rename to packages/zapp/console/src/mocks/data/fixtures/dynamicExternalSubworkflow.ts diff --git a/src/mocks/data/fixtures/dynamicPythonWorkflow.ts b/packages/zapp/console/src/mocks/data/fixtures/dynamicPythonWorkflow.ts similarity index 100% rename from src/mocks/data/fixtures/dynamicPythonWorkflow.ts rename to packages/zapp/console/src/mocks/data/fixtures/dynamicPythonWorkflow.ts diff --git a/src/mocks/data/fixtures/oneFailedTaskWorkflow.ts b/packages/zapp/console/src/mocks/data/fixtures/oneFailedTaskWorkflow.ts similarity index 100% rename from src/mocks/data/fixtures/oneFailedTaskWorkflow.ts rename to packages/zapp/console/src/mocks/data/fixtures/oneFailedTaskWorkflow.ts diff --git a/src/mocks/data/fixtures/types.ts b/packages/zapp/console/src/mocks/data/fixtures/types.ts similarity index 100% rename from src/mocks/data/fixtures/types.ts rename to packages/zapp/console/src/mocks/data/fixtures/types.ts diff --git a/src/mocks/data/generators.ts b/packages/zapp/console/src/mocks/data/generators.ts similarity index 100% rename from src/mocks/data/generators.ts rename to packages/zapp/console/src/mocks/data/generators.ts diff --git a/src/mocks/data/insertFixture.ts b/packages/zapp/console/src/mocks/data/insertFixture.ts similarity index 100% rename from src/mocks/data/insertFixture.ts rename to packages/zapp/console/src/mocks/data/insertFixture.ts diff --git a/src/mocks/data/projects.ts b/packages/zapp/console/src/mocks/data/projects.ts similarity index 100% rename from src/mocks/data/projects.ts rename to packages/zapp/console/src/mocks/data/projects.ts diff --git a/src/mocks/data/utils.ts b/packages/zapp/console/src/mocks/data/utils.ts similarity index 100% rename from src/mocks/data/utils.ts rename to packages/zapp/console/src/mocks/data/utils.ts diff --git a/src/mocks/errors.ts b/packages/zapp/console/src/mocks/errors.ts similarity index 100% rename from src/mocks/errors.ts rename to packages/zapp/console/src/mocks/errors.ts diff --git a/src/mocks/insertDefaultData.ts b/packages/zapp/console/src/mocks/insertDefaultData.ts similarity index 100% rename from src/mocks/insertDefaultData.ts rename to packages/zapp/console/src/mocks/insertDefaultData.ts diff --git a/src/mocks/server.ts b/packages/zapp/console/src/mocks/server.ts similarity index 100% rename from src/mocks/server.ts rename to packages/zapp/console/src/mocks/server.ts diff --git a/src/mocks/utils.ts b/packages/zapp/console/src/mocks/utils.ts similarity index 100% rename from src/mocks/utils.ts rename to packages/zapp/console/src/mocks/utils.ts diff --git a/src/models/AdminEntity/AdminApiQuery.ts b/packages/zapp/console/src/models/AdminEntity/AdminApiQuery.ts similarity index 100% rename from src/models/AdminEntity/AdminApiQuery.ts rename to packages/zapp/console/src/models/AdminEntity/AdminApiQuery.ts diff --git a/src/models/AdminEntity/AdminEntity.ts b/packages/zapp/console/src/models/AdminEntity/AdminEntity.ts similarity index 100% rename from src/models/AdminEntity/AdminEntity.ts rename to packages/zapp/console/src/models/AdminEntity/AdminEntity.ts diff --git a/src/models/AdminEntity/constants.ts b/packages/zapp/console/src/models/AdminEntity/constants.ts similarity index 100% rename from src/models/AdminEntity/constants.ts rename to packages/zapp/console/src/models/AdminEntity/constants.ts diff --git a/src/models/AdminEntity/test/AdminApiQuery.spec.ts b/packages/zapp/console/src/models/AdminEntity/test/AdminApiQuery.spec.ts similarity index 100% rename from src/models/AdminEntity/test/AdminApiQuery.spec.ts rename to packages/zapp/console/src/models/AdminEntity/test/AdminApiQuery.spec.ts diff --git a/src/models/AdminEntity/test/AdminEntity.spec.ts b/packages/zapp/console/src/models/AdminEntity/test/AdminEntity.spec.ts similarity index 100% rename from src/models/AdminEntity/test/AdminEntity.spec.ts rename to packages/zapp/console/src/models/AdminEntity/test/AdminEntity.spec.ts diff --git a/src/models/AdminEntity/test/utils.spec.ts b/packages/zapp/console/src/models/AdminEntity/test/utils.spec.ts similarity index 100% rename from src/models/AdminEntity/test/utils.spec.ts rename to packages/zapp/console/src/models/AdminEntity/test/utils.spec.ts diff --git a/src/models/AdminEntity/transformRequestError.ts b/packages/zapp/console/src/models/AdminEntity/transformRequestError.ts similarity index 100% rename from src/models/AdminEntity/transformRequestError.ts rename to packages/zapp/console/src/models/AdminEntity/transformRequestError.ts diff --git a/src/models/AdminEntity/types.ts b/packages/zapp/console/src/models/AdminEntity/types.ts similarity index 100% rename from src/models/AdminEntity/types.ts rename to packages/zapp/console/src/models/AdminEntity/types.ts diff --git a/src/models/AdminEntity/utils.ts b/packages/zapp/console/src/models/AdminEntity/utils.ts similarity index 100% rename from src/models/AdminEntity/utils.ts rename to packages/zapp/console/src/models/AdminEntity/utils.ts diff --git a/src/models/Common/api.ts b/packages/zapp/console/src/models/Common/api.ts similarity index 100% rename from src/models/Common/api.ts rename to packages/zapp/console/src/models/Common/api.ts diff --git a/src/models/Common/constants.ts b/packages/zapp/console/src/models/Common/constants.ts similarity index 100% rename from src/models/Common/constants.ts rename to packages/zapp/console/src/models/Common/constants.ts diff --git a/src/models/Common/types.ts b/packages/zapp/console/src/models/Common/types.ts similarity index 100% rename from src/models/Common/types.ts rename to packages/zapp/console/src/models/Common/types.ts diff --git a/src/models/Common/utils.ts b/packages/zapp/console/src/models/Common/utils.ts similarity index 100% rename from src/models/Common/utils.ts rename to packages/zapp/console/src/models/Common/utils.ts diff --git a/src/models/Execution/__mocks__/constants.ts b/packages/zapp/console/src/models/Execution/__mocks__/constants.ts similarity index 100% rename from src/models/Execution/__mocks__/constants.ts rename to packages/zapp/console/src/models/Execution/__mocks__/constants.ts diff --git a/src/models/Execution/__mocks__/mockNodeExecutionsData.ts b/packages/zapp/console/src/models/Execution/__mocks__/mockNodeExecutionsData.ts similarity index 100% rename from src/models/Execution/__mocks__/mockNodeExecutionsData.ts rename to packages/zapp/console/src/models/Execution/__mocks__/mockNodeExecutionsData.ts diff --git a/src/models/Execution/__mocks__/mockTaskExecutionsData.ts b/packages/zapp/console/src/models/Execution/__mocks__/mockTaskExecutionsData.ts similarity index 100% rename from src/models/Execution/__mocks__/mockTaskExecutionsData.ts rename to packages/zapp/console/src/models/Execution/__mocks__/mockTaskExecutionsData.ts diff --git a/src/models/Execution/__mocks__/mockWorkflowExecutionsData.ts b/packages/zapp/console/src/models/Execution/__mocks__/mockWorkflowExecutionsData.ts similarity index 100% rename from src/models/Execution/__mocks__/mockWorkflowExecutionsData.ts rename to packages/zapp/console/src/models/Execution/__mocks__/mockWorkflowExecutionsData.ts diff --git a/src/models/Execution/__mocks__/sampleExecutionError.ts b/packages/zapp/console/src/models/Execution/__mocks__/sampleExecutionError.ts similarity index 100% rename from src/models/Execution/__mocks__/sampleExecutionError.ts rename to packages/zapp/console/src/models/Execution/__mocks__/sampleExecutionError.ts diff --git a/src/models/Execution/api.ts b/packages/zapp/console/src/models/Execution/api.ts similarity index 100% rename from src/models/Execution/api.ts rename to packages/zapp/console/src/models/Execution/api.ts diff --git a/src/models/Execution/constants.ts b/packages/zapp/console/src/models/Execution/constants.ts similarity index 100% rename from src/models/Execution/constants.ts rename to packages/zapp/console/src/models/Execution/constants.ts diff --git a/src/models/Execution/enums.ts b/packages/zapp/console/src/models/Execution/enums.ts similarity index 100% rename from src/models/Execution/enums.ts rename to packages/zapp/console/src/models/Execution/enums.ts diff --git a/src/models/Execution/types.ts b/packages/zapp/console/src/models/Execution/types.ts similarity index 100% rename from src/models/Execution/types.ts rename to packages/zapp/console/src/models/Execution/types.ts diff --git a/src/models/Execution/utils.ts b/packages/zapp/console/src/models/Execution/utils.ts similarity index 100% rename from src/models/Execution/utils.ts rename to packages/zapp/console/src/models/Execution/utils.ts diff --git a/src/models/Graph/convertFlyteGraphToDAG.ts b/packages/zapp/console/src/models/Graph/convertFlyteGraphToDAG.ts similarity index 100% rename from src/models/Graph/convertFlyteGraphToDAG.ts rename to packages/zapp/console/src/models/Graph/convertFlyteGraphToDAG.ts diff --git a/src/models/Graph/types.ts b/packages/zapp/console/src/models/Graph/types.ts similarity index 100% rename from src/models/Graph/types.ts rename to packages/zapp/console/src/models/Graph/types.ts diff --git a/src/models/Launch/api.ts b/packages/zapp/console/src/models/Launch/api.ts similarity index 100% rename from src/models/Launch/api.ts rename to packages/zapp/console/src/models/Launch/api.ts diff --git a/src/models/Launch/constants.ts b/packages/zapp/console/src/models/Launch/constants.ts similarity index 100% rename from src/models/Launch/constants.ts rename to packages/zapp/console/src/models/Launch/constants.ts diff --git a/src/models/Launch/types.ts b/packages/zapp/console/src/models/Launch/types.ts similarity index 100% rename from src/models/Launch/types.ts rename to packages/zapp/console/src/models/Launch/types.ts diff --git a/src/models/Launch/utils.ts b/packages/zapp/console/src/models/Launch/utils.ts similarity index 100% rename from src/models/Launch/utils.ts rename to packages/zapp/console/src/models/Launch/utils.ts diff --git a/src/models/Node/__mocks__/mockNodeData.ts b/packages/zapp/console/src/models/Node/__mocks__/mockNodeData.ts similarity index 100% rename from src/models/Node/__mocks__/mockNodeData.ts rename to packages/zapp/console/src/models/Node/__mocks__/mockNodeData.ts diff --git a/src/models/Node/constants.ts b/packages/zapp/console/src/models/Node/constants.ts similarity index 100% rename from src/models/Node/constants.ts rename to packages/zapp/console/src/models/Node/constants.ts diff --git a/src/models/Node/types.ts b/packages/zapp/console/src/models/Node/types.ts similarity index 100% rename from src/models/Node/types.ts rename to packages/zapp/console/src/models/Node/types.ts diff --git a/src/models/Project/api.ts b/packages/zapp/console/src/models/Project/api.ts similarity index 100% rename from src/models/Project/api.ts rename to packages/zapp/console/src/models/Project/api.ts diff --git a/src/models/Project/test/api.test.ts b/packages/zapp/console/src/models/Project/test/api.test.ts similarity index 100% rename from src/models/Project/test/api.test.ts rename to packages/zapp/console/src/models/Project/test/api.test.ts diff --git a/src/models/Project/types.ts b/packages/zapp/console/src/models/Project/types.ts similarity index 100% rename from src/models/Project/types.ts rename to packages/zapp/console/src/models/Project/types.ts diff --git a/src/models/Project/utils.ts b/packages/zapp/console/src/models/Project/utils.ts similarity index 100% rename from src/models/Project/utils.ts rename to packages/zapp/console/src/models/Project/utils.ts diff --git a/src/models/Task/__mocks__/mockTaskData.ts b/packages/zapp/console/src/models/Task/__mocks__/mockTaskData.ts similarity index 100% rename from src/models/Task/__mocks__/mockTaskData.ts rename to packages/zapp/console/src/models/Task/__mocks__/mockTaskData.ts diff --git a/src/models/Task/api.ts b/packages/zapp/console/src/models/Task/api.ts similarity index 100% rename from src/models/Task/api.ts rename to packages/zapp/console/src/models/Task/api.ts diff --git a/src/models/Task/constants.ts b/packages/zapp/console/src/models/Task/constants.ts similarity index 100% rename from src/models/Task/constants.ts rename to packages/zapp/console/src/models/Task/constants.ts diff --git a/src/models/Task/task.test.ts b/packages/zapp/console/src/models/Task/task.test.ts similarity index 100% rename from src/models/Task/task.test.ts rename to packages/zapp/console/src/models/Task/task.test.ts diff --git a/src/models/Task/types.ts b/packages/zapp/console/src/models/Task/types.ts similarity index 100% rename from src/models/Task/types.ts rename to packages/zapp/console/src/models/Task/types.ts diff --git a/src/models/Task/utils.ts b/packages/zapp/console/src/models/Task/utils.ts similarity index 100% rename from src/models/Task/utils.ts rename to packages/zapp/console/src/models/Task/utils.ts diff --git a/src/models/Workflow/api.ts b/packages/zapp/console/src/models/Workflow/api.ts similarity index 100% rename from src/models/Workflow/api.ts rename to packages/zapp/console/src/models/Workflow/api.ts diff --git a/src/models/Workflow/constants.ts b/packages/zapp/console/src/models/Workflow/constants.ts similarity index 100% rename from src/models/Workflow/constants.ts rename to packages/zapp/console/src/models/Workflow/constants.ts diff --git a/src/models/Workflow/types.ts b/packages/zapp/console/src/models/Workflow/types.ts similarity index 100% rename from src/models/Workflow/types.ts rename to packages/zapp/console/src/models/Workflow/types.ts diff --git a/src/models/Workflow/utils.ts b/packages/zapp/console/src/models/Workflow/utils.ts similarity index 100% rename from src/models/Workflow/utils.ts rename to packages/zapp/console/src/models/Workflow/utils.ts diff --git a/src/models/__mocks__/executionsData.ts b/packages/zapp/console/src/models/__mocks__/executionsData.ts similarity index 100% rename from src/models/__mocks__/executionsData.ts rename to packages/zapp/console/src/models/__mocks__/executionsData.ts diff --git a/src/models/__mocks__/graphWorkflowData.ts b/packages/zapp/console/src/models/__mocks__/graphWorkflowData.ts similarity index 100% rename from src/models/__mocks__/graphWorkflowData.ts rename to packages/zapp/console/src/models/__mocks__/graphWorkflowData.ts diff --git a/src/models/__mocks__/launchPlanData.ts b/packages/zapp/console/src/models/__mocks__/launchPlanData.ts similarity index 100% rename from src/models/__mocks__/launchPlanData.ts rename to packages/zapp/console/src/models/__mocks__/launchPlanData.ts diff --git a/src/models/__mocks__/projectData.ts b/packages/zapp/console/src/models/__mocks__/projectData.ts similarity index 100% rename from src/models/__mocks__/projectData.ts rename to packages/zapp/console/src/models/__mocks__/projectData.ts diff --git a/src/models/__mocks__/sampleTaskNames.ts b/packages/zapp/console/src/models/__mocks__/sampleTaskNames.ts similarity index 100% rename from src/models/__mocks__/sampleTaskNames.ts rename to packages/zapp/console/src/models/__mocks__/sampleTaskNames.ts diff --git a/src/models/__mocks__/sampleWorkflowNames.ts b/packages/zapp/console/src/models/__mocks__/sampleWorkflowNames.ts similarity index 100% rename from src/models/__mocks__/sampleWorkflowNames.ts rename to packages/zapp/console/src/models/__mocks__/sampleWorkflowNames.ts diff --git a/src/models/__mocks__/simpleTaskClosure.json b/packages/zapp/console/src/models/__mocks__/simpleTaskClosure.json similarity index 100% rename from src/models/__mocks__/simpleTaskClosure.json rename to packages/zapp/console/src/models/__mocks__/simpleTaskClosure.json diff --git a/src/models/__mocks__/simpleWorkflowClosure.json b/packages/zapp/console/src/models/__mocks__/simpleWorkflowClosure.json similarity index 100% rename from src/models/__mocks__/simpleWorkflowClosure.json rename to packages/zapp/console/src/models/__mocks__/simpleWorkflowClosure.json diff --git a/src/models/__mocks__/taskData.ts b/packages/zapp/console/src/models/__mocks__/taskData.ts similarity index 100% rename from src/models/__mocks__/taskData.ts rename to packages/zapp/console/src/models/__mocks__/taskData.ts diff --git a/src/models/__mocks__/workflowData.ts b/packages/zapp/console/src/models/__mocks__/workflowData.ts similarity index 100% rename from src/models/__mocks__/workflowData.ts rename to packages/zapp/console/src/models/__mocks__/workflowData.ts diff --git a/src/models/enums.ts b/packages/zapp/console/src/models/enums.ts similarity index 100% rename from src/models/enums.ts rename to packages/zapp/console/src/models/enums.ts diff --git a/src/protobuf.ts b/packages/zapp/console/src/protobuf.ts similarity index 100% rename from src/protobuf.ts rename to packages/zapp/console/src/protobuf.ts diff --git a/src/routes/ApplicationRouter.tsx b/packages/zapp/console/src/routes/ApplicationRouter.tsx similarity index 100% rename from src/routes/ApplicationRouter.tsx rename to packages/zapp/console/src/routes/ApplicationRouter.tsx diff --git a/src/routes/NavBarRouter.tsx b/packages/zapp/console/src/routes/NavBarRouter.tsx similarity index 100% rename from src/routes/NavBarRouter.tsx rename to packages/zapp/console/src/routes/NavBarRouter.tsx diff --git a/src/routes/components.ts b/packages/zapp/console/src/routes/components.ts similarity index 100% rename from src/routes/components.ts rename to packages/zapp/console/src/routes/components.ts diff --git a/src/routes/constants.ts b/packages/zapp/console/src/routes/constants.ts similarity index 100% rename from src/routes/constants.ts rename to packages/zapp/console/src/routes/constants.ts diff --git a/src/routes/history.ts b/packages/zapp/console/src/routes/history.ts similarity index 100% rename from src/routes/history.ts rename to packages/zapp/console/src/routes/history.ts diff --git a/src/routes/routes.ts b/packages/zapp/console/src/routes/routes.ts similarity index 100% rename from src/routes/routes.ts rename to packages/zapp/console/src/routes/routes.ts diff --git a/src/routes/types.ts b/packages/zapp/console/src/routes/types.ts similarity index 100% rename from src/routes/types.ts rename to packages/zapp/console/src/routes/types.ts diff --git a/src/routes/utils.ts b/packages/zapp/console/src/routes/utils.ts similarity index 100% rename from src/routes/utils.ts rename to packages/zapp/console/src/routes/utils.ts diff --git a/src/server.ts b/packages/zapp/console/src/server.ts similarity index 100% rename from src/server.ts rename to packages/zapp/console/src/server.ts diff --git a/src/test/modelUtils.ts b/packages/zapp/console/src/test/modelUtils.ts similarity index 100% rename from src/test/modelUtils.ts rename to packages/zapp/console/src/test/modelUtils.ts diff --git a/src/test/setupTests.ts b/packages/zapp/console/src/test/setupTests.ts similarity index 100% rename from src/test/setupTests.ts rename to packages/zapp/console/src/test/setupTests.ts diff --git a/src/test/utils.ts b/packages/zapp/console/src/test/utils.ts similarity index 100% rename from src/test/utils.ts rename to packages/zapp/console/src/test/utils.ts diff --git a/packages/zapp/console/src/tsd/contrast.d.ts b/packages/zapp/console/src/tsd/contrast.d.ts new file mode 100644 index 000000000..59a03da4c --- /dev/null +++ b/packages/zapp/console/src/tsd/contrast.d.ts @@ -0,0 +1,4 @@ +declare module 'contrast' { + export function contrast(hexColor: string): 'light' | 'dark'; + export = contrast; +} diff --git a/packages/zapp/console/src/tsd/d3-dag.d.ts b/packages/zapp/console/src/tsd/d3-dag.d.ts new file mode 100644 index 000000000..5da931a22 --- /dev/null +++ b/packages/zapp/console/src/tsd/d3-dag.d.ts @@ -0,0 +1,276 @@ +declare module 'd3-dag' { + export interface DierarchyLink { + /** + * The source of the link. + */ + source: DierarchyNode; + + /** + * The target of the link. + */ + target: DierarchyNode; + } + + export interface DierarchyNode { + /** + * The associated data, as specified to the constructor. + */ + data: Datum; + + /** + * Zero for the root node, and increasing by one for each descendant generation. + */ + readonly depth: number; + + /** + * Zero for leaf nodes, and the greatest distance from any descendant leaf for internal nodes. + */ + readonly height: number; + + /** + * The parent node, or null for the root node. + */ + parent: this | null; + + /** + * An array of child nodes, if any; undefined for leaf nodes. + */ + children?: this[]; + + /** + * Aggregated numeric value as calculated by `sum(value)` or `count()`, if previously invoked. + */ + readonly value?: number; + + /** + * Optional node id string set by `StratifyOperator`, if hierarchical data was created from tabular data using stratify(). + */ + readonly id?: string; + + /** + * Returns the array of ancestors nodes, starting with this node, then followed by each parent up to the root. + */ + ancestors(): this[]; + + /** + * Returns the array of descendant nodes, starting with this node, then followed by each child in topological order. + */ + descendants(): this[]; + + /** + * Returns the array of leaf nodes in traversal order; leaves are nodes with no children. + */ + leaves(): this[]; + + /** + * Returns the shortest path through the hierarchy from this node to the specified target node. + * The path starts at this node, ascends to the least common ancestor of this node and the target node, and then descends to the target node. + * + * @param target The target node. + */ + path(target: this): this[]; + + /** + * Returns an array of links for this node, where each link is an object that defines source and target properties. + * The source of each link is the parent node, and the target is a child node. + */ + links(): DierarchyLink[]; + + /** + * Evaluates the specified value function for this node and each descendant in post-order traversal, and returns this node. + * The `node.value` property of each node is set to the numeric value returned by the specified function plus the combined value of all descendants. + * + * @param value The value function is passed the node’s data, and must return a non-negative number. + */ + sum(value: (d: Datum) => number): this; + + /** + * Computes the number of leaves under this node and assigns it to `node.value`, and similarly for every descendant of node. + * If this node is a leaf, its count is one. Returns this node. + */ + count(): this; + + /** + * Sorts the children of this node, if any, and each of this node’s descendants’ children, + * in pre-order traversal using the specified compare function, and returns this node. + * + * @param compare The compare function is passed two nodes a and b to compare. + * If a should be before b, the function must return a value less than zero; + * if b should be before a, the function must return a value greater than zero; + * otherwise, the relative order of a and b are not specified. See `array.sort` for more. + */ + sort(compare: (a: this, b: this) => number): this; + + /** + * Invokes the specified function for node and each descendant in breadth-first order, + * such that a given node is only visited if all nodes of lesser depth have already been visited, + * as well as all preceding nodes of the same depth. + * + * @param func The specified function is passed the current node. + */ + each(func: (node: this) => void): this; + + /** + * Invokes the specified function for node and each descendant in post-order traversal, + * such that a given node is only visited after all of its descendants have already been visited. + * + * @param func The specified function is passed the current node. + */ + eachAfter(func: (node: this) => void): this; + + /** + * Invokes the specified function for node and each descendant in pre-order traversal, + * such that a given node is only visited after all of its ancestors have already been visited. + * + * @param func The specified function is passed the current node. + */ + eachBefore(func: (node: this) => void): this; + + /** + * Return a deep copy of the subtree starting at this node. The returned deep copy shares the same data, however. + * The returned node is the root of a new tree; the returned node’s parent is always null and its depth is always zero. + */ + copy(): this; + } + + export interface DierarchyPointLinkData { + points: { x: number; y: number }[]; + } + + export interface DierarchyPointLink { + data: DierarchyPointLinkData; + /** + * The source of the link. + */ + source: DierarchyPointNode; + + /** + * The target of the link. + */ + target: DierarchyPointNode; + } + + export interface DierarchyPointNode extends DierarchyNode { + /** + * The x-coordinate of the node. + */ + x: number; + + /** + * The y-coordinate of the node. + */ + y: number; + + /** + * Returns an array of links for this node, where each link is an object that defines source and target properties. + * The source of each link is the parent node, and the target is a child node. + */ + links(): DierarchyPointLink[]; + } + + /** + * Constructs a root node from the specified hierarchical data. + * + * @param data The root specified data. + * @param children The specified children accessor function invoked for each datum, starting with the root data. + * Must return an array of data representing the children, and return null or undefined if the current datum has no children. + * If children is not specified, it defaults to: `(d) => d.children`. + */ + export function dagHierarchy( + data: Datum, + children?: (d: Datum) => Datum[] | null | undefined, + ): DierarchyNode; + + // ----------------------------------------------------------------------- + // Dratify + // ----------------------------------------------------------------------- + + export interface DratifyOperator { + /** + * Generates a new hierarchy from the specified tabular data. Each node in the returned object has a shallow copy of the properties + * from the corresponding data object, excluding the following reserved properties: id, parentId, children. + * + * @param data The root specified data. + * @throws Error on missing id, ambiguous id, cycle, multiple roots or no root. + */ + (data: Datum[]): DierarchyNode; + + /** + * Returns the current id accessor, which defaults to: `(d) => d.id`. + */ + id(): (d: Datum, i: number, data: Datum[]) => string | null | '' | undefined; + /** + * Sets the id accessor to the given function. + * The id accessor is invoked for each element in the input data passed to the dratify operator. + * The returned string is then used to identify the node's relationships in conjunction with the parent id. + * For leaf nodes, the id may be undefined, null or the empty string; otherwise, the id must be unique. + * + * @param id The id accessor. + */ + id(id: (d: Datum, i: number, data: Datum[]) => string | null | '' | undefined): this; + + /** + * Returns the current parent id accessor, which defaults to: `(d) => d.parentId`. + */ + parentId(): (d: Datum, i: number, data: Datum[]) => string | null | '' | undefined; + /** + * Sets the parent id accessor to the given function. + * The parent id accessor is invoked for each element in the input data passed to the dratify operator. + * The returned string is then used to identify the node's relationships in conjunction with the id. + * For the root node, the parent id should be undefined, null or the empty string. + * There must be exactly one root node in the input data, and no circular relationships. + * + * @param parentId The parent id accessor. + */ + parentId( + parentId: (d: Datum, i: number, data: Datum[]) => string | null | '' | undefined, + ): this; + } + + /** + * Constructs a new dratify operator with the default settings. + */ + export function dagStratify(): DratifyOperator; + + export interface Decross { + (root: DierarchyNode): DierarchyPointNode; + } + + export type LayeringAccessor = (dag: any) => any; + export type DecrossAccessor = (layers: any) => any; + export type CoordAccessor = (layers: any) => any; + + export function decrossOpt(); + export function decrossTwoLayer(); + export function layeringCoffmanGraham(); + export function coordGreedy(); + export function coordVert(); + export function coordMinCurve(); + export function twolayerOpt(); + + export interface SugiyamaLayout { + (root: DierarchyNode): DierarchyPointNode; + + size(): [number, number] | null; + size(size: [number, number]): this; + + layering(): LayeringAccessor; + layering(layering: LayeringAccessor): this; + + decross(): DecrossAccessor; + decross(decross: DecrossAccessor): this; + + coord(): CoordAccessor; + coord(coord: CoordAccessor): this; + + separation(): (a: DierarchyPointNode, b: DierarchyPointNode) => number; + separation( + separation: (a: DierarchyPointNode, b: DierarchyPointNode) => number, + ): this; + } + + /** + * Creates a new Sugiyama layout with default settings. + */ + export function sugiyama(): SugiyamaLayout; +} diff --git a/src/tsd/globals.d.ts b/packages/zapp/console/src/tsd/globals.d.ts similarity index 85% rename from src/tsd/globals.d.ts rename to packages/zapp/console/src/tsd/globals.d.ts index 72fab2474..e81332e2b 100644 --- a/src/tsd/globals.d.ts +++ b/packages/zapp/console/src/tsd/globals.d.ts @@ -11,6 +11,5 @@ type Dictionary = { [k: string]: T }; type Fn = () => ReturnType; type Omit = Pick>; -type RequireFields = T & - { [K in FieldTypes]-?: NonNullable }; +type RequireFields = T & { [K in FieldTypes]-?: NonNullable }; type RequiredNonNullable = RequireFields; diff --git a/src/tsd/index.d.ts b/packages/zapp/console/src/tsd/index.d.ts similarity index 100% rename from src/tsd/index.d.ts rename to packages/zapp/console/src/tsd/index.d.ts diff --git a/packages/zapp/console/src/tsd/window.d.ts b/packages/zapp/console/src/tsd/window.d.ts new file mode 100644 index 000000000..e076d604c --- /dev/null +++ b/packages/zapp/console/src/tsd/window.d.ts @@ -0,0 +1,10 @@ +import { Env } from 'common/env'; + +declare global { + export interface Window { + __INITIAL_DATA__?: { + config?: Dictionary; + }; + env: Env; + } +} diff --git a/src/tsd/contrast.d.ts b/src/tsd/contrast.d.ts deleted file mode 100644 index 54a7c55ff..000000000 --- a/src/tsd/contrast.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'contrast' { - export function contrast(hexColor: string): 'light' | 'dark'; - export = contrast; -} diff --git a/src/tsd/d3-dag.d.ts b/src/tsd/d3-dag.d.ts deleted file mode 100644 index 8c20a4d5d..000000000 --- a/src/tsd/d3-dag.d.ts +++ /dev/null @@ -1,300 +0,0 @@ -declare module 'd3-dag' { - export interface DierarchyLink { - /** - * The source of the link. - */ - source: DierarchyNode; - - /** - * The target of the link. - */ - target: DierarchyNode; - } - - export interface DierarchyNode { - /** - * The associated data, as specified to the constructor. - */ - data: Datum; - - /** - * Zero for the root node, and increasing by one for each descendant generation. - */ - readonly depth: number; - - /** - * Zero for leaf nodes, and the greatest distance from any descendant leaf for internal nodes. - */ - readonly height: number; - - /** - * The parent node, or null for the root node. - */ - parent: this | null; - - /** - * An array of child nodes, if any; undefined for leaf nodes. - */ - children?: this[]; - - /** - * Aggregated numeric value as calculated by `sum(value)` or `count()`, if previously invoked. - */ - readonly value?: number; - - /** - * Optional node id string set by `StratifyOperator`, if hierarchical data was created from tabular data using stratify(). - */ - readonly id?: string; - - /** - * Returns the array of ancestors nodes, starting with this node, then followed by each parent up to the root. - */ - ancestors(): this[]; - - /** - * Returns the array of descendant nodes, starting with this node, then followed by each child in topological order. - */ - descendants(): this[]; - - /** - * Returns the array of leaf nodes in traversal order; leaves are nodes with no children. - */ - leaves(): this[]; - - /** - * Returns the shortest path through the hierarchy from this node to the specified target node. - * The path starts at this node, ascends to the least common ancestor of this node and the target node, and then descends to the target node. - * - * @param target The target node. - */ - path(target: this): this[]; - - /** - * Returns an array of links for this node, where each link is an object that defines source and target properties. - * The source of each link is the parent node, and the target is a child node. - */ - links(): DierarchyLink[]; - - /** - * Evaluates the specified value function for this node and each descendant in post-order traversal, and returns this node. - * The `node.value` property of each node is set to the numeric value returned by the specified function plus the combined value of all descendants. - * - * @param value The value function is passed the node’s data, and must return a non-negative number. - */ - sum(value: (d: Datum) => number): this; - - /** - * Computes the number of leaves under this node and assigns it to `node.value`, and similarly for every descendant of node. - * If this node is a leaf, its count is one. Returns this node. - */ - count(): this; - - /** - * Sorts the children of this node, if any, and each of this node’s descendants’ children, - * in pre-order traversal using the specified compare function, and returns this node. - * - * @param compare The compare function is passed two nodes a and b to compare. - * If a should be before b, the function must return a value less than zero; - * if b should be before a, the function must return a value greater than zero; - * otherwise, the relative order of a and b are not specified. See `array.sort` for more. - */ - sort(compare: (a: this, b: this) => number): this; - - /** - * Invokes the specified function for node and each descendant in breadth-first order, - * such that a given node is only visited if all nodes of lesser depth have already been visited, - * as well as all preceding nodes of the same depth. - * - * @param func The specified function is passed the current node. - */ - each(func: (node: this) => void): this; - - /** - * Invokes the specified function for node and each descendant in post-order traversal, - * such that a given node is only visited after all of its descendants have already been visited. - * - * @param func The specified function is passed the current node. - */ - eachAfter(func: (node: this) => void): this; - - /** - * Invokes the specified function for node and each descendant in pre-order traversal, - * such that a given node is only visited after all of its ancestors have already been visited. - * - * @param func The specified function is passed the current node. - */ - eachBefore(func: (node: this) => void): this; - - /** - * Return a deep copy of the subtree starting at this node. The returned deep copy shares the same data, however. - * The returned node is the root of a new tree; the returned node’s parent is always null and its depth is always zero. - */ - copy(): this; - } - - export interface DierarchyPointLinkData { - points: { x: number; y: number }[]; - } - - export interface DierarchyPointLink { - data: DierarchyPointLinkData; - /** - * The source of the link. - */ - source: DierarchyPointNode; - - /** - * The target of the link. - */ - target: DierarchyPointNode; - } - - export interface DierarchyPointNode extends DierarchyNode { - /** - * The x-coordinate of the node. - */ - x: number; - - /** - * The y-coordinate of the node. - */ - y: number; - - /** - * Returns an array of links for this node, where each link is an object that defines source and target properties. - * The source of each link is the parent node, and the target is a child node. - */ - links(): DierarchyPointLink[]; - } - - /** - * Constructs a root node from the specified hierarchical data. - * - * @param data The root specified data. - * @param children The specified children accessor function invoked for each datum, starting with the root data. - * Must return an array of data representing the children, and return null or undefined if the current datum has no children. - * If children is not specified, it defaults to: `(d) => d.children`. - */ - export function dagHierarchy( - data: Datum, - children?: (d: Datum) => Datum[] | null | undefined - ): DierarchyNode; - - // ----------------------------------------------------------------------- - // Dratify - // ----------------------------------------------------------------------- - - export interface DratifyOperator { - /** - * Generates a new hierarchy from the specified tabular data. Each node in the returned object has a shallow copy of the properties - * from the corresponding data object, excluding the following reserved properties: id, parentId, children. - * - * @param data The root specified data. - * @throws Error on missing id, ambiguous id, cycle, multiple roots or no root. - */ - (data: Datum[]): DierarchyNode; - - /** - * Returns the current id accessor, which defaults to: `(d) => d.id`. - */ - id(): ( - d: Datum, - i: number, - data: Datum[] - ) => string | null | '' | undefined; - /** - * Sets the id accessor to the given function. - * The id accessor is invoked for each element in the input data passed to the dratify operator. - * The returned string is then used to identify the node's relationships in conjunction with the parent id. - * For leaf nodes, the id may be undefined, null or the empty string; otherwise, the id must be unique. - * - * @param id The id accessor. - */ - id( - id: ( - d: Datum, - i: number, - data: Datum[] - ) => string | null | '' | undefined - ): this; - - /** - * Returns the current parent id accessor, which defaults to: `(d) => d.parentId`. - */ - parentId(): ( - d: Datum, - i: number, - data: Datum[] - ) => string | null | '' | undefined; - /** - * Sets the parent id accessor to the given function. - * The parent id accessor is invoked for each element in the input data passed to the dratify operator. - * The returned string is then used to identify the node's relationships in conjunction with the id. - * For the root node, the parent id should be undefined, null or the empty string. - * There must be exactly one root node in the input data, and no circular relationships. - * - * @param parentId The parent id accessor. - */ - parentId( - parentId: ( - d: Datum, - i: number, - data: Datum[] - ) => string | null | '' | undefined - ): this; - } - - /** - * Constructs a new dratify operator with the default settings. - */ - export function dagStratify(): DratifyOperator; - - export interface Decross { - (root: DierarchyNode): DierarchyPointNode; - } - - export type LayeringAccessor = (dag: any) => any; - export type DecrossAccessor = (layers: any) => any; - export type CoordAccessor = (layers: any) => any; - - export function decrossOpt(); - export function decrossTwoLayer(); - export function layeringCoffmanGraham(); - export function coordGreedy(); - export function coordVert(); - export function coordMinCurve(); - export function twolayerOpt(); - - export interface SugiyamaLayout { - (root: DierarchyNode): DierarchyPointNode; - - size(): [number, number] | null; - size(size: [number, number]): this; - - layering(): LayeringAccessor; - layering(layering: LayeringAccessor): this; - - decross(): DecrossAccessor; - decross(decross: DecrossAccessor): this; - - coord(): CoordAccessor; - coord(coord: CoordAccessor): this; - - separation(): ( - a: DierarchyPointNode, - b: DierarchyPointNode - ) => number; - separation( - separation: ( - a: DierarchyPointNode, - b: DierarchyPointNode - ) => number - ): this; - } - - /** - * Creates a new Sugiyama layout with default settings. - */ - export function sugiyama(): SugiyamaLayout; -} diff --git a/src/tsd/window.d.ts b/src/tsd/window.d.ts deleted file mode 100644 index b93473ff3..000000000 --- a/src/tsd/window.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Env } from 'common/env'; - -declare global { - export interface Window { - __INITIAL_DATA__?: { - config?: Dictionary; - }; - env: Env; - } -} From 0efd1df40b880eaee8d5cb79aa20fdbcad007d91 Mon Sep 17 00:00:00 2001 From: Nastya Rusina Date: Sun, 24 Apr 2022 16:22:24 -0700 Subject: [PATCH 02/93] ci: allow branch to be built again Signed-off-by: Nastya Rusina --- .storybook/StorybookContainer.tsx | 10 +- package.json | 11 +- env.js => packages/zapp/console/env.js | 0 index.js => packages/zapp/console/index.js | 4 +- packages/zapp/console/package.json | 211 ++++++++++++++++++ .../zapp/console/plugins.js | 0 packages/zapp/console/tsconfig.json | 54 +++++ .../zapp/console/webpack.common.config.ts | 0 .../zapp/console/webpack.dev.config.ts | 4 +- .../zapp/console/webpack.prod.config.ts | 0 tsconfig.base.json | 74 ++++++ tsconfig.json | 44 ++-- 12 files changed, 377 insertions(+), 35 deletions(-) rename env.js => packages/zapp/console/env.js (100%) rename index.js => packages/zapp/console/index.js (93%) create mode 100644 packages/zapp/console/package.json rename plugins.js => packages/zapp/console/plugins.js (100%) create mode 100644 packages/zapp/console/tsconfig.json rename webpack.common.config.ts => packages/zapp/console/webpack.common.config.ts (100%) rename webpack.dev.config.ts => packages/zapp/console/webpack.dev.config.ts (92%) rename webpack.prod.config.ts => packages/zapp/console/webpack.prod.config.ts (100%) create mode 100644 tsconfig.base.json diff --git a/.storybook/StorybookContainer.tsx b/.storybook/StorybookContainer.tsx index c463d4cb1..1dd105f82 100644 --- a/.storybook/StorybookContainer.tsx +++ b/.storybook/StorybookContainer.tsx @@ -6,11 +6,11 @@ import { QueryClientProvider } from 'react-query'; import { MemoryRouter } from 'react-router-dom'; import { SnackbarProvider } from 'notistack'; -import { ErrorBoundary } from '../src/components/common/ErrorBoundary'; -import { createQueryClient } from '../src/components/data/queryCache'; -import { muiTheme } from '../src/components/Theme/muiTheme'; -import { LocalCacheProvider } from '../src/basics/LocalCache/ContextProvider'; -import { FeatureFlagsProvider } from '../src/basics/FeatureFlags'; +import { ErrorBoundary } from '../packages/zapp/console/src/components/common/ErrorBoundary'; +import { createQueryClient } from '../packages/zapp/console/src/components/data/queryCache'; +import { muiTheme } from '../packages/zapp/console/src/components/Theme/muiTheme'; +import { LocalCacheProvider } from '../packages/zapp/console/src/basics/LocalCache/ContextProvider'; +import { FeatureFlagsProvider } from '../packages/zapp/console/src/basics/FeatureFlags'; const useStyles = makeStyles((theme: Theme) => ({ container: { diff --git a/package.json b/package.json index 035c8d20f..b5eb8268b 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,26 @@ { "name": "flyteconsole", "version": "1.0.0", + "private": true, "description": "The web UI for the Flyte platform", "repository": { "type": "git", "url": "http://github.com/lyft/flyteconsole.git" }, "main": "index.js", + "workspaces": [ + "packages/basics/**", + "packages/composites/**", + "packages/plugins/**", + "packages/zapp/**" + ], "scripts": { + "start": "yarn workspace @flyteconsole/client-app start", "clean": "rm -rf dist", "prebuild": "yarn run clean", "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.dev.config.ts --mode=development", "build:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' NODE_ENV=production webpack --config webpack.prod.config.ts --mode=production --progress", "build:storybook": "build-storybook", - "start": "webpack serve --open --config webpack.dev.config.ts --hot", "start:prod": "NODE_ENV=production node -r dotenv/config index.js", "storybook": "start-storybook -p 6006", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", @@ -208,4 +215,4 @@ "resolutions": { "micromatch": "^4.0.0" } -} +} \ No newline at end of file diff --git a/env.js b/packages/zapp/console/env.js similarity index 100% rename from env.js rename to packages/zapp/console/env.js diff --git a/index.js b/packages/zapp/console/index.js similarity index 93% rename from index.js rename to packages/zapp/console/index.js index 2f1fb0024..b38b1cb08 100644 --- a/index.js +++ b/packages/zapp/console/index.js @@ -42,8 +42,8 @@ const port = process.env.PORT || 3000; if (env.ADMIN_API_USE_SSL === 'https') { const fs = require('fs'); const https = require('https'); - var privateKey = fs.readFileSync('script/server.key'); - var certificate = fs.readFileSync('script/server.crt'); + var privateKey = fs.readFileSync('../../../script/server.key'); + var certificate = fs.readFileSync('../../../script/server.crt'); server = https .createServer( diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json new file mode 100644 index 000000000..cab0ccb85 --- /dev/null +++ b/packages/zapp/console/package.json @@ -0,0 +1,211 @@ +{ + "name": "@flyteconsole/client-app", + "version": "0.55.0", + "description": "The web UI for the Flyte platform", + "repository": { + "type": "git", + "url": "http://github.com/lyft/flyteconsole.git" + }, + "main": "index.js", + "scripts": { + "clean": "rm -rf dist", + "prebuild": "yarn run clean", + "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.dev.config.ts --mode=development", + "build:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' NODE_ENV=production webpack --config webpack.prod.config.ts --mode=production --progress", + "build:storybook": "build-storybook", + "start": "webpack serve --open --config webpack.dev.config.ts --hot", + "start:prod": "NODE_ENV=production node -r dotenv/config index.js", + "storybook": "start-storybook -p 6006", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "format": "prettier --ignore-path .eslintignore --write \"**/*.+(js|jsx|ts|tsx|json)\"", + "fix": "yarn lint --fix && yarn format", + "mockApi": "node ./mockApi", + "tdd": "yarn run test --watch --verbose false", + "test": "NODE_ENV=test jest --config=jest.config.js", + "test-coverage": "NODE_ENV=test jest --coverage --config=jest.config.js" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "keywords": [ + "react", + "lyft" + ], + "author": "Lyft ", + "license": "Apache-2.0", + "lint-staged": { + "*.{js,jsx,ts,tsx,json}": [ + "eslint --fix", + "prettier --write", + "git add" + ] + }, + "dependencies": { + "@rjsf/core": "^3.2.1", + "@rjsf/material-ui": "^3.2.1", + "babel-polyfill": "^6.26.0", + "cache": "^2.1.0", + "chalk": "^2.0.1", + "chart.js": "^3.6.2", + "chartjs-plugin-datalabels": "^2.0.0", + "cookie-parser": "^1.4.3", + "dagre-d3": "^0.6.4", + "dotenv": "^5.0.1", + "express": "^4.14.0", + "express-static-gzip": "^0.3.2", + "fuzzysort": "^1.1.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.21", + "morgan": "^1.8.2", + "react-chartjs-2": "^4.0.0", + "react-flow-renderer": "10.1.1", + "react-ga4": "^1.4.1", + "react-responsive": "^4.1.0", + "react-transition-group": "^2.3.1", + "serve-static": "^1.12.3", + "tslib": "^1.9.0" + }, + "devDependencies": { + "@babel/cli": "~7.16.0", + "@babel/core": "~7.16.12", + "@babel/plugin-proposal-class-properties": "~7.16.7", + "@babel/plugin-proposal-decorators": "~7.16.7", + "@babel/plugin-proposal-object-rest-spread": "~7.16.7", + "@babel/preset-env": "~7.16.11", + "@babel/preset-react": "~7.16.7", + "@babel/preset-typescript": "~7.16.7", + "@commitlint/cli": "^8.3.5", + "@commitlint/config-conventional": "^8.3.4", + "@date-io/moment": "1.3.9", + "@flyteorg/flyteidl": "0.24.11", + "@material-ui/core": "^4.0.0", + "@material-ui/icons": "^4.0.0", + "@material-ui/pickers": "^3.2.2", + "@semantic-release/changelog": "^5.0.1", + "@semantic-release/commit-analyzer": "^8.0.1", + "@semantic-release/git": "^9.0.0", + "@semantic-release/github": "^7.0.5", + "@semantic-release/npm": "^7.0.5", + "@semantic-release/release-notes-generator": "^9.0.1", + "@storybook/addon-actions": "^6.4.19", + "@storybook/addon-essentials": "^6.4.19", + "@storybook/addon-interactions": "^6.4.19", + "@storybook/addon-links": "^6.4.19", + "@storybook/builder-webpack5": "^6.4.19", + "@storybook/manager-webpack5": "^6.4.19", + "@storybook/react": "^6.4.19", + "@storybook/testing-library": "^0.0.9", + "@testing-library/jest-dom": "^5.5.0", + "@testing-library/react": "^10.0.3", + "@testing-library/react-hooks": "^7.0.2", + "@types/cheerio": "^0.22.2", + "@types/d3-shape": "^1.2.6", + "@types/debug": "^0.0.30", + "@types/dom-helpers": "^3.4.1", + "@types/express": "^4.17.2", + "@types/jest": "^26.0.0", + "@types/js-yaml": "^3.10.1", + "@types/linkify-it": "^2.1.0", + "@types/lodash": "^4.14.68", + "@types/long": "^3.0.32", + "@types/lossless-json": "^1.0.0", + "@types/memoize-one": "^4.1.0", + "@types/memory-fs": "^0.3.0", + "@types/moment-timezone": "^0.5.13", + "@types/node": "^14.18.12", + "@types/object-hash": "^1.2.0", + "@types/pure-render-decorator": "^0.2.27", + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "@types/react-hot-loader": "^3.0.3", + "@types/react-json-tree": "^0.6.8", + "@types/react-responsive": "^3.0.1", + "@types/react-router-dom": "^4.3.2", + "@types/react-test-renderer": "^16.9.0", + "@types/react-virtualized": "^9.21.4", + "@types/serve-static": "^1.7.31", + "@types/shallowequal": "^0.2.3", + "@types/webpack-hot-middleware": "^2.25.6", + "@typescript-eslint/eslint-plugin": "^5.15.0", + "@typescript-eslint/parser": "^5.15.0", + "@xstate/react": "^1.0.0", + "autoprefixer": "^8.3.0", + "axios": "^0.21.2", + "axios-mock-adapter": "^1.16.0", + "babel-core": "^7.0.0-0", + "babel-jest": "^26.0.0", + "babel-loader": "^8.2.3", + "camelcase-keys": "^6.1.1", + "classnames": "^2.3.1", + "compression-webpack-plugin": "^9.2.0", + "contrast": "^1.0.1", + "copy-to-clipboard": "^3.0.8", + "cronstrue": "^1.31.0", + "d3-dag": "^0.3.4", + "d3-shape": "^1.2.2", + "debug": "^3.1.0", + "dom-helpers": "^3.4.0", + "eslint": "^8.11.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.3.0", + "favicons": "^6.2.0", + "favicons-webpack-plugin": "^5.0.2", + "fork-ts-checker-webpack-plugin": "^7.2.1", + "html-webpack-plugin": "^5.5.0", + "husky": "^4.2.5", + "intersection-observer": "^0.7.0", + "jest": "^26.0.0", + "linkify-it": "^2.2.0", + "lint-staged": "^7.0.4", + "lossless-json": "^1.0.3", + "memoize-one": "^5.0.0", + "moment": "^2.29.2", + "moment-timezone": "^0.5.28", + "msw": "^0.24.1", + "notistack": "^1.0.10", + "object-hash": "^1.3.1", + "prettier": "^2.5.1", + "protobufjs": "~6.8.0", + "query-string": "^6.5.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-hot-loader": "^4.1.2", + "react-intersection-observer": "^8.25.1", + "react-json-tree": "^0.11.0", + "react-loading-skeleton": "^1.1.2", + "react-query": "^3.3.0", + "react-query-devtools": "^3.0.0-beta", + "react-router": "^5.0.1", + "react-router-dom": "^5.0.1", + "react-test-renderer": "^16.9.0", + "react-virtualized": "^9.21.1", + "resolve-url-loader": "^5.0.0", + "semantic-release": "^17.2.3", + "shallowequal": "^1.1.0", + "snakecase-keys": "^3.1.0", + "source-map-loader": "^3.0.1", + "ts-jest": "^26.3.0", + "ts-loader": "^9.2.6", + "ts-node": "^8.0.2", + "typescript": "^4.6.2", + "url-search-params": "^0.10.0", + "use-react-router": "^1.0.7", + "webpack": "^5.68.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.8.1", + "webpack-merge": "^5.8.0", + "webpack-node-externals": "^3.0.0", + "webpack-stats-plugin": "^1.0.3", + "xstate": "^4.11.0" + }, + "resolutions": { + "micromatch": "^4.0.0" + } +} diff --git a/plugins.js b/packages/zapp/console/plugins.js similarity index 100% rename from plugins.js rename to packages/zapp/console/plugins.js diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json new file mode 100644 index 000000000..65803e53a --- /dev/null +++ b/packages/zapp/console/tsconfig.json @@ -0,0 +1,54 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "allowJs": true, + "baseUrl": "src", + "checkJs": false, + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "jsx": "react", + "lib": ["es6", "es2021", "dom", "dom.iterable"], + "module": "commonjs", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "outDir": "./dist", + "removeComments": false, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "es6", + "types": ["node", "webpack-env", "jest"], + + "composite": true, + "paths": { + "@flyteconsole/*": ["../../plugins/*/src", "../../zapp/*/src"] + } + }, + "references": [{ "path": "../../plugins/components" }], + // "extends": "../../../tsconfig.base.json", + // "compilerOptions": { + // "rootDir": "./src", + // "outDir": "./dist" + // }, + // "references": [{ "path": "../../plugins/components" }], + "include": ["src/**/*"], + "exclude": [ + "**/__mocks__", + "**/test", + "**/mocks", + // baseline + "**/node_modules", + "**/dist", + "**/lib", + "**/src/**/*.spec.*", + "**/src/**/*.test.*", + "**/src/**/*.stories.*" + ] +} diff --git a/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts similarity index 100% rename from webpack.common.config.ts rename to packages/zapp/console/webpack.common.config.ts diff --git a/webpack.dev.config.ts b/packages/zapp/console/webpack.dev.config.ts similarity index 92% rename from webpack.dev.config.ts rename to packages/zapp/console/webpack.dev.config.ts index 0de90939c..0b8a9eee3 100644 --- a/webpack.dev.config.ts +++ b/packages/zapp/console/webpack.dev.config.ts @@ -27,8 +27,8 @@ export const clientConfig: webpack.Configuration = merge(common.default.clientCo server: { type: 'https', options: { - key: fs.readFileSync('script/server.key'), - cert: fs.readFileSync('script/server.crt'), + key: fs.readFileSync('../../../script/server.key'), + cert: fs.readFileSync('../../../script/server.crt'), }, }, client: { diff --git a/webpack.prod.config.ts b/packages/zapp/console/webpack.prod.config.ts similarity index 100% rename from webpack.prod.config.ts rename to packages/zapp/console/webpack.prod.config.ts diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..5fdc68779 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,74 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "allowJs": true, + "checkJs": false, + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "jsx": "react", + "lib": ["es6", "es2021", "dom", "dom.iterable"], + "module": "commonjs", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "outDir": "./dist", + "removeComments": false, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "es6", + "types": ["node", "webpack-env", "jest"], + + // "lib": ["dom", "dom.iterable", "es2018"], + // "jsx": "react", + // "target": "esnext", + // "module": "commonjs", + // "moduleResolution": "node", + + // "allowJs": false, + // "allowUnreachableCode": false, + // "esModuleInterop": true, + // "strict": true, + // "isolatedModules": true, + // "declaration": true, + // "noUnusedLocals": true, + // "noUnusedParameters": true, + // "noImplicitReturns": true, + // "noImplicitThis": true, + // "noImplicitAny": true, + // "importHelpers": true, + // "declarationMap": true, + // "useDefineForClassFields": true, + // "useUnknownInCatchVariables": false, + // "resolveJsonModule": true, + // "experimentalDecorators": true, + // "skipLibCheck": true, + + // // More strict + // "exactOptionalPropertyTypes": false, // true, + // "noUncheckedIndexedAccess": false, + // "noFallthroughCasesInSwitch": true, + // "noPropertyAccessFromIndexSignature": false, + // "noImplicitOverride": true, + + "sourceMap": true, + "composite": true, + "baseUrl": ".", + "paths": { + "@flyteconsole/*": ["./packages/components/*/src", "./packages/zapp/*/src"] + } + }, + "exclude": [ + "**/node_modules", + "**/dist", + "**/lib", + "**/src/**/*.spec.*", + "**/src/**/*.test.*", + "**/src/**/*.stories.*" + ] +} diff --git a/tsconfig.json b/tsconfig.json index 0b9c46c84..86e5cff6b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,25 @@ { + "files": [], + "include": [], "compilerOptions": { - "allowSyntheticDefaultImports": true, - "allowJs": true, - "baseUrl": "src", - "checkJs": false, - "downlevelIteration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, + // compilerOptions here used for jest setup only - + // all packages are using tsconfig.base.json as a baseline "jsx": "react", - "lib": ["es6", "es2021", "dom", "dom.iterable"], - "module": "commonjs", + "lib": ["dom", "esnext"], + "module": "esnext", "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": false, - "noUnusedLocals": false, - "noUnusedParameters": false, - "outDir": "./dist", - "removeComments": false, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "target": "es6", - "types": ["node", "webpack-env", "jest"] - } + "esModuleInterop": true, + "baseUrl": "./", + "paths": { + "@flyteconsole/*": [ + "./packages/components/*/src", + "./packages/plugins/*/src", + "./packages/zapp/*/src" + ] + } + }, + "references": [ + { "path": "./packages/plugins/components" }, + { "path": "./packages/zapp/console" } + ] } From b49fed5ab51ee919675722a31cccb4a628c0ac17 Mon Sep 17 00:00:00 2001 From: Nastya Rusina Date: Sun, 24 Apr 2022 17:22:52 -0700 Subject: [PATCH 03/93] chore: replace link to github repository to a proper one Signed-off-by: Nastya Rusina --- .storybook/main.js | 4 ++-- Dockerfile | 4 ++-- .../NodeExecutionDetails/createExecutionArray.tsx | 2 +- .../src/components/Launch/LaunchForm/LaunchTaskForm.tsx | 2 +- .../console/src/components/common/test/NewTargetLink.spec.tsx | 2 +- packages/zapp/console/src/components/hooks/utils.ts | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.storybook/main.js b/.storybook/main.js index ed3e03ce5..ea43675e3 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -2,7 +2,7 @@ module.exports = { core: { builder: 'webpack5', }, - stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + stories: ['../packages/**/*.stories.@(js|jsx|ts|tsx|mdx)'], addons: [ '@storybook/addon-links', '@storybook/addon-essentials', @@ -10,7 +10,7 @@ module.exports = { ], framework: '@storybook/react', webpackFinal: async (config, { configType }) => { - config.resolve.modules = ['src', 'node_modules']; + config.resolve.modules = ['packages/zapp/console/src', 'node_modules']; config.module.rules = [ ...config.module.rules, { diff --git a/Dockerfile b/Dockerfile index 10bff339a..833f3d75b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM node:16 as builder -LABEL org.opencontainers.image.source https://github.com/lyft/flyteconsole +LABEL org.opencontainers.image.source https://github.com/flyteorg/flyteconsole WORKDIR /code/flyteconsole COPY package*.json yarn.lock ./ @@ -20,7 +20,7 @@ RUN : \ && mv dist index.js env.js plugins.js /app FROM gcr.io/distroless/nodejs -LABEL org.opencontainers.image.source https://github.com/lyft/flyteconsole +LABEL org.opencontainers.image.source https://github.com/flyteorg/flyteconsole COPY --from=builder /app app WORKDIR /app diff --git a/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx b/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx index ef4a29f40..a7247693a 100644 --- a/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx +++ b/packages/zapp/console/src/components/Executions/contextProvider/NodeExecutionDetails/createExecutionArray.tsx @@ -60,7 +60,7 @@ const getNodeDetails = (node: dNode, tasks: CompiledTask[]): NodeExecutionInfo = }; } - // TODO: https://github.com/lyft/flyte/issues/655 + // TODO: https://github.com/flyteorg/flyteconsole/issues/274 if (node.value.branchNode) { return { scopedId: node.scopedId, diff --git a/packages/zapp/console/src/components/Launch/LaunchForm/LaunchTaskForm.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchTaskForm.tsx index a280544fa..6e5721bab 100644 --- a/packages/zapp/console/src/components/Launch/LaunchForm/LaunchTaskForm.tsx +++ b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchTaskForm.tsx @@ -44,7 +44,7 @@ export const LaunchTaskForm: React.FC = (props) => { // TODO: We removed all loading indicators here. Decide if we want skeletons // instead. - // https://github.com/lyft/flyte/issues/666 + // https://github.com/flyteorg/flyteconsole/issues/422 return ( <> diff --git a/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx b/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx index f4963da55..319200494 100644 --- a/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx +++ b/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx @@ -2,7 +2,7 @@ import { render } from '@testing-library/react'; import * as React from 'react'; import { NewTargetLink } from '../NewTargetLink'; -const linkTarget = 'https://www.github.com/lyft/flyteconsole'; +const linkTarget = 'https://github.com/flyteorg/flyteconsole'; const linkText = 'open in new page'; const renderLink = () => render({linkText}); diff --git a/packages/zapp/console/src/components/hooks/utils.ts b/packages/zapp/console/src/components/hooks/utils.ts index 3c6595621..1ae6b7348 100644 --- a/packages/zapp/console/src/components/hooks/utils.ts +++ b/packages/zapp/console/src/components/hooks/utils.ts @@ -30,7 +30,7 @@ export function extractAndIdentifyNodes(workflow: Workflow): GloballyUniqueNode[ // When we are rendering sub-workflow nodes correctly, this should // be updated to use the proper parent workflow id // (subWorkflow.template.id) - // See https://github.com/lyft/flyte/issues/357 + // See https://github.com/flyteorg/flyte/issues/357 workflowId: workflow.id, }, })); From 9503a4c8b2f33b202e70b76822506e6bb7128f08 Mon Sep 17 00:00:00 2001 From: Nastya Rusina Date: Sun, 24 Apr 2022 19:45:28 -0700 Subject: [PATCH 04/93] ci: basic test and test-coverage setup Signed-off-by: Nastya Rusina --- package.json | 17 ++-------- .../zapp/console/assetsTransformer.js | 0 .../zapp/console/jest.config.js | 31 ++++++++----------- packages/zapp/console/package.json | 20 +++--------- .../Project/test/ProjectDashboard.test.tsx | 31 ++++++++++--------- packages/zapp/console/tsconfig.json | 2 +- tsconfig.json | 6 +--- 7 files changed, 37 insertions(+), 70 deletions(-) rename assetsTransformer.js => packages/zapp/console/assetsTransformer.js (100%) rename jest.config.js => packages/zapp/console/jest.config.js (73%) diff --git a/package.json b/package.json index b5eb8268b..5c86fcbbd 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "The web UI for the Flyte platform", "repository": { "type": "git", - "url": "http://github.com/lyft/flyteconsole.git" + "url": "https://github.com/flyteorg/flyteconsole" }, "main": "index.js", "workspaces": [ @@ -16,20 +16,7 @@ ], "scripts": { "start": "yarn workspace @flyteconsole/client-app start", - "clean": "rm -rf dist", - "prebuild": "yarn run clean", - "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.dev.config.ts --mode=development", - "build:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' NODE_ENV=production webpack --config webpack.prod.config.ts --mode=production --progress", - "build:storybook": "build-storybook", - "start:prod": "NODE_ENV=production node -r dotenv/config index.js", - "storybook": "start-storybook -p 6006", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx", - "format": "prettier --ignore-path .eslintignore --write \"**/*.+(js|jsx|ts|tsx|json)\"", - "fix": "yarn lint --fix && yarn format", - "mockApi": "node ./mockApi", - "tdd": "yarn run test --watch --verbose false", - "test": "NODE_ENV=test jest --config=jest.config.js", - "test-coverage": "NODE_ENV=test jest --coverage --config=jest.config.js" + "storybook": "start-storybook -p 6006" }, "husky": { "hooks": { diff --git a/assetsTransformer.js b/packages/zapp/console/assetsTransformer.js similarity index 100% rename from assetsTransformer.js rename to packages/zapp/console/assetsTransformer.js diff --git a/jest.config.js b/packages/zapp/console/jest.config.js similarity index 73% rename from jest.config.js rename to packages/zapp/console/jest.config.js index fb18e6794..f04f9c7ba 100644 --- a/jest.config.js +++ b/packages/zapp/console/jest.config.js @@ -1,29 +1,28 @@ module.exports = { - globals: { - 'ts-jest': { - babelConfig: true, - }, - }, + preset: 'ts-jest', + testEnvironment: 'jsdom', + testPathIgnorePatterns: ['__stories__', '.storybook', 'node_modules', 'dist', 'build'], + setupFilesAfterEnv: ['/src/test/setupTests.ts'], + clearMocks: true, verbose: false, + moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'node'], modulePaths: ['/src'], roots: ['/src'], - testPathIgnorePatterns: [ - '__stories__', - '/.storybook', - '/node_modules', - '/dist', - '/build', - ], + transformIgnorePatterns: ['/node_modules/(?!@flyteorg/flyteidl)', 'protobufjs/minimal'], transform: { '^.+\\.(j|t)sx?$': 'ts-jest', }, - transformIgnorePatterns: ['/node_modules/(?!@flyteorg/flyteidl)'], moduleNameMapper: { + '@flyteconsole/(.*)': [ + '/../../../packages/plugins/$1/src', + '/../../../packages/zapp/$1/src', + ], '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/assetsTransformer.js', }, - coverageDirectory: '.coverage', + + coverageDirectory: '../../../.coverage', collectCoverageFrom: ['**/*.{ts,tsx}', '!**/*/*.stories.{ts,tsx}', '!**/*/*.mocks.{ts,tsx}'], coveragePathIgnorePatterns: [ '__stories__', @@ -38,8 +37,4 @@ module.exports = { '\\.config.js$', ], coverageReporters: ['text', 'json', 'html'], - clearMocks: true, - setupFiles: ['/node_modules/regenerator-runtime/runtime'], - setupFilesAfterEnv: ['/src/test/setupTests.ts'], - preset: 'ts-jest', }; diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index cab0ccb85..01b6d8c51 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -4,7 +4,7 @@ "description": "The web UI for the Flyte platform", "repository": { "type": "git", - "url": "http://github.com/lyft/flyteconsole.git" + "url": "https://github.com/flyteorg/flyteconsole" }, "main": "index.js", "scripts": { @@ -15,7 +15,7 @@ "build:storybook": "build-storybook", "start": "webpack serve --open --config webpack.dev.config.ts --hot", "start:prod": "NODE_ENV=production node -r dotenv/config index.js", - "storybook": "start-storybook -p 6006", + "storybook": "pushd ../../../ && start-storybook -p 6006 && popd", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "format": "prettier --ignore-path .eslintignore --write \"**/*.+(js|jsx|ts|tsx|json)\"", "fix": "yarn lint --fix && yarn format", @@ -24,25 +24,13 @@ "test": "NODE_ENV=test jest --config=jest.config.js", "test-coverage": "NODE_ENV=test jest --coverage --config=jest.config.js" }, - "husky": { - "hooks": { - "pre-commit": "lint-staged", - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" - } - }, "keywords": [ "react", - "lyft" + "flyte", + "flyteconsole" ], "author": "Lyft ", "license": "Apache-2.0", - "lint-staged": { - "*.{js,jsx,ts,tsx,json}": [ - "eslint --fix", - "prettier --write", - "git add" - ] - }, "dependencies": { "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", diff --git a/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx index f34bdc20d..fe4af21af 100644 --- a/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx +++ b/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx @@ -28,22 +28,23 @@ jest.mock('notistack', () => ({ useSnackbar: () => ({ enqueueSnackbar: jest.fn() }), })); -const projectDomainAttributesMock: Admin.ProjectDomainAttributesDeleteResponse = { - attributes: { - matchingAttributes: { - workflowExecutionConfig: { - maxParallelism: 5, - securityContext: { runAs: { k8sServiceAccount: 'default' } }, - rawOutputDataConfig: { outputLocationPrefix: 'cliOutputLocationPrefix' }, - annotations: { values: { cliAnnotationKey: 'cliAnnotationValue' } }, - labels: { values: { cliLabelKey: 'cliLabelValue' } }, - }, - }, - }, -}; - jest.mock('models/Project/api', () => ({ - getProjectDomainAttributes: jest.fn().mockResolvedValue(projectDomainAttributesMock), + getProjectDomainAttributes: jest.fn().mockResolvedValue(() => { + const projectDomainAttributesMock: Admin.ProjectDomainAttributesDeleteResponse = { + attributes: { + matchingAttributes: { + workflowExecutionConfig: { + maxParallelism: 5, + securityContext: { runAs: { k8sServiceAccount: 'default' } }, + rawOutputDataConfig: { outputLocationPrefix: 'cliOutputLocationPrefix' }, + annotations: { values: { cliAnnotationKey: 'cliAnnotationValue' } }, + labels: { values: { cliLabelKey: 'cliLabelValue' } }, + }, + }, + }, + }; + return projectDomainAttributesMock; + }), })); describe('ProjectDashboard', () => { diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index 65803e53a..de7682390 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -24,7 +24,7 @@ "sourceMap": true, "strict": true, "target": "es6", - "types": ["node", "webpack-env", "jest"], + "types": ["node", "webpack-env", "jest", "@testing-library/jest-dom"], "composite": true, "paths": { diff --git a/tsconfig.json b/tsconfig.json index 86e5cff6b..596c9ccd1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,11 +11,7 @@ "esModuleInterop": true, "baseUrl": "./", "paths": { - "@flyteconsole/*": [ - "./packages/components/*/src", - "./packages/plugins/*/src", - "./packages/zapp/*/src" - ] + "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] } }, "references": [ From 3091c4b402c06bc08ffd9306c73cb9fe815ac23e Mon Sep 17 00:00:00 2001 From: Nastya Rusina Date: Sun, 24 Apr 2022 20:09:52 -0700 Subject: [PATCH 05/93] chore: add first plugin package Signed-off-by: Nastya Rusina --- .gitignore | 1 + packages/plugins/components/README.md | 1 + packages/plugins/components/package.json | 32 ++++++++++++++ .../components/src/NavBar/defaultContent.tsx | 44 +++++++++++++++++++ .../plugins/components/src/NavBar/index.tsx | 40 +++++++++++++++++ .../components/src/NavBar/navbar.stories.tsx | 34 ++++++++++++++ .../components/src/NavBar/navbar.test.tsx | 16 +++++++ packages/plugins/components/src/index.ts | 1 + packages/plugins/components/tsconfig.json | 8 ++++ .../zapp/console/src/routes/NavBarRouter.tsx | 2 + packages/zapp/console/tsconfig.json | 2 +- .../zapp/console/webpack.common.config.ts | 6 ++- tsconfig.base.json | 2 +- yarn.lock | 41 +++++++++++++++++ 14 files changed, 227 insertions(+), 3 deletions(-) create mode 100644 packages/plugins/components/README.md create mode 100644 packages/plugins/components/package.json create mode 100644 packages/plugins/components/src/NavBar/defaultContent.tsx create mode 100644 packages/plugins/components/src/NavBar/index.tsx create mode 100644 packages/plugins/components/src/NavBar/navbar.stories.tsx create mode 100644 packages/plugins/components/src/NavBar/navbar.test.tsx create mode 100644 packages/plugins/components/src/index.ts create mode 100644 packages/plugins/components/tsconfig.json diff --git a/.gitignore b/.gitignore index a85dbc65f..5ec5d3f89 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ app/public/styles/*.css .idea .cache/ venv/ +*.tsbuildinfo # Frontend .awcache/ diff --git a/packages/plugins/components/README.md b/packages/plugins/components/README.md new file mode 100644 index 000000000..2f9327914 --- /dev/null +++ b/packages/plugins/components/README.md @@ -0,0 +1 @@ +This is a component package for flyteconsole plugin system diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json new file mode 100644 index 000000000..41cc2f969 --- /dev/null +++ b/packages/plugins/components/package.json @@ -0,0 +1,32 @@ +{ + "name": "@flyteconsole/components", + "version": "0.0.1-rc.2", + "description": "Flyteconsole Components module, which is published as npm package and can be consumed by 3rd parties", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm", + "build:cjs": "tsc" + }, + "dependencies": { + "@material-ui/core": "^4.0.0", + "@material-ui/icons": "^4.0.0" + }, + "peerDependencies": { + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "react": "^17.0.2", + "react-dom": "^17.0.2" + } +} diff --git a/packages/plugins/components/src/NavBar/defaultContent.tsx b/packages/plugins/components/src/NavBar/defaultContent.tsx new file mode 100644 index 000000000..7d58ad46b --- /dev/null +++ b/packages/plugins/components/src/NavBar/defaultContent.tsx @@ -0,0 +1,44 @@ +import * as React from 'react'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import MenuIcon from '@material-ui/icons/Menu'; +import { IconButton } from '@material-ui/core'; +// import classnames from 'classnames'; +// import { FlyteLogo } from 'components/common/FlyteLogo'; +// import { useCommonStyles } from 'components/common/styles'; +// import { Link } from 'react-router-dom'; +// import { Routes } from 'routes/routes'; +// import { UserInformation } from './UserInformation'; + +const useStyles = makeStyles((theme: Theme) => ({ + spacer: { + flexGrow: 1, + }, + rightNavBarItem: { + marginLeft: theme.spacing(2), + }, + /// + menuButton: { + marginRight: theme.spacing(2), + }, +})); + +/** Renders the default content for the app bar, which is the logo and help links */ +export const DefaultNavBarContent: React.FC = () => { + // const commonStyles = useCommonStyles(); + const styles = useStyles(); + return ( + <> +
+ {' NASTYA IS HERE '} +
+ + + + {/* + + +
+ */} + + ); +}; diff --git a/packages/plugins/components/src/NavBar/index.tsx b/packages/plugins/components/src/NavBar/index.tsx new file mode 100644 index 000000000..39ee1ff37 --- /dev/null +++ b/packages/plugins/components/src/NavBar/index.tsx @@ -0,0 +1,40 @@ +import * as React from 'react'; + +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +// import { navBarContentId } from 'common/constants'; +import { DefaultNavBarContent } from './defaultContent'; + +export const navBarContentId = 'nav-bar-content'; + +interface NavBarProps { + useCustomContent?: boolean; // rename to show that it is a backNavigation + className?: string; +} + +/** Contains all content in the top navbar of the application. */ +export const NavBar = (props: NavBarProps) => { + // const content = props.useCustomContent ?
: ; + return ( + + + {/* {content} */} + + + + ); +}; + +// export const NavBar = (): React.ReactElement => { +// return
It's me - Navigation Bar
; +// }; + +export const add = (a: number, b: number) => { + return a + b; +}; diff --git a/packages/plugins/components/src/NavBar/navbar.stories.tsx b/packages/plugins/components/src/NavBar/navbar.stories.tsx new file mode 100644 index 000000000..cf1707507 --- /dev/null +++ b/packages/plugins/components/src/NavBar/navbar.stories.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { makeStyles, Theme } from '@material-ui/core/styles'; + +import { NavBar } from '.'; + +export default { + title: 'Primitives/NavBar', + component: NavBar, +} as ComponentMeta; + +const useStyles = makeStyles((theme: Theme) => ({ + updatedOne: { + backgroundColor: 'lightblue', + color: 'black', + }, + updatedTwo: { + backgroundColor: 'black', + color: 'yellow', + }, +})); + +const Template: ComponentStory = () => ; +export const Primary = Template.bind({}); + +export const Secondary: ComponentStory = () => { + const styles = useStyles(); + return ; +}; + +export const Tertiary: ComponentStory = () => { + const styles = useStyles(); + return ; +}; diff --git a/packages/plugins/components/src/NavBar/navbar.test.tsx b/packages/plugins/components/src/NavBar/navbar.test.tsx new file mode 100644 index 000000000..5b7ad96d7 --- /dev/null +++ b/packages/plugins/components/src/NavBar/navbar.test.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { NavBar, add } from './index'; + +describe('add function', () => { + it('should add two number together', () => { + const result = add(10, 5); + expect(result).toBe(15); + }); + + it('NavBar contains correct text', () => { + render(); + const text = screen.getByText("It's me - Navigation Bar"); + expect(text).toBeInTheDocument(); + }); +}); diff --git a/packages/plugins/components/src/index.ts b/packages/plugins/components/src/index.ts new file mode 100644 index 000000000..766d96c64 --- /dev/null +++ b/packages/plugins/components/src/index.ts @@ -0,0 +1 @@ +export { NavBar } from './NavBar'; diff --git a/packages/plugins/components/tsconfig.json b/packages/plugins/components/tsconfig.json new file mode 100644 index 000000000..a6178cb4a --- /dev/null +++ b/packages/plugins/components/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"] +} diff --git a/packages/zapp/console/src/routes/NavBarRouter.tsx b/packages/zapp/console/src/routes/NavBarRouter.tsx index 4b820e695..76d7f6e5a 100644 --- a/packages/zapp/console/src/routes/NavBarRouter.tsx +++ b/packages/zapp/console/src/routes/NavBarRouter.tsx @@ -1,4 +1,5 @@ import { NavBar } from 'components/Navigation/NavBar'; +// import { NavBar as NewNavBar } from '@flyteconsole/components'; import * as React from 'react'; import { Route, Switch } from 'react-router-dom'; import { Routes } from './routes'; @@ -10,6 +11,7 @@ export const NavBarRouter: React.FC<{}> = () => ( <> + {/* */} diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index de7682390..597473928 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -28,7 +28,7 @@ "composite": true, "paths": { - "@flyteconsole/*": ["../../plugins/*/src", "../../zapp/*/src"] + "@flyteconsole/*": ["../../plugins/*/src"] } }, "references": [{ "path": "../../plugins/components" }], diff --git a/packages/zapp/console/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts index 8d0ced3e0..9a31b6645 100644 --- a/packages/zapp/console/webpack.common.config.ts +++ b/packages/zapp/console/webpack.common.config.ts @@ -71,7 +71,7 @@ export const limitChunksPlugin = new webpack.optimize.LimitChunkCountPlugin({ const typescriptRule = { test: /\.tsx?$/, exclude: /node_modules/, - include: path.resolve(__dirname, 'src'), + // include: path.resolve(__dirname, 'src'), // narusina - check with Carina as we need to remove it for micropackages structure use: [{ loader: 'ts-loader', options: { transpileOnly: true } }], }; @@ -82,6 +82,10 @@ const resolve = { extensions: ['.ts', '.tsx', '.js', '.jsx'], /** "main" fields in package.json files to resolve a CommonJS module for */ mainFields: ['browser', 'module', 'main'], + /** allow to resolve local packages to it's source code */ + alias: { + '@flyteconsole/components': path.resolve(__dirname, '../../plugins/components/src'), + }, }; /** diff --git a/tsconfig.base.json b/tsconfig.base.json index 5fdc68779..1eff79958 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -60,7 +60,7 @@ "composite": true, "baseUrl": ".", "paths": { - "@flyteconsole/*": ["./packages/components/*/src", "./packages/zapp/*/src"] + "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] } }, "exclude": [ diff --git a/yarn.lock b/yarn.lock index 9ceefb468..09fa40ce4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4287,6 +4287,13 @@ dependencies: "@types/react" "^16" +"@types/react-dom@^17.0.11": + version "17.0.15" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.15.tgz#f2c8efde11521a4b7991e076cb9c70ba3bb0d156" + integrity sha512-Tr9VU9DvNoHDWlmecmcsE5ZZiUkYx+nKBzum4Oxe1K0yJVyBlfbq7H3eXjxXqJczBKqPGq3EgfTru4MgKb9+Yw== + dependencies: + "@types/react" "^17" + "@types/react-hot-loader@^3.0.3": version "3.0.6" resolved "https://registry.yarnpkg.com/@types/react-hot-loader/-/react-hot-loader-3.0.6.tgz#23b1875a327c32cbab705fbf660d8f207ede4d69" @@ -4386,6 +4393,15 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^17", "@types/react@^17.0.39": + version "17.0.44" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.44.tgz#c3714bd34dd551ab20b8015d9d0dbec812a51ec7" + integrity sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/retry@^0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -15823,6 +15839,15 @@ react-dom@^16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + react-draggable@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" @@ -16123,6 +16148,14 @@ react@^16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + read-chunk@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" @@ -16901,6 +16934,14 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" From 3573659799641c686f2bee264c8d3020ac508b7f Mon Sep 17 00:00:00 2001 From: Nastya Rusina Date: Sun, 24 Apr 2022 20:24:22 -0700 Subject: [PATCH 06/93] chore: allow to start test from main directory Signed-off-by: Nastya Rusina --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c86fcbbd..3d2af4a9c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,9 @@ ], "scripts": { "start": "yarn workspace @flyteconsole/client-app start", - "storybook": "start-storybook -p 6006" + "storybook": "start-storybook -p 6006", + "test": "pushd packages/zapp/console && yarn test && popd", + "test-coverage": "pushd packages/zapp/console && yarn test-coverage && popd" }, "husky": { "hooks": { From 8d1fef9e66330c5d815bc528e406e00fdec0b50d Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Mon, 25 Apr 2022 12:25:17 -0700 Subject: [PATCH 07/93] ci: update lowest mkdirp version (#423) Signed-off-by: Nastya Rusina --- yarn.lock | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 09fa40ce4..6d619a7da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13633,11 +13633,6 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -13723,13 +13718,6 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" From 48a1c92c373a9f791b8163246f7c54ddd609f015 Mon Sep 17 00:00:00 2001 From: Carina Ursu Date: Tue, 26 Apr 2022 11:30:18 -0700 Subject: [PATCH 08/93] chore: add build scripts for console app (#429) Signed-off-by: Carina Ursu Co-authored-by: Carina Ursu --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 3d2af4a9c..0556018af 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ ], "scripts": { "start": "yarn workspace @flyteconsole/client-app start", + "build:prod": "yarn workspace @flyteconsole/client-app build:prod", + "start:prod": "yarn workspace @flyteconsole/client-app start:prod", "storybook": "start-storybook -p 6006", "test": "pushd packages/zapp/console && yarn test && popd", "test-coverage": "pushd packages/zapp/console && yarn test-coverage && popd" From caaf5c228a2444ab820b9047d425e60a52b9a6e8 Mon Sep 17 00:00:00 2001 From: Eugene Jahn Date: Thu, 28 Apr 2022 08:21:17 -0700 Subject: [PATCH 09/93] fix: hide the legend (#435) Signed-off-by: eugenejahn --- .../flytegraph/ReactFlow/NodeStatusLegend.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx index 6b305f492..e88abe852 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/NodeStatusLegend.tsx @@ -33,8 +33,14 @@ export const LegendItem = ({ color, text }) => { ); }; -export const Legend = () => { - const [isVisible, setIsVisible] = useState(true); +interface LegendProps { + initialIsVisible?: boolean; +} + +export const Legend: React.FC = (props) => { + const { initialIsVisible = false } = props; + + const [isVisible, setIsVisible] = useState(initialIsVisible); const positionStyle: CSSProperties = { bottom: '1rem', From 133038a0288955b9ff2f01bfbc3a1947f9014c5f Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 28 Apr 2022 09:22:12 -0700 Subject: [PATCH 10/93] ci: move storybook related packages to top level (#434) * ci: move storybook related packages to top level * ci: ensure that lint can be run in PR checks * ci: allow to run tests linux setup Signed-off-by: Nastya Rusina --- .eslintrc.js | 1 + package.json | 165 +---------- packages/plugins/components/package.json | 12 +- packages/zapp/console/package.json | 17 -- .../components/common/ContentContainer.tsx | 20 +- .../common/test/ContentContainer.spec.tsx | 34 --- .../ContentContainer.spec.tsx.snap | 33 --- yarn.lock | 268 ++++++++---------- 8 files changed, 136 insertions(+), 414 deletions(-) delete mode 100644 packages/zapp/console/src/components/common/test/ContentContainer.spec.tsx delete mode 100644 packages/zapp/console/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap diff --git a/.eslintrc.js b/.eslintrc.js index d71611581..4a54d86fd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -85,6 +85,7 @@ module.exports = { 'no-await-in-loop': 'off', 'no-undef-init': 'off', 'no-unneeded-ternary': 'off', + 'no-underscore-dangle': 'off', 'prefer-object-spread': 'off', 'prefer-template': 'off', 'default-case': 'off', diff --git a/package.json b/package.json index 0556018af..3823ae2f9 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,13 @@ ], "scripts": { "start": "yarn workspace @flyteconsole/client-app start", - "build:prod": "yarn workspace @flyteconsole/client-app build:prod", "start:prod": "yarn workspace @flyteconsole/client-app start:prod", + "build:prod": "yarn workspace @flyteconsole/client-app build:prod", + "build:storybook": "build-storybook", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "storybook": "start-storybook -p 6006", - "test": "pushd packages/zapp/console && yarn test && popd", - "test-coverage": "pushd packages/zapp/console && yarn test-coverage && popd" + "test": "cd packages/zapp/console && yarn test && cd ../../../", + "test-coverage": "bash -c 'pushd packages/zapp/console && yarn test-coverage && popd'" }, "husky": { "hooks": { @@ -41,53 +43,8 @@ "git add" ] }, - "dependencies": { - "@rjsf/core": "^3.2.1", - "@rjsf/material-ui": "^3.2.1", - "babel-polyfill": "^6.26.0", - "cache": "^2.1.0", - "chalk": "^2.0.1", - "chart.js": "^3.6.2", - "chartjs-plugin-datalabels": "^2.0.0", - "cookie-parser": "^1.4.3", - "dagre-d3": "^0.6.4", - "dotenv": "^5.0.1", - "express": "^4.14.0", - "express-static-gzip": "^0.3.2", - "fuzzysort": "^1.1.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.21", - "morgan": "^1.8.2", - "react-chartjs-2": "^4.0.0", - "react-flow-renderer": "10.1.1", - "react-ga4": "^1.4.1", - "react-responsive": "^4.1.0", - "react-transition-group": "^2.3.1", - "serve-static": "^1.12.3", - "tslib": "^1.9.0" - }, + "dependencies": {}, "devDependencies": { - "@babel/cli": "~7.16.0", - "@babel/core": "~7.16.12", - "@babel/plugin-proposal-class-properties": "~7.16.7", - "@babel/plugin-proposal-decorators": "~7.16.7", - "@babel/plugin-proposal-object-rest-spread": "~7.16.7", - "@babel/preset-env": "~7.16.11", - "@babel/preset-react": "~7.16.7", - "@babel/preset-typescript": "~7.16.7", - "@commitlint/cli": "^8.3.5", - "@commitlint/config-conventional": "^8.3.4", - "@date-io/moment": "1.3.9", - "@flyteorg/flyteidl": "1.1.0", - "@material-ui/core": "^4.0.0", - "@material-ui/icons": "^4.0.0", - "@material-ui/pickers": "^3.2.2", - "@semantic-release/changelog": "^5.0.1", - "@semantic-release/commit-analyzer": "^8.0.1", - "@semantic-release/git": "^9.0.0", - "@semantic-release/github": "^7.0.5", - "@semantic-release/npm": "^7.0.5", - "@semantic-release/release-notes-generator": "^9.0.1", "@storybook/addon-actions": "^6.4.19", "@storybook/addon-essentials": "^6.4.19", "@storybook/addon-interactions": "^6.4.19", @@ -96,114 +53,6 @@ "@storybook/manager-webpack5": "^6.4.19", "@storybook/react": "^6.4.19", "@storybook/testing-library": "^0.0.9", - "@testing-library/jest-dom": "^5.5.0", - "@testing-library/react": "^10.0.3", - "@testing-library/react-hooks": "^7.0.2", - "@types/cheerio": "^0.22.2", - "@types/d3-shape": "^1.2.6", - "@types/debug": "^0.0.30", - "@types/dom-helpers": "^3.4.1", - "@types/express": "^4.17.2", - "@types/jest": "^26.0.0", - "@types/js-yaml": "^3.10.1", - "@types/linkify-it": "^2.1.0", - "@types/lodash": "^4.14.68", - "@types/long": "^3.0.32", - "@types/lossless-json": "^1.0.0", - "@types/memoize-one": "^4.1.0", - "@types/memory-fs": "^0.3.0", - "@types/moment-timezone": "^0.5.13", - "@types/node": "^14.18.12", - "@types/object-hash": "^1.2.0", - "@types/pure-render-decorator": "^0.2.27", - "@types/react": "^16.9.34", - "@types/react-dom": "^16.9.7", - "@types/react-hot-loader": "^3.0.3", - "@types/react-json-tree": "^0.6.8", - "@types/react-responsive": "^3.0.1", - "@types/react-router-dom": "^4.3.2", - "@types/react-test-renderer": "^16.9.0", - "@types/react-virtualized": "^9.21.4", - "@types/serve-static": "^1.7.31", - "@types/shallowequal": "^0.2.3", - "@types/webpack-hot-middleware": "^2.25.6", - "@typescript-eslint/eslint-plugin": "^5.15.0", - "@typescript-eslint/parser": "^5.15.0", - "@xstate/react": "^1.0.0", - "autoprefixer": "^8.3.0", - "axios": "^0.21.2", - "axios-mock-adapter": "^1.16.0", - "babel-core": "^7.0.0-0", - "babel-jest": "^26.0.0", - "babel-loader": "^8.2.3", - "camelcase-keys": "^6.1.1", - "classnames": "^2.3.1", - "compression-webpack-plugin": "^9.2.0", - "contrast": "^1.0.1", - "copy-to-clipboard": "^3.0.8", - "cronstrue": "^1.31.0", - "d3-dag": "^0.3.4", - "d3-shape": "^1.2.2", - "debug": "^3.1.0", - "dom-helpers": "^3.4.0", - "eslint": "^8.11.0", - "eslint-config-airbnb": "^19.0.4", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.3.0", - "favicons": "^6.2.0", - "favicons-webpack-plugin": "^5.0.2", - "fork-ts-checker-webpack-plugin": "^7.2.1", - "html-webpack-plugin": "^5.5.0", - "husky": "^4.2.5", - "intersection-observer": "^0.7.0", - "jest": "^26.0.0", - "linkify-it": "^2.2.0", - "lint-staged": "^7.0.4", - "lossless-json": "^1.0.3", - "memoize-one": "^5.0.0", - "moment": "^2.29.2", - "moment-timezone": "^0.5.28", - "msw": "^0.24.1", - "notistack": "^1.0.10", - "object-hash": "^1.3.1", - "prettier": "^2.5.1", - "protobufjs": "~6.8.0", - "query-string": "^6.5.0", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "react-hot-loader": "^4.1.2", - "react-intersection-observer": "^8.25.1", - "react-json-tree": "^0.11.0", - "react-loading-skeleton": "^1.1.2", - "react-query": "^3.3.0", - "react-query-devtools": "^3.0.0-beta", - "react-router": "^5.0.1", - "react-router-dom": "^5.0.1", - "react-test-renderer": "^16.9.0", - "react-virtualized": "^9.21.1", - "resolve-url-loader": "^5.0.0", - "semantic-release": "^17.2.3", - "shallowequal": "^1.1.0", - "snakecase-keys": "^3.1.0", - "source-map-loader": "^3.0.1", - "ts-jest": "^26.3.0", - "ts-loader": "^9.2.6", - "ts-node": "^8.0.2", - "typescript": "^4.6.2", - "url-search-params": "^0.10.0", - "use-react-router": "^1.0.7", - "webpack": "^5.68.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.8.1", - "webpack-merge": "^5.8.0", - "webpack-node-externals": "^3.0.0", - "webpack-stats-plugin": "^1.0.3", - "xstate": "^4.11.0" - }, - "resolutions": { - "micromatch": "^4.0.0" + "react-hot-loader": "^4.1.2" } } \ No newline at end of file diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json index 41cc2f969..b40b75280 100644 --- a/packages/plugins/components/package.json +++ b/packages/plugins/components/package.json @@ -20,13 +20,13 @@ "@material-ui/icons": "^4.0.0" }, "peerDependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" }, "devDependencies": { - "@types/react": "^17.0.39", - "@types/react-dom": "^17.0.11", - "react": "^17.0.2", - "react-dom": "^17.0.2" + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 01b6d8c51..5757cfa3a 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -12,10 +12,8 @@ "prebuild": "yarn run clean", "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.dev.config.ts --mode=development", "build:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' NODE_ENV=production webpack --config webpack.prod.config.ts --mode=production --progress", - "build:storybook": "build-storybook", "start": "webpack serve --open --config webpack.dev.config.ts --hot", "start:prod": "NODE_ENV=production node -r dotenv/config index.js", - "storybook": "pushd ../../../ && start-storybook -p 6006 && popd", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "format": "prettier --ignore-path .eslintignore --write \"**/*.+(js|jsx|ts|tsx|json)\"", "fix": "yarn lint --fix && yarn format", @@ -51,7 +49,6 @@ "react-chartjs-2": "^4.0.0", "react-flow-renderer": "10.1.1", "react-ga4": "^1.4.1", - "react-responsive": "^4.1.0", "react-transition-group": "^2.3.1", "serve-static": "^1.12.3", "tslib": "^1.9.0" @@ -78,14 +75,6 @@ "@semantic-release/github": "^7.0.5", "@semantic-release/npm": "^7.0.5", "@semantic-release/release-notes-generator": "^9.0.1", - "@storybook/addon-actions": "^6.4.19", - "@storybook/addon-essentials": "^6.4.19", - "@storybook/addon-interactions": "^6.4.19", - "@storybook/addon-links": "^6.4.19", - "@storybook/builder-webpack5": "^6.4.19", - "@storybook/manager-webpack5": "^6.4.19", - "@storybook/react": "^6.4.19", - "@storybook/testing-library": "^0.0.9", "@testing-library/jest-dom": "^5.5.0", "@testing-library/react": "^10.0.3", "@testing-library/react-hooks": "^7.0.2", @@ -108,11 +97,7 @@ "@types/pure-render-decorator": "^0.2.27", "@types/react": "^16.9.34", "@types/react-dom": "^16.9.7", - "@types/react-hot-loader": "^3.0.3", - "@types/react-json-tree": "^0.6.8", - "@types/react-responsive": "^3.0.1", "@types/react-router-dom": "^4.3.2", - "@types/react-test-renderer": "^16.9.0", "@types/react-virtualized": "^9.21.4", "@types/serve-static": "^1.7.31", "@types/shallowequal": "^0.2.3", @@ -166,13 +151,11 @@ "react-dom": "^16.13.1", "react-hot-loader": "^4.1.2", "react-intersection-observer": "^8.25.1", - "react-json-tree": "^0.11.0", "react-loading-skeleton": "^1.1.2", "react-query": "^3.3.0", "react-query-devtools": "^3.0.0-beta", "react-router": "^5.0.1", "react-router-dom": "^5.0.1", - "react-test-renderer": "^16.9.0", "react-virtualized": "^9.21.1", "resolve-url-loader": "^5.0.0", "semantic-release": "^17.2.3", diff --git a/packages/zapp/console/src/components/common/ContentContainer.tsx b/packages/zapp/console/src/components/common/ContentContainer.tsx index 2cdd6ff9d..f45475d6a 100644 --- a/packages/zapp/console/src/components/common/ContentContainer.tsx +++ b/packages/zapp/console/src/components/common/ContentContainer.tsx @@ -1,3 +1,4 @@ +import * as React from 'react'; import { makeStyles, Theme } from '@material-ui/core/styles'; import classnames from 'classnames'; import { contentContainerId } from 'common/constants'; @@ -7,9 +8,6 @@ import { navbarGridHeight, sideNavGridWidth, } from 'common/layout'; -import * as React from 'react'; -import { detailsPanelWidth } from './constants'; -import { DetailsPanel } from './DetailsPanel'; import { ErrorBoundary } from './ErrorBoundary'; enum ContainerClasses { @@ -36,9 +34,6 @@ const useStyles = makeStyles((theme: Theme) => { margin: '0 auto', maxWidth: theme.spacing(maxContainerGridWidth), }, - [`&.${ContainerClasses.WithDetailsPanel}`]: { - paddingRight: 0, - }, [`&.${ContainerClasses.WithSideNav}`]: { marginLeft: theme.spacing(sideNavGridWidth), }, @@ -73,7 +68,6 @@ export const ContentContainer: React.FC = (props) => { noMargin = false, className: additionalClassName, children, - detailsPanel = false, sideNav = false, ...restProps } = props; @@ -81,18 +75,12 @@ export const ContentContainer: React.FC = (props) => { const className = classnames(styles.root, additionalClassName, { [ContainerClasses.Centered]: center, [ContainerClasses.NoMargin]: noMargin, - [ContainerClasses.WithDetailsPanel]: detailsPanel, [ContainerClasses.WithSideNav]: sideNav, }); - const marginRight = detailsPanel ? detailsPanelWidth : 'auto'; - return ( - <> -
- {children} -
- {detailsPanel && } - +
+ {children} +
); }; diff --git a/packages/zapp/console/src/components/common/test/ContentContainer.spec.tsx b/packages/zapp/console/src/components/common/test/ContentContainer.spec.tsx deleted file mode 100644 index 65d1f1813..000000000 --- a/packages/zapp/console/src/components/common/test/ContentContainer.spec.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as React from 'react'; -import * as renderer from 'react-test-renderer'; - -import { ContentContainer } from '../ContentContainer'; - -const Content = () =>
the content
; - -describe('ContentContainer', () => { - it('matches the known snapshot', () => { - expect( - renderer - .create( - - - , - ) - .toJSON(), - ).toMatchSnapshot(); - }); - - describe('in centered mode', () => { - it('matches the known snapshot', () => { - expect( - renderer - .create( - - - , - ) - .toJSON(), - ).toMatchSnapshot(); - }); - }); -}); diff --git a/packages/zapp/console/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap b/packages/zapp/console/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap deleted file mode 100644 index c16ab54ec..000000000 --- a/packages/zapp/console/src/components/common/test/__snapshots__/ContentContainer.spec.tsx.snap +++ /dev/null @@ -1,33 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ContentContainer in centered mode matches the known snapshot 1`] = ` -
-
- the content -
-
-`; - -exports[`ContentContainer matches the known snapshot 1`] = ` -
-
- the content -
-
-`; diff --git a/yarn.lock b/yarn.lock index 6d619a7da..124f441c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4287,34 +4287,6 @@ dependencies: "@types/react" "^16" -"@types/react-dom@^17.0.11": - version "17.0.15" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.15.tgz#f2c8efde11521a4b7991e076cb9c70ba3bb0d156" - integrity sha512-Tr9VU9DvNoHDWlmecmcsE5ZZiUkYx+nKBzum4Oxe1K0yJVyBlfbq7H3eXjxXqJczBKqPGq3EgfTru4MgKb9+Yw== - dependencies: - "@types/react" "^17" - -"@types/react-hot-loader@^3.0.3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/react-hot-loader/-/react-hot-loader-3.0.6.tgz#23b1875a327c32cbab705fbf660d8f207ede4d69" - integrity sha512-GdGUhpcFbx/outNfNMRll0skfuD9Awqh2U/jZHII1MLBGT3cDc61dr36t9X8niYgtYQwDizOl5afRo3tYnP+2Q== - dependencies: - "@types/react" "*" - -"@types/react-json-tree@^0.6.8": - version "0.6.11" - resolved "https://registry.yarnpkg.com/@types/react-json-tree/-/react-json-tree-0.6.11.tgz#644eee18b1c772d57afe584b8098af71d847a15a" - integrity sha512-HP0Sf0ZHjCi1FHLJxh/pLaxaevEW6ILlV2C5Dn3EZFTkLjWkv+EVf/l/zvtmoU9ZwuO/3TKVeWK/700UDxunTw== - dependencies: - "@types/react" "*" - -"@types/react-responsive@^3.0.1": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/react-responsive/-/react-responsive-3.0.3.tgz#a31b599c7cfe4135c5cc2f45d0b71df64803b23f" - integrity sha512-paTAvXIFgv/jG60d7WSV0+yWCjqJ05cG+KOV48SiqYGjGi9kFdss9QnVTTLnFJmbUwWnoM+VD1Iyay1JBy/HPQ== - dependencies: - "@types/react" "*" - "@types/react-router-dom@^4.3.2": version "4.3.5" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.3.5.tgz#72f229967690c890d00f96e6b85e9ee5780db31f" @@ -4346,13 +4318,6 @@ dependencies: "@types/react" "*" -"@types/react-test-renderer@^16.9.0": - version "16.9.4" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.4.tgz#377ccf51ea25c656b08aa474fb8194661009b865" - integrity sha512-ZcnGz4O5I6C/gA7V8SInBDrUdhUwjc9C4n3hyeciwTc0oGYi0efYxxD0M0ASiN5SZzCBGGwb9tGtIk7270BqsQ== - dependencies: - "@types/react" "^16" - "@types/react-transition-group@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" @@ -4393,15 +4358,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@^17", "@types/react@^17.0.39": - version "17.0.44" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.44.tgz#c3714bd34dd551ab20b8015d9d0dbec812a51ec7" - integrity sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/retry@^0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -5317,6 +5273,11 @@ aria-query@^5.0.0: resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" @@ -5760,7 +5721,7 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" -babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: +babel-runtime@^6.23.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -5778,11 +5739,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= - base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -6002,7 +5958,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.2: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -6018,7 +5974,7 @@ braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -7533,11 +7489,6 @@ css-loader@^5.0.1: schema-utils "^3.0.0" semver "^7.3.5" -css-mediaquery@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" - integrity sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA= - css-select@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -8009,7 +7960,7 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -9223,6 +9174,19 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -9339,6 +9303,20 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -9765,6 +9743,13 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -10870,7 +10855,7 @@ husky@^4.2.5: slash "^3.0.0" which-pm-runs "^1.0.0" -hyphenate-style-name@^1.0.0, hyphenate-style-name@^1.0.3: +hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== @@ -12981,11 +12966,6 @@ lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -13001,11 +12981,6 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= -lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -13314,13 +13289,6 @@ match-sorter@^6.0.2: "@babel/runtime" "^7.12.5" remove-accents "0.4.2" -matchmediaquery@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/matchmediaquery/-/matchmediaquery-0.2.1.tgz#223c7005793de03e47ce92b13285a72c44ada2cf" - integrity sha1-IjxwBXk94D5HzpKxMoWnLEStos8= - dependencies: - css-mediaquery "^0.1.2" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -13485,7 +13453,26 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0, micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== @@ -13493,6 +13480,14 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^4.0.0, mic braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -13633,6 +13628,11 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -13718,6 +13718,13 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -13836,6 +13843,23 @@ nanoid@^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" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" @@ -14482,6 +14506,13 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + object.values@^1.1.0, object.values@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" @@ -15084,7 +15115,7 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^2.3.0: +picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -15204,6 +15235,11 @@ portfinder@^1.0.28: debug "^3.1.1" mkdirp "^0.5.5" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + postcss-flexbugs-fixes@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" @@ -15500,7 +15536,7 @@ prop-types@^15.0.0, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -15630,11 +15666,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= - q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -15776,16 +15807,6 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-base16-styling@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269" - integrity sha1-OFjyTpxN2MvT9wLz901YHKKRcmk= - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - react-chartjs-2@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-4.0.0.tgz#a79919c9efe5381b8cb5abfd0ac7a56c9736cdb8" @@ -15827,15 +15848,6 @@ react-dom@^16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - react-draggable@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" @@ -15934,7 +15946,7 @@ react-is@17.0.2, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.6, react-is@^16.9.0: +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -15944,15 +15956,6 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-json-tree@^0.11.0: - version "0.11.2" - resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.11.2.tgz#af70199fcbc265699ade2aec492465c51608f95e" - integrity sha512-aYhUPj1y5jR3ZQ+G3N7aL8FbTyO03iLwnVvvEikLcNFqNTyabdljo9xDftZndUBFyyyL0aK3qGO9+8EilILHUw== - dependencies: - babel-runtime "^6.6.1" - prop-types "^15.5.8" - react-base16-styling "^0.5.1" - react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -16002,15 +16005,6 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-responsive@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-4.1.0.tgz#01d129a35729c8f0373e79871cc8d5ecf6e22765" - integrity sha512-ZuDraf0qsJlyiTwzeva+foHx83IP6SIhru9o7BvMwQ4ZHjRIL5WjdgVNNrKSRbmeWO9rEJoMpabei/5lJn8KaA== - dependencies: - hyphenate-style-name "^1.0.0" - matchmediaquery "^0.2.1" - prop-types "^15.6.1" - react-router-dom@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" @@ -16076,16 +16070,6 @@ react-syntax-highlighter@^13.5.3: prismjs "^1.21.0" refractor "^3.1.0" -react-test-renderer@^16.9.0: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae" - integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.8.6" - scheduler "^0.19.1" - react-textarea-autosize@^8.3.0: version "8.3.3" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" @@ -16136,14 +16120,6 @@ react@^16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - read-chunk@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" @@ -16399,7 +16375,7 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.2: +regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== @@ -16922,14 +16898,6 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - schema-utils@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" @@ -18381,7 +18349,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1: +to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== From 1651a6f6a6cdee1c359946ec19e1297a99d498d0 Mon Sep 17 00:00:00 2001 From: Eugene Jahn Date: Thu, 28 Apr 2022 14:28:55 -0700 Subject: [PATCH 11/93] fix: fix issue 386 (#437) Signed-off-by: eugenejahn --- packages/zapp/console/src/components/Tables/DataList.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/zapp/console/src/components/Tables/DataList.tsx b/packages/zapp/console/src/components/Tables/DataList.tsx index 175f94d17..2f481a4f3 100644 --- a/packages/zapp/console/src/components/Tables/DataList.tsx +++ b/packages/zapp/console/src/components/Tables/DataList.tsx @@ -91,7 +91,7 @@ const DataListImplComponent: React.RefForwardingComponent (rowIndex: number) => { @@ -115,6 +115,9 @@ const DataListImplComponent: React.RefForwardingComponent Date: Thu, 28 Apr 2022 16:21:28 -0700 Subject: [PATCH 12/93] ci: ensure unified tsconfig and remove mocks, test, stories from build (#436) * ci: ensure unified tsconfig and remove mocks,test,stories from build * ci: move certificates into certificate folder inside script Signed-off-by: Nastya Rusina --- .gitignore | 5 +- package.json | 1 + packages/zapp/console/env.js | 7 ++ packages/zapp/console/index.js | 4 +- packages/zapp/console/package.json | 1 - packages/zapp/console/src/common/utils.ts | 1 - .../Executions/ExecutionDetails/types.ts | 0 .../Launch/LaunchForm/BlobInput.tsx | 2 +- .../src/components/common/DelayedMount.tsx | 0 .../common/FilterableNamedEntityList.tsx | 2 +- .../src/components/common/SearchableList.tsx | 2 +- .../common/SearchableNamedEntityList.tsx | 1 - .../src/components/common/scopedContext.ts | 0 packages/zapp/console/tsconfig.json | 56 +++---------- packages/zapp/console/webpack.dev.config.ts | 23 +++++- script/generate_ssl.sh | 15 ++-- tsconfig.base.json | 79 ++++++++----------- 17 files changed, 85 insertions(+), 114 deletions(-) delete mode 100644 packages/zapp/console/src/components/Executions/ExecutionDetails/types.ts delete mode 100644 packages/zapp/console/src/components/common/DelayedMount.tsx delete mode 100644 packages/zapp/console/src/components/common/scopedContext.ts diff --git a/.gitignore b/.gitignore index 5ec5d3f89..73d79aa01 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,4 @@ yarn-error.log # Certs .srl -script/rootCA.* -script/server.crt -script/server.csr -script/server.key +certificate/ diff --git a/package.json b/package.json index 3823ae2f9..3b577b7c0 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "packages/zapp/**" ], "scripts": { + "clean": "yarn workspace @flyteconsole/client-app clean", "start": "yarn workspace @flyteconsole/client-app start", "start:prod": "yarn workspace @flyteconsole/client-app start:prod", "build:prod": "yarn workspace @flyteconsole/client-app build:prod", diff --git a/packages/zapp/console/env.js b/packages/zapp/console/env.js index 4cc3d8b22..a8a9224db 100644 --- a/packages/zapp/console/env.js +++ b/packages/zapp/console/env.js @@ -20,6 +20,12 @@ const BASE_URL = process.env.BASE_URL || ''; */ const ASSETS_PATH = `${BASE_URL}/assets/`; +/** + * Certificate path required for local development, should not include trailing '/'. + * Located at top level of the repository in script folder + */ +const CERTIFICATE_PATH = '../../../script/certificate'; + // Defines a file to be required which will provide implementations for // any user-definable code. const PLUGINS_MODULE = process.env.PLUGINS_MODULE; @@ -43,6 +49,7 @@ module.exports = { ENABLE_GA, GA_TRACKING_ID, ASSETS_PATH, + CERTIFICATE_PATH, LOCAL_DEV_HOST, processEnv: { ADMIN_API_URL, diff --git a/packages/zapp/console/index.js b/packages/zapp/console/index.js index b38b1cb08..e25b3fc02 100644 --- a/packages/zapp/console/index.js +++ b/packages/zapp/console/index.js @@ -42,8 +42,8 @@ const port = process.env.PORT || 3000; if (env.ADMIN_API_USE_SSL === 'https') { const fs = require('fs'); const https = require('https'); - var privateKey = fs.readFileSync('../../../script/server.key'); - var certificate = fs.readFileSync('../../../script/server.crt'); + var privateKey = fs.readFileSync(`${env.CERTIFICATE_PATH}/server.key`); + var certificate = fs.readFileSync(`${env.CERTIFICATE_PATH}/server.crt`); server = https .createServer( diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 5757cfa3a..fa1706344 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -9,7 +9,6 @@ "main": "index.js", "scripts": { "clean": "rm -rf dist", - "prebuild": "yarn run clean", "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.dev.config.ts --mode=development", "build:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' NODE_ENV=production webpack --config webpack.prod.config.ts --mode=production --progress", "start": "webpack serve --open --config webpack.dev.config.ts --hot", diff --git a/packages/zapp/console/src/common/utils.ts b/packages/zapp/console/src/common/utils.ts index 4bfbb2c23..0f5973571 100644 --- a/packages/zapp/console/src/common/utils.ts +++ b/packages/zapp/console/src/common/utils.ts @@ -1,4 +1,3 @@ -import { env } from 'common/env'; import { Protobuf } from 'flyteidl'; import * as Long from 'long'; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/types.ts b/packages/zapp/console/src/components/Executions/ExecutionDetails/types.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/zapp/console/src/components/Launch/LaunchForm/BlobInput.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/BlobInput.tsx index 4f18dcb26..900167338 100644 --- a/packages/zapp/console/src/components/Launch/LaunchForm/BlobInput.tsx +++ b/packages/zapp/console/src/components/Launch/LaunchForm/BlobInput.tsx @@ -10,7 +10,7 @@ import { import { makeStyles, Theme } from '@material-ui/core/styles'; import { BlobDimensionality } from 'models/Common/types'; import * as React from 'react'; -import { blobFormatHelperText, blobUriHelperText, defaultBlobValue } from './constants'; +import { blobFormatHelperText, blobUriHelperText } from './constants'; import { InputProps } from './types'; import { getLaunchInputId, isBlobValue } from './utils'; diff --git a/packages/zapp/console/src/components/common/DelayedMount.tsx b/packages/zapp/console/src/components/common/DelayedMount.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/zapp/console/src/components/common/FilterableNamedEntityList.tsx b/packages/zapp/console/src/components/common/FilterableNamedEntityList.tsx index 3c3be4fed..74afadbb9 100644 --- a/packages/zapp/console/src/components/common/FilterableNamedEntityList.tsx +++ b/packages/zapp/console/src/components/common/FilterableNamedEntityList.tsx @@ -1,4 +1,4 @@ -import { Checkbox, debounce, FormControlLabel, FormGroup, Typography } from '@material-ui/core'; +import { Checkbox, debounce, FormControlLabel, FormGroup } from '@material-ui/core'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { NamedEntity } from 'models/Common/types'; import * as React from 'react'; diff --git a/packages/zapp/console/src/components/common/SearchableList.tsx b/packages/zapp/console/src/components/common/SearchableList.tsx index acf02cdf1..6a6798df9 100644 --- a/packages/zapp/console/src/components/common/SearchableList.tsx +++ b/packages/zapp/console/src/components/common/SearchableList.tsx @@ -130,4 +130,4 @@ export const SearchableList = (props: SearchableListProps) => { ); }; -export { SearchResult, PropertyGetter }; +export type { SearchResult, PropertyGetter }; diff --git a/packages/zapp/console/src/components/common/SearchableNamedEntityList.tsx b/packages/zapp/console/src/components/common/SearchableNamedEntityList.tsx index 6a855080a..68b0d7dd9 100644 --- a/packages/zapp/console/src/components/common/SearchableNamedEntityList.tsx +++ b/packages/zapp/console/src/components/common/SearchableNamedEntityList.tsx @@ -1,4 +1,3 @@ -import { Typography } from '@material-ui/core'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { listhoverColor, separatorColor } from 'components/Theme/constants'; import { NamedEntity } from 'models/Common/types'; diff --git a/packages/zapp/console/src/components/common/scopedContext.ts b/packages/zapp/console/src/components/common/scopedContext.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index 597473928..0e27291d2 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -1,54 +1,16 @@ { + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "allowSyntheticDefaultImports": true, - "allowJs": true, - "baseUrl": "src", - "checkJs": false, - "downlevelIteration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "jsx": "react", - "lib": ["es6", "es2021", "dom", "dom.iterable"], - "module": "commonjs", - "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": false, - "noUnusedLocals": false, - "noUnusedParameters": false, + "baseUrl": "./src", "outDir": "./dist", - "removeComments": false, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "target": "es6", - "types": ["node", "webpack-env", "jest", "@testing-library/jest-dom"], - "composite": true, - "paths": { - "@flyteconsole/*": ["../../plugins/*/src"] - } + // TODO: this items should be removed when violations are fixed: + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitAny": false, + "exactOptionalPropertyTypes": false, + "noImplicitOverride": false }, "references": [{ "path": "../../plugins/components" }], - // "extends": "../../../tsconfig.base.json", - // "compilerOptions": { - // "rootDir": "./src", - // "outDir": "./dist" - // }, - // "references": [{ "path": "../../plugins/components" }], - "include": ["src/**/*"], - "exclude": [ - "**/__mocks__", - "**/test", - "**/mocks", - // baseline - "**/node_modules", - "**/dist", - "**/lib", - "**/src/**/*.spec.*", - "**/src/**/*.test.*", - "**/src/**/*.stories.*" - ] + "include": ["src/**/*"] } diff --git a/packages/zapp/console/webpack.dev.config.ts b/packages/zapp/console/webpack.dev.config.ts index 0b8a9eee3..b9d6ae2ef 100644 --- a/packages/zapp/console/webpack.dev.config.ts +++ b/packages/zapp/console/webpack.dev.config.ts @@ -1,7 +1,8 @@ import * as webpack from 'webpack'; import * as HTMLWebpackPlugin from 'html-webpack-plugin'; import * as path from 'path'; -import { processEnv as env, LOCAL_DEV_HOST } from './env'; +import chalk from 'chalk'; +import { LOCAL_DEV_HOST, CERTIFICATE_PATH } from './env'; const { merge } = require('webpack-merge'); const fs = require('fs'); @@ -9,6 +10,22 @@ const common = require('./webpack.common.config'); const devtool = 'eval-cheap-module-source-map'; +// Check if certificate provided and if not - exit early +if ( + !fs.existsSync(`${CERTIFICATE_PATH}/server.key`) || + !fs.existsSync(`${CERTIFICATE_PATH}/server.crt`) +) { + console.log( + chalk.red(`ERROR: Can not locate server.key and server.crt in ${CERTIFICATE_PATH} location`), + ); + console.log( + chalk.red('Please re-genereate your site certificates by running'), + 'make generate_ssl', + chalk.red('than re-run the command'), + ); + process.exit(0); +} + /** * Client configuration * @@ -27,8 +44,8 @@ export const clientConfig: webpack.Configuration = merge(common.default.clientCo server: { type: 'https', options: { - key: fs.readFileSync('../../../script/server.key'), - cert: fs.readFileSync('../../../script/server.crt'), + key: fs.readFileSync(`${CERTIFICATE_PATH}/server.key`), + cert: fs.readFileSync(`${CERTIFICATE_PATH}/server.crt`), }, }, client: { diff --git a/script/generate_ssl.sh b/script/generate_ssl.sh index e216d32c5..3673c3362 100755 --- a/script/generate_ssl.sh +++ b/script/generate_ssl.sh @@ -2,10 +2,13 @@ script="$0" basename="$(dirname $script)" - -echo "Script name $script resides in $basename directory." +output="$basename/certificate" -openssl genrsa -des3 -out "$basename/rootCA.key" 2048 -openssl req -x509 -new -nodes -key "$basename/rootCA.key" -sha256 -days 1024 -out "$basename/rootCA.pem" -openssl req -new -sha256 -nodes -out "$basename/server.csr" -newkey rsa:2048 -keyout "$basename/server.key" -config <( cat "$basename/server.csr.cnf" ) -openssl x509 -req -in "$basename/server.csr" -CA "$basename/rootCA.pem" -CAkey "$basename/rootCA.key" -CAcreateserial -out "$basename/server.crt" -days 500 -sha256 -extfile "$basename/v3.ext" +echo "Script name $script resides in $basename directory. Output would be written to: $output" + +mkdir -p $output + +openssl genrsa -des3 -out "$output/rootCA.key" 2048 +openssl req -x509 -new -nodes -key "$output/rootCA.key" -sha256 -days 1024 -out "$output/rootCA.pem" +openssl req -new -sha256 -nodes -out "$output/server.csr" -newkey rsa:2048 -keyout "$output/server.key" -config <( cat "$basename/server.csr.cnf" ) +openssl x509 -req -in "$output/server.csr" -CA "$output/rootCA.pem" -CAkey "$output/rootCA.key" -CAcreateserial -out "$output/server.crt" -days 500 -sha256 -extfile "$basename/v3.ext" diff --git a/tsconfig.base.json b/tsconfig.base.json index 1eff79958..48e257019 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,64 +1,47 @@ { "compilerOptions": { - "allowSyntheticDefaultImports": true, - "allowJs": true, + "strict": true, "checkJs": false, - "downlevelIteration": true, + "allowJs": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, + "resolveJsonModule": true, + "removeComments": false, "importHelpers": true, + "jsx": "react", "lib": ["es6", "es2021", "dom", "dom.iterable"], + // TODO: switch target to "esnext" when babel would be removed. + "target": "es6", "module": "commonjs", "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": false, - "noUnusedLocals": false, - "noUnusedParameters": false, - "outDir": "./dist", - "removeComments": false, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "es6", - "types": ["node", "webpack-env", "jest"], - - // "lib": ["dom", "dom.iterable", "es2018"], - // "jsx": "react", - // "target": "esnext", - // "module": "commonjs", - // "moduleResolution": "node", + "types": ["node", "webpack-env", "jest", "@testing-library/jest-dom"], - // "allowJs": false, - // "allowUnreachableCode": false, - // "esModuleInterop": true, - // "strict": true, - // "isolatedModules": true, - // "declaration": true, - // "noUnusedLocals": true, - // "noUnusedParameters": true, - // "noImplicitReturns": true, - // "noImplicitThis": true, - // "noImplicitAny": true, - // "importHelpers": true, - // "declarationMap": true, - // "useDefineForClassFields": true, - // "useUnknownInCatchVariables": false, - // "resolveJsonModule": true, - // "experimentalDecorators": true, - // "skipLibCheck": true, + "isolatedModules": true, + "declaration": true, + "declarationMap": true, + "downlevelIteration": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "useUnknownInCatchVariables": false, - // // More strict - // "exactOptionalPropertyTypes": false, // true, - // "noUncheckedIndexedAccess": false, - // "noFallthroughCasesInSwitch": true, - // "noPropertyAccessFromIndexSignature": false, - // "noImplicitOverride": true, + // More strict rules + "exactOptionalPropertyTypes": true, + "noUncheckedIndexedAccess": false, + "noPropertyAccessFromIndexSignature": false, + "noImplicitOverride": true, + "noFallthroughCasesInSwitch": true, "sourceMap": true, "composite": true, "baseUrl": ".", + "outDir": "./dist", "paths": { "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] } @@ -69,6 +52,10 @@ "**/lib", "**/src/**/*.spec.*", "**/src/**/*.test.*", - "**/src/**/*.stories.*" + "**/src/**/*.stories.*", + // old code patterns + "**/__mocks__", + "**/test", + "**/mocks" ] } From b6e9941ed51d2f3bcc544ab4eb630d9efff2f49c Mon Sep 17 00:00:00 2001 From: Eugene Jahn Date: Mon, 2 May 2022 08:39:09 -0700 Subject: [PATCH 13/93] Make whole row clickable to open TaskExecutionDetails panel (#444) * fix: issue 398 * fix: prevent parent onclick event trigger Signed-off-by: eugenejahn --- .../Executions/Tables/NodeExecutionRow.tsx | 13 +++++++++++-- .../components/Executions/Tables/RowExpander.tsx | 6 +++++- .../Executions/Tables/SelectNodeExecutionLink.tsx | 10 ++++++++-- .../src/components/Executions/Tables/styles.ts | 3 +++ .../components/common/ExpandableMonospaceText.tsx | 11 +++++++++-- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/packages/zapp/console/src/components/Executions/Tables/NodeExecutionRow.tsx b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionRow.tsx index e5f7b7ed4..e1d75f2db 100644 --- a/packages/zapp/console/src/components/Executions/Tables/NodeExecutionRow.tsx +++ b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionRow.tsx @@ -35,7 +35,11 @@ const ChildFetchErrorIcon: React.FC<{ disableTouchRipple={true} size="small" title={titleStrings.childGroupFetchFailed} - onClick={() => query.refetch()} + onClick={(e: React.MouseEvent) => { + // prevent the parent row body onClick event trigger + e.stopPropagation(); + query.refetch(); + }} > @@ -102,13 +106,18 @@ export const NodeExecutionRow: React.FC = ({
) : null; + // open the side panel for selected execution's detail + // use null in case if there is no execution provided - when it is null, will close side panel + const onClickRow = () => state.setSelectedExecution(nodeExecution?.id ?? null); + return (
) => { + // prevent the parent row body onClick event trigger + e.stopPropagation(); + onClick(); + }} > {expanded ? : } diff --git a/packages/zapp/console/src/components/Executions/Tables/SelectNodeExecutionLink.tsx b/packages/zapp/console/src/components/Executions/Tables/SelectNodeExecutionLink.tsx index cd1b7fc58..89172d487 100644 --- a/packages/zapp/console/src/components/Executions/Tables/SelectNodeExecutionLink.tsx +++ b/packages/zapp/console/src/components/Executions/Tables/SelectNodeExecutionLink.tsx @@ -12,8 +12,14 @@ export const SelectNodeExecutionLink: React.FC<{ linkText: string; state: NodeExecutionsTableState; }> = ({ className, execution, linkText, state }) => { - // use null in case if there is no execution provied - to close panel - const onClick = () => state.setSelectedExecution(execution?.id ?? null); + // open the side panel for selected execution's detail + const onClick = (e: React.MouseEvent) => { + // prevent the parent row body onClick event trigger + e.stopPropagation(); + // use null in case if there is no execution provided - when it is null will close panel + state.setSelectedExecution(execution?.id ?? null); + }; + return ( {linkText} diff --git a/packages/zapp/console/src/components/Executions/Tables/styles.ts b/packages/zapp/console/src/components/Executions/Tables/styles.ts index 723bea525..4e5709100 100644 --- a/packages/zapp/console/src/components/Executions/Tables/styles.ts +++ b/packages/zapp/console/src/components/Executions/Tables/styles.ts @@ -98,6 +98,9 @@ export const useExecutionTableStyles = makeStyles((theme: Theme) => ({ backgroundColor: listhoverColor, }, }, + clickableRow: { + cursor: 'pointer', + }, rowContent: {}, rowColumns: { alignItems: 'center', diff --git a/packages/zapp/console/src/components/common/ExpandableMonospaceText.tsx b/packages/zapp/console/src/components/common/ExpandableMonospaceText.tsx index 7e32f8bbc..c6a47805c 100644 --- a/packages/zapp/console/src/components/common/ExpandableMonospaceText.tsx +++ b/packages/zapp/console/src/components/common/ExpandableMonospaceText.tsx @@ -119,13 +119,20 @@ export const ExpandableMonospaceText: React.FC = ( }) => { const [expanded, setExpanded] = React.useState(initialExpansionState); const styles = useExpandableMonospaceTextStyles(); - const onClickExpand = () => { + const onClickExpand = (e: React.MouseEvent) => { + // prevent the parent row body onClick event trigger + e.stopPropagation(); + setExpanded(!expanded); if (onExpandCollapse) { onExpandCollapse(!expanded); } }; - const onClickCopy = () => copyToClipboard(text); + const onClickCopy = (e: React.MouseEvent) => { + // prevent the parent row body onClick event trigger + e.stopPropagation(); + copyToClipboard(text); + }; const expandButtonText = expanded ? 'Collapse' : 'Click to expand inline'; From b513280befa44b378b54c8fac9e35b2f8d8f97f8 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Tue, 3 May 2022 14:35:49 -0700 Subject: [PATCH 14/93] ci: allow to start jest config for all project at once (#447) --- jest.config.js | 16 +++++++++ package.json | 10 ++++-- packages/plugins/components/jest.config.js | 6 ++++ packages/plugins/components/package.json | 4 ++- .../plugins/components/src/NavBar/index.tsx | 2 +- .../components/src/NavBar/navbar.test.tsx | 4 +-- packages/zapp/console/jest.config.js | 36 +++++++------------ packages/zapp/console/package.json | 10 +----- script/test/jest-setup.ts | 1 + script/test/jest.base.js | 16 +++++++++ yarn.lock | 4 +-- 11 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 jest.config.js create mode 100644 packages/plugins/components/jest.config.js create mode 100644 script/test/jest-setup.ts create mode 100644 script/test/jest.base.js diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..120b1d53e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,16 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('./script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, + clearMocks: true, + verbose: false, + + setupFilesAfterEnv: ['./script/test/jest-setup.ts'], + projects: ['/packages/zapp/console', '/packages/plugins/components'], + + coverageDirectory: '/.coverage', + collectCoverageFrom: ['**/*.{ts,tsx}', '!**/*/*.stories.{ts,tsx}', '!**/*/*.mocks.{ts,tsx}'], + coveragePathIgnorePatterns: [...sharedConfig.coveragePathIgnorePatterns], + coverageReporters: ['text', 'json', 'html'], +}; diff --git a/package.json b/package.json index 3b577b7c0..5a95662b3 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,9 @@ "build:storybook": "build-storybook", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "storybook": "start-storybook -p 6006", - "test": "cd packages/zapp/console && yarn test && cd ../../../", - "test-coverage": "bash -c 'pushd packages/zapp/console && yarn test-coverage && popd'" + "test": "NODE_ENV=test jest", + "test:clear": "jest --clearCache", + "test-coverage": "NODE_ENV=test jest --coverage" }, "husky": { "hooks": { @@ -54,6 +55,11 @@ "@storybook/manager-webpack5": "^6.4.19", "@storybook/react": "^6.4.19", "@storybook/testing-library": "^0.0.9", + "@testing-library/jest-dom": "^5.5.0", + "@testing-library/react": "^10.0.3", + "@testing-library/react-hooks": "^7.0.2", + "ts-jest": "^26.3.0", + "jest": "^26.0.0", "react-hot-loader": "^4.1.2" } } \ No newline at end of file diff --git a/packages/plugins/components/jest.config.js b/packages/plugins/components/jest.config.js new file mode 100644 index 000000000..ecb112b22 --- /dev/null +++ b/packages/plugins/components/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json index b40b75280..b7e9692ac 100644 --- a/packages/plugins/components/package.json +++ b/packages/plugins/components/package.json @@ -5,6 +5,7 @@ "main": "./dist/index.js", "module": "./lib/esm/index.js", "types": "./lib/esm/index.d.ts", + "license": "Apache-2.0", "private": false, "publishConfig": { "access": "public", @@ -13,7 +14,8 @@ "scripts": { "build": "yarn build:esm && yarn build:cjs", "build:esm": "tsc --module esnext --outDir lib/esm", - "build:cjs": "tsc" + "build:cjs": "tsc", + "test": "NODE_ENV=test jest" }, "dependencies": { "@material-ui/core": "^4.0.0", diff --git a/packages/plugins/components/src/NavBar/index.tsx b/packages/plugins/components/src/NavBar/index.tsx index 39ee1ff37..1e0b7509a 100644 --- a/packages/plugins/components/src/NavBar/index.tsx +++ b/packages/plugins/components/src/NavBar/index.tsx @@ -21,7 +21,7 @@ export const NavBar = (props: NavBarProps) => { elevation={0} id="navbar" position="fixed" - className={props.className} + className={props.className as string} > {/* {content} */} diff --git a/packages/plugins/components/src/NavBar/navbar.test.tsx b/packages/plugins/components/src/NavBar/navbar.test.tsx index 5b7ad96d7..bc0209e1e 100644 --- a/packages/plugins/components/src/NavBar/navbar.test.tsx +++ b/packages/plugins/components/src/NavBar/navbar.test.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import * as React from 'react'; import { render, screen } from '@testing-library/react'; import { NavBar, add } from './index'; @@ -10,7 +10,7 @@ describe('add function', () => { it('NavBar contains correct text', () => { render(); - const text = screen.getByText("It's me - Navigation Bar"); + const text = screen.getByText('NASTYA IS HERE'); expect(text).toBeInTheDocument(); }); }); diff --git a/packages/zapp/console/jest.config.js b/packages/zapp/console/jest.config.js index f04f9c7ba..52d5b8960 100644 --- a/packages/zapp/console/jest.config.js +++ b/packages/zapp/console/jest.config.js @@ -1,40 +1,28 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + module.exports = { - preset: 'ts-jest', - testEnvironment: 'jsdom', + ...sharedConfig, testPathIgnorePatterns: ['__stories__', '.storybook', 'node_modules', 'dist', 'build'], setupFilesAfterEnv: ['/src/test/setupTests.ts'], - clearMocks: true, - verbose: false, - moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'node'], modulePaths: ['/src'], roots: ['/src'], transformIgnorePatterns: ['/node_modules/(?!@flyteorg/flyteidl)', 'protobufjs/minimal'], - transform: { - '^.+\\.(j|t)sx?$': 'ts-jest', - }, + moduleNameMapper: { - '@flyteconsole/(.*)': [ - '/../../../packages/plugins/$1/src', - '/../../../packages/zapp/$1/src', - ], + ...sharedConfig.moduleNameMapper, '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/assetsTransformer.js', }, - coverageDirectory: '../../../.coverage', - collectCoverageFrom: ['**/*.{ts,tsx}', '!**/*/*.stories.{ts,tsx}', '!**/*/*.mocks.{ts,tsx}'], coveragePathIgnorePatterns: [ + ...sharedConfig.coveragePathIgnorePatterns, '__stories__', - '__mocks__', - '/.storybook', - '/node_modules', - '/dist', - '/build', - '/src/tsd', - '/src/server.ts', - '/.eslintrc.js', - '\\.config.js$', + 'src/components/App.tsx', + 'src/tsd', + 'src/client.tsx', + 'src/protobuf.ts', + 'src/server.ts', ], - coverageReporters: ['text', 'json', 'html'], }; diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index fa1706344..6a0b0863a 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -18,8 +18,7 @@ "fix": "yarn lint --fix && yarn format", "mockApi": "node ./mockApi", "tdd": "yarn run test --watch --verbose false", - "test": "NODE_ENV=test jest --config=jest.config.js", - "test-coverage": "NODE_ENV=test jest --coverage --config=jest.config.js" + "test": "NODE_ENV=test jest" }, "keywords": [ "react", @@ -74,15 +73,11 @@ "@semantic-release/github": "^7.0.5", "@semantic-release/npm": "^7.0.5", "@semantic-release/release-notes-generator": "^9.0.1", - "@testing-library/jest-dom": "^5.5.0", - "@testing-library/react": "^10.0.3", - "@testing-library/react-hooks": "^7.0.2", "@types/cheerio": "^0.22.2", "@types/d3-shape": "^1.2.6", "@types/debug": "^0.0.30", "@types/dom-helpers": "^3.4.1", "@types/express": "^4.17.2", - "@types/jest": "^26.0.0", "@types/js-yaml": "^3.10.1", "@types/linkify-it": "^2.1.0", "@types/lodash": "^4.14.68", @@ -108,7 +103,6 @@ "axios": "^0.21.2", "axios-mock-adapter": "^1.16.0", "babel-core": "^7.0.0-0", - "babel-jest": "^26.0.0", "babel-loader": "^8.2.3", "camelcase-keys": "^6.1.1", "classnames": "^2.3.1", @@ -133,7 +127,6 @@ "html-webpack-plugin": "^5.5.0", "husky": "^4.2.5", "intersection-observer": "^0.7.0", - "jest": "^26.0.0", "linkify-it": "^2.2.0", "lint-staged": "^7.0.4", "lossless-json": "^1.0.3", @@ -161,7 +154,6 @@ "shallowequal": "^1.1.0", "snakecase-keys": "^3.1.0", "source-map-loader": "^3.0.1", - "ts-jest": "^26.3.0", "ts-loader": "^9.2.6", "ts-node": "^8.0.2", "typescript": "^4.6.2", diff --git a/script/test/jest-setup.ts b/script/test/jest-setup.ts new file mode 100644 index 000000000..7b0828bfa --- /dev/null +++ b/script/test/jest-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/script/test/jest.base.js b/script/test/jest.base.js new file mode 100644 index 000000000..6b607e83a --- /dev/null +++ b/script/test/jest.base.js @@ -0,0 +1,16 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + setupFilesAfterEnv: ['../../../script/test/jest-setup.ts'], + testPathIgnorePatterns: ['dist', 'node_modules', 'lib'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'node'], + transform: { + '^.+\\.(j|t)sx?$': 'ts-jest', + }, + + moduleNameMapper: { + '@flyteconsole/(.*)': ['/packages/plugins/$1/src', '/packages/zapp/$1/src'], + }, + + coveragePathIgnorePatterns: ['mocks', 'src/index'], +}; diff --git a/yarn.lock b/yarn.lock index 124f441c4..6c3b34f27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4091,7 +4091,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@26.x", "@types/jest@^26.0.0": +"@types/jest@*", "@types/jest@26.x": version "26.0.16" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.16.tgz#b47abd50f6ed0503f589db8e126fc8eb470cf87c" integrity sha512-Gp12+7tmKCgv9JjtltxUXokohCAEZfpJaEW5tn871SGRp8I+bRWBonQO7vW5NHwnAHe5dd50+Q4zyKuN35i09g== @@ -5529,7 +5529,7 @@ babel-core@^7.0.0-0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^26.0.0, babel-jest@^26.6.3: +babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== From ecfdd4cbc10c5ff9be6211d261b0e3a764e3ca08 Mon Sep 17 00:00:00 2001 From: Carina Ursu Date: Wed, 4 May 2022 12:02:36 -0700 Subject: [PATCH 15/93] minor: unable to view all the workflow versions (#446) * fix: unable to view all the workflow versions Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu Co-authored-by: Carina Ursu --- .../ReactFlow/transformDAGToReactFlowV2.tsx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx index 1da17bdc7..d3b11a33b 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx @@ -50,7 +50,7 @@ interface BuildDataProps { rootParentNode: dNode; currentNestedView: string[]; } -export const buildReactFlowDataProps = (props: BuildDataProps) => { +const buildReactFlowDataProps = (props: BuildDataProps) => { const { node, nodeExecutionsById, @@ -61,13 +61,13 @@ export const buildReactFlowDataProps = (props: BuildDataProps) => { currentNestedView, } = props; - const taskType = node.value?.template ? node.value.template.type : null; - const displayName = node.name; + const { value: nodeValue, name: displayName, scopedId, type: nodeType } = node; + const taskType = nodeValue?.template?.type ?? null; const mapNodeExecutionStatus = () => { if (nodeExecutionsById) { - if (nodeExecutionsById[node.scopedId]) { - return nodeExecutionsById[node.scopedId].closure.phase as NodeExecutionPhase; + if (nodeExecutionsById[scopedId]) { + return nodeExecutionsById[scopedId].closure.phase as NodeExecutionPhase; } else { return NodeExecutionPhase.SKIPPED; } @@ -77,34 +77,35 @@ export const buildReactFlowDataProps = (props: BuildDataProps) => { }; const nodeExecutionStatus = mapNodeExecutionStatus(); + // nodeExecutionsById null check is required as on first render it can be undefined const cacheStatus: CatalogCacheStatus = - nodeExecutionsById[node.scopedId]?.closure.taskNodeMetadata?.cacheStatus ?? + nodeExecutionsById?.[scopedId]?.closure.taskNodeMetadata?.cacheStatus ?? CatalogCacheStatus.CACHE_DISABLED; const dataProps = { nodeExecutionStatus, text: displayName, handles: [], - nodeType: node.type, - scopedId: node.scopedId, + nodeType, + scopedId, taskType, cacheStatus, onNodeSelectionChanged: () => { if (onNodeSelectionChanged) { - onNodeSelectionChanged([node.scopedId]); + onNodeSelectionChanged([scopedId]); } }, onAddNestedView: () => { onAddNestedView({ parent: rootParentNode.scopedId, - view: node.scopedId, + view: scopedId, }); }, onRemoveNestedView, }; for (const rootParentId in currentNestedView) { - if (node.scopedId === rootParentId) { + if (scopedId === rootParentId) { dataProps['currentNestedView'] = currentNestedView[rootParentId]; } } @@ -119,7 +120,7 @@ interface BuildNodeProps { parentNode?: dNode; typeOverride?: dTypes; } -export const buildReactFlowNode = ({ +const buildReactFlowNode = ({ node, dataProps, rootParentNode, @@ -214,7 +215,7 @@ export const buildGraphMapping = (props): ReactFlowGraphMapping => { const parse = (props: ParseProps) => { const { contextNode, contextParent, rootParentNode, nodeDataProps } = props; let context: ReactFlowGraph | null = null; - contextNode.nodes.map((node: dNode) => { + contextNode.nodes.filter(n => !!n).map((node: dNode) => { /* Case: node has children => recurse */ if (nodeHasChildren(node)) { if (rootParentNode) { From 5b44539c26cabeb910a95c292dadea34cfb40fa0 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 5 May 2022 14:29:42 -0700 Subject: [PATCH 16/93] chore(tsc): exclude test/stories/mock files only from build (#451) * chore(tsc): exclude test/stories/mock files only from build Signed-off-by: Nastya Rusina --- packages/plugins/components/package.json | 4 ++-- packages/plugins/components/src/NavBar/index.tsx | 2 +- .../components/src/NavBar/navbar.stories.tsx | 2 +- packages/plugins/components/tsconfig.build.json | 15 +++++++++++++++ packages/zapp/console/tsconfig.build.json | 15 +++++++++++++++ packages/zapp/console/tsconfig.json | 6 +++++- tsconfig.base.json | 13 +------------ 7 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 packages/plugins/components/tsconfig.build.json create mode 100644 packages/zapp/console/tsconfig.build.json diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json index b7e9692ac..92a91613e 100644 --- a/packages/plugins/components/package.json +++ b/packages/plugins/components/package.json @@ -13,8 +13,8 @@ }, "scripts": { "build": "yarn build:esm && yarn build:cjs", - "build:esm": "tsc --module esnext --outDir lib/esm", - "build:cjs": "tsc", + "build:esm": "tsc --module esnext --outDir lib/esm --project ./tsconfig.build.json", + "build:cjs": "tsc --project ./tsconfig.build.json", "test": "NODE_ENV=test jest" }, "dependencies": { diff --git a/packages/plugins/components/src/NavBar/index.tsx b/packages/plugins/components/src/NavBar/index.tsx index 1e0b7509a..81f64d993 100644 --- a/packages/plugins/components/src/NavBar/index.tsx +++ b/packages/plugins/components/src/NavBar/index.tsx @@ -7,7 +7,7 @@ import { DefaultNavBarContent } from './defaultContent'; export const navBarContentId = 'nav-bar-content'; -interface NavBarProps { +export interface NavBarProps { useCustomContent?: boolean; // rename to show that it is a backNavigation className?: string; } diff --git a/packages/plugins/components/src/NavBar/navbar.stories.tsx b/packages/plugins/components/src/NavBar/navbar.stories.tsx index cf1707507..c415bec36 100644 --- a/packages/plugins/components/src/NavBar/navbar.stories.tsx +++ b/packages/plugins/components/src/NavBar/navbar.stories.tsx @@ -9,7 +9,7 @@ export default { component: NavBar, } as ComponentMeta; -const useStyles = makeStyles((theme: Theme) => ({ +const useStyles = makeStyles((_theme: Theme) => ({ updatedOne: { backgroundColor: 'lightblue', color: 'black', diff --git a/packages/plugins/components/tsconfig.build.json b/packages/plugins/components/tsconfig.build.json new file mode 100644 index 000000000..b48c439cd --- /dev/null +++ b/packages/plugins/components/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + // files excluded from the build, we can not put it inro default tsconfig + // as it will screw VSCode IntelliSence + "**/test", + "**/mocks", + "**/__mocks__", + "**/__stories__", + "src/**/*.spec.*", + "src/**/*.test.*", + "src/**/*.mock.*", + "src/**/*.stories.*" + ] +} diff --git a/packages/zapp/console/tsconfig.build.json b/packages/zapp/console/tsconfig.build.json new file mode 100644 index 000000000..b48c439cd --- /dev/null +++ b/packages/zapp/console/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + // files excluded from the build, we can not put it inro default tsconfig + // as it will screw VSCode IntelliSence + "**/test", + "**/mocks", + "**/__mocks__", + "**/__stories__", + "src/**/*.spec.*", + "src/**/*.test.*", + "src/**/*.mock.*", + "src/**/*.stories.*" + ] +} diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index 0e27291d2..7a0b1db20 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -12,5 +12,9 @@ "noImplicitOverride": false }, "references": [{ "path": "../../plugins/components" }], - "include": ["src/**/*"] + "include": [ + "src/**/*", + // TODO: *.json could be removed when tsconfig.build.json would be properly consumed by webpack + "src/**/*.json" + ] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 48e257019..52c8f322e 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -46,16 +46,5 @@ "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] } }, - "exclude": [ - "**/node_modules", - "**/dist", - "**/lib", - "**/src/**/*.spec.*", - "**/src/**/*.test.*", - "**/src/**/*.stories.*", - // old code patterns - "**/__mocks__", - "**/test", - "**/mocks" - ] + "exclude": ["**/node_modules", "**/dist", "**/lib"] } From 560b645b4e84f7809c1d72cf82b839a7904fc7fe Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 5 May 2022 19:40:19 -0700 Subject: [PATCH 17/93] ci: ensure that webpack too doesn't include test/mock/specs files (#452) Signed-off-by: Nastya Rusina --- packages/zapp/console/tsconfig.json | 6 +----- .../zapp/console/webpack.common.config.ts | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index 7a0b1db20..0e27291d2 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -12,9 +12,5 @@ "noImplicitOverride": false }, "references": [{ "path": "../../plugins/components" }], - "include": [ - "src/**/*", - // TODO: *.json could be removed when tsconfig.build.json would be properly consumed by webpack - "src/**/*.json" - ] + "include": ["src/**/*"] } diff --git a/packages/zapp/console/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts index 9a31b6645..eebd81d8d 100644 --- a/packages/zapp/console/webpack.common.config.ts +++ b/packages/zapp/console/webpack.common.config.ts @@ -16,11 +16,15 @@ export const serviceName = process.env.SERVICE_NAME || 'not set'; /** Absolute path to webpack output folder */ export const dist = path.join(__dirname, 'dist'); +/** Absolute path to build specific tsconfig */ +export const configFile = path.resolve(__dirname, './tsconfig.build.json'); + // Report current configuration console.log(chalk.cyan('Exporting Webpack config with following configurations:')); console.log(chalk.blue('Environment:'), chalk.green(env.NODE_ENV)); console.log(chalk.blue('Output directory:'), chalk.green(path.resolve(dist))); console.log(chalk.blue('Public path:'), chalk.green(publicPath)); +console.log(chalk.yellow('TSconfig file used for build:'), chalk.green(configFile)); /** Adds sourcemap support */ export const sourceMapRule: webpack.RuleSetRule = { @@ -71,8 +75,12 @@ export const limitChunksPlugin = new webpack.optimize.LimitChunkCountPlugin({ const typescriptRule = { test: /\.tsx?$/, exclude: /node_modules/, - // include: path.resolve(__dirname, 'src'), // narusina - check with Carina as we need to remove it for micropackages structure - use: [{ loader: 'ts-loader', options: { transpileOnly: true } }], + loader: 'ts-loader', + options: { + configFile, + // disable type checker - as it's done by ForkTsCheckerWebpackPlugin + transpileOnly: true, + }, }; const resolve = { @@ -121,7 +129,7 @@ export const clientConfig: webpack.Configuration = { chunkFilename: '[name]-[chunkhash].chunk.js', }, plugins: [ - new ForkTsCheckerWebpackPlugin(), + new ForkTsCheckerWebpackPlugin({ typescript: { configFile } }), favIconPlugin, statsWriterPlugin, getDefinePlugin(false), @@ -149,7 +157,11 @@ export const serverConfig: webpack.Configuration = { libraryTarget: 'commonjs2', clean: true, }, - plugins: [limitChunksPlugin, new ForkTsCheckerWebpackPlugin(), getDefinePlugin(true)], + plugins: [ + limitChunksPlugin, + new ForkTsCheckerWebpackPlugin({ typescript: { configFile } }), + getDefinePlugin(true), + ], }; export const clientEnv = JSON.stringify(processEnv); From 5e2bcbc638327af8ff6c6a3621266a3839bddba4 Mon Sep 17 00:00:00 2001 From: Carina Ursu Date: Fri, 6 May 2022 13:12:04 -0700 Subject: [PATCH 18/93] minor: add support for StructuredDataSet Input/Output type (#445) * chore: support for StructuredDataSet Input/Output type Signed-off-by: Carina Ursu * chore: add tests Signed-off-by: Carina Ursu * chore: add package Signed-off-by: Carina Ursu * chore: resolving local package issue Signed-off-by: Carina Ursu * chore: yarn lock Signed-off-by: Carina Ursu * chore: stories Signed-off-by: Carina Ursu * chore: fix associative arrays in copy functionality Signed-off-by: Carina Ursu * chore: fix scalar stories Signed-off-by: Carina Ursu * chore: oops Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu * chore: revert old viewer to original Signed-off-by: Carina Ursu * chore: fix Signed-off-by: Carina Ursu * chore: remove non-null assertion Signed-off-by: Carina Ursu * chore: fix types Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu * chore: fix tests Signed-off-by: Carina Ursu * chore: fix test types Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu Co-authored-by: Carina Ursu --- packages/zapp/console/package.json | 1 + .../Literals/DeprecatedLiteralMapViewer.tsx | 50 +++ .../components/Literals/LiteralMapViewer.tsx | 40 +- .../src/components/Literals/LiteralValue.tsx | 4 +- .../__stories__/Collection.stories.tsx | 30 +- .../Literals/__stories__/Map.stories.tsx | 30 +- .../__stories__/ProtobufStruct.stories.tsx | 41 +- .../Literals/__stories__/Scalar.stories.tsx | 43 +- .../__stories__/StructuredDataSet.stories.tsx | 176 ++++++++ .../__stories__/helpers/typeGenerators.ts | 45 ++ .../src/components/Literals/helpers.ts | 390 ++++++++++++++++++ .../helpers/genCollectionTestcase.mock.ts | 23 ++ .../test/helpers/genMapTestCase.mock.ts | 23 ++ .../helpers/genScalarBinaryTestCase.mock.ts | 15 + .../test/helpers/genScalarBlobCases.mock.ts | 44 ++ .../test/helpers/genScalarErrorCase.mock.ts | 38 ++ .../test/helpers/genScalarGenericCase.mock.ts | 143 +++++++ .../test/helpers/genScalarNoneCase.mock.ts | 13 + .../helpers/genScalarPrimitiveCases.mock.ts | 90 ++++ .../test/helpers/genScalarSchemaCase.mock.ts | 46 +++ .../helpers/genScalarStructuredDsCase.mock.ts | 131 ++++++ .../components/Literals/test/helpers/index.ts | 23 ++ .../Literals/test/helpers/literalHelpers.ts | 123 ++++++ .../Literals/test/helpers/mock_simpleTypes.ts | 17 + .../Literals/test/literal.helpers.test.ts | 83 ++++ .../src/components/Literals/test/types.d.ts | 8 + .../src/components/common/DumpJSON.tsx | 8 +- .../components/common/PanelSection/index.tsx | 1 + .../src/components/common/ReactJsonView.tsx | 99 +++++ yarn.lock | 100 ++++- 30 files changed, 1810 insertions(+), 68 deletions(-) create mode 100644 packages/zapp/console/src/components/Literals/DeprecatedLiteralMapViewer.tsx create mode 100644 packages/zapp/console/src/components/Literals/__stories__/StructuredDataSet.stories.tsx create mode 100644 packages/zapp/console/src/components/Literals/__stories__/helpers/typeGenerators.ts create mode 100644 packages/zapp/console/src/components/Literals/helpers.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genCollectionTestcase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genMapTestCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarBinaryTestCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarBlobCases.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarErrorCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarGenericCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarNoneCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarPrimitiveCases.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarSchemaCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/genScalarStructuredDsCase.mock.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/index.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/literalHelpers.ts create mode 100644 packages/zapp/console/src/components/Literals/test/helpers/mock_simpleTypes.ts create mode 100644 packages/zapp/console/src/components/Literals/test/literal.helpers.test.ts create mode 100644 packages/zapp/console/src/components/Literals/test/types.d.ts create mode 100644 packages/zapp/console/src/components/common/ReactJsonView.tsx diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 6a0b0863a..545f10daa 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -47,6 +47,7 @@ "react-chartjs-2": "^4.0.0", "react-flow-renderer": "10.1.1", "react-ga4": "^1.4.1", + "react-json-view": "^1.21.3", "react-transition-group": "^2.3.1", "serve-static": "^1.12.3", "tslib": "^1.9.0" diff --git a/packages/zapp/console/src/components/Literals/DeprecatedLiteralMapViewer.tsx b/packages/zapp/console/src/components/Literals/DeprecatedLiteralMapViewer.tsx new file mode 100644 index 000000000..f8ec614bb --- /dev/null +++ b/packages/zapp/console/src/components/Literals/DeprecatedLiteralMapViewer.tsx @@ -0,0 +1,50 @@ +import classnames from 'classnames'; +import { sortedObjectEntries } from 'common/utils'; +import { useCommonStyles } from 'components/common/styles'; +import { Literal, LiteralMap } from 'models/Common/types'; +import * as React from 'react'; +import { htmlEntities } from './constants'; +import { LiteralValue } from './LiteralValue'; +import { NoneTypeValue } from './Scalar/NoneTypeValue'; + +export const NoDataIsAvailable = () => { + return ( +

+ No data is available. +

+ ); +}; + +/** Renders a LiteralMap as a formatted object */ +export const DeprecatedLiteralMapViewer: React.FC<{ + className?: string; + map: LiteralMap | null; + showBrackets?: boolean; +}> = ({ className, map, showBrackets = false }) => { + if (!map) { + return ; + } + + const commonStyles = useCommonStyles(); + const { literals } = map; + const mapContent = Object.keys(literals).length ? ( +
    + {sortedObjectEntries(literals).map(([key, value]) => ( +
  • + +
  • + ))} +
+ ) : ( +
+ +
+ ); + return ( + <> + {showBrackets && {htmlEntities.leftCurlyBrace}} + {mapContent} + {showBrackets && {htmlEntities.rightCurlyBrace}} + + ); +}; diff --git a/packages/zapp/console/src/components/Literals/LiteralMapViewer.tsx b/packages/zapp/console/src/components/Literals/LiteralMapViewer.tsx index 5e594c635..77be18da2 100644 --- a/packages/zapp/console/src/components/Literals/LiteralMapViewer.tsx +++ b/packages/zapp/console/src/components/Literals/LiteralMapViewer.tsx @@ -1,10 +1,7 @@ -import classnames from 'classnames'; -import { sortedObjectEntries } from 'common/utils'; -import { useCommonStyles } from 'components/common/styles'; -import { Literal, LiteralMap } from 'models/Common/types'; +import { ReactJsonViewWrapper } from 'components/common/ReactJsonView'; +import { LiteralMap } from 'models/Common/types'; import * as React from 'react'; -import { htmlEntities } from './constants'; -import { LiteralValue } from './LiteralValue'; +import { transformLiterals } from './helpers'; import { NoneTypeValue } from './Scalar/NoneTypeValue'; export const NoDataIsAvailable = () => { @@ -20,31 +17,18 @@ export const LiteralMapViewer: React.FC<{ className?: string; map: LiteralMap | null; showBrackets?: boolean; -}> = ({ className, map, showBrackets = false }) => { +}> = ({ map }) => { if (!map) { return ; } - const commonStyles = useCommonStyles(); const { literals } = map; - const mapContent = Object.keys(literals).length ? ( -
    - {sortedObjectEntries(literals).map(([key, value]) => ( -
  • - -
  • - ))} -
- ) : ( -
- -
- ); - return ( - <> - {showBrackets && {htmlEntities.leftCurlyBrace}} - {mapContent} - {showBrackets && {htmlEntities.rightCurlyBrace}} - - ); + + if (!Object.keys(literals).length) { + return ; + } + + const transformedLiterals = transformLiterals(literals); + + return ; }; diff --git a/packages/zapp/console/src/components/Literals/LiteralValue.tsx b/packages/zapp/console/src/components/Literals/LiteralValue.tsx index 302db910e..e4e4756b9 100644 --- a/packages/zapp/console/src/components/Literals/LiteralValue.tsx +++ b/packages/zapp/console/src/components/Literals/LiteralValue.tsx @@ -1,7 +1,7 @@ import { Literal, LiteralCollection, LiteralMap, Scalar } from 'models/Common/types'; import * as React from 'react'; import { LiteralCollectionViewer } from './LiteralCollectionViewer'; -import { LiteralMapViewer } from './LiteralMapViewer'; +import { DeprecatedLiteralMapViewer } from './DeprecatedLiteralMapViewer'; import { ScalarValue } from './Scalar/ScalarValue'; import { useLiteralStyles } from './styles'; import { UnsupportedType } from './UnsupportedType'; @@ -27,7 +27,7 @@ export const LiteralValue: React.FC<{ return ( <> - ; + const map = { literals: { [label]: { collection, value: 'collection' } } }; + return ( + <> +
+
+ OLD + + + + + +
+
+ NEW + + + + + +
+
+ + ); } stories.add('Binary', () => diff --git a/packages/zapp/console/src/components/Literals/__stories__/Map.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/Map.stories.tsx index 4a4b49cdb..6336fa8e0 100644 --- a/packages/zapp/console/src/components/Literals/__stories__/Map.stories.tsx +++ b/packages/zapp/console/src/components/Literals/__stories__/Map.stories.tsx @@ -1,8 +1,7 @@ import { storiesOf } from '@storybook/react'; import { LiteralMap } from 'models/Common/types'; import * as React from 'react'; -import { LiteralValue } from '../LiteralValue'; -import { CardDecorator } from './CardDecorator'; +import { Card, CardContent } from '@material-ui/core'; import { binaryLiterals, blobLiterals, @@ -11,12 +10,35 @@ import { primitiveLiterals, schemaLiterals, } from './literalValues'; +import { LiteralMapViewer } from '../LiteralMapViewer'; +import { DeprecatedLiteralMapViewer } from '../DeprecatedLiteralMapViewer'; const stories = storiesOf('Literals/Map', module); -stories.addDecorator(CardDecorator); function renderMap(label: string, map: LiteralMap) { - return ; + const fullMap = { literals: { [label]: { map, value: 'map' } } }; + return ( + <> +
+
+ OLD + + + + + +
+
+ NEW + + + + + +
+
+ + ); } stories.add('Binary', () => diff --git a/packages/zapp/console/src/components/Literals/__stories__/ProtobufStruct.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/ProtobufStruct.stories.tsx index 8781df62d..cc84b8386 100644 --- a/packages/zapp/console/src/components/Literals/__stories__/ProtobufStruct.stories.tsx +++ b/packages/zapp/console/src/components/Literals/__stories__/ProtobufStruct.stories.tsx @@ -1,23 +1,41 @@ import { storiesOf } from '@storybook/react'; import { ProtobufListValue, ProtobufStruct } from 'models/Common/types'; import * as React from 'react'; -import { LiteralValue } from '../LiteralValue'; -import { CardDecorator } from './CardDecorator'; +import { Card, CardContent } from '@material-ui/core'; import { protobufValues } from './protobufValues'; +import { LiteralMapViewer } from '../LiteralMapViewer'; + +import { DeprecatedLiteralMapViewer } from '../DeprecatedLiteralMapViewer'; const stories = storiesOf('Literals/ProtobufStruct', module); -stories.addDecorator(CardDecorator); function renderStruct(label: string, struct: ProtobufStruct) { + const map = { + literals: { + [label]: { scalar: { value: 'generic', generic: struct }, value: 'scalar' }, + }, + }; return ( - + <> +
+
+ OLD + + + + + +
+
+ NEW + + + + + +
+
+ ); } @@ -30,7 +48,6 @@ stories.add('list', () => kind: 'listValue', listValue: { values: [ - ...Object.values(protobufValues), { kind: 'structValue', structValue: { fields: protobufValues }, diff --git a/packages/zapp/console/src/components/Literals/__stories__/Scalar.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/Scalar.stories.tsx index f79996aea..051658e55 100644 --- a/packages/zapp/console/src/components/Literals/__stories__/Scalar.stories.tsx +++ b/packages/zapp/console/src/components/Literals/__stories__/Scalar.stories.tsx @@ -1,8 +1,8 @@ import { storiesOf } from '@storybook/react'; import { Scalar } from 'models/Common/types'; import * as React from 'react'; -import { ScalarValue } from '../Scalar/ScalarValue'; -import { CardDecorator } from './CardDecorator'; +import { Card, CardContent } from '@material-ui/core'; +import { LiteralMapViewer } from '../LiteralMapViewer'; import { binaryScalars, blobScalars, @@ -11,22 +11,45 @@ import { primitiveScalars, schemaScalars, } from './scalarValues'; +import { DeprecatedLiteralMapViewer } from '../DeprecatedLiteralMapViewer'; const stories = storiesOf('Literals/Scalar', module); -stories.addDecorator(CardDecorator); -const renderScalars = (scalars: Dictionary) => +var renderScalars = (scalars: Dictionary) => { + const literals = {}; + Object.entries(scalars).map(([label, value]) => { - return ; + literals[label] = { scalar: value, value: 'scalar' }; }); + const map = { literals }; + return ( + <> +
+
+ OLD + + + + + +
+
+ NEW + + + + + +
+
+ + ); +}; + stories.add('Binary', () => <>{renderScalars(binaryScalars)}); stories.add('Blob', () => <>{renderScalars(blobScalars)}); stories.add('Error', () => <>{renderScalars(errorScalars)}); -stories.add('NoneType', () => ( - <> - - -)); +stories.add('NoneType', () => <>{renderScalars([noneTypeScalar])}); stories.add('Primitive', () => <>{renderScalars(primitiveScalars)}); stories.add('Schema', () => <>{renderScalars(schemaScalars)}); diff --git a/packages/zapp/console/src/components/Literals/__stories__/StructuredDataSet.stories.tsx b/packages/zapp/console/src/components/Literals/__stories__/StructuredDataSet.stories.tsx new file mode 100644 index 000000000..7f4d6458f --- /dev/null +++ b/packages/zapp/console/src/components/Literals/__stories__/StructuredDataSet.stories.tsx @@ -0,0 +1,176 @@ +import { storiesOf } from '@storybook/react'; +import { Scalar } from 'models/Common/types'; +import { Card, CardContent } from '@material-ui/core'; +import * as React from 'react'; +import { Core } from 'flyteidl'; +import { LiteralMapViewer } from '../LiteralMapViewer'; +import { blobScalars } from './scalarValues'; +import { extractSimpleTypes, extractSchemaTypes, extractBlobTypes } from './helpers/typeGenerators'; + +const stories = storiesOf('Literals/StructuredDataSet', module); + +function generateStructuredDataset(label: string, literalType: Core.ILiteralType) { + return { + literals: { + [label]: { + scalar: { + structuredDataset: { + uri: 's3://random-val', + metadata: { + structuredDatasetType: { + columns: [ + { + name: 'age', + literalType, + }, + ], + format: 'parquet', + }, + }, + }, + value: 'structuredDataset', + }, + value: 'scalar', + }, + }, + }; +} + +function generateSimpleTypes() { + const simpleTypes = extractSimpleTypes().map((simpleType) => { + return Object.keys(simpleType).map((key) => { + return generateStructuredDataset(`simple_${key}`, simpleType[key]); + }); + }); + return simpleTypes.flat(); +} + +function generateSchemaTypes() { + const schemaTypes = extractSchemaTypes(); + const retObj = schemaTypes + .map((schemaType) => { + return Object.keys(schemaType).map((key) => { + const v = schemaType[key]; + return generateStructuredDataset(`schema${key}`, v); + }); + }) + .flat(); + + return retObj; +} + +function generateBlobTypes() { + return Object.keys(blobScalars).map((key) => { + const value = blobScalars[key]?.['blob']?.metadata?.type; + return generateStructuredDataset(key, { + type: 'blob', + blob: value, + }); + }); +} + +function generateCollectionTypes() { + const collectionTypes = []; + + const simpleTypes = extractSimpleTypes() + .map((simpleType) => { + return Object.keys(simpleType).map((key) => { + return generateStructuredDataset(`simple_${key}`, { + type: 'collectionType', + collectionType: simpleType[key], + }); + }); + }) + .flat(); + collectionTypes.push(...simpleTypes); + + // blobTypes + const blobTypes = extractBlobTypes(); + collectionTypes.push( + ...blobTypes + .map((value) => { + return Object.keys(value).map((key) => { + return generateStructuredDataset(key, { + type: 'collectionType', + collectionType: value[key], + }); + }); + }) + .flat(), + ); + + return collectionTypes; +} + +function generateMapValueypes() { + const mapValueTypes = []; + + const simpleTypes = extractSimpleTypes() + .map((simpleType) => { + return Object.keys(simpleType).map((key) => { + return generateStructuredDataset(`simple_${key}`, { + type: 'mapValueType', + mapValueType: simpleType[key], + }); + }); + }) + .flat(); + mapValueTypes.push(...simpleTypes); + + // blobTypes + const blobTypes = extractBlobTypes(); + mapValueTypes.push( + ...blobTypes + .map((value) => { + return Object.keys(value).map((key) => { + return generateStructuredDataset(key, { + type: 'mapValueType', + mapValueType: value[key], + }); + }); + }) + .flat(), + ); + + return mapValueTypes; +} + +function generateEnumTypes() { + const mapValueTypes = [ + generateStructuredDataset(`With_values`, { + type: 'enumType', + enumType: { values: ['1', '2', '3'] }, + }), + generateStructuredDataset(`With_no_values`, { + type: 'enumType', + enumType: { values: [] }, + }), + generateStructuredDataset(`With_null_values`, { + type: 'enumType', + enumType: { values: null }, + }), + ]; + + return mapValueTypes; +} + +const renderScalars = (scalars: Dictionary) => { + const items = Object.entries(scalars).map(([_label, value]) => { + return ( + + + + + + ); + }); + + return
{items}
; +}; + +stories.add('Simple types', () => <>{renderScalars(generateSimpleTypes())}); +stories.add('Blob Type', () => <>{renderScalars(generateBlobTypes())}); +stories.add('Schema types', () => <>{renderScalars(generateSchemaTypes())}); +stories.add('Collection Type', () => <>{renderScalars(generateCollectionTypes())}); +stories.add('mapValue Type', () => <>{renderScalars(generateMapValueypes())}); +stories.add('Enum Type', () => <>{renderScalars(generateEnumTypes())}); diff --git a/packages/zapp/console/src/components/Literals/__stories__/helpers/typeGenerators.ts b/packages/zapp/console/src/components/Literals/__stories__/helpers/typeGenerators.ts new file mode 100644 index 000000000..edf237870 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/__stories__/helpers/typeGenerators.ts @@ -0,0 +1,45 @@ +import { Core } from 'flyteidl'; +import { + blobScalars, + schemaScalars, +} from '../scalarValues'; + +// SIMPLE +type GeneratedSimpleType = { + [key in Core.SimpleType]?: Core.LiteralType; +}; +export function extractSimpleTypes() { + const simpleTypes: GeneratedSimpleType[] = Object.keys(Core.SimpleType).map((key) => ({ + [key]: { + type: 'simple', + simple: Core.SimpleType[key], + }, + })); + return simpleTypes; +} + +// SCHEMA +export function extractSchemaTypes() { + return Object.keys(schemaScalars).map((key) => { + const value = schemaScalars[key]; + return { + [key]: { + type: 'schema', + schema: value?.schema?.type, + }, + }; + }); +} + +// COLLECTION TYPE +export function extractBlobTypes() { + return Object.keys(blobScalars).map((key) => { + const value = blobScalars[key]?.['blob']?.metadata?.type; + return { + [key]: { + type: 'blob', + blob: value, + }, + }; + }); +} diff --git a/packages/zapp/console/src/components/Literals/helpers.ts b/packages/zapp/console/src/components/Literals/helpers.ts new file mode 100644 index 000000000..f04f6574a --- /dev/null +++ b/packages/zapp/console/src/components/Literals/helpers.ts @@ -0,0 +1,390 @@ +import { formatDateUTC, protobufDurationToHMS } from 'common/formatters'; +import { timestampToDate } from 'common/utils'; +import { Core, Protobuf } from 'flyteidl'; +import * as Long from 'long'; +import { BlobDimensionality, SchemaColumnType } from 'models/Common/types'; + +const DEFAULT_UNSUPPORTED = 'This type is not yet supported'; + +// PRIMITIVE +function processPrimitive(primitive?: (Core.IPrimitive & Pick) | null) { + if (!primitive) { + return 'invalid primitive'; + } + + const type = primitive.value; + + switch (type) { + case 'datetime': + return formatDateUTC(timestampToDate(primitive.datetime as Protobuf.Timestamp)); + case 'duration': + return protobufDurationToHMS(primitive.duration as Protobuf.Duration); + case 'integer': { + return Long.fromValue(primitive.integer as Long).toNumber(); + } + case 'boolean': + return primitive.boolean; + case 'floatValue': + return primitive.floatValue; + case 'stringValue': + return `${primitive.stringValue}`; + default: + return 'unknown'; + } +} + +// BLOB +const dimensionalityStrings: Record = { + [BlobDimensionality.SINGLE]: 'single', + [BlobDimensionality.MULTIPART]: 'multi-part', +}; + +function processBlobType(blobType?: Core.IBlobType | null) { + if (!blobType) { + return 'invalid blob type'; + } + + const formatString = blobType.format ? ` (${blobType.format})` : ''; + const dimensionality = blobType.dimensionality; + const dimensionalityString = + dimensionality !== null && dimensionality !== undefined + ? dimensionalityStrings[dimensionality] + : ''; + const typeString = `${dimensionalityString}${formatString}`; + + return `${typeString} blob`; +} + +function processBlob(blob?: Core.IBlob | null) { + if (!blob) { + return 'invalid blob'; + } + + const type = blob.metadata?.type; + + return { + type: processBlobType(type), + uri: blob.uri, + }; +} + +// BINARY +function processBinary(binary?: Core.IBinary | null) { + const tag = binary?.tag; + + if (!tag) { + return 'invalid binary'; + } + + return { + tag: `${tag} (binary data not shown)`, + }; +} + +// SCHEMA +export function columnTypeToString(type?: SchemaColumnType | null) { + switch (type) { + case SchemaColumnType.BOOLEAN: + return 'boolean'; + case SchemaColumnType.DATETIME: + return 'datetime'; + case SchemaColumnType.DURATION: + return 'duration'; + case SchemaColumnType.FLOAT: + return 'float'; + case SchemaColumnType.INTEGER: + return 'integer'; + case SchemaColumnType.STRING: + return 'string'; + default: + return 'unknown'; + } +} + +function processSchemaType(schemaType?: Core.ISchemaType | null, shortString = false) { + const columns = + schemaType?.columns?.length && + schemaType.columns.map((column) => { + return shortString + ? `${columnTypeToString(column.type)}` + : `${column.name} (${columnTypeToString(column.type)})`; + }); + + return columns; +} + +function processSchema(schema?: Core.ISchema | null) { + if (!schema) { + return 'invalid schema'; + } + + const uri = schema.uri; + const columns = processSchemaType(schema.type); + + return { + ...(uri && { uri }), + ...(columns && { columns }), + }; +} + +// NONE +/* eslint-disable @typescript-eslint/no-unused-vars */ +function processNone(none?: Core.IVoid | null) { + return '(empty)'; +} + +// TODO: FC#450 ass support for union types +function processUnionType(union?: Core.IUnionType | null, shortString = false) { + return DEFAULT_UNSUPPORTED; +} + +function processUnion(union: Core.IUnion) { + return DEFAULT_UNSUPPORTED; +} +/* eslint-enable @typescript-eslint/no-unused-vars */ + +// ERROR +function processError(error?: Core.IError | null) { + return { + error: error?.message, + nodeId: error?.failedNodeId, + }; +} + +function processProtobufStructValue(struct?: Protobuf.IStruct | null) { + if (!struct) { + return 'invalid generic struct value'; + } + + const fields = struct?.fields; + const res = + fields && + Object.keys(fields) + .map((v) => { + return { [v]: processGenericValue(fields[v]) }; + }) + .reduce((acc, v) => ({ ...acc, ...v }), {}); + + return res; +} + +function processGenericValue(value: Protobuf.IValue & Pick) { + const kind = value.kind; + + switch (kind) { + case 'nullValue': + return '(empty)'; + case 'listValue': { + const list = value.listValue; + return list?.values?.map((x) => processGenericValue(x)); + } + case 'structValue': + return processProtobufStructValue(value?.structValue); + case 'numberValue': + case 'stringValue': + case 'boolValue': + return value[kind]; + default: + return 'unknown'; + } +} + +function processGeneric(struct?: Protobuf.IStruct | null) { + if (!struct || !struct?.fields) { + return null; + } + + const { fields } = struct; + const mapContent = Object.keys(fields) + .map((key) => { + const value = fields[key]; + return { [key]: processGenericValue(value) }; + }) + .reduce((acc, v) => { + return { ...acc, ...v }; + }, {}); + + return mapContent; +} + +// SIMPLE +export function processSimpleType(simpleType?: Core.SimpleType | null) { + switch (simpleType) { + case Core.SimpleType.NONE: + return 'none'; + case Core.SimpleType.INTEGER: + return 'integer'; + case Core.SimpleType.FLOAT: + return 'float'; + case Core.SimpleType.STRING: + return 'string'; + case Core.SimpleType.BOOLEAN: + return 'booleam'; + case Core.SimpleType.DATETIME: + return 'datetime'; + case Core.SimpleType.DURATION: + return 'duration'; + case Core.SimpleType.BINARY: + return 'binary'; + case Core.SimpleType.ERROR: + return 'error'; + case Core.SimpleType.STRUCT: + return 'struct'; + default: + return 'unknown'; + } +} + +function processEnumType(enumType?: Core.IEnumType | null) { + return enumType?.values || []; +} + +function processLiteralType( + literalType?: (Core.ILiteralType & Pick) | null, +) { + const type = literalType?.type; + + switch (type) { + case 'simple': + return processSimpleType(literalType?.simple); + case 'schema': + return `schema (${processSchemaType(literalType?.schema, true)})`; + case 'collectionType': + return `collection of ${processLiteralType(literalType?.collectionType)}`; + case 'mapValueType': + return `map value of ${processLiteralType(literalType?.mapValueType)}`; + case 'blob': + return processBlobType(literalType?.blob); + case 'enumType': + return `enum (${processEnumType(literalType?.enumType)})`; + case 'structuredDatasetType': + return processStructuredDatasetType(literalType?.structuredDatasetType); + case 'unionType': + return processUnionType(literalType?.unionType, true); + default: + return DEFAULT_UNSUPPORTED; + } +} + +function processStructuredDatasetType(structuredDatasetType?: Core.IStructuredDatasetType | null) { + if (!structuredDatasetType) { + return {}; + } + + const { columns, format } = structuredDatasetType; + const processedColumns = + columns?.length && + columns + .map(({ name, literalType }) => [name, processLiteralType(literalType)]) + .reduce((acc, v) => { + acc[v[0]] = v[1]; + return acc; + }, []); + + return { + ...(format && { format }), + ...(processedColumns && { columns: processedColumns }), + }; +} + +function processStructuredDataset(structuredDataSet?: Core.IStructuredDataset | null) { + if (!structuredDataSet) { + return DEFAULT_UNSUPPORTED; + } + + const retJson = {} as any; + const { uri, metadata } = structuredDataSet; + + if (uri) { + retJson.uri = uri; + } + + const structuredDatasetType = processStructuredDatasetType(metadata?.structuredDatasetType); + + return { + ...(uri && { uri }), + ...structuredDatasetType, + }; +} + +function processScalar(scalar?: (Core.IScalar & Pick) | null) { + const type = scalar?.value; + + switch (type) { + case 'primitive': + return processPrimitive(scalar?.primitive); + case 'blob': + return processBlob(scalar?.blob); + case 'binary': + return processBinary(scalar?.binary); + case 'schema': + return processSchema(scalar?.schema); + case 'noneType': + return processNone(scalar?.noneType); + case 'error': + return processError(scalar?.error); + case 'generic': + return processGeneric(scalar?.generic); + case 'structuredDataset': + return processStructuredDataset(scalar?.structuredDataset); + case 'union': + return processUnion(scalar?.union as Core.IUnion); + default: + return DEFAULT_UNSUPPORTED; + } +} + +function processCollection(collection?: Core.ILiteralCollection | null) { + const literals = collection?.literals; + + if (!literals) { + return 'invalid collection'; + } + + return literals?.map((literal) => processLiteral(literal)); +} + +function processMap(map?: Core.ILiteralMap | null) { + const literals = map?.literals; + + if (!literals) { + return 'invalid map'; + } + + return transformLiterals(literals); +} + +function processLiteral(literal?: Core.ILiteral & Pick) { + const type = literal?.value; + + if (!literal) { + return 'invalid literal'; + } + + switch (type) { + case 'scalar': + return processScalar(literal.scalar); + case 'collection': + return processCollection(literal.collection); + case 'map': + return processMap(literal.map); + default: + return DEFAULT_UNSUPPORTED; + } +} + +export function transformLiterals(json: { [k: string]: Core.ILiteral }) { + const obj = Object.entries(json) + .map(([key, literal]) => ({ + [key]: processLiteral(literal), + })) + .reduce( + (acc, cur) => ({ + ...acc, + ...cur, + }), + {}, + ); + + return obj; +} diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genCollectionTestcase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genCollectionTestcase.mock.ts new file mode 100644 index 000000000..026d64826 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genCollectionTestcase.mock.ts @@ -0,0 +1,23 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; +import { generateBlobType, getPrimitive, getScalarLiteral } from './literalHelpers'; + +const collection: TestCaseList = { + COL_WITH_SCALARTYPE_PRIMITIVE: { + value: { + ...getScalarLiteral(getPrimitive('floatValue', 2.1), 'primitive'), + }, + expected: { result_var: [2.1] }, + }, + COL_WITH_SCALARTYPE_BLOB: { + value: { + ...getScalarLiteral( + generateBlobType('csv', Core.BlobType.BlobDimensionality.SINGLE, '1'), + 'blob', + ), + }, + expected: { result_var: [{ type: 'single (csv) blob', uri: '1' }] }, + }, +}; + +export default collection; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genMapTestCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genMapTestCase.mock.ts new file mode 100644 index 000000000..6eef945ee --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genMapTestCase.mock.ts @@ -0,0 +1,23 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; +import { generateBlobType, getPrimitive, getScalarLiteral } from './literalHelpers'; + +const collection: TestCaseList = { + COL_WITH_SCALARTYPE_PRIMITIVE: { + value: { + ...getScalarLiteral(getPrimitive('floatValue', 2.1), 'primitive'), + }, + expected: { result_var: { value: 2.1 } }, + }, + COL_WITH_SCALARTYPE_BLOB: { + value: { + ...getScalarLiteral( + generateBlobType('csv', Core.BlobType.BlobDimensionality.SINGLE, '1'), + 'blob', + ), + }, + expected: { result_var: { value: { type: 'single (csv) blob', uri: '1' } } }, + }, +}; + +export default collection; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarBinaryTestCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarBinaryTestCase.mock.ts new file mode 100644 index 000000000..9804a0f11 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarBinaryTestCase.mock.ts @@ -0,0 +1,15 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; + +const scalarBinaryTestCases: TestCaseList = { + WITH_VAL: { + value: { value: new Uint8Array(), tag: 'tag1' }, + expected: { result_var: { tag: 'tag1 (binary data not shown)' } }, + }, + INT_WITH_SMALL_LOW: { + value: { tag: 'tag2' }, + expected: { result_var: { tag: 'tag2 (binary data not shown)' } }, + }, +}; + +export default scalarBinaryTestCases; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarBlobCases.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarBlobCases.mock.ts new file mode 100644 index 000000000..28073461f --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarBlobCases.mock.ts @@ -0,0 +1,44 @@ +import { Core } from 'flyteidl'; +import { generateBlobType } from './literalHelpers'; +import { TestCaseList } from '../types'; + +const blobTestcases: TestCaseList = { + single_CSV_BLOB: { + value: generateBlobType('csv', Core.BlobType.BlobDimensionality.SINGLE, '1'), + expected: { + result_var: { + type: 'single (csv) blob', + uri: '1', + }, + }, + }, + multi_part_CSV_BLOB: { + value: generateBlobType('csv', Core.BlobType.BlobDimensionality.MULTIPART, '2'), + expected: { + result_var: { + type: 'multi-part (csv) blob', + uri: '2', + }, + }, + }, + single_blob_BLOB: { + value: generateBlobType(undefined, Core.BlobType.BlobDimensionality.SINGLE, '3'), + expected: { + result_var: { + type: 'single blob', + uri: '3', + }, + }, + }, + single_multi_part_BLOB: { + value: generateBlobType(undefined, Core.BlobType.BlobDimensionality.MULTIPART, '4'), + expected: { + result_var: { + type: 'multi-part blob', + uri: '4', + }, + }, + }, +}; + +export default blobTestcases; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarErrorCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarErrorCase.mock.ts new file mode 100644 index 000000000..e05e18f65 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarErrorCase.mock.ts @@ -0,0 +1,38 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; + +const scalarErrorTestCases: TestCaseList = { + ERROR_FULL: { + value: { + failedNodeId: '1', + message: 'message 1', + }, + expected: { + result_var: { error: 'message 1', nodeId: '1' }, + }, + }, + ERROR_NO_NODE: { + value: { + message: 'message 2', + }, + expected: { + result_var: { error: 'message 2', nodeId: undefined }, + }, + }, + ERROR_NO_MESSAGE: { + value: { + failedNodeId: '3', + }, + expected: { + result_var: { error: undefined, nodeId: '3' }, + }, + }, + ERROR_EMPTY: { + value: {}, + expected: { + result_var: { error: undefined, nodeId: undefined }, + }, + }, +}; + +export default scalarErrorTestCases; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarGenericCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarGenericCase.mock.ts new file mode 100644 index 000000000..3cf04eedc --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarGenericCase.mock.ts @@ -0,0 +1,143 @@ +import { Protobuf } from 'flyteidl'; +import { TestCaseList } from '../types'; +import { getIValue } from './literalHelpers'; + +const nullValueTestcases: TestCaseList = { + WITH_NULL_VAL: { + value: { + fields: { + test_field_name1: getIValue('nullValue', Protobuf.NullValue.NULL_VALUE), + }, + }, + expected: { + result_var: { test_field_name1: '(empty)' }, + }, + }, +}; +const numberValueTestCases: TestCaseList = { + WITH_NUMBER_VAL: { + value: { + fields: { + test_field_name2: getIValue('numberValue', 1), + }, + }, + expected: { + result_var: { test_field_name2: 1 }, + }, + }, + WITH_NUMBER_VAL_NULL: { + value: { + fields: { + test_field_name3: getIValue('numberValue', null), + }, + }, + expected: { + result_var: { test_field_name3: null }, + }, + }, +}; +const stringValueTestCases: TestCaseList = { + WITH_STRING_VAL: { + value: { + fields: { + test_field_name4: getIValue('stringValue', 'test val'), + }, + }, + expected: { + result_var: { test_field_name4: 'test val' }, + }, + }, + WITH_STRING_VAL_NULL: { + value: { + fields: { + test_field_name: getIValue('stringValue', null), + }, + }, + expected: { + result_var: { test_field_name: null }, + }, + }, +}; + +const boolValueTestCases: TestCaseList = { + WITH_BOOL_VAL: { + value: { + fields: { + test_field_name: getIValue('boolValue', true), + }, + }, + expected: { + result_var: { test_field_name: true }, + }, + }, + WITH_BOOL_VAL_FALSE: { + value: { + fields: { + test_field_name: getIValue('boolValue', false), + }, + }, + expected: { + result_var: { test_field_name: false }, + }, + }, + WITH_BOOL_VAL_NULL: { + value: { + fields: { + test_field_name: getIValue('boolValue', null), + }, + }, + expected: { + result_var: { test_field_name: null }, + }, + }, +}; + +const structValueTestCases: TestCaseList = { + WITH_STRUCT_VALUE: { + value: { + fields: { + test_struct_name: getIValue('structValue', { + fields: { + struct_string_val_copy: stringValueTestCases.WITH_STRING_VAL.value?.fields + ?.test_field_name4 as Protobuf.IValue, + struct_bool_val_copy: boolValueTestCases.WITH_BOOL_VAL.value?.fields + ?.test_field_name as Protobuf.IValue, + }, + }), + }, + }, + expected: { + result_var: { + test_struct_name: { struct_string_val_copy: 'test val', struct_bool_val_copy: true }, + }, + }, + }, +}; + +const listValueTestCases: TestCaseList = { + WITH_LIST_VALUE: { + value: { + fields: { + test_list_name: getIValue('listValue', { + values: [ + structValueTestCases.WITH_STRUCT_VALUE.value?.fields + ?.test_struct_name as Protobuf.IValue, + ], + }), + }, + }, + expected: { + result_var: { + test_list_name: [{ struct_bool_val_copy: true, struct_string_val_copy: 'test val' }], + }, + }, + }, +}; +export default { + ...nullValueTestcases, + ...numberValueTestCases, + ...stringValueTestCases, + ...boolValueTestCases, + ...structValueTestCases, + ...listValueTestCases, +}; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarNoneCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarNoneCase.mock.ts new file mode 100644 index 000000000..140af9bed --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarNoneCase.mock.ts @@ -0,0 +1,13 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; + +const scalarNoneTestCase: TestCaseList = { + VOID_TYPE: { + value: {}, + expected: { + result_var: '(empty)', + }, + }, +}; + +export default scalarNoneTestCase; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarPrimitiveCases.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarPrimitiveCases.mock.ts new file mode 100644 index 000000000..5bff19ef4 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarPrimitiveCases.mock.ts @@ -0,0 +1,90 @@ +import { Core } from 'flyteidl'; +import * as Long from 'long'; +import { long } from 'test/utils'; +import { getPrimitive } from './literalHelpers'; +import { TestCaseList } from '../types'; + +const scalarPrimitiveTestCases: TestCaseList = { + INT_WITH_LARGE_LOW: { + value: getPrimitive('integer', { low: 1642627611, high: 0, unsigned: false } as Long), + expected: { result_var: 1642627611 }, + }, + INT_WITH_SMALL_LOW: { + value: getPrimitive('integer', { low: 55, high: 0, unsigned: false } as Long), + expected: { result_var: 55 }, + }, + INT_WITH_ZERO: { + value: getPrimitive('integer', { low: 0, high: 0, unsigned: false } as Long), + expected: { result_var: 0 }, + }, + FLOAT_ZERO: { + value: getPrimitive('floatValue', 0), + expected: { result_var: 0 }, + }, + FLOAT_POSITIVE: { + value: getPrimitive('floatValue', 1.5), + expected: { result_var: 1.5 }, + }, + FLOAT_NEGATIVE: { + value: getPrimitive('floatValue', -1.5), + expected: { result_var: -1.5 }, + }, + FLOAT_LARGE: { + value: getPrimitive('floatValue', 1.25e10), + expected: { result_var: 1.25e10 }, + }, + FLOAT_UNDEF: { + value: getPrimitive('floatValue', undefined), + expected: { result_var: undefined }, + }, + STRING_NULL: { + value: getPrimitive('stringValue', null), + expected: { result_var: 'null' }, + }, + STRING_VALID: { + value: getPrimitive('stringValue', 'some val'), + expected: { result_var: 'some val' }, + }, + STRING_UNDEF: { + value: getPrimitive('stringValue', undefined), + expected: { result_var: 'undefined' }, + }, + STRING_NEG: { + value: getPrimitive('stringValue', '-1'), + expected: { result_var: '-1' }, + }, + BOOL_TRUE: { + value: getPrimitive('boolean', true), + expected: { result_var: true }, + }, + BOOL_FALSE: { + value: getPrimitive('boolean', false), + expected: { result_var: false }, + }, + BOOL_NULL: { + value: getPrimitive('boolean', null), + expected: { result_var: null }, + }, + BOOL_UNDEF: { + value: getPrimitive('boolean', undefined), + expected: { result_var: undefined }, + }, + DT_VALID: { + value: getPrimitive('datetime', { seconds: long(3600), nanos: 0 }), + expected: { result_var: '1/1/1970 1:00:00 AM UTC' }, + }, + DURATION_ZERO: { + value: getPrimitive('duration', { seconds: long(0), nanos: 0 }), + expected: { result_var: '0s' }, + }, + DURATION_1H: { + value: getPrimitive('duration', { seconds: long(3600), nanos: 0 }), + expected: { result_var: '1h' }, + }, + DURATION_LARGE: { + value: getPrimitive('duration', { seconds: long(10000), nanos: 0 }), + expected: { result_var: '2h 46m 40s' }, + }, +}; + +export default scalarPrimitiveTestCases; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarSchemaCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarSchemaCase.mock.ts new file mode 100644 index 000000000..a51574f9f --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarSchemaCase.mock.ts @@ -0,0 +1,46 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; + +const schemaColumnTypes: TestCaseList = Object.keys( + Core.SchemaType.SchemaColumn.SchemaColumnType, +) + .map((key, index) => ({ + [`SCHEMA_WITH_${key}`]: { + value: { + uri: `s3/${index}`, + type: { + columns: [ + { name: 'name' + index, type: Core.SchemaType.SchemaColumn.SchemaColumnType[key] }, + ], + }, + }, + expected: { + result_var: { uri: `s3/${index}`, columns: [`name${index} (${key.toLocaleLowerCase()})`] }, + }, + }, + })) + .reduce((acc, v) => { + return { + ...acc, + ...v, + }; + }, {}); + +const schemaTestCases: TestCaseList = { + SCHEMA_WITHOUT_TYPE: { + value: { + uri: 'test7', + type: { + columns: [{ name: 'test7' }], + }, + }, + expected: { + result_var: { uri: 'test7', columns: [`test7 (unknown)`] }, + }, + }, +}; + +export default { + ...schemaColumnTypes, + ...schemaTestCases, +}; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/genScalarStructuredDsCase.mock.ts b/packages/zapp/console/src/components/Literals/test/helpers/genScalarStructuredDsCase.mock.ts new file mode 100644 index 000000000..ae6660bf1 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/genScalarStructuredDsCase.mock.ts @@ -0,0 +1,131 @@ +import { Core } from 'flyteidl'; +import { TestCaseList } from '../types'; +import { processSimpleType, columnTypeToString } from '../../helpers'; + +import { simple } from './mock_simpleTypes'; + +const generateColumnEntry = (columnName: string, literalType) => { + return { + name: columnName, + literalType, + }; +}; + +const generateStructuredDataset = (columnName: string, uri: string, literalType) => { + return { + uri, + metadata: { + structuredDatasetType: { + format: 'parquet', + columns: [generateColumnEntry(columnName, literalType)], + }, + }, + }; +}; + +const sasWithMapValueTypeColumns: TestCaseList = Object.keys(simple) + .map((simpleTypeKey, index) => { + const simpleType = simple[simpleTypeKey]; + + const literalType = { + mapValueType: { + ...simpleType, + }, + type: 'mapValueType', + }; + + const name = `column_name_${index}`; + const columns = []; + columns[name] = `map value of ${processSimpleType(simpleType[simpleType.type])}`; + + return { + [`STRUCT_SIMPLE_${simpleTypeKey}`]: { + value: generateStructuredDataset(name, index.toString(), literalType), + expected: { + result_var: { columns, format: 'parquet', uri: index.toString() }, + }, + }, + }; + }) + .reduce((acc, v) => ({ ...acc, ...v }), {}); + +const sasWithCollectionTypeColumns: TestCaseList = Object.keys(simple) + .map((simpleTypeKey, index) => { + const simpleType = simple[simpleTypeKey]; + + const literalType = { + collectionType: { + ...simpleType, + }, + type: 'collectionType', + }; + + const name = `column_name_${index}`; + const columns = []; + columns[name] = `collection of ${processSimpleType(simpleType[simpleType.type])}`; + + return { + [`STRUCT_SIMPLE_${simpleTypeKey}`]: { + value: generateStructuredDataset(name, index.toString(), literalType), + expected: { + result_var: { columns, format: 'parquet', uri: index.toString() }, + }, + }, + }; + }) + .slice(0, 1) + .reduce((acc, v) => ({ ...acc, ...v }), {}); + +const sdsWithSimpleTypeColumns: TestCaseList = Object.keys(simple) + .map((simpleTypeKey, index) => { + const literalType = simple[simpleTypeKey]; + + const name = `column_name_${index}`; + const columns = []; + columns[name] = processSimpleType(literalType[literalType.type]); + + return { + [`STRUCT_SIMPLE_${simpleTypeKey}`]: { + value: generateStructuredDataset(name, index.toString(), literalType), + expected: { + result_var: { columns, format: 'parquet', uri: index.toString() }, + }, + }, + }; + }) + .reduce((acc, v) => ({ ...acc, ...v }), {}); + +const sasWithSchemaColumns: TestCaseList = Object.keys( + Core.SchemaType.SchemaColumn.SchemaColumnType, +) + .map((simpleTypeKey, index) => { + const literalType = { + schema: { + columns: [{ type: Core.SchemaType.SchemaColumn.SchemaColumnType[simpleTypeKey] }], + }, + type: 'schema', + }; + + const name = `schema_column_name_${index}`; + const columns = []; + columns[name] = `schema (${columnTypeToString( + Core.SchemaType.SchemaColumn.SchemaColumnType[simpleTypeKey], + )})`; + + return { + [`STRUCT_SCHEMA_WITH_COLUMNS_${simpleTypeKey}`]: { + value: generateStructuredDataset(name, index.toString(), literalType), + expected: { + result_var: { columns, format: 'parquet', uri: index.toString() }, + }, + }, + }; + }) + .reduce((acc, v) => ({ ...acc, ...v }), {}); + +export default { + ...sdsWithSimpleTypeColumns, + ...sasWithSchemaColumns, + ...sasWithCollectionTypeColumns, + ...sasWithMapValueTypeColumns, +}; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/index.ts b/packages/zapp/console/src/components/Literals/test/helpers/index.ts new file mode 100644 index 000000000..e1e2debc6 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/index.ts @@ -0,0 +1,23 @@ +import primitive from './genScalarPrimitiveCases.mock'; +import blob from './genScalarBlobCases.mock'; +import binary from './genScalarBinaryTestCase.mock'; +import schema from './genScalarSchemaCase.mock'; +import noneType from './genScalarNoneCase.mock'; +import errorType from './genScalarErrorCase.mock'; +import generic from './genScalarGenericCase.mock'; +import structuredDataset from './genScalarStructuredDsCase.mock'; +import collection from './genCollectionTestcase.mock'; +import map from './genMapTestCase.mock'; + +export { + primitive, + blob, + binary, + schema, + noneType, + errorType, + generic, + structuredDataset, + collection, + map, +}; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/literalHelpers.ts b/packages/zapp/console/src/components/Literals/test/helpers/literalHelpers.ts new file mode 100644 index 000000000..67e4da36f --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/literalHelpers.ts @@ -0,0 +1,123 @@ +import { Core, Protobuf } from 'flyteidl'; + +export function getIValue( + kind: 'nullValue' | 'numberValue' | 'stringValue' | 'boolValue' | 'structValue' | 'listValue', + value?: + | Protobuf.NullValue + | number + | string + | boolean + | Protobuf.IStruct + | Protobuf.IListValue + | null, +): Protobuf.IValue & Pick { + return { + kind, + [kind]: value, + }; +} + +export function getPrimitive( + key: 'integer' | 'floatValue' | 'stringValue' | 'boolean' | 'datetime' | 'duration', + value?: Long | number | string | boolean | Protobuf.ITimestamp | Protobuf.IDuration | null, +): Core.IPrimitive & Pick { + return { + [key]: value, + value: key, + }; +} + +export function generateBlobType( + format?: string, + dimensionality?: Core.BlobType.BlobDimensionality, + uri?: string, +): Core.IBlob { + return { + metadata: { + type: { + format, + dimensionality, + }, + }, + uri, + }; +} + +const getScalar = ( + value: + | Core.IPrimitive + | Core.IBlob + | Core.IBinary + | Core.ISchema + | Core.IVoid + | Core.IError + | Protobuf.IStruct + | Core.IStructuredDataset + | Core.IUnion, + scalarType: + | 'primitive' + | 'blob' + | 'binary' + | 'schema' + | 'noneType' + | 'error' + | 'generic' + | 'structuredDataset' + | 'union', +): Core.IScalar & Pick => { + return { + [scalarType]: value, + value: scalarType, + }; +}; + +// TOP LEVEL SCHEMA GENERATORS: +export const getScalarLiteral = ( + value: + | Core.IPrimitive + | Core.IBlob + | Core.IBinary + | Core.ISchema + | Core.IVoid + | Core.IError + | Protobuf.IStruct + | Core.IStructuredDataset + | Core.IUnion, + scalarType: + | 'primitive' + | 'blob' + | 'binary' + | 'schema' + | 'noneType' + | 'error' + | 'generic' + | 'structuredDataset' + | 'union', +): Core.ILiteral & Pick => { + return { + scalar: getScalar(value, scalarType), + value: 'scalar', + }; +}; + +export const getCollection = ( + literals: Core.ILiteral[], +): Core.ILiteral & Pick => { + return { + collection: { + literals, + }, + value: 'collection', + }; +}; + +export const getMap = ( + literals: { [k: string]: Core.ILiteral } | null, +): Core.ILiteral & Pick => { + return { + map: { + literals, + }, + value: 'map', + }; +}; diff --git a/packages/zapp/console/src/components/Literals/test/helpers/mock_simpleTypes.ts b/packages/zapp/console/src/components/Literals/test/helpers/mock_simpleTypes.ts new file mode 100644 index 000000000..0bd9d543f --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/helpers/mock_simpleTypes.ts @@ -0,0 +1,17 @@ +import { Core } from 'flyteidl'; + +export function extractSimpleTypes() { + const simpleTypes= Object.keys(Core.SimpleType).map((key) => ({ + [key]: { + type: 'simple', + simple: Core.SimpleType[key], + }, + })).reduce((acc, v) => ({...acc, ...v}), {}); + return simpleTypes; +} + +const simple: Core.SimpleType[] = extractSimpleTypes() as any; + +export { + simple +}; diff --git a/packages/zapp/console/src/components/Literals/test/literal.helpers.test.ts b/packages/zapp/console/src/components/Literals/test/literal.helpers.test.ts new file mode 100644 index 000000000..8ebf97c6d --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/literal.helpers.test.ts @@ -0,0 +1,83 @@ +import { Core } from 'flyteidl'; +import { transformLiterals } from '../helpers'; + +import { + primitive, + blob, + binary, + schema, + noneType, + errorType, + generic, + structuredDataset, + collection, + map, +} from './helpers/index'; +import { getCollection, getMap, getScalarLiteral } from './helpers/literalHelpers'; + +const literalTestCases = { + scalar: { + primitive, + blob, + binary, + schema, + noneType, + error: errorType, + generic, + structuredDataset, + union: {} as Core.IPrimitive, // TODO: FC#450 ass support for union types + }, + collection, + map, +}; + +describe('scalar literal', () => { + const scalarTestCases = literalTestCases.scalar; + const scalarType = Object.keys(scalarTestCases); + + scalarType.map((scalarTestType) => { + describe(scalarTestType, () => { + const cases = scalarTestCases[scalarTestType]; + + Object.keys(cases || {}).map((testKey) => { + const { value, expected } = cases[testKey]; + + it(`${testKey}: should return ${expected} for ${value}`, () => { + const scalar = { result_var: { ...getScalarLiteral(value, scalarTestType as any) } }; + const result = transformLiterals(scalar as any); + expect(result).toEqual(expected); + }); + }); + }); + }); +}); + +describe('collection literal', () => { + const cases = literalTestCases.collection; + + Object.keys(cases).map((testKey) => { + const { value, expected } = cases[testKey]; + + it(`${testKey}: should return ${expected} for ${value}`, () => { + const collection = { result_var: { ...getCollection([value]) } }; + + const result = transformLiterals(collection); + expect(result).toEqual(expected); + }); + }); +}); + +describe('map literal', () => { + const cases = literalTestCases.map; + + Object.keys(cases).map((testKey) => { + const { value, expected } = cases[testKey]; + + it(`${testKey}: should return ${expected} for ${value}`, () => { + const collection = { result_var: { ...getMap({ value }) } }; + + const result = transformLiterals(collection); + expect(result).toEqual(expected); + }); + }); +}); diff --git a/packages/zapp/console/src/components/Literals/test/types.d.ts b/packages/zapp/console/src/components/Literals/test/types.d.ts new file mode 100644 index 000000000..04572a2b5 --- /dev/null +++ b/packages/zapp/console/src/components/Literals/test/types.d.ts @@ -0,0 +1,8 @@ +export type TestCase = { + value: K; + expected: any; +}; + +export type TestCaseList = { + [key: string]: TestCase; +}; diff --git a/packages/zapp/console/src/components/common/DumpJSON.tsx b/packages/zapp/console/src/components/common/DumpJSON.tsx index e20db28c4..57349eefb 100644 --- a/packages/zapp/console/src/components/common/DumpJSON.tsx +++ b/packages/zapp/console/src/components/common/DumpJSON.tsx @@ -1,8 +1,8 @@ -import { stringifyValue } from 'common/utils'; -import { useCommonStyles } from 'components/common/styles'; import * as React from 'react'; +import { ReactJsonViewWrapper } from 'components/common/ReactJsonView'; export const DumpJSON: React.FC<{ value: any }> = ({ value }) => { - const commonStyles = useCommonStyles(); - return
{stringifyValue(value)}
; + return ( + + ); }; diff --git a/packages/zapp/console/src/components/common/PanelSection/index.tsx b/packages/zapp/console/src/components/common/PanelSection/index.tsx index 23b229699..ace1ab503 100644 --- a/packages/zapp/console/src/components/common/PanelSection/index.tsx +++ b/packages/zapp/console/src/components/common/PanelSection/index.tsx @@ -4,6 +4,7 @@ import { makeStyles } from '@material-ui/core/styles'; const useStyle = makeStyles((theme) => ({ detailsPanelCard: { borderBottom: `1px solid ${theme.palette.divider}`, + paddingBottom: '150px', // TODO @FC 454 temporary fix for panel height issue }, detailsPanelCardContent: { padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`, diff --git a/packages/zapp/console/src/components/common/ReactJsonView.tsx b/packages/zapp/console/src/components/common/ReactJsonView.tsx new file mode 100644 index 000000000..ea7e9d1a1 --- /dev/null +++ b/packages/zapp/console/src/components/common/ReactJsonView.tsx @@ -0,0 +1,99 @@ +import * as React from 'react'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import ReactJsonView, { ReactJsonViewProps } from 'react-json-view'; +import * as copyToClipboard from 'copy-to-clipboard'; +import { primaryTextColor } from 'components/Theme/constants'; + +const useStyles = makeStyles((theme: Theme) => ({ + jsonViewer: { + marginLeft: '-10px', + width: '100%', + '& span': { + fontWeight: 'normal !important', + }, + '& .object-container': { + overflowWrap: 'anywhere !important', + }, + '& .copy-to-clipboard-container': { + position: 'absolute', + }, + '& .copy-icon svg': { + color: `${theme.palette.primary.main} !important`, + }, + '& .variable-value': { + paddingLeft: '5px', + }, + '& .variable-value >*': { + color: `${primaryTextColor} !important`, + }, + '& .object-key-val': { + padding: '0 0 0 5px !important', + }, + '& .object-key': { + color: `${theme.palette.grey[500]} !important`, + }, + }, +})); + +/** + * + * Replacer functionality to pass to the JSON.stringify function that + * does proper serialization of arrays that contain non-numeric indexes + * @param _ parent element key + * @param value the element being serialized + * @returns Transformed version of input + */ +const replacer = (_, value) => { + // Check if associative array + if (value instanceof Array && Object.keys(value).some((v) => isNaN(+v))) { + // Serialize associative array + return Object.keys(value).reduce((acc, arrKey) => { + // if: + // string key is encountered insert {[key]: value} into transformed array + // else: + // insert original value + acc.push(isNaN(+arrKey) ? { [arrKey]: value[arrKey] } : value[arrKey]); + + return acc; + }, [] as any[]); + } + + // Non-associative array. return original value to allow default JSON.stringify behavior + return value; +}; + +/** + * Custom implementation for JSON.stringify to allow + * proper serialization of arrays that contain non-numeric indexes + * + * @param json Object to serialize + * @returns A string version of the input json + */ +const customStringify = (json) => { + return JSON.stringify(json, replacer); +}; + +export const ReactJsonViewWrapper: React.FC = (props) => { + const styles = useStyles(); + + return ( +
+ { + const objToCopy = options.src; + const text = typeof objToCopy === 'object' ? customStringify(objToCopy) : objToCopy; + copyToClipboard(text); + }} + displayDataTypes={false} + quotesOnKeys={false} + iconStyle="triangle" + displayObjectSize={true} + name={null} + indentWidth={4} + collapseStringsAfterLength={80} + sortKeys={true} + {...props} + /> +
+ ); +}; diff --git a/yarn.lock b/yarn.lock index 6c3b34f27..6687a9a86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5380,7 +5380,7 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@^2.0.0: +asap@^2.0.0, asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -5739,6 +5739,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -7398,6 +7403,13 @@ cronstrue@^1.31.0: resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.105.0.tgz#57f89468c261d7fa56c69057f42c84eba3a37837" integrity sha512-Bv8GHi5uJvxtq/9T7lgBwum7UVKMfR+LSPHZXiezP0E5gnODPVRQBAkCwijCIaWEepqmRcxTAxrUFB0UQK2wdw== +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -9451,6 +9463,31 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -9638,6 +9675,14 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +flux@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" + integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + follow-redirects@^1.0.0, follow-redirects@^1.14.0: version "1.14.8" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" @@ -12966,6 +13011,11 @@ lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -12981,6 +13031,11 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -13943,7 +13998,7 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^2.6.1: +node-fetch@2.6.7, node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -15504,6 +15559,13 @@ promise.prototype.finally@^3.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + prompts@^2.0.1: version "2.4.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" @@ -15666,6 +15728,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -15807,6 +15874,16 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-chartjs-2@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-4.0.0.tgz#a79919c9efe5381b8cb5abfd0ac7a56c9736cdb8" @@ -15956,6 +16033,16 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -16070,7 +16157,7 @@ react-syntax-highlighter@^13.5.3: prismjs "^1.21.0" refractor "^3.1.0" -react-textarea-autosize@^8.3.0: +react-textarea-autosize@^8.3.0, react-textarea-autosize@^8.3.2: version "8.3.3" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== @@ -17161,7 +17248,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -18618,6 +18705,11 @@ typescript@^4.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== +ua-parser-js@^0.7.30: + version "0.7.31" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" + integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== + uc.micro@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" From 86d56364f058720d93e84151053f41bdf03103e7 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Wed, 11 May 2022 13:36:47 -0700 Subject: [PATCH 19/93] chore: Provide basic repo structure and ensure that stories, tests, vscode setup properly (#458) * chore: separate AppInfo * chore: vscode properly understands @flyteconsole * chore: add basics/locale entry * test: add storybooks and tests * test: fix istanbul test-coverage issue by binding babel versions Signed-off-by: Nastya Rusina --- .storybook/main.js | 9 + jest.config.js | 7 +- package.json | 10 + packages/basics/locale/README.md | 1 + packages/basics/locale/jest.config.js | 6 + packages/basics/locale/package.json | 20 ++ packages/basics/locale/src/index.ts | 1 + packages/basics/locale/src/locale.test.ts | 32 +++ packages/basics/locale/src/locale.ts | 10 + packages/basics/locale/src/strings.mock.ts | 12 ++ packages/basics/locale/tsconfig.json | 8 + packages/composites/ui-atoms/README.md | 1 + packages/composites/ui-atoms/jest.config.js | 6 + packages/composites/ui-atoms/package.json | 35 +++ .../src/Icons/FlyteLogo/FlyteLogo.stories.tsx | 89 ++++++++ .../ui-atoms/src/Icons/FlyteLogo/index.tsx | 46 ++++ .../ui-atoms/src/Icons/InfoIcon/index.tsx | 24 +++ .../composites/ui-atoms/src/Icons/index.tsx | 2 + packages/composites/ui-atoms/src/index.ts | 1 + packages/composites/ui-atoms/tsconfig.json | 8 + packages/plugins/components/package.json | 3 +- .../components/src/AppInfo/appInfo.mock.ts | 9 + .../src/AppInfo/appInfo.stories.tsx | 54 +++++ .../components/src/AppInfo/appInfo.test.tsx | 44 ++++ .../plugins/components/src/AppInfo/index.tsx | 73 +++++++ .../plugins/components/src/AppInfo/strings.ts | 9 + .../components/src/AppInfo/versionDisplay.tsx | 88 ++++++++ .../components/src/NavBar/defaultContent.tsx | 44 ---- .../plugins/components/src/NavBar/index.tsx | 40 ---- .../components/src/NavBar/navbar.test.tsx | 16 -- .../plugins/components/src/Sample/index.tsx | 41 ++++ .../sample.stories.tsx} | 18 +- .../components/src/Sample/sample.test.tsx | 11 + packages/plugins/components/src/index.ts | 2 +- .../plugins/components/tsconfig.build.json | 3 +- packages/plugins/components/tsconfig.json | 1 + .../zapp/console/src/basics/Locale/index.ts | 10 - .../src/components/Entities/strings.ts | 4 +- .../Tables/WorkflowExecutionTable/strings.ts | 6 +- .../Navigation/DefaultAppBarContent.tsx | 31 ++- .../components/Navigation/UserInformation.tsx | 36 +--- .../Navigation/VersionDisplayModal.tsx | 128 ----------- .../src/components/Navigation/strings.ts | 14 ++ .../console/src/components/Project/strings.ts | 4 +- .../src/components/common/FlyteLogo.tsx | 36 ---- .../common/__stories__/FlyteLogo.stories.tsx | 32 --- .../console/src/components/common/strings.ts | 4 +- .../zapp/console/src/routes/components.ts | 2 +- packages/zapp/console/tsconfig.build.json | 5 + packages/zapp/console/tsconfig.json | 14 +- .../zapp/console/webpack.common.config.ts | 6 +- script/test/jest.base.js | 10 +- tsconfig.base.json | 17 +- tsconfig.json | 20 +- yarn.lock | 200 ++---------------- 55 files changed, 782 insertions(+), 581 deletions(-) create mode 100644 packages/basics/locale/README.md create mode 100644 packages/basics/locale/jest.config.js create mode 100644 packages/basics/locale/package.json create mode 100644 packages/basics/locale/src/index.ts create mode 100644 packages/basics/locale/src/locale.test.ts create mode 100644 packages/basics/locale/src/locale.ts create mode 100644 packages/basics/locale/src/strings.mock.ts create mode 100644 packages/basics/locale/tsconfig.json create mode 100644 packages/composites/ui-atoms/README.md create mode 100644 packages/composites/ui-atoms/jest.config.js create mode 100644 packages/composites/ui-atoms/package.json create mode 100644 packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx create mode 100644 packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx create mode 100644 packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx create mode 100644 packages/composites/ui-atoms/src/Icons/index.tsx create mode 100644 packages/composites/ui-atoms/src/index.ts create mode 100644 packages/composites/ui-atoms/tsconfig.json create mode 100644 packages/plugins/components/src/AppInfo/appInfo.mock.ts create mode 100644 packages/plugins/components/src/AppInfo/appInfo.stories.tsx create mode 100644 packages/plugins/components/src/AppInfo/appInfo.test.tsx create mode 100644 packages/plugins/components/src/AppInfo/index.tsx create mode 100644 packages/plugins/components/src/AppInfo/strings.ts create mode 100644 packages/plugins/components/src/AppInfo/versionDisplay.tsx delete mode 100644 packages/plugins/components/src/NavBar/defaultContent.tsx delete mode 100644 packages/plugins/components/src/NavBar/index.tsx delete mode 100644 packages/plugins/components/src/NavBar/navbar.test.tsx create mode 100644 packages/plugins/components/src/Sample/index.tsx rename packages/plugins/components/src/{NavBar/navbar.stories.tsx => Sample/sample.stories.tsx} (50%) create mode 100644 packages/plugins/components/src/Sample/sample.test.tsx delete mode 100644 packages/zapp/console/src/basics/Locale/index.ts delete mode 100644 packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx create mode 100644 packages/zapp/console/src/components/Navigation/strings.ts delete mode 100644 packages/zapp/console/src/components/common/FlyteLogo.tsx delete mode 100644 packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx diff --git a/.storybook/main.js b/.storybook/main.js index ea43675e3..98cc11aa9 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -1,3 +1,4 @@ +var path = require('path'); module.exports = { core: { builder: 'webpack5', @@ -22,6 +23,14 @@ module.exports = { use: ['babel-loader', { loader: 'ts-loader', options: { transpileOnly: true } }], }, ]; + + config.resolve.alias = { + ...config.resolve.alias, + '@flyteconsole/locale': path.resolve(__dirname, '../packages/basics/locale/src'), + '@flyteconsole/ui-atoms': path.resolve(__dirname, '../packages/composites/ui-atoms/src'), + '@flyteconsole/components': path.resolve(__dirname, '../packages/plugins/components/src'), + }; + return config; }, }; diff --git a/jest.config.js b/jest.config.js index 120b1d53e..bfcf060b8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,7 +7,12 @@ module.exports = { verbose: false, setupFilesAfterEnv: ['./script/test/jest-setup.ts'], - projects: ['/packages/zapp/console', '/packages/plugins/components'], + projects: [ + '/packages/basics/locale', + '/packages/composites/ui-atoms', + '/packages/plugins/components', + '/packages/zapp/console', + ], coverageDirectory: '/.coverage', collectCoverageFrom: ['**/*.{ts,tsx}', '!**/*/*.stories.{ts,tsx}', '!**/*/*.mocks.{ts,tsx}'], diff --git a/package.json b/package.json index 5a95662b3..61d4eefa8 100644 --- a/package.json +++ b/package.json @@ -61,5 +61,15 @@ "ts-jest": "^26.3.0", "jest": "^26.0.0", "react-hot-loader": "^4.1.2" + }, + "resolutions": { + "@babel/cli": "~7.16.0", + "@babel/core": "~7.16.12", + "@babel/plugin-proposal-class-properties": "~7.16.7", + "@babel/plugin-proposal-decorators": "~7.16.7", + "@babel/plugin-proposal-object-rest-spread": "~7.16.7", + "@babel/preset-env": "~7.16.11", + "@babel/preset-react": "~7.16.7", + "@babel/preset-typescript": "~7.16.7" } } \ No newline at end of file diff --git a/packages/basics/locale/README.md b/packages/basics/locale/README.md new file mode 100644 index 000000000..356bc8334 --- /dev/null +++ b/packages/basics/locale/README.md @@ -0,0 +1 @@ +This is a basic package which would be used for localization in future diff --git a/packages/basics/locale/jest.config.js b/packages/basics/locale/jest.config.js new file mode 100644 index 000000000..ecb112b22 --- /dev/null +++ b/packages/basics/locale/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/packages/basics/locale/package.json b/packages/basics/locale/package.json new file mode 100644 index 000000000..4d5063f3c --- /dev/null +++ b/packages/basics/locale/package.json @@ -0,0 +1,20 @@ +{ + "name": "@flyteconsole/locale", + "version": "0.0.1-rc.2", + "description": "Flyteconsole basics locale setup", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm", + "build:cjs": "tsc", + "test": "NODE_ENV=test jest" + } +} diff --git a/packages/basics/locale/src/index.ts b/packages/basics/locale/src/index.ts new file mode 100644 index 000000000..a8c255399 --- /dev/null +++ b/packages/basics/locale/src/index.ts @@ -0,0 +1 @@ +export { createLocalizedString, patternKey } from './locale'; diff --git a/packages/basics/locale/src/locale.test.ts b/packages/basics/locale/src/locale.test.ts new file mode 100644 index 000000000..b0dad1bb1 --- /dev/null +++ b/packages/basics/locale/src/locale.test.ts @@ -0,0 +1,32 @@ +import t, { patternKey } from './strings.mock'; + +describe('Basics/locale strings retirieval', () => { + it('Simple plain string retrieved properly', () => { + const text = t('regularString'); + expect(text).toEqual('Regular string'); + }); + + it('patternKey strings retrieved properly', () => { + let text = t(patternKey('value', 'on')); + expect(text).toEqual('Value ON'); + + text = t(patternKey('value', 'off')); + expect(text).toEqual('Value OFF'); + + text = t(patternKey('value')); + expect(text).toEqual('Default value'); + }); + + it('Localized function call, properly incorporates provided properties ', () => { + let text = t('activeUsers', 5, 12); + expect(text).toEqual('5 out of 12 users'); + + text = t('activeUsers', 5); + expect(text).toEqual('5 out of undefined users'); + }); + + it('If string is not present - returns undefined item', () => { + const text = t('nothingThere'); + expect(text).toEqual(undefined); + }); +}); diff --git a/packages/basics/locale/src/locale.ts b/packages/basics/locale/src/locale.ts new file mode 100644 index 000000000..df05b0129 --- /dev/null +++ b/packages/basics/locale/src/locale.ts @@ -0,0 +1,10 @@ +export const createLocalizedString = + (strings: any = {}) => + (key: string, ...rest: unknown[]) => { + const value = strings[key]; + return typeof value === 'function' ? value(...rest) : value; + }; + +export const patternKey = (parent: string, pattern?: string) => { + return `${parent}_${pattern ?? ''}`; +}; diff --git a/packages/basics/locale/src/strings.mock.ts b/packages/basics/locale/src/strings.mock.ts new file mode 100644 index 000000000..b318cc019 --- /dev/null +++ b/packages/basics/locale/src/strings.mock.ts @@ -0,0 +1,12 @@ +import { createLocalizedString } from '.'; + +const str = { + regularString: 'Regular string', + value_: 'Default value', + value_on: 'Value ON', + value_off: 'Value OFF', + activeUsers: (active: number, all: number) => `${active} out of ${all} users`, +}; + +export { patternKey } from '.'; +export default createLocalizedString(str); diff --git a/packages/basics/locale/tsconfig.json b/packages/basics/locale/tsconfig.json new file mode 100644 index 000000000..a6178cb4a --- /dev/null +++ b/packages/basics/locale/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"] +} diff --git a/packages/composites/ui-atoms/README.md b/packages/composites/ui-atoms/README.md new file mode 100644 index 000000000..3a2cdcad3 --- /dev/null +++ b/packages/composites/ui-atoms/README.md @@ -0,0 +1 @@ +This is a UI atoms package which plan to contain icons and basic UI elements. diff --git a/packages/composites/ui-atoms/jest.config.js b/packages/composites/ui-atoms/jest.config.js new file mode 100644 index 000000000..ecb112b22 --- /dev/null +++ b/packages/composites/ui-atoms/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/packages/composites/ui-atoms/package.json b/packages/composites/ui-atoms/package.json new file mode 100644 index 000000000..3d53063d4 --- /dev/null +++ b/packages/composites/ui-atoms/package.json @@ -0,0 +1,35 @@ +{ + "name": "@flyteconsole/ui-atoms", + "version": "0.0.1-rc.2", + "description": "Flyteconsole UI atoms, which didn't plan to be published and would be consumed as is internally", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm", + "build:cjs": "tsc", + "test": "NODE_ENV=test jest" + }, + "dependencies": { + "@material-ui/core": "^4.0.0", + "@material-ui/icons": "^4.0.0", + "classnames": "^2.3.1" + }, + "peerDependencies": { + "react": "^16.13.1", + "react-dom": "^16.13.1" + }, + "devDependencies": { + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "react": "^16.13.1", + "react-dom": "^16.13.1" + } +} diff --git a/packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx b/packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx new file mode 100644 index 000000000..76796d897 --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx @@ -0,0 +1,89 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { makeStyles } from '@material-ui/core/styles'; +import { FlyteLogo } from '.'; + +const useStyles = makeStyles(() => ({ + container: { + padding: '12px', + width: '100%', + }, +})); + +interface WrapperProps { + backgroundColor: 'aliceblue' | 'gray' | 'darkblue'; + size: number; + children: React.ReactNode; +} +const ComponentWrapper = (props: WrapperProps) => { + const styles = useStyles(); + + const height = props.size + 2 * 12; // + 2*padding size + return ( +
+ {props.children} +
+ ); +}; + +export default { + title: 'UI Atoms/FlyteLogo', + component: FlyteLogo, +} as ComponentMeta; + +const Template: ComponentStory = (props) => ; +export const All = Template.bind({}); +All.args = { + size: 42, + hideText: false, + background: 'light', +}; +All.decorators = [ + (Story, context) => { + return ( +
+ + {Story()} + + + {Story()} + + + {Story()} + +
+ ); + }, +]; + +export const Default = Template.bind({}); +Default.args = { + size: 42, +}; +Default.decorators = [ + (Story, context) => { + return ( + + {Story()} + + ); + }, +]; + +export const NoText = Template.bind({}); +NoText.args = { + size: 42, + hideText: true, +}; +NoText.decorators = [ + (Story, context) => { + return ( + + {Story()} + + ); + }, +]; diff --git a/packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx b/packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx new file mode 100644 index 000000000..fdffdc8d3 --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx @@ -0,0 +1,46 @@ +import * as React from 'react'; + +export interface FlyteLogoProps { + /** Logo size (height) in pixels. Default: 32 */ + size: number; + /** If true - hides "Flyte" text */ + hideText?: boolean; + /** Which theme variant to use, depends on the background color logo used on. Default: 'dark' */ + background?: 'light' | 'dark'; +} + +const fillValues = { + dark: { + graphic: '#fff', + text: '#fff', + }, + light: { + graphic: '#40009f', + text: '#000', + }, +}; + +/** Renders the Flyte glyph/text logo */ +export const FlyteLogo = (props: FlyteLogoProps): JSX.Element => { + const fill = fillValues[props.background ?? 'dark']; + + const itemWidth = props.hideText ? 200 : 600; + return ( + + + {!props.hideText ? ( + + ) : null} + + ); +}; diff --git a/packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx b/packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx new file mode 100644 index 000000000..c9db6f50f --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx @@ -0,0 +1,24 @@ +import * as React from 'react'; +import classnames from 'classnames'; + +interface SVGProps { + size: number; + className?: string; + onClick?: () => void; +} + +export const InfoIcon = (props: SVGProps): JSX.Element => ( + + + + +); diff --git a/packages/composites/ui-atoms/src/Icons/index.tsx b/packages/composites/ui-atoms/src/Icons/index.tsx new file mode 100644 index 000000000..5b32e816c --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/index.tsx @@ -0,0 +1,2 @@ +export { FlyteLogo } from './FlyteLogo'; +export { InfoIcon } from './InfoIcon'; diff --git a/packages/composites/ui-atoms/src/index.ts b/packages/composites/ui-atoms/src/index.ts new file mode 100644 index 000000000..0999f3d1a --- /dev/null +++ b/packages/composites/ui-atoms/src/index.ts @@ -0,0 +1 @@ +export * from './Icons'; diff --git a/packages/composites/ui-atoms/tsconfig.json b/packages/composites/ui-atoms/tsconfig.json new file mode 100644 index 000000000..a6178cb4a --- /dev/null +++ b/packages/composites/ui-atoms/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"] +} diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json index 92a91613e..0e88f35b4 100644 --- a/packages/plugins/components/package.json +++ b/packages/plugins/components/package.json @@ -19,7 +19,8 @@ }, "dependencies": { "@material-ui/core": "^4.0.0", - "@material-ui/icons": "^4.0.0" + "@material-ui/icons": "^4.0.0", + "classnames": "^2.3.1" }, "peerDependencies": { "react": "^16.13.1", diff --git a/packages/plugins/components/src/AppInfo/appInfo.mock.ts b/packages/plugins/components/src/AppInfo/appInfo.mock.ts new file mode 100644 index 000000000..bdf155b64 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/appInfo.mock.ts @@ -0,0 +1,9 @@ +import { VersionInfo } from './versionDisplay'; + +export const generateVersionInfo = (name: string, version: string): VersionInfo => { + return { + name: name, + version: version, + url: `#some.fake.link/${name}/v${version}`, + }; +}; diff --git a/packages/plugins/components/src/AppInfo/appInfo.stories.tsx b/packages/plugins/components/src/AppInfo/appInfo.stories.tsx new file mode 100644 index 000000000..44369a987 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/appInfo.stories.tsx @@ -0,0 +1,54 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { Card, CardContent } from '@material-ui/core'; +import { AppInfo, INFO_WINDOW_WIDTH } from '.'; +import { generateVersionInfo } from './appInfo.mock'; +import { VersionDisplay } from './versionDisplay'; + +export default { + title: 'Components/AppInfo', + component: AppInfo, +} as ComponentMeta; + +const Template: ComponentStory = (props) => ; + +export const Default = Template.bind({}); +Default.args = { + versions: [ + generateVersionInfo('UI Version', '1.22.134'), + generateVersionInfo('Admin Version', '3.2.1'), + generateVersionInfo('Google Analytics', 'Active'), + ], + documentationUrl: 'here.is/some/link#', +}; + +export const ContentOnly = Template.bind({}); +ContentOnly.args = { + versions: [ + generateVersionInfo('Normal', '1.8.13'), + generateVersionInfo('Long Version', 'Very Uncomfortable'), + generateVersionInfo( + 'Long Name for all those who are interested in future endeavors', + '1.23.12', + ), + ], + documentationUrl: 'here.is/some/link#', +}; +ContentOnly.decorators = [ + (_Story, context) => { + return ( + + + + + + ); + }, +]; diff --git a/packages/plugins/components/src/AppInfo/appInfo.test.tsx b/packages/plugins/components/src/AppInfo/appInfo.test.tsx new file mode 100644 index 000000000..058097001 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/appInfo.test.tsx @@ -0,0 +1,44 @@ +import * as React from 'react'; +import { render, fireEvent, waitFor } from '@testing-library/react'; + +import { VersionDisplay } from './versionDisplay'; +import { AppInfo } from '.'; +import t from './strings'; +import { generateVersionInfo } from './appInfo.mock'; + +describe('appInfo', () => { + it('Info icon opens VersionDisplay on click', async () => { + const title = t('modalTitle'); + const { getByTestId, queryByText } = render(); + + // click on the icon to open modal + const infoIcon = getByTestId('infoIcon'); + fireEvent.click(infoIcon); + await waitFor(() => { + expect(queryByText(title)).toBeInTheDocument(); + }); + + // click on close button should close modal + const closeButton = getByTestId('closeButton'); + fireEvent.click(closeButton); + await waitFor(() => expect(queryByText(title)).not.toBeInTheDocument()); + }); + + it('VersionDisplay shows provided versions', async () => { + const versions = [ + generateVersionInfo('UI Version', 'Active'), + generateVersionInfo('Admin Version', '3.2.112'), + ]; + + const { queryByText } = render(); + + // click on the icon to open modal + await waitFor(() => { + expect(queryByText('UI Version')).toBeInTheDocument(); + expect(queryByText('Active')).toBeInTheDocument(); + + expect(queryByText('Admin Version')).toBeInTheDocument(); + expect(queryByText('3.2.112')).toBeInTheDocument(); + }); + }); +}); diff --git a/packages/plugins/components/src/AppInfo/index.tsx b/packages/plugins/components/src/AppInfo/index.tsx new file mode 100644 index 000000000..8c7e4f9eb --- /dev/null +++ b/packages/plugins/components/src/AppInfo/index.tsx @@ -0,0 +1,73 @@ +import * as React from 'react'; +import { + Dialog, + DialogContent, + DialogTitle, + IconButton, + makeStyles, + Theme, +} from '@material-ui/core'; +import { InfoIcon } from '@flyteconsole/ui-atoms'; +import CloseIcon from '@material-ui/icons/Close'; +import { VersionDisplay, VersionDisplayProps } from './versionDisplay'; + +export type { VersionInfo } from './versionDisplay'; + +export const INFO_WINDOW_WIDTH = 260; + +const useStyles = makeStyles((theme: Theme) => ({ + iconButton: { + cursor: 'pointer', + marginLeft: theme.spacing(1), + }, + closeButton: { + position: 'absolute', + right: theme.spacing(0.5), + top: theme.spacing(0.5), + }, + content: { + paddingBottom: theme.spacing(2), + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + dialog: { + width: `${INFO_WINDOW_WIDTH}px`, + maxWidth: `calc(100% - ${theme.spacing(2)}px)`, + maxHeight: `calc(100% - ${theme.spacing(2)}px)`, + }, +})); + +export const AppInfo = (props: VersionDisplayProps) => { + const [showVersionInfo, setShowVersionInfo] = React.useState(false); + + const styles = useStyles(); + + const onCloseDialog = () => setShowVersionInfo(false); + return ( + <> + setShowVersionInfo(true)} /> + + + + + + + + + + + + + ); +}; diff --git a/packages/plugins/components/src/AppInfo/strings.ts b/packages/plugins/components/src/AppInfo/strings.ts new file mode 100644 index 000000000..0d58b926c --- /dev/null +++ b/packages/plugins/components/src/AppInfo/strings.ts @@ -0,0 +1,9 @@ +import { createLocalizedString } from '@flyteconsole/locale'; + +const str = { + modalTitle: 'Flyte Console', + docsLink: 'Documentation Link:', +}; + +export { patternKey } from '@flyteconsole/locale'; +export default createLocalizedString(str); diff --git a/packages/plugins/components/src/AppInfo/versionDisplay.tsx b/packages/plugins/components/src/AppInfo/versionDisplay.tsx new file mode 100644 index 000000000..b42ba3217 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/versionDisplay.tsx @@ -0,0 +1,88 @@ +import * as React from 'react'; +import classnames from 'classnames'; +import { Link, makeStyles, Theme } from '@material-ui/core'; +import { FlyteLogo } from '@flyteconsole/ui-atoms'; +import t from './strings'; + +const headerFontFamily = '"Open Sans", helvetica, arial, sans-serif'; + +/* eslint-disable no-dupe-keys */ +const useStyles = makeStyles((theme: Theme) => ({ + title: { + fontFamily: headerFontFamily, + fontWeight: 'bold', + fontSize: '16px', + lineHeight: '22px', + margin: theme.spacing(1, 0), + color: '#000', + }, + versionsContainer: { + width: '100%', + margin: theme.spacing(3), + padding: theme.spacing(0, 1), + }, + versionWrapper: { + display: 'flex', + justifyContent: 'space-between', + marginBottom: theme.spacing(1), + }, + versionName: { + fontFamily: 'Apple SD Gothic Neo', + fontWeight: 'normal', + fontSize: '14px', + lineHeight: '17px', + color: '#636379', + }, + versionLink: { + color: '#1982E3', + fontSize: '14px', + marginLeft: theme.spacing(1), + }, +})); + +export type VersionInfo = { + name: string; + version: string; + url: string; +}; + +export interface VersionDisplayProps { + versions: VersionInfo[]; + documentationUrl: string; +} + +export const VersionDisplay = (props: VersionDisplayProps): JSX.Element => { + const styles = useStyles(); + + const VersionItem = (info: VersionInfo) => { + return ( +
+ {info.name} + + {info.version} + +
+ ); + }; + + const versionsList = props.versions.map((info) => VersionItem(info)); + + return ( + <> +
+ +
+
{t('modalTitle')}
+ +
{versionsList}
+ +
{t('docsLink')}
+ + {props.documentationUrl} + + + ); +}; diff --git a/packages/plugins/components/src/NavBar/defaultContent.tsx b/packages/plugins/components/src/NavBar/defaultContent.tsx deleted file mode 100644 index 7d58ad46b..000000000 --- a/packages/plugins/components/src/NavBar/defaultContent.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import MenuIcon from '@material-ui/icons/Menu'; -import { IconButton } from '@material-ui/core'; -// import classnames from 'classnames'; -// import { FlyteLogo } from 'components/common/FlyteLogo'; -// import { useCommonStyles } from 'components/common/styles'; -// import { Link } from 'react-router-dom'; -// import { Routes } from 'routes/routes'; -// import { UserInformation } from './UserInformation'; - -const useStyles = makeStyles((theme: Theme) => ({ - spacer: { - flexGrow: 1, - }, - rightNavBarItem: { - marginLeft: theme.spacing(2), - }, - /// - menuButton: { - marginRight: theme.spacing(2), - }, -})); - -/** Renders the default content for the app bar, which is the logo and help links */ -export const DefaultNavBarContent: React.FC = () => { - // const commonStyles = useCommonStyles(); - const styles = useStyles(); - return ( - <> -
- {' NASTYA IS HERE '} -
- - - - {/* - - -
- */} - - ); -}; diff --git a/packages/plugins/components/src/NavBar/index.tsx b/packages/plugins/components/src/NavBar/index.tsx deleted file mode 100644 index 81f64d993..000000000 --- a/packages/plugins/components/src/NavBar/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; - -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -// import { navBarContentId } from 'common/constants'; -import { DefaultNavBarContent } from './defaultContent'; - -export const navBarContentId = 'nav-bar-content'; - -export interface NavBarProps { - useCustomContent?: boolean; // rename to show that it is a backNavigation - className?: string; -} - -/** Contains all content in the top navbar of the application. */ -export const NavBar = (props: NavBarProps) => { - // const content = props.useCustomContent ?
: ; - return ( - - - {/* {content} */} - - - - ); -}; - -// export const NavBar = (): React.ReactElement => { -// return
It's me - Navigation Bar
; -// }; - -export const add = (a: number, b: number) => { - return a + b; -}; diff --git a/packages/plugins/components/src/NavBar/navbar.test.tsx b/packages/plugins/components/src/NavBar/navbar.test.tsx deleted file mode 100644 index bc0209e1e..000000000 --- a/packages/plugins/components/src/NavBar/navbar.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import * as React from 'react'; -import { render, screen } from '@testing-library/react'; -import { NavBar, add } from './index'; - -describe('add function', () => { - it('should add two number together', () => { - const result = add(10, 5); - expect(result).toBe(15); - }); - - it('NavBar contains correct text', () => { - render(); - const text = screen.getByText('NASTYA IS HERE'); - expect(text).toBeInTheDocument(); - }); -}); diff --git a/packages/plugins/components/src/Sample/index.tsx b/packages/plugins/components/src/Sample/index.tsx new file mode 100644 index 000000000..7be98984d --- /dev/null +++ b/packages/plugins/components/src/Sample/index.tsx @@ -0,0 +1,41 @@ +import * as React from 'react'; +import { AppBar, Toolbar, IconButton, makeStyles, Theme } from '@material-ui/core'; +import MenuIcon from '@material-ui/icons/Menu'; + +const useStyles = makeStyles((theme: Theme) => ({ + spacer: { + flexGrow: 1, + }, + menuButton: { + marginRight: theme.spacing(2), + }, +})); + +export interface SampleComponentProps { + useCustomContent?: boolean; // rename to show that it is a backNavigation + className?: string; +} + +/** Contains all content in the top navbar of the application. */ +export const SampleComponent = (props: SampleComponentProps) => { + const styles = useStyles(); + + return ( + + +
+ {' Sample Text '} +
+ + + + + + ); +}; diff --git a/packages/plugins/components/src/NavBar/navbar.stories.tsx b/packages/plugins/components/src/Sample/sample.stories.tsx similarity index 50% rename from packages/plugins/components/src/NavBar/navbar.stories.tsx rename to packages/plugins/components/src/Sample/sample.stories.tsx index c415bec36..10634aa22 100644 --- a/packages/plugins/components/src/NavBar/navbar.stories.tsx +++ b/packages/plugins/components/src/Sample/sample.stories.tsx @@ -2,12 +2,12 @@ import * as React from 'react'; import { ComponentStory, ComponentMeta } from '@storybook/react'; import { makeStyles, Theme } from '@material-ui/core/styles'; -import { NavBar } from '.'; +import { SampleComponent } from '.'; export default { - title: 'Primitives/NavBar', - component: NavBar, -} as ComponentMeta; + title: 'Components/Sample', + component: SampleComponent, +} as ComponentMeta; const useStyles = makeStyles((_theme: Theme) => ({ updatedOne: { @@ -20,15 +20,15 @@ const useStyles = makeStyles((_theme: Theme) => ({ }, })); -const Template: ComponentStory = () => ; +const Template: ComponentStory = () => ; export const Primary = Template.bind({}); -export const Secondary: ComponentStory = () => { +export const Secondary: ComponentStory = () => { const styles = useStyles(); - return ; + return ; }; -export const Tertiary: ComponentStory = () => { +export const Tertiary: ComponentStory = () => { const styles = useStyles(); - return ; + return ; }; diff --git a/packages/plugins/components/src/Sample/sample.test.tsx b/packages/plugins/components/src/Sample/sample.test.tsx new file mode 100644 index 000000000..e6728d223 --- /dev/null +++ b/packages/plugins/components/src/Sample/sample.test.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import { render, screen } from '@testing-library/react'; +import { SampleComponent } from './index'; + +describe('add function', () => { + it('SampleComponent is rendered contains correct text', () => { + render(); + const text = screen.getByText('Sample Text'); + expect(text).toBeInTheDocument(); + }); +}); diff --git a/packages/plugins/components/src/index.ts b/packages/plugins/components/src/index.ts index 766d96c64..c016877a5 100644 --- a/packages/plugins/components/src/index.ts +++ b/packages/plugins/components/src/index.ts @@ -1 +1 @@ -export { NavBar } from './NavBar'; +export { AppInfo, type VersionInfo } from './AppInfo'; diff --git a/packages/plugins/components/tsconfig.build.json b/packages/plugins/components/tsconfig.build.json index b48c439cd..23926fe6e 100644 --- a/packages/plugins/components/tsconfig.build.json +++ b/packages/plugins/components/tsconfig.build.json @@ -11,5 +11,6 @@ "src/**/*.test.*", "src/**/*.mock.*", "src/**/*.stories.*" - ] + ], + "references": [{ "path": "../../basics/locale" }, { "path": "../../composites/ui-atoms" }] } diff --git a/packages/plugins/components/tsconfig.json b/packages/plugins/components/tsconfig.json index a6178cb4a..8e7708e67 100644 --- a/packages/plugins/components/tsconfig.json +++ b/packages/plugins/components/tsconfig.json @@ -4,5 +4,6 @@ "rootDir": "./src", "outDir": "./dist" }, + "references": [{ "path": "../../basics/locale" }, { "path": "../../composites/ui-atoms" }], "include": ["src/**/*"] } diff --git a/packages/zapp/console/src/basics/Locale/index.ts b/packages/zapp/console/src/basics/Locale/index.ts deleted file mode 100644 index 4e32b8251..000000000 --- a/packages/zapp/console/src/basics/Locale/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const createLocalizedString = - (strings = {}) => - (key, ...rest) => { - const value = strings[key]; - return typeof value === 'function' ? value(...rest) : value; - }; - -export const patternKey = (parent: string, pattern: string) => { - return `${parent}_${pattern}`; -}; diff --git a/packages/zapp/console/src/components/Entities/strings.ts b/packages/zapp/console/src/components/Entities/strings.ts index 820736c58..9c44f0f79 100644 --- a/packages/zapp/console/src/components/Entities/strings.ts +++ b/packages/zapp/console/src/components/Entities/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; import { startCase } from 'lodash'; const str = { @@ -12,5 +12,5 @@ const str = { noSchedules: (typeString: string) => `This ${typeString} has no schedules.`, }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts index bb19aa116..6c5d64a0e 100644 --- a/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts +++ b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; import { dateFromNow } from 'common/formatters'; import { timestampToDate } from 'common/utils'; import { Protobuf } from 'flyteidl'; @@ -10,7 +10,7 @@ const str = { tableLabel_duration: 'duration', tableLabel_actions: '', cancelAction: 'Cancel', - inputOutputTooltip: 'View Inputs & Outputs', + inputOutputTooltip: 'View Inputs & Outputs', launchPlanTooltip: 'View Launch Plan', archiveAction: (isArchived: boolean) => (isArchived ? 'Unarchive' : 'Archive'), archiveSuccess: (isArchived: boolean) => @@ -22,5 +22,5 @@ const str = { }, }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx index a76b6fed8..8c2cb0205 100644 --- a/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx +++ b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx @@ -1,13 +1,19 @@ import { makeStyles, Theme } from '@material-ui/core/styles'; import classnames from 'classnames'; -import { FlyteLogo } from 'components/common/FlyteLogo'; +import { AppInfo, VersionInfo } from '@flyteconsole/components'; +import { FlyteLogo } from '@flyteconsole/ui-atoms'; import { useCommonStyles } from 'components/common/styles'; import * as React from 'react'; import { Link } from 'react-router-dom'; import { Routes } from 'routes/routes'; import { FeatureFlag, useFeatureFlag } from 'basics/FeatureFlags'; +import { useAdminVersion } from 'components/hooks/useVersion'; +import { env } from 'common/env'; import { UserInformation } from './UserInformation'; import { OnlyMine } from './OnlyMine/OnlyMine'; +import t, { patternKey } from './strings'; + +const { version: platformVersion } = require('../../../package.json'); const useStyles = makeStyles((theme: Theme) => ({ spacer: { @@ -22,16 +28,37 @@ const useStyles = makeStyles((theme: Theme) => ({ export const DefaultAppBarContent: React.FC = () => { const commonStyles = useCommonStyles(); const styles = useStyles(); + const isFlagEnabled = useFeatureFlag(FeatureFlag.OnlyMine); + const { adminVersion } = useAdminVersion(); + + const versions: VersionInfo[] = [ + { + name: t('versionConsoleUi'), + version: platformVersion, + url: `https://github.com/flyteorg/flyteconsole/releases/tag/v${platformVersion}`, + }, + { + name: t('versionAdmin'), + version: adminVersion, + url: `https://github.com/flyteorg/flyteadmin/releases/tag/v${adminVersion}`, + }, + { + name: t('versionGoogleAnalytics'), + version: t(patternKey('gaDisable', env.DISABLE_GA)), + url: 'https://github.com/flyteorg/flyteconsole#google-analytics', + }, + ]; return ( <> - +
{isFlagEnabled && } + ); }; diff --git a/packages/zapp/console/src/components/Navigation/UserInformation.tsx b/packages/zapp/console/src/components/Navigation/UserInformation.tsx index cfc1dda20..31527df77 100644 --- a/packages/zapp/console/src/components/Navigation/UserInformation.tsx +++ b/packages/zapp/console/src/components/Navigation/UserInformation.tsx @@ -1,10 +1,10 @@ +import * as React from 'react'; import Link from '@material-ui/core/Link'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { WaitForData } from 'components/common/WaitForData'; import { useUserProfile } from 'components/hooks/useUserProfile'; import { getLoginUrl } from 'models/AdminEntity/utils'; -import * as React from 'react'; -import { VersionDisplayModal } from './VersionDisplayModal'; +import t from './strings'; const useStyles = makeStyles((theme: Theme) => ({ container: { @@ -14,23 +14,18 @@ const useStyles = makeStyles((theme: Theme) => ({ const LoginLink: React.FC = () => ( - Login + {t('login')} ); /** Displays user info if logged in, or a login link otherwise. */ export const UserInformation: React.FC<{}> = () => { + const style = useStyles(); const profile = useUserProfile(); - const [showVersionInfo, setShowVersionInfo] = React.useState(false); - let modalContent: JSX.Element | null = null; - if (showVersionInfo) { - const onClose = () => setShowVersionInfo(false); - modalContent = ; - } return ( -
+
{!profile.value ? ( ) : !profile.value.preferredUsername || profile.value.preferredUsername === '' ? ( @@ -39,27 +34,6 @@ export const UserInformation: React.FC<{}> = () => { profile.value.preferredUsername )}
-
setShowVersionInfo(true)} - style={{ - cursor: 'pointer', - display: 'flex', - marginLeft: '5px', - }} - > - - - - -
- {modalContent} ); }; diff --git a/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx b/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx deleted file mode 100644 index 1f1fee678..000000000 --- a/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { Dialog, DialogContent } from '@material-ui/core'; -import Link from '@material-ui/core/Link'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import * as React from 'react'; -import { ClosableDialogTitle } from 'components/common/ClosableDialogTitle'; -import { useAdminVersion } from 'components/hooks/useVersion'; -import { env } from 'common/env'; - -const { version: platformVersion } = require('../../../package.json'); - -const useStyles = makeStyles((theme: Theme) => ({ - content: { - paddingTop: theme.spacing(2), - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - }, - dialog: { - maxWidth: `calc(100% - ${theme.spacing(12)}px)`, - maxHeight: `calc(100% - ${theme.spacing(12)}px)`, - height: theme.spacing(34), - width: theme.spacing(36), - }, - versionWrapper: { - minWidth: theme.spacing(20), - display: 'flex', - flexDirection: 'row', - justifyContent: 'space-between', - fontFamily: 'Apple SD Gothic Neo', - fontWeight: 'normal', - fontSize: '14px', - lineHeight: '17px', - color: '#636379', - marginBottom: '6px', - }, - title: { - fontFamily: 'Open Sans', - fontWeight: 'bold', - fontSize: '16px', - lineHeight: '22px', - margin: '7px 0 26px 0', - color: '#000', - }, - link: { - fontFamily: 'Apple SD Gothic Neo', - fontWeight: 'normal', - fontSize: '14px', - lineHeight: '17px', - color: '#636379', - margin: '17px 0 2px 0', - }, - version: { - color: '#1982E3', - fontSize: '14px', - }, -})); - -interface VersionDisplayModalProps { - onClose(): void; -} - -export const VersionDisplayModal: React.FC = ({ onClose }) => { - const styles = useStyles(); - const { adminVersion } = useAdminVersion(); - - const { DISABLE_GA } = env; - - return ( - - {} - - - - -
Flyte Console
-
- UI Version - - {platformVersion} - -
-
- Admin Version - - {adminVersion} - -
-
- Google Analytics - - {DISABLE_GA === 'false' ? 'Active' : 'Inactive'} - -
-
Documentation Link:
- - https://docs.flyte.org/en/latest/ - -
-
- ); -}; diff --git a/packages/zapp/console/src/components/Navigation/strings.ts b/packages/zapp/console/src/components/Navigation/strings.ts new file mode 100644 index 000000000..42c2a8d2c --- /dev/null +++ b/packages/zapp/console/src/components/Navigation/strings.ts @@ -0,0 +1,14 @@ +import { createLocalizedString } from '@flyteconsole/locale'; + +const str = { + login: 'Login', + versionConsoleUi: 'UI Version', + versionAdmin: 'Admin Version', + versionGoogleAnalytics: 'Google Analytics', + gaDisable_: 'Active', + gaDisable_true: 'Active', + gaDisable_false: 'Inactive', +}; + +export { patternKey } from '@flyteconsole/locale'; +export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Project/strings.ts b/packages/zapp/console/src/components/Project/strings.ts index 6fd42c3ed..d864a8c3c 100644 --- a/packages/zapp/console/src/components/Project/strings.ts +++ b/packages/zapp/console/src/components/Project/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; const str = { allExecutionsTitle: 'All Executions in the Project', @@ -7,5 +7,5 @@ const str = { workflowsTotal: (n: number) => `${n} Workflows`, }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/common/FlyteLogo.tsx b/packages/zapp/console/src/components/common/FlyteLogo.tsx deleted file mode 100644 index 54250b3c9..000000000 --- a/packages/zapp/console/src/components/common/FlyteLogo.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; - -export interface FlyteLogoProps { - /** Logo size (height) in pixels. Default: 32 */ - size?: number; - /** Which theme variant to use. Default: 'dark' */ - variant?: 'light' | 'dark'; -} - -const fillValues = { - dark: { - graphic: '#fff', - text: '#fff', - }, - light: { - graphic: '#40009f', - text: '#000', - }, -}; - -/** Renders the Flyte glyph/text logo */ -export const FlyteLogo: React.FC = ({ size = 32, variant = 'dark' }) => { - const fill = fillValues[variant]; - return ( - - - - - ); -}; diff --git a/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx b/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx deleted file mode 100644 index 838f02314..000000000 --- a/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { makeStyles, Theme } from '@material-ui/core/styles'; -import { storiesOf } from '@storybook/react'; -import * as React from 'react'; -import { FlyteLogo } from '../FlyteLogo'; - -const useStyles = makeStyles((theme: Theme) => ({ - darkContainer: { - backgroundColor: theme.palette.secondary.main, - height: '100%', - padding: theme.spacing(2), - width: '100%', - }, - lightContainer: { - height: '100%', - padding: theme.spacing(2), - width: '100%', - }, -})); - -const stories = storiesOf('Common/FlyteLogo', module); - -stories.add('Dark', () => ( -
- -
-)); - -stories.add('Light', () => ( -
- -
-)); diff --git a/packages/zapp/console/src/components/common/strings.ts b/packages/zapp/console/src/components/common/strings.ts index fe53e1d03..13e17f455 100644 --- a/packages/zapp/console/src/components/common/strings.ts +++ b/packages/zapp/console/src/components/common/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; const str = { annotationsHeader: 'Annotations', @@ -14,5 +14,5 @@ const str = { noMatchingResults: 'No matching results', }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/routes/components.ts b/packages/zapp/console/src/routes/components.ts index 0ae5193ab..dce412f8d 100644 --- a/packages/zapp/console/src/routes/components.ts +++ b/packages/zapp/console/src/routes/components.ts @@ -4,7 +4,7 @@ import { ProjectDetails } from 'components/Project/ProjectDetails'; import { SelectProject } from 'components/SelectProject/SelectProject'; import { TaskDetails } from 'components/Task/TaskDetails'; import { WorkflowDetails } from 'components/Workflow/WorkflowDetails'; -import { WorkflowVersionDetails } from '../components/Workflow/WorkflowVersionDetails'; +import { WorkflowVersionDetails } from 'components/Workflow/WorkflowVersionDetails'; /** Indexes the components for each defined route. These are done separately to avoid circular references * in components which include the Routes dictionary diff --git a/packages/zapp/console/tsconfig.build.json b/packages/zapp/console/tsconfig.build.json index b48c439cd..7df78be0d 100644 --- a/packages/zapp/console/tsconfig.build.json +++ b/packages/zapp/console/tsconfig.build.json @@ -11,5 +11,10 @@ "src/**/*.test.*", "src/**/*.mock.*", "src/**/*.stories.*" + ], + "references": [ + { "path": "../../basics/locale" }, + { "path": "../../composites/ui-atoms" }, + { "path": "../../plugins/components" } ] } diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index 0e27291d2..e3dfdb756 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -3,14 +3,24 @@ "compilerOptions": { "baseUrl": "./src", "outDir": "./dist", + "paths": { + "@flyteconsole/*": [ + "../../../basics/*/src", + "../../../composites/*/src", + "../../../plugins/*/src" + ] + }, // TODO: this items should be removed when violations are fixed: "noUnusedLocals": false, "noUnusedParameters": false, "noImplicitAny": false, - "exactOptionalPropertyTypes": false, "noImplicitOverride": false }, - "references": [{ "path": "../../plugins/components" }], + "references": [ + { "path": "../../basics/locale" }, + { "path": "../../composites/ui-atoms" }, + { "path": "../../plugins/components" } + ], "include": ["src/**/*"] } diff --git a/packages/zapp/console/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts index eebd81d8d..1f0c2c54d 100644 --- a/packages/zapp/console/webpack.common.config.ts +++ b/packages/zapp/console/webpack.common.config.ts @@ -92,6 +92,8 @@ const resolve = { mainFields: ['browser', 'module', 'main'], /** allow to resolve local packages to it's source code */ alias: { + '@flyteconsole/locale': path.resolve(__dirname, '../../basics/locale/src'), + '@flyteconsole/ui-atoms': path.resolve(__dirname, '../../composites/ui-atoms/src'), '@flyteconsole/components': path.resolve(__dirname, '../../plugins/components/src'), }, }; @@ -129,7 +131,7 @@ export const clientConfig: webpack.Configuration = { chunkFilename: '[name]-[chunkhash].chunk.js', }, plugins: [ - new ForkTsCheckerWebpackPlugin({ typescript: { configFile } }), + new ForkTsCheckerWebpackPlugin({ typescript: { configFile, build: true } }), favIconPlugin, statsWriterPlugin, getDefinePlugin(false), @@ -159,7 +161,7 @@ export const serverConfig: webpack.Configuration = { }, plugins: [ limitChunksPlugin, - new ForkTsCheckerWebpackPlugin({ typescript: { configFile } }), + new ForkTsCheckerWebpackPlugin({ typescript: { configFile, build: true } }), getDefinePlugin(true), ], }; diff --git a/script/test/jest.base.js b/script/test/jest.base.js index 6b607e83a..9b156c823 100644 --- a/script/test/jest.base.js +++ b/script/test/jest.base.js @@ -9,8 +9,14 @@ module.exports = { }, moduleNameMapper: { - '@flyteconsole/(.*)': ['/packages/plugins/$1/src', '/packages/zapp/$1/src'], + // In this case will correspond to package/zapp/console (and so) locations + '@flyteconsole/(.*)': [ + '/../../basics/$1/src', + '/../../composites/$1/src', + '/../../plugins/$1/src', + '/../../zapp/$1/src', + ], }, - coveragePathIgnorePatterns: ['mocks', 'src/index'], + coveragePathIgnorePatterns: ['mocks', '.mock', 'src/index'], }; diff --git a/tsconfig.base.json b/tsconfig.base.json index 52c8f322e..f0edb785b 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -12,17 +12,15 @@ "importHelpers": true, "jsx": "react", - "lib": ["es6", "es2021", "dom", "dom.iterable"], - // TODO: switch target to "esnext" when babel would be removed. - "target": "es6", + "lib": ["dom", "dom.iterable", "es6", "es2021"], + "target": "esnext", "module": "commonjs", "moduleResolution": "node", - "types": ["node", "webpack-env", "jest", "@testing-library/jest-dom"], + // "esModuleInterop": true "isolatedModules": true, "declaration": true, "declarationMap": true, - "downlevelIteration": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, @@ -32,7 +30,6 @@ "useUnknownInCatchVariables": false, // More strict rules - "exactOptionalPropertyTypes": true, "noUncheckedIndexedAccess": false, "noPropertyAccessFromIndexSignature": false, "noImplicitOverride": true, @@ -41,9 +38,13 @@ "sourceMap": true, "composite": true, "baseUrl": ".", - "outDir": "./dist", "paths": { - "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] + "@flyteconsole/*": [ + "./packages/basics/*/src", + "./packages/composites/*/src", + "./packages/plugins/*/src", + "./packages/zapp/*/src" + ] } }, "exclude": ["**/node_modules", "**/dist", "**/lib"] diff --git a/tsconfig.json b/tsconfig.json index 596c9ccd1..3ee7a6c6e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,3 @@ { - "files": [], - "include": [], - "compilerOptions": { - // compilerOptions here used for jest setup only - - // all packages are using tsconfig.base.json as a baseline - "jsx": "react", - "lib": ["dom", "esnext"], - "module": "esnext", - "moduleResolution": "node", - "esModuleInterop": true, - "baseUrl": "./", - "paths": { - "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] - } - }, - "references": [ - { "path": "./packages/plugins/components" }, - { "path": "./packages/zapp/console" } - ] + "extends": "./tsconfig.base.json" } diff --git a/yarn.lock b/yarn.lock index 6687a9a86..be39e82bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # 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/cli@~7.16.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.8.tgz#44b9be7706762bfa3bff8adbf746da336eb0ab7c" @@ -39,55 +32,12 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.12.10": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^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" - -"@babel/core@~7.16.12": +"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5", "@babel/core@~7.16.12": version "7.16.12" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== @@ -180,19 +130,6 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-class-features-plugin@^7.17.1": - 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" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-create-regexp-features-plugin@^7.12.1": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" @@ -290,13 +227,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.12.1": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" - integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== - dependencies: - "@babel/types" "^7.12.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" @@ -304,7 +234,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1": +"@babel/helper-module-imports@^7.0.0": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== @@ -318,21 +248,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" - "@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" @@ -347,13 +262,6 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" - integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== - dependencies: - "@babel/types" "^7.12.7" - "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -380,16 +288,6 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" @@ -401,13 +299,6 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== - dependencies: - "@babel/types" "^7.12.1" - "@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" @@ -461,16 +352,7 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/helpers@^7.16.7", "@babel/helpers@^7.17.2": +"@babel/helpers@^7.16.7": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== @@ -554,18 +436,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.12.12": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493" - integrity sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.1" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" - -"@babel/plugin-proposal-decorators@~7.16.7": +"@babel/plugin-proposal-decorators@^7.12.12", "@babel/plugin-proposal-decorators@~7.16.7": 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== @@ -630,27 +501,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" - -"@babel/plugin-proposal-object-rest-spread@^7.12.1": - 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.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" - "@babel/plugin-transform-parameters" "^7.16.7" - -"@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@~7.16.7": +"@babel/plugin-proposal-object-rest-spread@7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.16.7", "@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== @@ -747,7 +598,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.16.7", "@babel/plugin-syntax-decorators@^7.17.0": +"@babel/plugin-syntax-decorators@^7.16.7": 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== @@ -831,7 +682,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -1374,7 +1225,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": +"@babel/template@^7.10.4", "@babel/template@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== @@ -1392,7 +1243,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": +"@babel/traverse@^7.1.0": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== @@ -1407,7 +1258,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.17.3": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== @@ -1439,7 +1290,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== @@ -2259,24 +2110,6 @@ "@babel/runtime" "^7.7.2" regenerator-runtime "^0.13.3" -"@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" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" @@ -6502,11 +6335,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -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== - chart.js@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.6.2.tgz#47342c551f688ffdda2cd53b534cb7e461ecec33" @@ -10001,7 +9829,7 @@ genfun@^5.0.0: resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -16807,7 +16635,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18.1: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== From acf3cb9a59e339cdb696b35702d38c5b216335f2 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Wed, 11 May 2022 14:01:19 -0700 Subject: [PATCH 20/93] ci: minimize babel presence (#457) * ci: minimize babel presence Signed-off-by: Nastya Rusina --- .babelrc | 21 --- packages/zapp/console/package.json | 15 +- yarn.lock | 230 ++++++++++++++++++++++++----- 3 files changed, 201 insertions(+), 65 deletions(-) delete mode 100644 .babelrc diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 23b8762fd..000000000 --- a/.babelrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "browsers": ["last 2 versions", "safari >= 7"] - } - } - ], - "@babel/preset-react" - ], - "plugins": [ - "react-hot-loader/babel", - ["@babel/plugin-proposal-decorators", { "legacy": true }], - ["@babel/proposal-class-properties", { "loose": true }], - ["@babel/plugin-proposal-private-methods", { "loose": true }], - ["@babel/plugin-proposal-private-property-in-object", { "loose": true }], - "@babel/proposal-object-rest-spread" - ] -} diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 545f10daa..b9a2d2be3 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -30,7 +30,6 @@ "dependencies": { "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", - "babel-polyfill": "^6.26.0", "cache": "^2.1.0", "chalk": "^2.0.1", "chart.js": "^3.6.2", @@ -53,14 +52,8 @@ "tslib": "^1.9.0" }, "devDependencies": { - "@babel/cli": "~7.16.0", - "@babel/core": "~7.16.12", - "@babel/plugin-proposal-class-properties": "~7.16.7", - "@babel/plugin-proposal-decorators": "~7.16.7", - "@babel/plugin-proposal-object-rest-spread": "~7.16.7", - "@babel/preset-env": "~7.16.11", - "@babel/preset-react": "~7.16.7", - "@babel/preset-typescript": "~7.16.7", + "@babel/core": "^7.17.10", + "@babel/preset-env": "^7.17.10", "@commitlint/cli": "^8.3.5", "@commitlint/config-conventional": "^8.3.4", "@date-io/moment": "1.3.9", @@ -103,8 +96,8 @@ "autoprefixer": "^8.3.0", "axios": "^0.21.2", "axios-mock-adapter": "^1.16.0", - "babel-core": "^7.0.0-0", - "babel-loader": "^8.2.3", + "babel-loader": "^8.2.5", + "babel-polyfill": "^6.26.0", "camelcase-keys": "^6.1.1", "classnames": "^2.3.1", "compression-webpack-plugin": "^9.2.0", diff --git a/yarn.lock b/yarn.lock index be39e82bf..aaf06fa50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,14 @@ # yarn lockfile v1 +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@babel/cli@~7.16.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.8.tgz#44b9be7706762bfa3bff8adbf746da336eb0ab7c" @@ -37,7 +45,12 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5", "@babel/core@~7.16.12": +"@babel/compat-data@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" + integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== + +"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.17.10", "@babel/core@^7.7.5", "@babel/core@~7.16.12": version "7.16.12" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== @@ -76,7 +89,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.16.8", "@babel/generator@^7.17.0": +"@babel/generator@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== @@ -85,6 +98,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189" + integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg== + dependencies: + "@babel/types" "^7.17.10" + "@jridgewell/gen-mapping" "^0.1.0" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -117,6 +139,16 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz#09c63106d47af93cf31803db6bc49fef354e2ebe" + integrity sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.20.2" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": version "7.17.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" @@ -206,6 +238,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-function-name@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" + integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/types" "^7.17.0" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -262,6 +302,20 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^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.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.17.3" + "@babel/types" "^7.17.0" + "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -306,6 +360,13 @@ dependencies: "@babel/types" "^7.16.7" +"@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.17.0" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -352,13 +413,13 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.16.7": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== +"@babel/helpers@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" + integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== dependencies: "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" + "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" "@babel/highlight@^7.10.4": @@ -389,11 +450,16 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== -"@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0": +"@babel/parser@^7.16.7", "@babel/parser@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== +"@babel/parser@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" + integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" @@ -1057,7 +1123,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/preset-env@^7.12.11", "@babel/preset-env@~7.16.11": +"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.17.10", "@babel/preset-env@~7.16.11": 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== @@ -1274,7 +1340,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== @@ -1290,6 +1356,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5" + integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.10" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.10" + "@babel/types" "^7.17.10" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" @@ -1307,6 +1389,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.10.tgz#d35d7b4467e439fcf06d195f8100e0fea7fc82c4" + integrity sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2110,6 +2200,37 @@ "@babel/runtime" "^7.7.2" regenerator-runtime "^0.13.3" +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" + integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + +"@jridgewell/set-array@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" + integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.13" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" + integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" @@ -5357,11 +5478,6 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-core@^7.0.0-0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" @@ -5376,7 +5492,7 @@ babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@^8.0.0, babel-loader@^8.2.3: +babel-loader@^8.0.0: version "8.2.3" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== @@ -5386,6 +5502,16 @@ babel-loader@^8.0.0, babel-loader@^8.2.3: make-dir "^3.1.0" schema-utils "^2.6.5" +babel-loader@^8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + babel-plugin-add-react-displayname@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" @@ -5931,6 +6057,17 @@ browserslist@^4.17.5, browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.20.2: + version "4.20.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" + integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== + dependencies: + caniuse-lite "^1.0.30001332" + electron-to-chromium "^1.4.118" + escalade "^3.1.1" + node-releases "^2.0.3" + picocolors "^1.0.0" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -6236,6 +6373,11 @@ caniuse-lite@^1.0.30001313: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz#a380b079db91621e1b7120895874e2fd62ed2e2f" integrity sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q== +caniuse-lite@^1.0.30001332: + version "1.0.30001338" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz#b5dd7a7941a51a16480bdf6ff82bded1628eec0d" + integrity sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -6364,22 +6506,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.1.2" - -chokidar@^3.5.3: +chokidar@^3.4.0, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -6394,6 +6521,21 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.4.1, chokidar@^3.4.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -7005,7 +7147,14 @@ conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: through2 "^4.0.0" trim-off-newlines "^1.0.0" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.1.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -8327,6 +8476,11 @@ electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.613.tgz#5ad7ec1e19d28c81edb6d61b9d4990d1c9716182" integrity sha512-c3gkahddiUalk7HLhTC7PsKzPZmovYFtgh+g3rZJ+dGokk4n4dzEoOBnoV8VU8ptvnGJMhrjM/lyXKSltqf2hQ== +electron-to-chromium@^1.4.118: + version "1.4.137" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz#186180a45617283f1c012284458510cd99d6787f" + integrity sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA== + electron-to-chromium@^1.4.17: version "1.4.67" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.67.tgz#699e59d6959d05f87865e12b3055bbcf492bbbee" @@ -12237,6 +12391,11 @@ json5@^2.1.3: dependencies: minimist "^1.2.5" +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -13916,6 +14075,11 @@ node-releases@^2.0.1, node-releases@^2.0.2: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== +node-releases@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" + integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== + node-request-interceptor@^0.5.3: version "0.5.8" resolved "https://registry.yarnpkg.com/node-request-interceptor/-/node-request-interceptor-0.5.8.tgz#1777c05eae25f468c891f24075f4087ac2ea3f3b" From 38a4e96cea3487cd683de7fc95b2711a899bb328 Mon Sep 17 00:00:00 2001 From: olga-union <101579322+olga-union@users.noreply.github.com> Date: Fri, 13 May 2022 10:15:18 -0500 Subject: [PATCH 21/93] fix: update node executions to display map tasks (#455) * fix: update node executions to display map tasks * fix: update map task logs styles * test: add/update unit tests * fix: fix flickering and unnecessary re-renders Signed-off-by: Olga Nad --- .../ExecutionWorkflowGraph.tsx | 36 +- .../NodeExecutionDetailsPanelContent.tsx | 104 +++-- .../NodeExecutionTabs/index.tsx | 14 +- .../NodeExecutionTabs/test/index.test.tsx | 61 +++ .../MapTaskExecutionListItem.tsx | 41 +- .../TaskExecutionsList/TaskExecutionsList.tsx | 10 +- .../TaskExecutionsList/constants.ts | 12 + .../Executions/TaskExecutionsList/utils.ts | 16 +- .../WorkflowGraph/WorkflowGraph.tsx | 15 +- .../__stories__/WorkflowGraph.stories.tsx | 7 +- .../WorkflowGraph/test/WorkflowGraph.test.tsx | 39 ++ .../test/nodeExecutionsById.mock.ts | 150 +++++++ .../WorkflowGraph/test/workflow.mock.ts | 370 ++++++++++++++++++ .../MapTaskStatusInfo.test.tsx | 16 +- .../MapTaskStatusInfo.tsx | 14 +- .../ReactFlow/ReactFlowGraphComponent.tsx | 58 ++- .../ReactFlow/customNodeComponents.tsx | 120 +++++- .../ReactFlow/transformDAGToReactFlowV2.tsx | 104 ++--- .../components/flytegraph/ReactFlow/utils.tsx | 6 +- .../console/src/models/Execution/types.ts | 5 +- 20 files changed, 1031 insertions(+), 167 deletions(-) create mode 100644 packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/constants.ts create mode 100644 packages/zapp/console/src/components/WorkflowGraph/test/WorkflowGraph.test.tsx create mode 100644 packages/zapp/console/src/components/WorkflowGraph/test/nodeExecutionsById.mock.ts create mode 100644 packages/zapp/console/src/components/WorkflowGraph/test/workflow.mock.ts diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx index ad0c32f59..379d850ce 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx @@ -4,12 +4,16 @@ import { DataError } from 'components/Errors/DataError'; import { makeWorkflowQuery } from 'components/Workflow/workflowQueries'; import { WorkflowGraph } from 'components/WorkflowGraph/WorkflowGraph'; import { keyBy } from 'lodash'; -import { NodeExecution } from 'models/Execution/types'; +import { TaskExecutionPhase } from 'models/Execution/enums'; +import { ExternalResource, LogsByPhase, NodeExecution } from 'models/Execution/types'; import { endNodeId, startNodeId } from 'models/Node/constants'; import { Workflow, WorkflowId } from 'models/Workflow/types'; import * as React from 'react'; +import { useMemo, useState } from 'react'; import { useQuery, useQueryClient } from 'react-query'; import { NodeExecutionsContext } from '../contexts'; +import { getGroupedLogs } from '../TaskExecutionsList/utils'; +import { useTaskExecutions, useTaskExecutionsRefresher } from '../useTaskExecutions'; import { NodeExecutionDetailsPanelContent } from './NodeExecutionDetailsPanelContent'; export interface ExecutionWorkflowGraphProps { @@ -23,12 +27,30 @@ export const ExecutionWorkflowGraph: React.FC = ({ workflowId, }) => { const workflowQuery = useQuery(makeWorkflowQuery(useQueryClient(), workflowId)); - const nodeExecutionsById = React.useMemo( - () => keyBy(nodeExecutions, 'scopedId'), - [nodeExecutions], + + const nodeExecutionsWithResources = nodeExecutions.map((nodeExecution) => { + const taskExecutions = useTaskExecutions(nodeExecution.id); + useTaskExecutionsRefresher(nodeExecution, taskExecutions); + + const externalResources: ExternalResource[] = taskExecutions.value + .map((taskExecution) => taskExecution.closure.metadata?.externalResources) + .flat() + .filter((resource): resource is ExternalResource => !!resource); + + const logsByPhase: LogsByPhase = getGroupedLogs(externalResources); + + return { + ...nodeExecution, + ...(logsByPhase.size > 0 && { logsByPhase }), + }; + }); + + const nodeExecutionsById = useMemo( + () => keyBy(nodeExecutionsWithResources, 'scopedId'), + [nodeExecutionsWithResources], ); - const [selectedNodes, setSelectedNodes] = React.useState([]); + const [selectedNodes, setSelectedNodes] = useState([]); const onNodeSelectionChanged = (newSelection: string[]) => { const validSelection = newSelection.filter((nodeId) => { if (nodeId === startNodeId || nodeId === endNodeId) { @@ -52,9 +74,12 @@ export const ExecutionWorkflowGraph: React.FC = ({ const onCloseDetailsPanel = () => setSelectedNodes([]); + const [selectedPhase, setSelectedPhase] = useState(undefined); + const renderGraph = (workflow: Workflow) => ( @@ -71,6 +96,7 @@ export const ExecutionWorkflowGraph: React.FC = ({ {selectedExecution && ( )} diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx index 561ec53aa..09ad0f06f 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx @@ -1,8 +1,9 @@ import * as React from 'react'; -import { useEffect, useRef } from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; import { IconButton, Typography, Tab, Tabs } from '@material-ui/core'; import { makeStyles, Theme } from '@material-ui/core/styles'; import Close from '@material-ui/icons/Close'; +import ArrowBackIos from '@material-ui/icons/ArrowBackIos'; import classnames from 'classnames'; import { useCommonStyles } from 'components/common/styles'; import { InfoIcon } from 'components/common/Icons/InfoIcon'; @@ -23,7 +24,7 @@ import { fetchWorkflow } from 'components/Workflow/workflowQueries'; import { PanelSection } from 'components/common/PanelSection'; import { DumpJSON } from 'components/common/DumpJSON'; import { dNode } from 'models/Graph/types'; -import { NodeExecutionPhase } from 'models/Execution/enums'; +import { NodeExecutionPhase, TaskExecutionPhase } from 'models/Execution/enums'; import { transformWorkflowToKeyedDag, getNodeNameFromDag } from 'components/WorkflowGraph/utils'; import { NodeExecutionCacheStatus } from '../NodeExecutionCacheStatus'; import { makeListTaskExecutionsQuery, makeNodeExecutionQuery } from '../nodeExecutionQueries'; @@ -126,6 +127,7 @@ const tabIds = { interface NodeExecutionDetailsProps { nodeExecutionId: NodeExecutionIdentifier; + phase?: TaskExecutionPhase; onClose?: () => void; } @@ -218,8 +220,19 @@ const WorkflowTabs: React.FC<{ */ export const NodeExecutionDetailsPanelContent: React.FC = ({ nodeExecutionId, + phase, onClose, }) => { + const commonStyles = useCommonStyles(); + const styles = useStyles(); + const queryClient = useQueryClient(); + const detailsContext = useNodeExecutionContext(); + + const [isReasonsVisible, setReasonsVisible] = useState(false); + const [dag, setDag] = useState(null); + const [details, setDetails] = useState(); + const [shouldShowTaskDetails, setShouldShowTaskDetails] = useState(false); // TODO to be reused in https://github.com/flyteorg/flyteconsole/issues/312 + const isMounted = useRef(false); useEffect(() => { isMounted.current = true; @@ -228,13 +241,6 @@ export const NodeExecutionDetailsPanelContent: React.FC(null); - const [details, setDetails] = React.useState(); - const nodeExecutionQuery = useQuery({ ...makeNodeExecutionQuery(nodeExecutionId), // The selected NodeExecution has been fetched at this point, we don't want to @@ -242,7 +248,7 @@ export const NodeExecutionDetailsPanelContent: React.FC { + useEffect(() => { let isCurrent = true; detailsContext.getNodeExecutionDetails(nodeExecution).then((res) => { if (isCurrent) { @@ -255,7 +261,7 @@ export const NodeExecutionDetailsPanelContent: React.FC { + useEffect(() => { setReasonsVisible(false); }, [nodeExecutionId]); @@ -288,20 +294,48 @@ export const NodeExecutionDetailsPanelContent: React.FC; + const onBackClick = () => { + setShouldShowTaskDetails(false); + }; + + const headerTitle = useMemo(() => { + // TODO to be reused in https://github.com/flyteorg/flyteconsole/issues/312 + // // eslint-disable-next-line no-useless-escape + // const regex = /\-([\w\s-]+)\-/; // extract string between first and last dash + + // const mapTaskHeader = `${mapTask?.[0].externalId?.match(regex)?.[1]} of ${ + // nodeExecutionId.nodeId + // }`; + // const header = shouldShowTaskDetails ? mapTaskHeader : nodeExecutionId.nodeId; + const header = nodeExecutionId.nodeId; - const isRunningPhase = React.useMemo(() => { + return ( + +
+ {shouldShowTaskDetails && ( + + + + )} + {header} +
+ + + +
+ ); + }, [nodeExecutionId, shouldShowTaskDetails]); + + const isRunningPhase = useMemo(() => { return ( nodeExecution?.closure.phase === NodeExecutionPhase.QUEUED || nodeExecution?.closure.phase === NodeExecutionPhase.RUNNING ); }, [nodeExecution]); - const handleReasonsVisibility = React.useCallback(() => { - setReasonsVisible((prevVisibility) => !prevVisibility); - }, []); + const handleReasonsVisibility = () => { + setReasonsVisible(!isReasonsVisible); + }; const statusContent = nodeExecution ? (
@@ -321,26 +355,32 @@ export const NodeExecutionDetailsPanelContent: React.FCNOT RUN
); - const detailsContent = nodeExecution ? ( - <> - - - - ) : null; + let detailsContent: JSX.Element | null = null; + if (nodeExecution) { + detailsContent = ( + <> + + + + ); + } - const tabsContent = nodeExecution ? ( - + const tabsContent: JSX.Element | null = nodeExecution ? ( + ) : null; + + const displayName = details?.displayName ?? ; + return (
- - {nodeExecutionId.nodeId} - - - - + {headerTitle} = ({ nodeExecution, taskTemplate }) => { +}> = ({ nodeExecution, shouldShowTaskDetails, taskTemplate, phase }) => { const styles = useStyles(); const tabState = useTabState(tabIds, defaultTab); @@ -55,7 +58,7 @@ export const NodeExecutionTabs: React.FC<{ let tabContent: JSX.Element | null = null; switch (tabState.value) { case tabIds.executions: { - tabContent = ; + tabContent = ; break; } case tabIds.inputs: { @@ -76,7 +79,12 @@ export const NodeExecutionTabs: React.FC<{ } } - const executionLabel = isMapTaskType(taskTemplate?.type) ? 'Map Execution' : 'Executions'; + const executionLabel = isMapTaskType(taskTemplate?.type) + ? shouldShowTaskDetails + ? 'Execution' + : 'Map Execution' + : 'Executions'; + return ( <> diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx new file mode 100644 index 000000000..1e5de265f --- /dev/null +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx @@ -0,0 +1,61 @@ +import { render } from '@testing-library/react'; +import { useTabState } from 'components/hooks/useTabState'; +import { extractTaskTemplates } from 'components/hooks/utils'; +import { TaskExecutionPhase } from 'models/Execution/enums'; +import { createMockNodeExecutions } from 'models/Execution/__mocks__/mockNodeExecutionsData'; +import { TaskType } from 'models/Task/constants'; +import { createMockWorkflow } from 'models/__mocks__/workflowData'; +import * as React from 'react'; +import { NodeExecutionTabs } from '../index'; + +const getMockNodeExecution = () => createMockNodeExecutions(1).executions[0]; +const nodeExecution = getMockNodeExecution(); +const workflow = createMockWorkflow('SampleWorkflow'); +const taskTemplate = { ...extractTaskTemplates(workflow)[0], type: TaskType.ARRAY }; +const phase = TaskExecutionPhase.SUCCEEDED; + +jest.mock('components/hooks/useTabState'); + +describe('NodeExecutionTabs', () => { + const mockUseTabState = useTabState as jest.Mock; + mockUseTabState.mockReturnValue({ onChange: jest.fn(), value: 'executions' }); + describe('with map tasks', () => { + it('should display proper tab name when it was provided and shouldShow is TRUE', async () => { + const { queryByText, queryAllByRole } = render( + , + ); + expect(queryAllByRole('tab')).toHaveLength(4); + expect(queryByText('Execution')).toBeInTheDocument(); + }); + + it('should display proper tab name when it was provided and shouldShow is FALSE', async () => { + const { queryByText, queryAllByRole } = render( + , + ); + + expect(queryAllByRole('tab')).toHaveLength(4); + expect(queryByText('Map Execution')).toBeInTheDocument(); + }); + }); + + describe('without map tasks', () => { + it('should display proper tab name when mapTask was not provided', async () => { + const { queryAllByRole, queryByText } = render( + , + ); + + expect(queryAllByRole('tab')).toHaveLength(3); + expect(queryByText('Executions')).toBeInTheDocument(); + }); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx index 078d4b680..3fdf143c2 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx @@ -11,6 +11,7 @@ import { TaskExecutionDetails } from './TaskExecutionDetails'; import { TaskExecutionError } from './TaskExecutionError'; import { TaskExecutionLogs } from './TaskExecutionLogs'; import { formatRetryAttempt, getGroupedLogs } from './utils'; +import { RENDER_ORDER } from './constants'; const useStyles = makeStyles((theme: Theme) => ({ detailsLink: { @@ -33,23 +34,14 @@ const useStyles = makeStyles((theme: Theme) => ({ interface MapTaskExecutionsListItemProps { taskExecution: TaskExecution; showAttempts: boolean; + selectedPhase?: TaskExecutionPhase; } -const RENDER_ORDER: TaskExecutionPhase[] = [ - TaskExecutionPhase.UNDEFINED, - TaskExecutionPhase.INITIALIZING, - TaskExecutionPhase.WAITING_FOR_RESOURCES, - TaskExecutionPhase.QUEUED, - TaskExecutionPhase.RUNNING, - TaskExecutionPhase.SUCCEEDED, - TaskExecutionPhase.ABORTED, - TaskExecutionPhase.FAILED, -]; - /** Renders an individual `TaskExecution` record as part of a list */ export const MapTaskExecutionsListItem: React.FC = ({ taskExecution, showAttempts, + selectedPhase, }) => { const commonStyles = useCommonStyles(); const styles = useStyles(); @@ -57,16 +49,7 @@ export const MapTaskExecutionsListItem: React.FC const { closure } = taskExecution; const taskHasStarted = closure.phase >= TaskExecutionPhase.QUEUED; const headerText = formatRetryAttempt(taskExecution.id.retryAttempt); - const logsInfo = getGroupedLogs(closure.metadata?.externalResources ?? []); - - // Set UI elements in a proper rendering order - const logsSections: JSX.Element[] = []; - for (const key of RENDER_ORDER) { - const values = logsInfo.get(key); - if (values) { - logsSections.push(); - } - } + const logsByPhase = getGroupedLogs(closure.metadata?.externalResources ?? []); return ( @@ -94,7 +77,21 @@ export const MapTaskExecutionsListItem: React.FC
) : null} {/* child/array logs separated by subtasks phase */} - {logsSections} + {RENDER_ORDER.map((phase, id) => { + const logs = logsByPhase.get(phase); + if (!logs) { + return null; + } + const key = `${id}-${phase}`; + return ( + + ); + })} {/* If map task is actively started - show 'started' and 'run time' details */} {taskHasStarted && ( diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx index 16915dac9..ef354206c 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx @@ -5,6 +5,7 @@ import { NonIdealState } from 'components/common/NonIdealState'; import { WaitForData } from 'components/common/WaitForData'; import { NodeExecution, TaskExecution } from 'models/Execution/types'; import { isMapTaskType } from 'models/Task/utils'; +import { TaskExecutionPhase } from 'models/Execution/enums'; import { useTaskExecutions, useTaskExecutionsRefresher } from '../useTaskExecutions'; import { MapTaskExecutionsListItem } from './MapTaskExecutionListItem'; import { TaskExecutionsListItem } from './TaskExecutionsListItem'; @@ -18,11 +19,13 @@ const useStyles = makeStyles((theme: Theme) => ({ interface TaskExecutionsListProps { nodeExecution: NodeExecution; + phase?: TaskExecutionPhase; } export const TaskExecutionsListContent: React.FC<{ taskExecutions: TaskExecution[]; -}> = ({ taskExecutions }) => { + phase?: TaskExecutionPhase; +}> = ({ taskExecutions, phase }) => { const styles = useStyles(); if (!taskExecutions.length) { return ( @@ -45,6 +48,7 @@ export const TaskExecutionsListContent: React.FC<{ key={getUniqueTaskExecutionName(taskExecution)} taskExecution={taskExecution} showAttempts={taskExecutions.length > 1} + selectedPhase={phase} /> ) : ( = ({ nodeExecution }) => { +export const TaskExecutionsList: React.FC = ({ nodeExecution, phase }) => { const taskExecutions = useTaskExecutions(nodeExecution.id); useTaskExecutionsRefresher(nodeExecution, taskExecutions); return ( - + ); }; diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/constants.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/constants.ts new file mode 100644 index 000000000..82c26c290 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/constants.ts @@ -0,0 +1,12 @@ +import { TaskExecutionPhase } from 'models/Execution/enums'; + +export const RENDER_ORDER: TaskExecutionPhase[] = [ + TaskExecutionPhase.UNDEFINED, + TaskExecutionPhase.INITIALIZING, + TaskExecutionPhase.WAITING_FOR_RESOURCES, + TaskExecutionPhase.QUEUED, + TaskExecutionPhase.RUNNING, + TaskExecutionPhase.SUCCEEDED, + TaskExecutionPhase.ABORTED, + TaskExecutionPhase.FAILED, +]; diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts index 356d51b6d..e307f7ec1 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts @@ -1,7 +1,7 @@ +import { LogsByPhase, TaskExecution } from 'models/Execution/types'; import { leftPaddedNumber } from 'common/formatters'; -import { Core, Event } from 'flyteidl'; +import { Event } from 'flyteidl'; import { TaskExecutionPhase } from 'models/Execution/enums'; -import { TaskExecution } from 'models/Execution/types'; /** Generates a unique name for a task execution, suitable for display in a * header and use as a child component key. The name is a combination of task @@ -25,10 +25,8 @@ export function formatRetryAttempt(attempt: number | string | undefined): string return `Attempt ${leftPaddedNumber(parsed + 1, 2)}`; } -export const getGroupedLogs = ( - resources: Event.IExternalResourceInfo[], -): Map => { - const logsInfo = new Map(); +export const getGroupedLogs = (resources: Event.IExternalResourceInfo[]): LogsByPhase => { + const logsByPhase: LogsByPhase = new Map(); // sort output sample [0-2, 0-1, 0, 1, 2], where 0-1 means index = 0 retry = 1 resources.sort((a, b) => { @@ -51,15 +49,15 @@ export const getGroupedLogs = ( continue; } const phase = item.phase ?? TaskExecutionPhase.UNDEFINED; - const currentValue = logsInfo.get(phase); + const currentValue = logsByPhase.get(phase); lastIndex = item.index ?? 0; if (item.logs) { // if there is no log with active url, just create an item with externalId, // for user to understand which array items are in this state const newLogs = item.logs.length > 0 ? item.logs : [{ name: item.externalId }]; - logsInfo.set(phase, currentValue ? [...currentValue, ...newLogs] : [...newLogs]); + logsByPhase.set(phase, currentValue ? [...currentValue, ...newLogs] : [...newLogs]); } } - return logsInfo; + return logsByPhase; }; diff --git a/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx b/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx index 5ddcc7a57..6b2a6bfe1 100644 --- a/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx +++ b/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx @@ -5,17 +5,17 @@ import ReactFlowGraphComponent from 'components/flytegraph/ReactFlow/ReactFlowGr import { Error } from 'models/Common/types'; import { NonIdealState } from 'components/common/NonIdealState'; import { DataError } from 'components/Errors/DataError'; -import { NodeExecutionsContext } from 'components/Executions/contexts'; import { WaitForQuery } from 'components/common/WaitForQuery'; import { useQuery } from 'react-query'; import { makeNodeExecutionDynamicWorkflowQuery } from 'components/Workflow/workflowQueries'; import { createDebugLogger } from 'common/log'; import { CompiledNode } from 'models/Node/types'; +import { TaskExecutionPhase } from 'models/Execution/enums'; import { transformerWorkflowToDag } from './transformerWorkflowToDag'; export interface WorkflowGraphProps { onNodeSelectionChanged: (selectedNodes: string[]) => void; - selectedNodes?: string[]; + onPhaseSelectionChanged: (phase: TaskExecutionPhase) => void; workflow: Workflow; nodeExecutionsById?: any; } @@ -56,7 +56,7 @@ export interface DynamicWorkflowMapping { dynamicExecutions: any[]; } export const WorkflowGraph: React.FC = (props) => { - const { onNodeSelectionChanged, nodeExecutionsById, workflow } = props; + const { onNodeSelectionChanged, onPhaseSelectionChanged, nodeExecutionsById, workflow } = props; const { dag, staticExecutionIdsMap, error } = workflowToDag(workflow); /** * Note: @@ -112,6 +112,7 @@ export const WorkflowGraph: React.FC = (props) => { nodeExecutionsById={nodeExecutionsById} data={merged} onNodeSelectionChanged={onNodeSelectionChanged} + onPhaseSelectionChanged={onPhaseSelectionChanged} /> ); }; @@ -120,11 +121,9 @@ export const WorkflowGraph: React.FC = (props) => { return ; } else { return ( - - - {renderReactFlowGraph} - - + + {renderReactFlowGraph} + ); } }; diff --git a/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx b/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx index cd67dd13d..ecedabf25 100644 --- a/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx +++ b/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx @@ -22,6 +22,7 @@ const workflow: Workflow = { }; const onNodeSelectionChanged = action('nodeSelected'); +const onMapTaskSelectionChanged = action('mapTaskSelected'); const cache = createCache(); const taskTemplates = extractTaskTemplates(workflow); @@ -46,5 +47,9 @@ stories.addDecorator((story) => ( )); stories.add('TaskNodeRenderer', () => ( - + )); diff --git a/packages/zapp/console/src/components/WorkflowGraph/test/WorkflowGraph.test.tsx b/packages/zapp/console/src/components/WorkflowGraph/test/WorkflowGraph.test.tsx new file mode 100644 index 000000000..5d542d914 --- /dev/null +++ b/packages/zapp/console/src/components/WorkflowGraph/test/WorkflowGraph.test.tsx @@ -0,0 +1,39 @@ +import { act, render, screen, waitFor } from '@testing-library/react'; +import * as React from 'react'; +import { createTestQueryClient } from 'test/utils'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { WorkflowGraph } from '../WorkflowGraph'; +import { workflow } from './workflow.mock'; +import { nodeExecutionsById } from './nodeExecutionsById.mock'; + +jest.mock('../../flytegraph/ReactFlow/ReactFlowWrapper.tsx', () => ({ + ReactFlowWrapper: jest.fn(({ children }) => ( +
{children}
+ )), +})); + +describe('WorkflowGraph', () => { + let queryClient: QueryClient; + + beforeEach(() => { + queryClient = createTestQueryClient(); + }); + + it('should render map task logs when all props were provided', async () => { + act(() => { + render( + + + , + ); + }); + + const graph = await waitFor(() => screen.getByTestId('react-flow-wrapper')); + expect(graph).toBeInTheDocument(); + }); +}); diff --git a/packages/zapp/console/src/components/WorkflowGraph/test/nodeExecutionsById.mock.ts b/packages/zapp/console/src/components/WorkflowGraph/test/nodeExecutionsById.mock.ts new file mode 100644 index 000000000..fb71d920c --- /dev/null +++ b/packages/zapp/console/src/components/WorkflowGraph/test/nodeExecutionsById.mock.ts @@ -0,0 +1,150 @@ +export const nodeExecutionsById = { + n0: { + id: { + nodeId: 'n0', + executionId: { + project: 'flytesnacks', + domain: 'development', + name: 'fc027ce9fe4cf4f5eba8', + }, + }, + inputUri: + 's3://flyte-demo/metadata/propeller/flytesnacks-development-fc027ce9fe4cf4f5eba8/n0/data/inputs.pb', + closure: { + phase: 3, + startedAt: { + seconds: { + low: 1649888546, + high: 0, + unsigned: false, + }, + nanos: 773100279, + }, + duration: { + seconds: { + low: 22, + high: 0, + unsigned: false, + }, + nanos: 800572640, + }, + createdAt: { + seconds: { + low: 1649888546, + high: 0, + unsigned: false, + }, + nanos: 697168683, + }, + updatedAt: { + seconds: { + low: 1649888569, + high: 0, + unsigned: false, + }, + nanos: 573672640, + }, + outputUri: + 's3://flyte-demo/metadata/propeller/flytesnacks-development-fc027ce9fe4cf4f5eba8/n0/data/0/outputs.pb', + }, + metadata: { + specNodeId: 'n0', + }, + scopedId: 'n0', + logsByPhase: new Map([ + [ + 3, + [ + { + logs: [ + { + uri: 'http://localhost:30082/#!/log/flytesnacks-development/fc027ce9fe4cf4f5eba8-n0-0-0/pod?namespace=flytesnacks-development', + name: 'Kubernetes Logs #0-0', + messageFormat: 2, + }, + ], + externalId: 'fc027ce9fe4cf4f5eba8-n0-0-0', + phase: 3, + }, + { + logs: [ + { + uri: 'http://localhost:30082/#!/log/flytesnacks-development/fc027ce9fe4cf4f5eba8-n0-0-1/pod?namespace=flytesnacks-development', + name: 'Kubernetes Logs #0-1', + messageFormat: 2, + }, + ], + externalId: 'fc027ce9fe4cf4f5eba8-n0-0-1', + index: 1, + phase: 3, + }, + { + logs: [ + { + uri: 'http://localhost:30082/#!/log/flytesnacks-development/fc027ce9fe4cf4f5eba8-n0-0-2/pod?namespace=flytesnacks-development', + name: 'Kubernetes Logs #0-2', + messageFormat: 2, + }, + ], + externalId: 'fc027ce9fe4cf4f5eba8-n0-0-2', + index: 2, + phase: 3, + }, + ], + ], + ]), + }, + n1: { + id: { + nodeId: 'n1', + executionId: { + project: 'flytesnacks', + domain: 'development', + name: 'fc027ce9fe4cf4f5eba8', + }, + }, + inputUri: + 's3://flyte-demo/metadata/propeller/flytesnacks-development-fc027ce9fe4cf4f5eba8/n1/data/inputs.pb', + closure: { + phase: 3, + startedAt: { + seconds: { + low: 1649888569, + high: 0, + unsigned: false, + }, + nanos: 782695018, + }, + duration: { + seconds: { + low: 9, + high: 0, + unsigned: false, + }, + nanos: 811268323, + }, + createdAt: { + seconds: { + low: 1649888569, + high: 0, + unsigned: false, + }, + nanos: 685160925, + }, + updatedAt: { + seconds: { + low: 1649888579, + high: 0, + unsigned: false, + }, + nanos: 593963323, + }, + outputUri: + 's3://flyte-demo/metadata/propeller/flytesnacks-development-fc027ce9fe4cf4f5eba8/n1/data/0/outputs.pb', + }, + metadata: { + specNodeId: 'n1', + }, + scopedId: 'n1', + }, +}; diff --git a/packages/zapp/console/src/components/WorkflowGraph/test/workflow.mock.ts b/packages/zapp/console/src/components/WorkflowGraph/test/workflow.mock.ts new file mode 100644 index 000000000..6813a9a5b --- /dev/null +++ b/packages/zapp/console/src/components/WorkflowGraph/test/workflow.mock.ts @@ -0,0 +1,370 @@ +import { Workflow } from 'models/Workflow/types'; +import { long } from 'test/utils'; + +export const workflow: Workflow = { + id: { + resourceType: 2, + project: 'flytesnacks', + domain: 'development', + name: 'core.control_flow.map_task.my_map_workflow', + version: 'MT76cyUZeeYX-hA6qeIotA==', + }, + closure: { + compiledWorkflow: { + subWorkflows: [], + tasks: [ + { + template: { + config: {}, + id: { + resourceType: 1, + project: 'flytesnacks', + domain: 'development', + name: 'core.control_flow.map_task.coalesce', + version: 'MT76cyUZeeYX-hA6qeIotA==', + }, + type: 'python-task', + metadata: { + runtime: { + type: 1, + version: '0.0.0+develop', + flavor: 'python', + }, + retries: {}, + }, + interface: { + inputs: { + variables: { + b: { + type: { + collectionType: { + simple: 3, + }, + }, + description: 'b', + }, + }, + }, + outputs: { + variables: { + o0: { + type: { + simple: 3, + }, + description: 'o0', + }, + }, + }, + }, + container: { + command: [], + args: [ + 'pyflyte-fast-execute', + '--additional-distribution', + 's3://flyte-demo/zn/flytesnacks/development/MT76cyUZeeYX+hA6qeIotA==/scriptmode.tar.gz', + '--dest-dir', + '/root', + '--', + 'pyflyte-execute', + '--inputs', + '{{.input}}', + '--output-prefix', + '{{.outputPrefix}}', + '--raw-output-data-prefix', + '{{.rawOutputDataPrefix}}', + '--checkpoint-path', + '{{.checkpointOutputPrefix}}', + '--prev-checkpoint', + '{{.prevCheckpointPrefix}}', + '--resolver', + 'flytekit.core.python_auto_container.default_task_resolver', + '--', + 'task-module', + 'core.control_flow.map_task', + 'task-name', + 'coalesce', + ], + env: [], + config: [], + ports: [], + image: 'ghcr.io/flyteorg/flytekit:py3.9-latest', + resources: { + requests: [], + limits: [], + }, + }, + }, + }, + { + template: { + config: {}, + id: { + resourceType: 1, + project: 'flytesnacks', + domain: 'development', + name: 'core.control_flow.map_task.mapper_a_mappable_task_0', + version: 'MT76cyUZeeYX-hA6qeIotA==', + }, + type: 'container_array', + metadata: { + runtime: { + type: 1, + version: '0.0.0+develop', + flavor: 'python', + }, + retries: {}, + }, + interface: { + inputs: { + variables: { + a: { + type: { + collectionType: { + simple: 1, + }, + }, + description: 'a', + }, + }, + }, + outputs: { + variables: { + o0: { + type: { + collectionType: { + simple: 3, + }, + }, + description: 'o0', + }, + }, + }, + }, + custom: { + fields: { + minSuccessRatio: { + numberValue: 1, + }, + }, + }, + taskTypeVersion: 1, + container: { + command: [], + args: [ + 'pyflyte-fast-execute', + '--additional-distribution', + 's3://flyte-demo/zn/flytesnacks/development/MT76cyUZeeYX+hA6qeIotA==/scriptmode.tar.gz', + '--dest-dir', + '/root', + '--', + 'pyflyte-map-execute', + '--inputs', + '{{.input}}', + '--output-prefix', + '{{.outputPrefix}}', + '--raw-output-data-prefix', + '{{.rawOutputDataPrefix}}', + '--checkpoint-path', + '{{.checkpointOutputPrefix}}', + '--prev-checkpoint', + '{{.prevCheckpointPrefix}}', + '--resolver', + 'flytekit.core.python_auto_container.default_task_resolver', + '--', + 'task-module', + 'core.control_flow.map_task', + 'task-name', + 'a_mappable_task', + ], + env: [], + config: [], + ports: [], + image: 'ghcr.io/flyteorg/flytekit:py3.9-latest', + resources: { + requests: [], + limits: [], + }, + }, + }, + }, + ], + primary: { + template: { + nodes: [ + { + inputs: [], + upstreamNodeIds: [], + outputAliases: [], + id: 'start-node', + }, + { + inputs: [ + { + var: 'o0', + binding: { + promise: { + nodeId: 'n1', + var: 'o0', + }, + }, + }, + ], + upstreamNodeIds: [], + outputAliases: [], + id: 'end-node', + }, + { + inputs: [ + { + var: 'a', + binding: { + promise: { + nodeId: 'start-node', + var: 'a', + }, + }, + }, + ], + upstreamNodeIds: [], + outputAliases: [], + id: 'n0', + metadata: { + name: 'mapper_a_mappable_task_0', + retries: { + retries: 1, + }, + }, + taskNode: { + overrides: { + resources: { + requests: [ + { + name: 3, + value: '300Mi', + }, + ], + limits: [ + { + name: 3, + value: '500Mi', + }, + ], + }, + }, + referenceId: { + resourceType: 1, + project: 'flytesnacks', + domain: 'development', + name: 'core.control_flow.map_task.mapper_a_mappable_task_0', + version: 'MT76cyUZeeYX-hA6qeIotA==', + }, + }, + }, + { + inputs: [ + { + var: 'b', + binding: { + promise: { + nodeId: 'n0', + var: 'o0', + }, + }, + }, + ], + upstreamNodeIds: ['n0'], + outputAliases: [], + id: 'n1', + metadata: { + name: 'coalesce', + retries: {}, + }, + taskNode: { + overrides: {}, + referenceId: { + resourceType: 1, + project: 'flytesnacks', + domain: 'development', + name: 'core.control_flow.map_task.coalesce', + version: 'MT76cyUZeeYX-hA6qeIotA==', + }, + }, + }, + ], + outputs: [ + { + var: 'o0', + binding: { + promise: { + nodeId: 'n1', + var: 'o0', + }, + }, + }, + ], + id: { + resourceType: 2, + project: 'flytesnacks', + domain: 'development', + name: 'core.control_flow.map_task.my_map_workflow', + version: 'MT76cyUZeeYX-hA6qeIotA==', + }, + metadata: {}, + interface: { + inputs: { + variables: { + a: { + type: { + collectionType: { + simple: 1, + }, + }, + description: 'a', + }, + }, + }, + outputs: { + variables: { + o0: { + type: { + simple: 3, + }, + description: 'o0', + }, + }, + }, + }, + metadataDefaults: {}, + }, + connections: { + downstream: { + 'start-node': { + ids: ['n0'], + }, + n0: { + ids: ['n1'], + }, + n1: { + ids: ['end-node'], + }, + }, + upstream: { + 'end-node': { + ids: ['n1'], + }, + n0: { + ids: ['start-node'], + }, + n1: { + ids: ['n0'], + }, + }, + }, + }, + }, + createdAt: { + seconds: long(0), + nanos: 343264000, + }, + }, +}; diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx index 219cd4d32..399a92309 100644 --- a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx @@ -14,15 +14,15 @@ const taskLogs = [ describe('MapTaskStatusInfo', () => { it('Phase and amount of links rendered correctly', async () => { - const status = TaskExecutionPhase.RUNNING; - const phaseData = getTaskExecutionPhaseConstants(status); + const phase = TaskExecutionPhase.RUNNING; + const phaseData = getTaskExecutionPhaseConstants(phase); const { queryByText, getByTitle } = render( - , + , ); expect(queryByText(phaseData.text)).toBeInTheDocument(); - expect(queryByText(`x${taskLogs.length}`)).toBeInTheDocument(); + expect(queryByText(`×${taskLogs.length}`)).toBeInTheDocument(); expect(queryByText('Logs')).not.toBeInTheDocument(); // Expand item - see logs section @@ -34,15 +34,15 @@ describe('MapTaskStatusInfo', () => { }); it('Phase with no links show proper texts when opened', () => { - const status = TaskExecutionPhase.ABORTED; - const phaseData = getTaskExecutionPhaseConstants(status); + const phase = TaskExecutionPhase.ABORTED; + const phaseData = getTaskExecutionPhaseConstants(phase); const { queryByText } = render( - , + , ); expect(queryByText(phaseData.text)).toBeInTheDocument(); - expect(queryByText(`x0`)).toBeInTheDocument(); + expect(queryByText(`×0`)).toBeInTheDocument(); expect(queryByText(noLogsFoundString)).toBeInTheDocument(); }); }); diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx index 7ed9fca1a..cef9b2be6 100644 --- a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx @@ -37,19 +37,19 @@ const useStyles = makeStyles((_theme: Theme) => ({ interface MapTaskStatusInfoProps { taskLogs: Core.ITaskLog[]; - status: TaskExecutionPhase; - expanded: boolean; + phase: TaskExecutionPhase; + isExpanded: boolean; } -export const MapTaskStatusInfo = (props: MapTaskStatusInfoProps) => { - const [expanded, setExpanded] = useState(props.expanded); +export const MapTaskStatusInfo = ({ taskLogs, phase, isExpanded }: MapTaskStatusInfoProps) => { + const [expanded, setExpanded] = useState(isExpanded); const styles = useStyles(); const toggleExpanded = () => { setExpanded(!expanded); }; - const phaseData = getTaskExecutionPhaseConstants(props.status); + const phaseData = getTaskExecutionPhaseConstants(phase); return (
@@ -58,11 +58,11 @@ export const MapTaskStatusInfo = (props: MapTaskStatusInfoProps) => { {phaseData.text} - {`x${props.taskLogs.length}`} + {`×${taskLogs.length}`}
{expanded && (
- +
)}
diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx index a1dd4fb8f..a3c4079f5 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx @@ -17,6 +17,24 @@ const nodeExecutionStatusChanged = (previous, nodeExecutionsById) => { return false; }; +const nodeExecutionLogsChanged = (previous, nodeExecutionsById) => { + for (const exe in nodeExecutionsById) { + const oldLogs = previous[exe]?.logsByPhase ?? new Map(); + const newLogs = nodeExecutionsById[exe]?.logsByPhase ?? new Map(); + if (oldLogs.size !== newLogs.size) { + return true; + } + for (const phase in newLogs) { + const oldNumOfLogs = oldLogs.get(phase)?.length ?? 0; + const newNumOfLogs = newLogs.get(phase)?.length ?? 0; + if (oldNumOfLogs !== newNumOfLogs) { + return true; + } + } + } + return false; +}; + const graphNodeCountChanged = (previous, data) => { if (previous.nodes.length !== data.nodes.length) { return true; @@ -26,13 +44,20 @@ const graphNodeCountChanged = (previous, data) => { }; const ReactFlowGraphComponent = (props) => { - const { data, onNodeSelectionChanged, nodeExecutionsById, dynamicWorkflows } = props; + const { + data, + onNodeSelectionChanged, + onPhaseSelectionChanged, + nodeExecutionsById, + dynamicWorkflows, + } = props; const [state, setState] = useState({ - data: data, - dynamicWorkflows: dynamicWorkflows, + data, + dynamicWorkflows, currentNestedView: {}, - nodeExecutionsById: nodeExecutionsById, - onNodeSelectionChanged: onNodeSelectionChanged, + nodeExecutionsById, + onNodeSelectionChanged, + onPhaseSelectionChanged, rfGraphJson: null, }); @@ -50,7 +75,7 @@ const ReactFlowGraphComponent = (props) => { const onRemoveNestedView = (viewParent, viewIndex) => { const currentNestedView: any = { ...state.currentNestedView }; currentNestedView[viewParent] = currentNestedView[viewParent]?.filter( - (item, i) => i <= viewIndex, + (_item, i) => i <= viewIndex, ); if (currentNestedView[viewParent]?.length < 1) { delete currentNestedView[viewParent]; @@ -66,8 +91,9 @@ const ReactFlowGraphComponent = (props) => { root: state.data, nodeExecutionsById: state.nodeExecutionsById, onNodeSelectionChanged: state.onNodeSelectionChanged, - onAddNestedView: onAddNestedView, - onRemoveNestedView: onRemoveNestedView, + onPhaseSelectionChanged: state.onPhaseSelectionChanged, + onAddNestedView, + onRemoveNestedView, currentNestedView: state.currentNestedView, maxRenderDepth: 1, } as ConvertDagProps); @@ -79,7 +105,7 @@ const ReactFlowGraphComponent = (props) => { ...state, rfGraphJson: newRFGraphData, })); - }, [state.currentNestedView]); + }, [state.currentNestedView, state.nodeExecutionsById]); useEffect(() => { if (graphNodeCountChanged(state.data, data)) { @@ -88,10 +114,13 @@ const ReactFlowGraphComponent = (props) => { data: data, })); } - if (nodeExecutionStatusChanged(state.nodeExecutionsById, nodeExecutionsById)) { + if ( + nodeExecutionStatusChanged(state.nodeExecutionsById, nodeExecutionsById) || + nodeExecutionLogsChanged(state.nodeExecutionsById, nodeExecutionsById) + ) { setState((state) => ({ ...state, - nodeExecutionsById: nodeExecutionsById, + nodeExecutionsById, })); } }, [data, nodeExecutionsById]); @@ -99,9 +128,10 @@ const ReactFlowGraphComponent = (props) => { useEffect(() => { setState((state) => ({ ...state, - onNodeSelectionChanged: onNodeSelectionChanged, + onNodeSelectionChanged, + onPhaseSelectionChanged, })); - }, [onNodeSelectionChanged]); + }, [onNodeSelectionChanged, onPhaseSelectionChanged]); const backgroundStyle = getRFBackground().nested; @@ -118,7 +148,7 @@ const ReactFlowGraphComponent = (props) => { backgroundStyle, rfGraphJson: state.rfGraphJson, type: RFGraphTypes.main, - nodeExecutionsById: nodeExecutionsById, + nodeExecutionsById, currentNestedView: state.currentNestedView, }; return ( diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx index ca755503e..791bcd8b3 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx @@ -3,14 +3,17 @@ import { useState, useEffect } from 'react'; import { Handle, Position } from 'react-flow-renderer'; import { dTypes } from 'models/Graph/types'; import CachedOutlined from '@material-ui/icons/CachedOutlined'; -import { CatalogCacheStatus } from 'models/Execution/enums'; +import { CatalogCacheStatus, TaskExecutionPhase } from 'models/Execution/enums'; import { PublishedWithChangesOutlined } from 'components/common/PublishedWithChanges'; +import { RENDER_ORDER } from 'components/Executions/TaskExecutionsList/constants'; +import { whiteColor } from 'components/Theme/constants'; import { COLOR_TASK_TYPE, COLOR_GRAPH_BACKGROUND, getGraphHandleStyle, getGraphNodeStyle, getNestedContainerStyle, + getStatusColor, } from './utils'; import { RFHandleProps } from './types'; @@ -199,6 +202,55 @@ export const ReactFlowStaticNode = ({ data }: any) => { ); }; +/** + * Component that renders a map task item within the mapped node. + * @param props.numberOfTasks number of tasks of certain completion phase + * @param props.color string value of color of the block + * @param props.phase phase of the current map task item + * @param props.onPhaseSelectionChanged callback from the parent component + */ + +interface TaskPhaseItemProps { + numberOfTasks: number; + color: string; + phase: TaskExecutionPhase; + setSelectedPhase: (phase: TaskExecutionPhase) => void; + setSelectedNode: (val: boolean) => void; +} + +const TaskPhaseItem = ({ + numberOfTasks, + color, + phase, + setSelectedPhase, + setSelectedNode, +}: TaskPhaseItemProps) => { + const taskPhaseStyles: React.CSSProperties = { + borderRadius: '2px', + backgroundColor: color, + color: whiteColor, + margin: '0 1px', + padding: '0 2px', + fontSize: '8px', + lineHeight: '14px', + minWidth: '14px', + textAlign: 'center', + cursor: 'pointer', + }; + + const handleMapTaskClick = (e) => { + e.stopPropagation(); + setSelectedNode(true); + setSelectedPhase(phase); + }; + + return ( +
+ ×{numberOfTasks} +
+ ); +}; + /** * Custom component used by ReactFlow. Renders a label (text) * and any edge handles. @@ -208,14 +260,18 @@ export const ReactFlowStaticNode = ({ data }: any) => { export const ReactFlowCustomTaskNode = ({ data }: any) => { const styles = getGraphNodeStyle(data.nodeType, data.nodeExecutionStatus); const onNodeSelectionChanged = data.onNodeSelectionChanged; - const [selectedNode, setSelectedNode] = useState(false); + const onPhaseSelectionChanged = data.onPhaseSelectionChanged; + const [selectedNode, setSelectedNode] = useState(false); + const [selectedPhase, setSelectedPhase] = useState(undefined); useEffect(() => { if (selectedNode === true) { onNodeSelectionChanged(selectedNode); setSelectedNode(false); + onPhaseSelectionChanged(selectedPhase); + setSelectedPhase(selectedPhase); } - }, [selectedNode, onNodeSelectionChanged]); + }, [selectedNode, onNodeSelectionChanged, selectedPhase, onPhaseSelectionChanged]); const taskContainerStyle: React.CSSProperties = { position: 'absolute', @@ -229,6 +285,20 @@ export const ReactFlowCustomTaskNode = ({ data }: any) => { padding: '.1rem .2rem', fontSize: '.3rem', }; + const mapTaskContainerStyle: React.CSSProperties = { + position: 'absolute', + top: '-.82rem', + zIndex: 0, + right: '.15rem', + }; + const taskNameStyle: React.CSSProperties = { + backgroundColor: getStatusColor(data.nodeExecutionStatus), + color: 'white', + padding: '.1rem .2rem', + fontSize: '.4rem', + borderRadius: '.15rem', + }; + const cacheIconStyles: React.CSSProperties = { width: '8px', height: '8px', @@ -236,9 +306,13 @@ export const ReactFlowCustomTaskNode = ({ data }: any) => { marginTop: '1px', color: COLOR_GRAPH_BACKGROUND, }; + const mapTaskWrapper: React.CSSProperties = { + display: 'flex', + }; - const handleClick = (_e) => { + const handleNodeClick = (_e) => { setSelectedNode(true); + setSelectedPhase(undefined); }; const renderTaskType = () => { @@ -249,6 +323,14 @@ export const ReactFlowCustomTaskNode = ({ data }: any) => { ); }; + const renderTaskName = () => { + return ( +
+
{data.text}
+
+ ); + }; + const renderCacheIcon = (cacheStatus) => { switch (cacheStatus) { case CatalogCacheStatus.CACHE_HIT: @@ -260,11 +342,35 @@ export const ReactFlowCustomTaskNode = ({ data }: any) => { } }; + const renderTaskPhases = (logsByPhase) => { + return ( +
+ {RENDER_ORDER.map((phase, id) => { + if (!logsByPhase.has(phase)) { + return null; + } + + const key = `${id}-${phase}`; + return ( + + ); + })} +
+ ); + }; + return ( -
- {data.taskType ? renderTaskType() : null} +
+ {data.nodeLogsByPhase ? renderTaskName() : data.taskType ? renderTaskType() : null}
- {data.text} + {data.nodeLogsByPhase ? renderTaskPhases(data.nodeLogsByPhase) : data.text} {renderCacheIcon(data.cacheStatus)}
{renderDefaultHandles( diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx index d3b11a33b..0f3d85a6e 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/transformDAGToReactFlowV2.tsx @@ -1,7 +1,8 @@ import { dEdge, dNode, dTypes } from 'models/Graph/types'; import { Edge, Node, Position } from 'react-flow-renderer'; -import { CatalogCacheStatus, NodeExecutionPhase } from 'models/Execution/enums'; +import { CatalogCacheStatus, NodeExecutionPhase, TaskExecutionPhase } from 'models/Execution/enums'; import { createDebugLogger } from 'common/log'; +import { LogsByPhase } from 'models/Execution/types'; import { ReactFlowGraphConfig } from './utils'; import { ConvertDagProps } from './types'; @@ -45,6 +46,7 @@ interface BuildDataProps { node: dNode; nodeExecutionsById: any; onNodeSelectionChanged: any; + onPhaseSelectionChanged: any; onAddNestedView: any; onRemoveNestedView: any; rootParentNode: dNode; @@ -55,6 +57,7 @@ const buildReactFlowDataProps = (props: BuildDataProps) => { node, nodeExecutionsById, onNodeSelectionChanged, + onPhaseSelectionChanged, onAddNestedView, onRemoveNestedView, rootParentNode, @@ -77,9 +80,10 @@ const buildReactFlowDataProps = (props: BuildDataProps) => { }; const nodeExecutionStatus = mapNodeExecutionStatus(); - // nodeExecutionsById null check is required as on first render it can be undefined + const nodeLogsByPhase: LogsByPhase = nodeExecutionsById?.[node.scopedId]?.logsByPhase; + const cacheStatus: CatalogCacheStatus = - nodeExecutionsById?.[scopedId]?.closure.taskNodeMetadata?.cacheStatus ?? + nodeExecutionsById?.[scopedId]?.closure.taskNodeMetadata?.cacheStatus ?? CatalogCacheStatus.CACHE_DISABLED; const dataProps = { @@ -89,12 +93,18 @@ const buildReactFlowDataProps = (props: BuildDataProps) => { nodeType, scopedId, taskType, + nodeLogsByPhase, cacheStatus, onNodeSelectionChanged: () => { if (onNodeSelectionChanged) { onNodeSelectionChanged([scopedId]); } }, + onPhaseSelectionChanged: (phase: TaskExecutionPhase) => { + if (onPhaseSelectionChanged) { + onPhaseSelectionChanged(phase); + } + }, onAddNestedView: () => { onAddNestedView({ parent: rootParentNode.scopedId, @@ -188,6 +198,7 @@ export const buildGraphMapping = (props): ReactFlowGraphMapping => { const { nodeExecutionsById, onNodeSelectionChanged, + onPhaseSelectionChanged, onAddNestedView, onRemoveNestedView, currentNestedView, @@ -196,6 +207,7 @@ export const buildGraphMapping = (props): ReactFlowGraphMapping => { const nodeDataProps = { nodeExecutionsById, onNodeSelectionChanged, + onPhaseSelectionChanged, onAddNestedView, onRemoveNestedView, currentNestedView, @@ -215,54 +227,56 @@ export const buildGraphMapping = (props): ReactFlowGraphMapping => { const parse = (props: ParseProps) => { const { contextNode, contextParent, rootParentNode, nodeDataProps } = props; let context: ReactFlowGraph | null = null; - contextNode.nodes.filter(n => !!n).map((node: dNode) => { - /* Case: node has children => recurse */ - if (nodeHasChildren(node)) { + contextNode.nodes + .filter((n) => !!n) + .map((node: dNode) => { + /* Case: node has children => recurse */ + if (nodeHasChildren(node)) { + if (rootParentNode) { + parse({ + contextNode: node, + contextParent: node, + rootParentNode: rootParentNode, + nodeDataProps: nodeDataProps, + }); + } else { + parse({ + contextNode: node, + contextParent: node, + rootParentNode: node, + nodeDataProps: nodeDataProps, + }); + } + } + if (rootParentNode) { - parse({ - contextNode: node, - contextParent: node, + const rootParentId = rootParentNode.scopedId; + const contextParentId = contextParent?.scopedId; + rootParentMap[rootParentId] = rootParentMap[rootParentId] || {}; + rootParentMap[rootParentId][contextParentId] = rootParentMap[rootParentId][ + contextParentId + ] || { + nodes: {}, + edges: {}, + }; + context = rootParentMap[rootParentId][contextParentId] as ReactFlowGraph; + const reactFlowNode = buildReactFlowNode({ + node: node, + dataProps: nodeDataProps, rootParentNode: rootParentNode, - nodeDataProps: nodeDataProps, + parentNode: contextParent, + typeOverride: isStaticGraph === true ? dTypes.staticNode : undefined, }); + context.nodes[reactFlowNode.id] = reactFlowNode; } else { - parse({ - contextNode: node, - contextParent: node, - rootParentNode: node, - nodeDataProps: nodeDataProps, + const reactFlowNode = buildReactFlowNode({ + node: node, + dataProps: nodeDataProps, + typeOverride: isStaticGraph === true ? dTypes.staticNode : undefined, }); + root.nodes[reactFlowNode.id] = reactFlowNode; } - } - - if (rootParentNode) { - const rootParentId = rootParentNode.scopedId; - const contextParentId = contextParent?.scopedId; - rootParentMap[rootParentId] = rootParentMap[rootParentId] || {}; - rootParentMap[rootParentId][contextParentId] = rootParentMap[rootParentId][ - contextParentId - ] || { - nodes: {}, - edges: {}, - }; - context = rootParentMap[rootParentId][contextParentId] as ReactFlowGraph; - const reactFlowNode = buildReactFlowNode({ - node: node, - dataProps: nodeDataProps, - rootParentNode: rootParentNode, - parentNode: contextParent, - typeOverride: isStaticGraph === true ? dTypes.staticNode : undefined, - }); - context.nodes[reactFlowNode.id] = reactFlowNode; - } else { - const reactFlowNode = buildReactFlowNode({ - node: node, - dataProps: nodeDataProps, - typeOverride: isStaticGraph === true ? dTypes.staticNode : undefined, - }); - root.nodes[reactFlowNode.id] = reactFlowNode; - } - }); + }); contextNode.edges.map((edge: dEdge) => { const reactFlowEdge = buildReactFlowEdge({ edge, rootParentNode }); if (rootParentNode && context) { diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx index 025c8acdd..ac74ef775 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { NodeExecutionPhase } from 'models/Execution/enums'; +import { NodeExecutionPhase, TaskExecutionPhase } from 'models/Execution/enums'; import { dTypes } from 'models/Graph/types'; import { CSSProperties } from 'react'; import { RFBackgroundProps } from './types'; @@ -103,7 +103,9 @@ export const nodePhaseColorMapping = { * @param nodeExecutionStatus * @returns */ -export const getStatusColor = (nodeExecutionStatus: NodeExecutionPhase): string => { +export const getStatusColor = ( + nodeExecutionStatus: NodeExecutionPhase | TaskExecutionPhase, +): string => { if (nodePhaseColorMapping[nodeExecutionStatus]) { return nodePhaseColorMapping[nodeExecutionStatus].color; } else { diff --git a/packages/zapp/console/src/models/Execution/types.ts b/packages/zapp/console/src/models/Execution/types.ts index 4628d266b..96998afbc 100644 --- a/packages/zapp/console/src/models/Execution/types.ts +++ b/packages/zapp/console/src/models/Execution/types.ts @@ -1,4 +1,4 @@ -import { Admin, Core, Protobuf } from 'flyteidl'; +import { Admin, Core, Event, Protobuf } from 'flyteidl'; import { Identifier, LiteralMap, LiteralMapBlob, TaskLog, UrlBlob } from 'models/Common/types'; import { CompiledWorkflow } from 'models/Workflow/types'; import { @@ -10,6 +10,8 @@ import { export type WorkflowExecutionIdentifier = RequiredNonNullable; export type ExecutionError = RequiredNonNullable; +export type ExternalResource = Event.IExternalResourceInfo; +export type LogsByPhase = Map; export interface BaseExecutionClosure { createdAt: Protobuf.ITimestamp; @@ -124,6 +126,7 @@ export interface TaskExecutionClosure extends Admin.ITaskExecutionClosure { outputUri: string; phase: TaskExecutionPhase; startedAt?: Protobuf.ITimestamp; + eventVersion?: number; } /** Execution data */ From c2ee154d66021e8a59d44667d86b4c0cb18e64d4 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Fri, 13 May 2022 10:00:58 -0700 Subject: [PATCH 22/93] ci: resolve docker build issues (#462) * ci: resolve docker build issues * chore: remove unneeded changes Signed-off-by: Nastya Rusina --- Dockerfile | 6 +- packages/basics/locale/tsconfig.build.json | 15 +++ .../composites/ui-atoms/tsconfig.build.json | 15 +++ .../plugins/components/tsconfig.build.json | 13 +- packages/zapp/console/package.json | 4 +- .../console/src/models/Common/constants.ts | 6 +- packages/zapp/console/tsconfig.build.json | 14 +- yarn.lock | 124 +++--------------- 8 files changed, 74 insertions(+), 123 deletions(-) create mode 100644 packages/basics/locale/tsconfig.build.json create mode 100644 packages/composites/ui-atoms/tsconfig.build.json diff --git a/Dockerfile b/Dockerfile index 833f3d75b..a974a63d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ +# Use node:17 to docker build on M1 FROM node:16 as builder LABEL org.opencontainers.image.source https://github.com/flyteorg/flyteconsole WORKDIR /code/flyteconsole -COPY package*.json yarn.lock ./ +COPY ./packages/zapp/console/package*.json yarn.lock ./ RUN : \ # install production dependencies && yarn install --production \ @@ -17,7 +18,8 @@ RUN : \ # build && make build_prod \ # place the runtime application in /app - && mv dist index.js env.js plugins.js /app + && mv ./packages/zapp/console/dist /app \ + && mv ./packages/zapp/console/index.js ./packages/zapp/console/env.js ./packages/zapp/console/plugins.js /app FROM gcr.io/distroless/nodejs LABEL org.opencontainers.image.source https://github.com/flyteorg/flyteconsole diff --git a/packages/basics/locale/tsconfig.build.json b/packages/basics/locale/tsconfig.build.json new file mode 100644 index 000000000..a6d8ac7e8 --- /dev/null +++ b/packages/basics/locale/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + // files excluded from the build, we can not put it inro default tsconfig + // as it will screw VSCode IntelliSence + "**/test", + "**/mocks", + "**/__mocks__", + "**/__stories__", + "**/*.spec.*", + "**/*.test.*", + "**/*.mock.*", + "**/*.stories.*" + ] +} diff --git a/packages/composites/ui-atoms/tsconfig.build.json b/packages/composites/ui-atoms/tsconfig.build.json new file mode 100644 index 000000000..a6d8ac7e8 --- /dev/null +++ b/packages/composites/ui-atoms/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + // files excluded from the build, we can not put it inro default tsconfig + // as it will screw VSCode IntelliSence + "**/test", + "**/mocks", + "**/__mocks__", + "**/__stories__", + "**/*.spec.*", + "**/*.test.*", + "**/*.mock.*", + "**/*.stories.*" + ] +} diff --git a/packages/plugins/components/tsconfig.build.json b/packages/plugins/components/tsconfig.build.json index 23926fe6e..5341d7e48 100644 --- a/packages/plugins/components/tsconfig.build.json +++ b/packages/plugins/components/tsconfig.build.json @@ -7,10 +7,13 @@ "**/mocks", "**/__mocks__", "**/__stories__", - "src/**/*.spec.*", - "src/**/*.test.*", - "src/**/*.mock.*", - "src/**/*.stories.*" + "**/*.spec.*", + "**/*.test.*", + "**/*.mock.*", + "**/*.stories.*" ], - "references": [{ "path": "../../basics/locale" }, { "path": "../../composites/ui-atoms" }] + "references": [ + { "path": "../../basics/locale/tsconfig.build.json" }, + { "path": "../../composites/ui-atoms/tsconfig.build.json" } + ] } diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index b9a2d2be3..dca08effa 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -52,8 +52,8 @@ "tslib": "^1.9.0" }, "devDependencies": { - "@babel/core": "^7.17.10", - "@babel/preset-env": "^7.17.10", + "@babel/core": "~7.16.12", + "@babel/preset-env": "~7.16.11", "@commitlint/cli": "^8.3.5", "@commitlint/config-conventional": "^8.3.4", "@date-io/moment": "1.3.9", diff --git a/packages/zapp/console/src/models/Common/constants.ts b/packages/zapp/console/src/models/Common/constants.ts index df752491c..6962189fe 100644 --- a/packages/zapp/console/src/models/Common/constants.ts +++ b/packages/zapp/console/src/models/Common/constants.ts @@ -1,9 +1,13 @@ import axios, { AxiosRequestConfig, AxiosTransformer } from 'axios'; import * as camelcaseKeys from 'camelcase-keys'; import * as snakecaseKeys from 'snakecase-keys'; -import { isObject } from 'util'; import { LiteralMapBlob, ResourceType, SystemStatus } from './types'; +// recommended util.d.ts implementation +const isObject = (value: unknown): boolean => { + return value !== null && typeof value === 'object'; +}; + export const endpointPrefixes = { execution: '/executions', launchPlan: '/launch_plans', diff --git a/packages/zapp/console/tsconfig.build.json b/packages/zapp/console/tsconfig.build.json index 7df78be0d..ec0791e92 100644 --- a/packages/zapp/console/tsconfig.build.json +++ b/packages/zapp/console/tsconfig.build.json @@ -7,14 +7,14 @@ "**/mocks", "**/__mocks__", "**/__stories__", - "src/**/*.spec.*", - "src/**/*.test.*", - "src/**/*.mock.*", - "src/**/*.stories.*" + "**/*.spec.*", + "**/*.test.*", + "**/*.mock.*", + "**/*.stories.*" ], "references": [ - { "path": "../../basics/locale" }, - { "path": "../../composites/ui-atoms" }, - { "path": "../../plugins/components" } + { "path": "../../basics/locale/tsconfig.build.json" }, + { "path": "../../composites/ui-atoms/tsconfig.build.json" }, + { "path": "../../plugins/components/tsconfig.build.json" } ] } diff --git a/yarn.lock b/yarn.lock index aaf06fa50..13b3cb367 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@babel/cli@~7.16.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.8.tgz#44b9be7706762bfa3bff8adbf746da336eb0ab7c" @@ -45,12 +37,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== - -"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.17.10", "@babel/core@^7.7.5", "@babel/core@~7.16.12": +"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5", "@babel/core@~7.16.12": version "7.16.12" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== @@ -89,6 +76,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.16.8", "@babel/generator@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189" + integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg== + dependencies: + "@babel/types" "^7.17.10" + "@jridgewell/gen-mapping" "^0.1.0" + jsesc "^2.5.1" + "@babel/generator@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" @@ -98,15 +94,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189" - integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg== - dependencies: - "@babel/types" "^7.17.10" - "@jridgewell/gen-mapping" "^0.1.0" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -139,16 +126,6 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz#09c63106d47af93cf31803db6bc49fef354e2ebe" - integrity sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" - semver "^6.3.0" - "@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": version "7.17.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" @@ -302,20 +279,6 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^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.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.17.3" - "@babel/types" "^7.17.0" - "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -360,13 +323,6 @@ dependencies: "@babel/types" "^7.16.7" -"@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.17.0" - "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -413,7 +369,7 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.17.9": +"@babel/helpers@^7.16.7": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== @@ -450,16 +406,16 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== +"@babel/parser@^7.16.12", "@babel/parser@^7.17.10": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" + integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== + "@babel/parser@^7.16.7", "@babel/parser@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== -"@babel/parser@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" - integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" @@ -1123,7 +1079,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.17.10", "@babel/preset-env@~7.16.11": +"@babel/preset-env@^7.12.11", "@babel/preset-env@~7.16.11": 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== @@ -1356,7 +1312,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9": +"@babel/traverse@^7.16.10", "@babel/traverse@^7.17.9": version "7.17.10" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5" integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw== @@ -2208,11 +2164,6 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== - "@jridgewell/set-array@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" @@ -2223,14 +2174,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" @@ -6057,17 +6000,6 @@ browserslist@^4.17.5, browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" -browserslist@^4.20.2: - version "4.20.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== - dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" - bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -6373,11 +6305,6 @@ caniuse-lite@^1.0.30001313: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz#a380b079db91621e1b7120895874e2fd62ed2e2f" integrity sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q== -caniuse-lite@^1.0.30001332: - version "1.0.30001338" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz#b5dd7a7941a51a16480bdf6ff82bded1628eec0d" - integrity sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ== - capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -8476,11 +8403,6 @@ electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.613.tgz#5ad7ec1e19d28c81edb6d61b9d4990d1c9716182" integrity sha512-c3gkahddiUalk7HLhTC7PsKzPZmovYFtgh+g3rZJ+dGokk4n4dzEoOBnoV8VU8ptvnGJMhrjM/lyXKSltqf2hQ== -electron-to-chromium@^1.4.118: - version "1.4.137" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz#186180a45617283f1c012284458510cd99d6787f" - integrity sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA== - electron-to-chromium@^1.4.17: version "1.4.67" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.67.tgz#699e59d6959d05f87865e12b3055bbcf492bbbee" @@ -12391,11 +12313,6 @@ json5@^2.1.3: dependencies: minimist "^1.2.5" -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -14075,11 +13992,6 @@ node-releases@^2.0.1, node-releases@^2.0.2: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== -node-releases@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" - integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== - node-request-interceptor@^0.5.3: version "0.5.8" resolved "https://registry.yarnpkg.com/node-request-interceptor/-/node-request-interceptor-0.5.8.tgz#1777c05eae25f468c891f24075f4087ac2ea3f3b" From e84a3c074b2d35e9585ba7a164dd48f461f70e79 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Fri, 13 May 2022 13:42:10 -0700 Subject: [PATCH 23/93] Chore: Rebase devmain on top of master (#464) --- package.json | 2 +- packages/zapp/console/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 61d4eefa8..694d1008c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "flyteconsole", - "version": "1.0.0", + "version": "1.1.0-rc1", "private": true, "description": "The web UI for the Flyte platform", "repository": { diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index dca08effa..9bad61c8b 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -1,6 +1,6 @@ { "name": "@flyteconsole/client-app", - "version": "0.55.0", + "version": "1.1.0-rc1", "description": "The web UI for the Flyte platform", "repository": { "type": "git", From 085368046ed946e75e6ecd62a5f3c771a2c2c783 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Fri, 13 May 2022 18:57:14 -0700 Subject: [PATCH 24/93] fix: ensure that admin version is fully shown (#465) --- packages/zapp/console/src/components/hooks/useVersion.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/zapp/console/src/components/hooks/useVersion.ts b/packages/zapp/console/src/components/hooks/useVersion.ts index cb7aee5bf..59aca5c06 100644 --- a/packages/zapp/console/src/components/hooks/useVersion.ts +++ b/packages/zapp/console/src/components/hooks/useVersion.ts @@ -16,10 +16,10 @@ function useVersion() { export function useAdminVersion() { const version = useVersion(); - const controlPlaneVersion = version?.value?.controlPlaneVersion; - const adminVersion = controlPlaneVersion - ? controlPlaneVersion.Version?.slice(1, controlPlaneVersion.Version?.indexOf('-')) - : null; + const cpVersion = version?.value?.controlPlaneVersion; + + // Remove letter "v" from version string, if it's in the beginning + const adminVersion = cpVersion?.Version?.replace(/^v/, '') ?? null; return { adminVersion }; } From 093210be54b38914c2bfe0927e56bb4b30721353 Mon Sep 17 00:00:00 2001 From: Carina Ursu Date: Tue, 17 May 2022 08:53:30 -0700 Subject: [PATCH 25/93] chore: fix for console not respecting admin url (#468) * chore: fix Signed-off-by: Carina Ursu * chore: remove console Signed-off-by: Carina Ursu * chore: add cherio o=to package Signed-off-by: Carina Ursu * chore: add cherio o=to package Signed-off-by: Carina Ursu * chore: fix start prod Signed-off-by: Carina Ursu * chore: fix start prod Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu * chore: cleanup Signed-off-by: Carina Ursu Co-authored-by: Carina Ursu --- packages/zapp/console/package.json | 1 + packages/zapp/console/src/assets/index.html | 2 - packages/zapp/console/src/server.ts | 11 +++- .../zapp/console/webpack.common.config.ts | 2 - packages/zapp/console/webpack.dev.config.ts | 1 - packages/zapp/console/webpack.prod.config.ts | 1 - yarn.lock | 55 ++++++++++++++++--- 7 files changed, 58 insertions(+), 15 deletions(-) diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 9bad61c8b..19db41326 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -34,6 +34,7 @@ "chalk": "^2.0.1", "chart.js": "^3.6.2", "chartjs-plugin-datalabels": "^2.0.0", + "cheerio": "1.0.0-rc.2", "cookie-parser": "^1.4.3", "dagre-d3": "^0.6.4", "dotenv": "^5.0.1", diff --git a/packages/zapp/console/src/assets/index.html b/packages/zapp/console/src/assets/index.html index 542366775..cd907741a 100644 --- a/packages/zapp/console/src/assets/index.html +++ b/packages/zapp/console/src/assets/index.html @@ -8,8 +8,6 @@ href="https://fonts.googleapis.com/css?family=Lato:300,400,700|Open+Sans:400,700" rel="stylesheet" /> - -
diff --git a/packages/zapp/console/src/server.ts b/packages/zapp/console/src/server.ts index c69bce007..f1151284d 100644 --- a/packages/zapp/console/src/server.ts +++ b/packages/zapp/console/src/server.ts @@ -1,7 +1,10 @@ +import * as cheerio from 'cheerio'; import * as express from 'express'; import * as fs from 'fs'; import * as path from 'path'; +const { processEnv } = require('../env'); + interface ServerRendererArguments { currentDirectory: string; } @@ -17,6 +20,12 @@ export default function serverRenderer({ currentDirectory }: ServerRendererArgum throw new ReferenceError('Could not find index.html to render'); } - res.status(200).send(html); + // populate the app content... + const $ = cheerio.load(html); + + // Populate process.env into window.env + $('head').append($(``)); + + res.status(200).send($.html()); }; } diff --git a/packages/zapp/console/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts index 1f0c2c54d..70e4cf4ff 100644 --- a/packages/zapp/console/webpack.common.config.ts +++ b/packages/zapp/console/webpack.common.config.ts @@ -166,6 +166,4 @@ export const serverConfig: webpack.Configuration = { ], }; -export const clientEnv = JSON.stringify(processEnv); - export default { clientConfig, serverConfig }; diff --git a/packages/zapp/console/webpack.dev.config.ts b/packages/zapp/console/webpack.dev.config.ts index b9d6ae2ef..642fc97a8 100644 --- a/packages/zapp/console/webpack.dev.config.ts +++ b/packages/zapp/console/webpack.dev.config.ts @@ -68,7 +68,6 @@ export const clientConfig: webpack.Configuration = merge(common.default.clientCo minify: false, hash: false, showErrors: true, - clientEnv: common.clientEnv, }), ], }); diff --git a/packages/zapp/console/webpack.prod.config.ts b/packages/zapp/console/webpack.prod.config.ts index 829b2a0f4..df0c45c80 100644 --- a/packages/zapp/console/webpack.prod.config.ts +++ b/packages/zapp/console/webpack.prod.config.ts @@ -60,7 +60,6 @@ export const clientConfig: webpack.Configuration = merge(common.default.clientCo showErrors: false, cdnReact, cdnReactDOM, - clientEnv: common.clientEnv, }), ], externals: { diff --git a/yarn.lock b/yarn.lock index 13b3cb367..0c2eee12f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5173,7 +5173,7 @@ aria-query@^5.0.0: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -6414,6 +6414,18 @@ chartjs-plugin-datalabels@^2.0.0: resolved "https://registry.yarnpkg.com/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.0.0.tgz#caacefb26803d968785071eab012dde8746c5939" integrity sha512-WBsWihphzM0Y8fmQVm89+iy99mmgejmj5/jcsYqwxSioLRL/zqJ4Scv/eXq5ZqvG3TpojlGzZLeaOaSvDm7fwA== +cheerio@1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + integrity sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg== + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -7405,7 +7417,7 @@ css-loader@^5.0.1: schema-utils "^3.0.0" semver "^7.3.5" -css-select@^1.1.0: +css-select@^1.1.0, css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= @@ -8227,6 +8239,14 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -8237,7 +8257,7 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.1: +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== @@ -8530,7 +8550,7 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.9.2: graceful-fs "^4.2.4" tapable "^2.2.0" -entities@^1.1.1: +entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -10109,7 +10129,19 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -10624,7 +10656,7 @@ html-webpack-plugin@^4.0.0: tapable "^1.1.3" util.promisify "1.0.0" -htmlparser2@^3.3.0: +htmlparser2@^3.3.0, htmlparser2@^3.9.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -13015,7 +13047,7 @@ lodash@4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: +lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -13556,7 +13588,7 @@ 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.2, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.1.1, 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== @@ -14934,6 +14966,13 @@ parse5@5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" + parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" From 1859cf5ca8fc3000bec9f513dee517264846c08f Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Tue, 17 May 2022 12:54:39 -0700 Subject: [PATCH 26/93] chore: rebase on top of master Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> --- packages/zapp/console/package.json | 2 +- .../console/src/components/Navigation/DefaultAppBarContent.tsx | 2 +- .../src}/components/Navigation/OnlyMine/FilterPopoverIcon.tsx | 0 .../zapp/console/src/components/Navigation/OnlyMine/index.tsx | 0 .../zapp/console/src}/components/Navigation/OnlyMine/strings.ts | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename {src => packages/zapp/console/src}/components/Navigation/OnlyMine/FilterPopoverIcon.tsx (100%) rename src/components/Navigation/OnlyMine/OnlyMine.tsx => packages/zapp/console/src/components/Navigation/OnlyMine/index.tsx (100%) rename {src => packages/zapp/console/src}/components/Navigation/OnlyMine/strings.ts (73%) diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 19db41326..678cb3552 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -58,7 +58,7 @@ "@commitlint/cli": "^8.3.5", "@commitlint/config-conventional": "^8.3.4", "@date-io/moment": "1.3.9", - "@flyteorg/flyteidl": "0.24.11", + "@flyteorg/flyteidl": "1.1.0", "@material-ui/core": "^4.0.0", "@material-ui/icons": "^4.0.0", "@material-ui/pickers": "^3.2.2", diff --git a/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx index 8c2cb0205..bad2aecba 100644 --- a/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx +++ b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx @@ -10,7 +10,7 @@ import { FeatureFlag, useFeatureFlag } from 'basics/FeatureFlags'; import { useAdminVersion } from 'components/hooks/useVersion'; import { env } from 'common/env'; import { UserInformation } from './UserInformation'; -import { OnlyMine } from './OnlyMine/OnlyMine'; +import { OnlyMine } from './OnlyMine'; import t, { patternKey } from './strings'; const { version: platformVersion } = require('../../../package.json'); diff --git a/src/components/Navigation/OnlyMine/FilterPopoverIcon.tsx b/packages/zapp/console/src/components/Navigation/OnlyMine/FilterPopoverIcon.tsx similarity index 100% rename from src/components/Navigation/OnlyMine/FilterPopoverIcon.tsx rename to packages/zapp/console/src/components/Navigation/OnlyMine/FilterPopoverIcon.tsx diff --git a/src/components/Navigation/OnlyMine/OnlyMine.tsx b/packages/zapp/console/src/components/Navigation/OnlyMine/index.tsx similarity index 100% rename from src/components/Navigation/OnlyMine/OnlyMine.tsx rename to packages/zapp/console/src/components/Navigation/OnlyMine/index.tsx diff --git a/src/components/Navigation/OnlyMine/strings.ts b/packages/zapp/console/src/components/Navigation/OnlyMine/strings.ts similarity index 73% rename from src/components/Navigation/OnlyMine/strings.ts rename to packages/zapp/console/src/components/Navigation/OnlyMine/strings.ts index 8e76bdba8..3cc56d24f 100644 --- a/src/components/Navigation/OnlyMine/strings.ts +++ b/packages/zapp/console/src/components/Navigation/OnlyMine/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; const str = { onlyMine_popup_label: 'execution id', From 42d26326a06684318d1c263ad5245d1737d7d4f0 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Tue, 17 May 2022 20:33:25 -0700 Subject: [PATCH 27/93] fix: trigger release #patch (#477) Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> From 324b4f5fed3835937b3f3ecf96ffba7659d3ac43 Mon Sep 17 00:00:00 2001 From: apTalya <99441958+apTalya@users.noreply.github.com> Date: Wed, 18 May 2022 17:23:08 -0700 Subject: [PATCH 28/93] feat: add task version info (#485) made the entities component become more generic that can support Workflow, Task, and others added the inputs and outputs to task details page added the versions table in task details page added the version details page added task details link in node side panel Signed-off-by: eugenejahn Co-authored-by: Eugene Jahn --- packages/zapp/console/src/common/constants.ts | 2 +- .../components/Entities/EntityDescription.tsx | 96 ++++++++++++--- .../Entities/EntityDetailsHeader.tsx | 9 +- .../components/Entities/EntityExecutions.tsx | 6 +- .../Entities/EntityExecutionsBarChart.tsx | 5 +- .../components/Entities/EntitySchedules.tsx | 17 ++- .../components/Entities/EntityVersions.tsx | 36 +++--- .../console/src/components/Entities/Row.tsx | 32 +++++ .../VersionDetails/EntityVersionDetails.tsx | 70 +++++++++++ .../EntityVersionDetailsContainer.tsx | 115 ++++++++++++++++++ .../Entities/VersionDetails/EnvVarsTable.tsx | 71 +++++++++++ .../VersionDetails/VersionDetailsLink.tsx | 25 ++++ .../Entities/VersionDetails/constants.ts | 29 +++++ .../src/components/Entities/constants.ts | 19 ++- .../src/components/Entities/generators.ts | 62 +++++++++- .../src/components/Entities/strings.ts | 27 +++- .../Entities/test/EntityDetails.test.tsx | 72 +++++++++++ .../test/EntityVersionDetails.test.tsx | 69 +++++++++++ .../test/TaskVersionDetailsLink.test.tsx | 43 +++++++ .../NodeExecutionDetailsPanelContent.tsx | 4 +- .../NodeExecutionTabs/index.tsx | 3 + ...sionsTable.tsx => EntityVersionsTable.tsx} | 42 ++++--- .../console/src/components/Theme/muiTheme.ts | 9 +- .../src/components/common/BarChart.tsx | 2 +- .../src/components/common/DumpJSON.tsx | 4 +- .../src/components/common/NewTargetLink.tsx | 29 +++-- .../src/components/common/ReactJsonView.tsx | 3 + .../common/test/NewTargetLink.spec.tsx | 5 +- .../src/components/hooks/Entity/constants.ts | 41 +++++++ .../hooks/Entity/useEntityVersions.ts | 20 +++ .../console/src/components/hooks/useTask.ts | 2 +- .../components/hooks/useWorkflowVersions.ts | 17 --- .../zapp/console/src/models/Task/types.ts | 1 + .../console/src/models/__mocks__/taskData.ts | 8 +- .../src/models/__mocks__/workflowData.ts | 8 +- .../console/src/routes/ApplicationRouter.tsx | 4 +- .../zapp/console/src/routes/components.ts | 4 +- packages/zapp/console/src/routes/routes.ts | 20 ++- 38 files changed, 900 insertions(+), 131 deletions(-) create mode 100644 packages/zapp/console/src/components/Entities/Row.tsx create mode 100644 packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetails.tsx create mode 100644 packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetailsContainer.tsx create mode 100644 packages/zapp/console/src/components/Entities/VersionDetails/EnvVarsTable.tsx create mode 100644 packages/zapp/console/src/components/Entities/VersionDetails/VersionDetailsLink.tsx create mode 100644 packages/zapp/console/src/components/Entities/VersionDetails/constants.ts create mode 100644 packages/zapp/console/src/components/Entities/test/EntityDetails.test.tsx create mode 100644 packages/zapp/console/src/components/Entities/test/EntityVersionDetails.test.tsx create mode 100644 packages/zapp/console/src/components/Entities/test/TaskVersionDetailsLink.test.tsx rename packages/zapp/console/src/components/Executions/Tables/{WorkflowVersionsTable.tsx => EntityVersionsTable.tsx} (59%) create mode 100644 packages/zapp/console/src/components/hooks/Entity/constants.ts create mode 100644 packages/zapp/console/src/components/hooks/Entity/useEntityVersions.ts delete mode 100644 packages/zapp/console/src/components/hooks/useWorkflowVersions.ts diff --git a/packages/zapp/console/src/common/constants.ts b/packages/zapp/console/src/common/constants.ts index 634a751fc..46870669e 100644 --- a/packages/zapp/console/src/common/constants.ts +++ b/packages/zapp/console/src/common/constants.ts @@ -6,7 +6,7 @@ export const unknownValueString = '(unknown)'; export const dashedValueString = '----'; export const noneString = '(none)'; export const noExecutionsFoundString = 'No executions found.'; -export const noWorkflowVersionsFoundString = 'No workflow versions found.'; +export const noVersionsFoundString = 'No versions found.'; export const zeroSecondsString = '0s'; export enum KeyCodes { diff --git a/packages/zapp/console/src/components/Entities/EntityDescription.tsx b/packages/zapp/console/src/components/Entities/EntityDescription.tsx index 646af3639..ecbec2db0 100644 --- a/packages/zapp/console/src/components/Entities/EntityDescription.tsx +++ b/packages/zapp/console/src/components/Entities/EntityDescription.tsx @@ -4,20 +4,80 @@ import classnames from 'classnames'; import { useCommonStyles } from 'components/common/styles'; import { WaitForData } from 'components/common/WaitForData'; import { useNamedEntity } from 'components/hooks/useNamedEntity'; -import { NamedEntityMetadata, ResourceIdentifier } from 'models/Common/types'; +import { NamedEntityMetadata, ResourceIdentifier, Variable } from 'models/Common/types'; import * as React from 'react'; import reactLoadingSkeleton from 'react-loading-skeleton'; -import { entityStrings } from './constants'; -import t from './strings'; +import { ReactJsonViewWrapper } from 'components/common/ReactJsonView'; +import { useEntityVersions } from 'components/hooks/Entity/useEntityVersions'; +import { executionSortFields } from 'models/Execution/constants'; +import { SortDirection } from 'models/AdminEntity/types'; +import { TaskClosure } from 'models/Task/types'; +import { executionFilterGenerator } from './generators'; +import { Row } from './Row'; +import t, { patternKey } from './strings'; +import { entityStrings, entitySections } from './constants'; const Skeleton = reactLoadingSkeleton; const useStyles = makeStyles((theme: Theme) => ({ + header: { + marginBottom: theme.spacing(1), + }, description: { marginTop: theme.spacing(1), }, + divider: { + borderBottom: `1px solid ${theme.palette.divider}`, + marginBottom: theme.spacing(1), + }, })); +const InputsAndOuputs: React.FC<{ + id: ResourceIdentifier; +}> = ({ id }) => { + const sort = { + key: executionSortFields.createdAt, + direction: SortDirection.DESCENDING, + }; + + const baseFilters = executionFilterGenerator[id.resourceType](id); + + // to render the input and output, + // need to fetch the latest version and get the input and ouptut data + const versions = useEntityVersions( + { ...id, version: '' }, + { + sort, + filter: baseFilters, + limit: 1, + }, + ); + + let inputs: Record | undefined; + let outputs: Record | undefined; + + if ((versions?.value?.[0]?.closure as TaskClosure)?.compiledTask?.template) { + const template = (versions?.value?.[0]?.closure as TaskClosure)?.compiledTask?.template; + inputs = template?.interface?.inputs?.variables; + outputs = template?.interface?.outputs?.variables; + } + + return ( + + {inputs && ( + + !field?.name} /> + + )} + {outputs && ( + + !field?.name} /> + + )} + + ); +}; + /** Fetches and renders the description for a given Entity (LaunchPlan,Workflow,Task) ID */ export const EntityDescription: React.FC<{ id: ResourceIdentifier; @@ -27,21 +87,29 @@ export const EntityDescription: React.FC<{ const namedEntity = useNamedEntity(id); const { metadata = {} as NamedEntityMetadata } = namedEntity.value; const hasDescription = !!metadata.description; + const sections = entitySections[id.resourceType]; + return ( <> - Description - + + {t('basicInformation')} + +
+ - - {hasDescription - ? metadata.description - : t('noDescription', entityStrings[id.resourceType])} - + + + {hasDescription + ? metadata.description + : t(patternKey('noDescription', entityStrings[id.resourceType]))} + + + {sections?.descriptionInputsAndOutputs && } ); diff --git a/packages/zapp/console/src/components/Entities/EntityDetailsHeader.tsx b/packages/zapp/console/src/components/Entities/EntityDetailsHeader.tsx index ce41b9ce6..c22b16291 100644 --- a/packages/zapp/console/src/components/Entities/EntityDetailsHeader.tsx +++ b/packages/zapp/console/src/components/Entities/EntityDetailsHeader.tsx @@ -8,11 +8,10 @@ import { Project } from 'models/Project/types'; import { getProjectDomain } from 'models/Project/utils'; import * as React from 'react'; import { Link } from 'react-router-dom'; -import { Routes } from 'routes/routes'; import { LaunchForm } from 'components/Launch/LaunchForm/LaunchForm'; -import { backUrlGenerator } from './generators'; +import { backUrlGenerator, backToDetailUrlGenerator } from './generators'; import { entityStrings } from './constants'; -import t from './strings'; +import t, { patternKey } from './strings'; const useStyles = makeStyles((theme: Theme) => ({ headerContainer: { @@ -77,7 +76,7 @@ export const EntityDetailsHeader: React.FC = ({ className={commonStyles.linkUnstyled} to={ backToWorkflow - ? Routes.WorkflowDetails.makeUrl(id.project, id.domain, id.name) + ? backToDetailUrlGenerator[id.resourceType](id) : backUrlGenerator[id.resourceType](id) } > @@ -93,7 +92,7 @@ export const EntityDetailsHeader: React.FC = ({ onClick={() => setShowLaunchForm(true)} variant="contained" > - {t('launchStrings', entityStrings[id.resourceType])} + {t(patternKey('launchStrings', entityStrings[id.resourceType]))} ) : null}
diff --git a/packages/zapp/console/src/components/Entities/EntityExecutions.tsx b/packages/zapp/console/src/components/Entities/EntityExecutions.tsx index b2b3780e8..da2e701b8 100644 --- a/packages/zapp/console/src/components/Entities/EntityExecutions.tsx +++ b/packages/zapp/console/src/components/Entities/EntityExecutions.tsx @@ -15,6 +15,8 @@ import { executionSortFields } from 'models/Execution/constants'; import { compact } from 'lodash'; import { useOnlyMyExecutionsFilterState } from 'components/Executions/filters/useOnlyMyExecutionsFilterState'; import { executionFilterGenerator } from './generators'; +import { entityStrings } from './constants'; +import t, { patternKey } from './strings'; const useStyles = makeStyles((theme: Theme) => ({ filtersContainer: { @@ -76,8 +78,8 @@ export const EntityExecutions: React.FC = ({ return ( <> - - All Executions in the Workflow + + {t(patternKey('allExecutionsChartTitle', entityStrings[id.resourceType]))}
= return ( ({ + header: { + marginBottom: theme.spacing(1), + }, schedulesContainer: { marginTop: theme.spacing(1), }, + divider: { + borderBottom: `1px solid ${theme.palette.divider}`, + marginBottom: theme.spacing(1), + }, })); const RenderSchedules: React.FC<{ @@ -45,13 +52,17 @@ export const EntitySchedules: React.FC<{ return ( <> - {t('schedulesHeader')} + + {t('schedulesHeader')} + +
+
{scheduledLaunchPlans.value.length > 0 ? ( ) : ( - {t('noSchedules', entityStrings[id.resourceType])} + {t(patternKey('noSchedules', entityStrings[id.resourceType]))} )}
diff --git a/packages/zapp/console/src/components/Entities/EntityVersions.tsx b/packages/zapp/console/src/components/Entities/EntityVersions.tsx index 64990f86a..4509f3090 100644 --- a/packages/zapp/console/src/components/Entities/EntityVersions.tsx +++ b/packages/zapp/console/src/components/Entities/EntityVersions.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { Routes } from 'routes/routes'; import { history } from 'routes/history'; import Typography from '@material-ui/core/Typography'; import { IconButton, makeStyles, Theme } from '@material-ui/core'; @@ -7,16 +6,16 @@ import ExpandLess from '@material-ui/icons/ExpandLess'; import ExpandMore from '@material-ui/icons/ExpandMore'; import { LocalCacheItem, useLocalCache } from 'basics/LocalCache'; import { WaitForData } from 'components/common/WaitForData'; -import { WorkflowVersionsTable } from 'components/Executions/Tables/WorkflowVersionsTable'; +import { EntityVersionsTable } from 'components/Executions/Tables/EntityVersionsTable'; import { isLoadingState } from 'components/hooks/fetchMachine'; -import { useWorkflowVersions } from 'components/hooks/useWorkflowVersions'; +import { useEntityVersions } from 'components/hooks/Entity/useEntityVersions'; import { interactiveTextColor } from 'components/Theme/constants'; import { SortDirection } from 'models/AdminEntity/types'; -import { ResourceIdentifier } from 'models/Common/types'; +import { Identifier, ResourceIdentifier } from 'models/Common/types'; import { executionSortFields } from 'models/Execution/constants'; -import { executionFilterGenerator } from './generators'; -import { WorkflowVersionsTablePageSize } from './constants'; -import t from './strings'; +import { executionFilterGenerator, versionDetailsUrlGenerator } from './generators'; +import { WorkflowVersionsTablePageSize, entityStrings } from './constants'; +import t, { patternKey } from './strings'; const useStyles = makeStyles((theme: Theme) => ({ headerContainer: { @@ -64,8 +63,10 @@ export const EntityVersions: React.FC = ({ id, showAll = fa [id, resourceType], ); - const versions = useWorkflowVersions( - { domain, project }, + // we are getting all the versions for this id + // so we don't want to specify which version + const versions = useEntityVersions( + { ...id, version: '' }, { sort, filter: baseFilters, @@ -76,12 +77,10 @@ export const EntityVersions: React.FC = ({ id, showAll = fa const preventDefault = (e) => e.preventDefault(); const handleViewAll = React.useCallback(() => { history.push( - Routes.WorkflowVersionDetails.makeUrl( - project, - domain, - name, - versions.value[0].id.version ?? '', - ), + versionDetailsUrlGenerator({ + ...id, + version: versions.value[0].id.version ?? '', + } as Identifier), ); }, [project, domain, name, versions]); @@ -102,8 +101,8 @@ export const EntityVersions: React.FC = ({ id, showAll = fa > {showTable ? : } - - {t('workflowVersionsTitle')} + + {t(patternKey('versionsTitle', entityStrings[id.resourceType]))} {t('viewAll')} @@ -112,10 +111,11 @@ export const EntityVersions: React.FC = ({ id, showAll = fa )} {showTable || showAll ? ( - ) : (
diff --git a/packages/zapp/console/src/components/Entities/Row.tsx b/packages/zapp/console/src/components/Entities/Row.tsx new file mode 100644 index 000000000..b6fd70c35 --- /dev/null +++ b/packages/zapp/console/src/components/Entities/Row.tsx @@ -0,0 +1,32 @@ +import * as React from 'react'; +import { Typography } from '@material-ui/core'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import { COLOR_SPECTRUM } from 'components/Theme/colorSpectrum'; + +const useStyles = makeStyles((theme: Theme) => ({ + row: { + display: 'flex', + marginBottom: theme.spacing(1), + }, + title: { + width: 100, + color: COLOR_SPECTRUM.gray25.color, + }, +})); + +interface MyProps { + children?: React.ReactNode; + title: String; +} +export const Row: React.FC = (props) => { + const styles = useStyles(); + + return ( +
+
+ {props.title} +
+
{props.children}
+
+ ); +}; diff --git a/packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetails.tsx b/packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetails.tsx new file mode 100644 index 000000000..519b4e13b --- /dev/null +++ b/packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetails.tsx @@ -0,0 +1,70 @@ +import * as React from 'react'; +import { Typography } from '@material-ui/core'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import { contentMarginGridUnits } from 'common/layout'; +import { WaitForData } from 'components/common/WaitForData'; +import { useTaskTemplate } from 'components/hooks/useTask'; +import { ResourceIdentifier, Identifier } from 'models/Common/types'; +import { DumpJSON } from 'components/common/DumpJSON'; +import { Row } from '../Row'; +import EnvVarsTable from './EnvVarsTable'; +import t, { patternKey } from '../strings'; +import { entityStrings } from '../constants'; + +const useStyles = makeStyles((theme: Theme) => ({ + header: { + marginBottom: theme.spacing(1), + marginLeft: theme.spacing(contentMarginGridUnits), + }, + table: { + marginLeft: theme.spacing(contentMarginGridUnits), + }, + divider: { + borderBottom: `1px solid ${theme.palette.divider}`, + marginBottom: theme.spacing(1), + }, +})); + +export interface EntityExecutionsProps { + id: ResourceIdentifier; +} + +/** The tab/page content for viewing a workflow's executions */ +export const EntityVersionDetails: React.FC = ({ id }) => { + const styles = useStyles(); + + // NOTE: need to be generic for supporting other type like workflow, etc. + const templateState = useTaskTemplate(id as Identifier); + + const template = templateState?.value?.closure?.compiledTask?.template; + const envVars = template?.container?.env; + const image = template?.container?.image; + + return ( + <> + + {t(patternKey('details', entityStrings[id.resourceType]))} + +
+ +
+ {image && ( + + {image} + + )} + {envVars && ( + + + + )} + {template && ( + + + + )} +
+
+ + ); +}; diff --git a/packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetailsContainer.tsx b/packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetailsContainer.tsx new file mode 100644 index 000000000..931edeb09 --- /dev/null +++ b/packages/zapp/console/src/components/Entities/VersionDetails/EntityVersionDetailsContainer.tsx @@ -0,0 +1,115 @@ +import * as React from 'react'; +import { withRouteParams } from 'components/common/withRouteParams'; +import { ResourceIdentifier } from 'models/Common/types'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import { WaitForData } from 'components/common/WaitForData'; +import { useProject } from 'components/hooks/useProjects'; +import { StaticGraphContainer } from 'components/Workflow/StaticGraphContainer'; +import { WorkflowId } from 'models/Workflow/types'; +import { entitySections } from 'components/Entities/constants'; +import { EntityDetailsHeader } from 'components/Entities/EntityDetailsHeader'; +import { EntityVersions } from 'components/Entities/EntityVersions'; +import { typeNameToEntityResource } from '../constants'; +import { versionsDetailsSections } from './constants'; +import { EntityVersionDetails } from './EntityVersionDetails'; + +const useStyles = makeStyles((theme: Theme) => ({ + verionDetailsContainer: { + marginTop: theme.spacing(2), + display: 'flex', + flexDirection: 'column', + flexWrap: 'nowrap', + overflow: 'hidden', + height: `calc(100vh - ${theme.spacing(17)}px)`, + }, + staticGraphContainer: { + display: 'flex', + height: '60%', + width: '100%', + flex: '1', + }, + versionDetailsContainer: { + display: 'flex', + flexDirection: 'column', + height: '55%', + width: '100%', + flex: '1', + overflowY: 'scroll', + }, + versionsContainer: { + display: 'flex', + flex: '0 1 auto', + height: '40%', + flexDirection: 'column', + overflowY: 'scroll', + }, +})); + +interface WorkflowVersionDetailsRouteParams { + projectId: string; + domainId: string; + entityType: string; + entityName: string; + entityVersion: string; +} + +/** + * The view component for the Workflow Versions page + * @param projectId + * @param domainId + * @param workflowName + */ +const EntityVersionsDetailsContainerImpl: React.FC = ({ + projectId, + domainId, + entityType, + entityName, + entityVersion, +}) => { + const workflowId = React.useMemo( + () => ({ + resourceType: typeNameToEntityResource[entityType], + project: projectId, + domain: domainId, + name: entityName, + version: entityVersion, + }), + [entityType, projectId, domainId, entityName, entityVersion], + ); + + const id = workflowId as ResourceIdentifier; + const sections = entitySections[id.resourceType]; + const versionsSections = versionsDetailsSections[id.resourceType]; + const project = useProject(workflowId.project); + const styles = useStyles(); + + return ( + + +
+ {versionsSections.details && ( +
+ +
+ )} + {versionsSections.graph && ( +
+ +
+ )} +
+ +
+
+
+ ); +}; + +export const EntityVersionsDetailsContainer = withRouteParams( + EntityVersionsDetailsContainerImpl, +); diff --git a/packages/zapp/console/src/components/Entities/VersionDetails/EnvVarsTable.tsx b/packages/zapp/console/src/components/Entities/VersionDetails/EnvVarsTable.tsx new file mode 100644 index 000000000..17efa7015 --- /dev/null +++ b/packages/zapp/console/src/components/Entities/VersionDetails/EnvVarsTable.tsx @@ -0,0 +1,71 @@ +import * as React from 'react'; +import { + Typography, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, +} from '@material-ui/core'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import { Core } from 'flyteidl'; +import { COLOR_SPECTRUM } from 'components/Theme/colorSpectrum'; +import t from '../strings'; + +const useStyles = makeStyles((theme: Theme) => ({ + container: { + marginBottom: theme.spacing(1), + ['& .MuiTableCell-sizeSmall']: { + paddingLeft: 0, + }, + }, + headerText: { + color: COLOR_SPECTRUM.gray25.color, + }, +})); + +interface EnvVarsTableProps { + rows: Core.IKeyValuePair[]; +} + +export default function EnvVarsTable({ rows }: EnvVarsTableProps) { + const styles = useStyles(); + + if (!rows || rows.length == 0) { + return {t('empty')}; + } + return ( + + + + + + + {t('key')} + + + + + {t('value')} + + + + + + {rows.map((row) => ( + + + {row.key} + + + {row.value} + + + ))} + +
+
+ ); +} diff --git a/packages/zapp/console/src/components/Entities/VersionDetails/VersionDetailsLink.tsx b/packages/zapp/console/src/components/Entities/VersionDetails/VersionDetailsLink.tsx new file mode 100644 index 000000000..480324eba --- /dev/null +++ b/packages/zapp/console/src/components/Entities/VersionDetails/VersionDetailsLink.tsx @@ -0,0 +1,25 @@ +import * as React from 'react'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import { Identifier } from 'models/Common/types'; +import { NewTargetLink } from 'components/common/NewTargetLink'; +import { versionDetailsUrlGenerator } from 'components/Entities/generators'; +import t from '../strings'; + +const useStyles = makeStyles((theme: Theme) => ({ + link: { + marginBottom: theme.spacing(2), + }, +})); + +interface TaskVersionDetailsLinkProps { + id: Identifier; +} + +export const TaskVersionDetailsLink: React.FC = ({ id }) => { + const styles = useStyles(); + return ( + + {t('details_task')} + + ); +}; diff --git a/packages/zapp/console/src/components/Entities/VersionDetails/constants.ts b/packages/zapp/console/src/components/Entities/VersionDetails/constants.ts new file mode 100644 index 000000000..ad09fb03a --- /dev/null +++ b/packages/zapp/console/src/components/Entities/VersionDetails/constants.ts @@ -0,0 +1,29 @@ +import { ResourceType } from 'models/Common/types'; + +interface VersionsDetailsSectionsFlags { + details: boolean; + graph: boolean; +} + +export const versionsDetailsSections: { [k in ResourceType]: VersionsDetailsSectionsFlags } = { + [ResourceType.DATASET]: { + details: false, + graph: false, + }, + [ResourceType.LAUNCH_PLAN]: { + details: false, + graph: false, + }, + [ResourceType.TASK]: { + details: true, + graph: false, + }, + [ResourceType.UNSPECIFIED]: { + details: false, + graph: false, + }, + [ResourceType.WORKFLOW]: { + details: false, + graph: true, + }, +}; diff --git a/packages/zapp/console/src/components/Entities/constants.ts b/packages/zapp/console/src/components/Entities/constants.ts index 06adada8f..efef36a63 100644 --- a/packages/zapp/console/src/components/Entities/constants.ts +++ b/packages/zapp/console/src/components/Entities/constants.ts @@ -10,12 +10,23 @@ export const entityStrings: EntityStringMap = { [ResourceType.WORKFLOW]: 'workflow', }; +type TypeNameToEntityResourceType = { [key: string]: ResourceType }; + +export const typeNameToEntityResource: TypeNameToEntityResourceType = { + ['dataset']: ResourceType.DATASET, + ['launch plan']: ResourceType.LAUNCH_PLAN, + ['task']: ResourceType.TASK, + ['item']: ResourceType.UNSPECIFIED, + ['workflow']: ResourceType.WORKFLOW, +}; + interface EntitySectionsFlags { description?: boolean; executions?: boolean; launch?: boolean; schedules?: boolean; versions?: boolean; + descriptionInputsAndOutputs?: boolean; } export const entitySections: { [k in ResourceType]: EntitySectionsFlags } = { @@ -26,7 +37,13 @@ export const entitySections: { [k in ResourceType]: EntitySectionsFlags } = { launch: true, schedules: true, }, - [ResourceType.TASK]: { description: true, executions: true, launch: true }, + [ResourceType.TASK]: { + description: true, + executions: true, + launch: true, + versions: true, + descriptionInputsAndOutputs: true, + }, [ResourceType.UNSPECIFIED]: { description: true }, [ResourceType.WORKFLOW]: { description: true, diff --git a/packages/zapp/console/src/components/Entities/generators.ts b/packages/zapp/console/src/components/Entities/generators.ts index 0cc7235e0..f10c41fee 100644 --- a/packages/zapp/console/src/components/Entities/generators.ts +++ b/packages/zapp/console/src/components/Entities/generators.ts @@ -1,6 +1,7 @@ import { FilterOperation, FilterOperationName } from 'models/AdminEntity/types'; -import { ResourceIdentifier, ResourceType } from 'models/Common/types'; +import { ResourceIdentifier, ResourceType, Identifier } from 'models/Common/types'; import { Routes } from 'routes/routes'; +import { entityStrings } from './constants'; const noFilters = () => []; @@ -30,13 +31,66 @@ const workflowListGenerator = ({ project, domain }: ResourceIdentifier) => Routes.ProjectDetails.sections.workflows.makeUrl(project, domain); const taskListGenerator = ({ project, domain }: ResourceIdentifier) => Routes.ProjectDetails.sections.tasks.makeUrl(project, domain); +const unspecifiedGenerator = ({ project, domain }: ResourceIdentifier | Identifier) => { + throw new Error('Unspecified Resourcetype.'); +}; +const unimplementedGenerator = ({ project, domain }: ResourceIdentifier | Identifier) => { + throw new Error('Method not implemented.'); +}; export const backUrlGenerator: { [k in ResourceType]: (id: ResourceIdentifier) => string; } = { - [ResourceType.DATASET]: workflowListGenerator, - [ResourceType.LAUNCH_PLAN]: workflowListGenerator, + [ResourceType.DATASET]: unimplementedGenerator, + [ResourceType.LAUNCH_PLAN]: unimplementedGenerator, [ResourceType.TASK]: taskListGenerator, - [ResourceType.UNSPECIFIED]: workflowListGenerator, + [ResourceType.UNSPECIFIED]: unspecifiedGenerator, [ResourceType.WORKFLOW]: workflowListGenerator, }; + +const workflowDetailGenerator = ({ project, domain, name }: ResourceIdentifier) => + Routes.WorkflowDetails.makeUrl(project, domain, name); +const taskDetailGenerator = ({ project, domain, name }: ResourceIdentifier) => + Routes.TaskDetails.makeUrl(project, domain, name); + +export const backToDetailUrlGenerator: { + [k in ResourceType]: (id: ResourceIdentifier) => string; +} = { + [ResourceType.DATASET]: unimplementedGenerator, + [ResourceType.LAUNCH_PLAN]: unimplementedGenerator, + [ResourceType.TASK]: taskDetailGenerator, + [ResourceType.UNSPECIFIED]: unspecifiedGenerator, + [ResourceType.WORKFLOW]: workflowDetailGenerator, +}; + +const workflowVersopmDetailsGenerator = ({ project, domain, name, version }: Identifier) => + Routes.EntityVersionDetails.makeUrl( + project, + domain, + name, + entityStrings[ResourceType.WORKFLOW], + version, + ); +const taskVersionDetailsGenerator = ({ project, domain, name, version }: Identifier) => + Routes.EntityVersionDetails.makeUrl( + project, + domain, + name, + entityStrings[ResourceType.TASK], + version, + ); + +const entityMapVersionDetailsUrl: { + [k in ResourceType]: (id: Identifier) => string; +} = { + [ResourceType.DATASET]: unimplementedGenerator, + [ResourceType.LAUNCH_PLAN]: unimplementedGenerator, + [ResourceType.TASK]: taskVersionDetailsGenerator, + [ResourceType.UNSPECIFIED]: unspecifiedGenerator, + [ResourceType.WORKFLOW]: workflowVersopmDetailsGenerator, +}; + +export const versionDetailsUrlGenerator = (id: Identifier): string => { + if (id?.resourceType) return entityMapVersionDetailsUrl[id?.resourceType](id); + return ''; +}; diff --git a/packages/zapp/console/src/components/Entities/strings.ts b/packages/zapp/console/src/components/Entities/strings.ts index 9c44f0f79..e12b28fd3 100644 --- a/packages/zapp/console/src/components/Entities/strings.ts +++ b/packages/zapp/console/src/components/Entities/strings.ts @@ -1,15 +1,30 @@ import { createLocalizedString } from '@flyteconsole/locale'; -import { startCase } from 'lodash'; const str = { - allExecutionsChartTitle: 'All Executions in the Workflow', - workflowVersionsTitle: 'Recent Workflow Versions', viewAll: 'View All', schedulesHeader: 'Schedules', collapseButton: (showAll: boolean) => (showAll ? 'Collapse' : 'Expand'), - launchStrings: (typeString: string) => `Launch ${startCase(typeString)}`, - noDescription: (typeString: string) => `This ${typeString} has no description.`, - noSchedules: (typeString: string) => `This ${typeString} has no schedules.`, + launchStrings_workflow: 'Launch Workflow', + launchStrings_task: 'Launch Task', + noDescription_workflow: 'This workflow has no description.', + noDescription_task: 'This task has no description.', + noSchedules_workflow: 'This workflow has no schedules.', + noSchedules_task: 'This task has no schedules.', + allExecutionsChartTitle_workflow: 'All Executions in the Workflow', + allExecutionsChartTitle_task: 'All Execuations in the Task', + versionsTitle_workflow: 'Recent Workflow Versions', + versionsTitle_task: 'Recent Task Versions', + details_task: 'Task Details', + inputsFieldName: 'Inputs', + outputsFieldName: 'Outputs', + imageFieldName: 'Image', + envVarsFieldName: 'Env Vars', + commandsFieldName: 'Commands', + empty: 'Empty', + key: 'Key', + value: 'Value', + basicInformation: 'Basic Information', + description: 'Description', }; export { patternKey } from '@flyteconsole/locale'; diff --git a/packages/zapp/console/src/components/Entities/test/EntityDetails.test.tsx b/packages/zapp/console/src/components/Entities/test/EntityDetails.test.tsx new file mode 100644 index 000000000..179c1d747 --- /dev/null +++ b/packages/zapp/console/src/components/Entities/test/EntityDetails.test.tsx @@ -0,0 +1,72 @@ +import { render, waitFor, screen } from '@testing-library/react'; +import { ResourceIdentifier } from 'models/Common/types'; +import * as React from 'react'; +import { createMockTask } from 'models/__mocks__/taskData'; +import { createMockWorkflow } from 'models/__mocks__/workflowData'; +import { Task } from 'models/Task/types'; +import { Workflow } from 'models/Workflow/types'; +import { projects } from 'mocks/data/projects'; +import * as projectApi from 'models/Project/api'; +import { MemoryRouter } from 'react-router'; +import { EntityDetails } from '../EntityDetails'; + +jest.mock('models/Project/api'); + +describe('EntityDetails', () => { + let mockWorkflow: Workflow; + let mockTask: Task; + + // mock api for listProjects + const mockListProjects = jest.spyOn(projectApi, 'listProjects'); + mockListProjects.mockResolvedValue([projects['flyteTest']]); + + const createMocks = () => { + mockWorkflow = createMockWorkflow('MyWorkflow'); + mockTask = createMockTask('MyTask'); + }; + + const renderDetails = (id: ResourceIdentifier) => { + return render( + + + , + ); + }; + + beforeEach(() => { + createMocks(); + }); + + const checkTextInDetailPage = async ( + id: ResourceIdentifier, + versionsString: string, + executionsString: string, + ) => { + // check text for header + await waitFor(() => { + expect(screen.getByText(`${id.domain} / ${id.name}`)).toBeInTheDocument(); + }); + + // check text for versions + await waitFor(() => { + expect(screen.getByText(versionsString)).toBeInTheDocument(); + }); + + // check text for executions + await waitFor(() => { + expect(screen.getByText(executionsString)).toBeInTheDocument(); + }); + }; + + it('renders Task Details Page', async () => { + const id: ResourceIdentifier = mockTask.id as ResourceIdentifier; + renderDetails(id); + checkTextInDetailPage(id, 'Recent Task Versions', 'All Executions in the Task'); + }); + + it('renders Workflow Details Page', async () => { + const id: ResourceIdentifier = mockWorkflow.id as ResourceIdentifier; + renderDetails(id); + checkTextInDetailPage(id, 'Recent Workflow Versions', 'All Executions in the Workflow'); + }); +}); diff --git a/packages/zapp/console/src/components/Entities/test/EntityVersionDetails.test.tsx b/packages/zapp/console/src/components/Entities/test/EntityVersionDetails.test.tsx new file mode 100644 index 000000000..147a002cf --- /dev/null +++ b/packages/zapp/console/src/components/Entities/test/EntityVersionDetails.test.tsx @@ -0,0 +1,69 @@ +import { render, waitFor, screen } from '@testing-library/react'; +import { ThemeProvider } from '@material-ui/styles'; +import { muiTheme } from 'components/Theme/muiTheme'; +import { ResourceIdentifier } from 'models/Common/types'; +import * as React from 'react'; +import { createMockTask } from 'models/__mocks__/taskData'; +import { Task } from 'models/Task/types'; +import { getTask } from 'models/Task/api'; +import { APIContext } from 'components/data/apiContext'; +import { mockAPIContextValue } from 'components/data/__mocks__/apiContext'; +import { EntityVersionDetails } from '../VersionDetails/EntityVersionDetails'; + +describe('EntityVersionDetails', () => { + let mockTask: Task; + let mockGetTask: jest.Mock>; + + const createMocks = () => { + mockTask = createMockTask('MyTask'); + mockGetTask = jest.fn().mockImplementation(() => Promise.resolve(mockTask)); + }; + + const renderDetails = (id: ResourceIdentifier) => { + return render( + + + + + , + ); + }; + + describe('Task Version Details', () => { + beforeEach(() => { + createMocks(); + }); + + it('renders and checks text', async () => { + const id: ResourceIdentifier = mockTask.id as ResourceIdentifier; + renderDetails(id); + + // check text for Task Details + await waitFor(() => { + expect(screen.getByText('Task Details')).toBeInTheDocument(); + }); + + // check text for image + await waitFor(() => { + expect( + screen.getByText(mockTask.closure.compiledTask.template?.container?.image || ''), + ).toBeInTheDocument(); + }); + + // check for env vars + if (mockTask.closure.compiledTask.template?.container?.env) { + const envVars = mockTask.closure.compiledTask.template?.container?.env; + for (let i = 0; i < envVars.length; i++) { + await waitFor(() => { + expect(screen.getByText(envVars[i].key || '')).toBeInTheDocument(); + expect(screen.getByText(envVars[i].value || '')).toBeInTheDocument(); + }); + } + } + }); + }); +}); diff --git a/packages/zapp/console/src/components/Entities/test/TaskVersionDetailsLink.test.tsx b/packages/zapp/console/src/components/Entities/test/TaskVersionDetailsLink.test.tsx new file mode 100644 index 000000000..19c89cc46 --- /dev/null +++ b/packages/zapp/console/src/components/Entities/test/TaskVersionDetailsLink.test.tsx @@ -0,0 +1,43 @@ +import { render, waitFor, screen } from '@testing-library/react'; +import * as React from 'react'; +import { createMockTask } from 'models/__mocks__/taskData'; +import { Task } from 'models/Task/types'; +import { Identifier } from 'models/Common/types'; +import { versionDetailsUrlGenerator } from 'components/Entities/generators'; +import { TaskVersionDetailsLink } from '../VersionDetails/VersionDetailsLink'; + +describe('TaskVersionDetailsLink', () => { + let mockTask: Task; + + const createMocks = () => { + mockTask = createMockTask('MyTask'); + }; + + const renderLink = (id: Identifier) => { + return render(); + }; + + beforeEach(() => { + createMocks(); + }); + + it('renders and checks text', async () => { + const id: Identifier = mockTask.id; + renderLink(id); + await waitFor(() => { + expect(screen.getByText('Task Details')).toBeInTheDocument(); + }); + }); + + it('renders and checks containing icon', () => { + const id: Identifier = mockTask.id; + const { container } = renderLink(id); + expect(container.querySelector('svg')).not.toBeNull(); + }); + + it('renders and checks url', () => { + const id: Identifier = mockTask.id; + const { container } = renderLink(id); + expect(container.firstElementChild).toHaveAttribute('href', versionDetailsUrlGenerator(id)); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx index 09ad0f06f..8a11e802c 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx @@ -26,6 +26,8 @@ import { DumpJSON } from 'components/common/DumpJSON'; import { dNode } from 'models/Graph/types'; import { NodeExecutionPhase, TaskExecutionPhase } from 'models/Execution/enums'; import { transformWorkflowToKeyedDag, getNodeNameFromDag } from 'components/WorkflowGraph/utils'; +import { TaskVersionDetailsLink } from 'components/Entities/VersionDetails/VersionDetailsLink'; +import { Identifier } from 'models/Common/types'; import { NodeExecutionCacheStatus } from '../NodeExecutionCacheStatus'; import { makeListTaskExecutionsQuery, makeNodeExecutionQuery } from '../nodeExecutionQueries'; import { NodeExecutionDetails } from '../types'; @@ -186,7 +188,6 @@ const WorkflowTabs: React.FC<{ let tabContent: JSX.Element | null = null; const id = nodeId.slice(nodeId.lastIndexOf('-') + 1); const taskTemplate = dagData[id]?.value.template; - switch (tabState.value) { case tabIds.inputs: { tabContent = taskTemplate ? ( @@ -199,6 +200,7 @@ const WorkflowTabs: React.FC<{ case tabIds.task: { tabContent = taskTemplate ? ( + ) : null; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx index ec1761afc..0fceb1331 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx @@ -8,6 +8,8 @@ import { PanelSection } from 'components/common/PanelSection'; import { DumpJSON } from 'components/common/DumpJSON'; import { isMapTaskType } from 'models/Task/utils'; import { TaskExecutionPhase } from 'models/Execution/enums'; +import { TaskVersionDetailsLink } from 'components/Entities/VersionDetails/VersionDetailsLink'; +import { Identifier } from 'models/Common/types'; import { TaskExecutionsList } from '../../TaskExecutionsList/TaskExecutionsList'; import { NodeExecutionInputs } from './NodeExecutionInputs'; import { NodeExecutionOutputs } from './NodeExecutionOutputs'; @@ -72,6 +74,7 @@ export const NodeExecutionTabs: React.FC<{ case tabIds.task: { tabContent = taskTemplate ? ( + ) : null; diff --git a/packages/zapp/console/src/components/Executions/Tables/WorkflowVersionsTable.tsx b/packages/zapp/console/src/components/Executions/Tables/EntityVersionsTable.tsx similarity index 59% rename from packages/zapp/console/src/components/Executions/Tables/WorkflowVersionsTable.tsx rename to packages/zapp/console/src/components/Executions/Tables/EntityVersionsTable.tsx index cfb1cc20d..64e96baff 100644 --- a/packages/zapp/console/src/components/Executions/Tables/WorkflowVersionsTable.tsx +++ b/packages/zapp/console/src/components/Executions/Tables/EntityVersionsTable.tsx @@ -1,25 +1,27 @@ import classnames from 'classnames'; -import { noWorkflowVersionsFoundString } from 'common/constants'; +import { noVersionsFoundString } from 'common/constants'; import { useCommonStyles } from 'components/common/styles'; import { ListProps } from 'components/common/types'; import PaginatedDataList from 'components/Tables/PaginatedDataList'; import { Workflow } from 'models/Workflow/types'; -import { Identifier } from 'models/Common/types'; +import { Identifier, ResourceType } from 'models/Common/types'; import * as React from 'react'; import { useParams } from 'react-router'; import { history } from 'routes/history'; import { Routes } from 'routes/routes'; +import { entityStrings } from 'components/Entities/constants'; import { useExecutionTableStyles } from './styles'; import { useWorkflowExecutionsTableState } from './useWorkflowExecutionTableState'; import { useWorkflowVersionsTableColumns } from './useWorkflowVersionsTableColumns'; import { WorkflowVersionRow } from './WorkflowVersionRow'; -interface WorkflowVersionsTableProps extends ListProps { +interface EntityVersionsTableProps extends ListProps { versionView?: boolean; + resourceType: ResourceType; } -interface WorkflowVersionRouteParams { - workflowVersion: string; +interface EntityVersionRouteParams { + entityVersion: string; } /** @@ -27,21 +29,27 @@ interface WorkflowVersionRouteParams { * @param props * @constructor */ -export const WorkflowVersionsTable: React.FC = (props) => { - const { value: workflows, versionView } = props; +export const EntityVersionsTable: React.FC = (props) => { + const { value: versions, versionView, resourceType } = props; const state = useWorkflowExecutionsTableState(); const commonStyles = useCommonStyles(); const tableStyles = useExecutionTableStyles(); - const { workflowVersion } = useParams(); + const { entityVersion } = useParams(); const columns = useWorkflowVersionsTableColumns(); - const retry = () => props.fetch(); - const handleClickRow = React.useCallback( - ({ project, name, domain, version }: Identifier) => + ({ project, name, domain, version, resourceType = ResourceType.UNSPECIFIED }: Identifier) => () => { - history.push(Routes.WorkflowVersionDetails.makeUrl(project, domain, name, version)); + history.push( + Routes.EntityVersionDetails.makeUrl( + project, + domain, + name, + entityStrings[resourceType], + version, + ), + ); }, [], ); @@ -52,8 +60,8 @@ export const WorkflowVersionsTable: React.FC = (prop workflow={row} state={state} versionView={versionView} - onClick={versionView ? handleClickRow(row.id) : undefined} - isChecked={workflowVersion === row.id.version} + onClick={handleClickRow({ ...row.id, resourceType })} + isChecked={entityVersion === row.id.version} key={`workflow-version-row-${row.id.version}`} /> ); @@ -62,11 +70,11 @@ export const WorkflowVersionsTable: React.FC = (prop
diff --git a/packages/zapp/console/src/components/Theme/muiTheme.ts b/packages/zapp/console/src/components/Theme/muiTheme.ts index f959163dd..44ab78f9b 100644 --- a/packages/zapp/console/src/components/Theme/muiTheme.ts +++ b/packages/zapp/console/src/components/Theme/muiTheme.ts @@ -71,9 +71,14 @@ const theme = createMuiTheme({ fontFamily: bodyFontFamily, }, h3: { - fontSize: '1.25rem', + fontSize: '16px', fontWeight: 'bold', - lineHeight: 1.35, + lineHeight: '22px', + }, + h4: { + fontSize: '14px', + fontWeight: 'bold', + lineHeight: '20px', }, h6: { fontSize: '.875rem', diff --git a/packages/zapp/console/src/components/common/BarChart.tsx b/packages/zapp/console/src/components/common/BarChart.tsx index 6e6768af5..380e333a3 100644 --- a/packages/zapp/console/src/components/common/BarChart.tsx +++ b/packages/zapp/console/src/components/common/BarChart.tsx @@ -146,7 +146,7 @@ export const BarChart: React.FC = ({ return (
- + {title}
diff --git a/packages/zapp/console/src/components/common/DumpJSON.tsx b/packages/zapp/console/src/components/common/DumpJSON.tsx index 57349eefb..9fc0676ef 100644 --- a/packages/zapp/console/src/components/common/DumpJSON.tsx +++ b/packages/zapp/console/src/components/common/DumpJSON.tsx @@ -2,7 +2,5 @@ import * as React from 'react'; import { ReactJsonViewWrapper } from 'components/common/ReactJsonView'; export const DumpJSON: React.FC<{ value: any }> = ({ value }) => { - return ( - - ); + return ; }; diff --git a/packages/zapp/console/src/components/common/NewTargetLink.tsx b/packages/zapp/console/src/components/common/NewTargetLink.tsx index 176a7f2db..df2cbfe1a 100644 --- a/packages/zapp/console/src/components/common/NewTargetLink.tsx +++ b/packages/zapp/console/src/components/common/NewTargetLink.tsx @@ -27,22 +27,21 @@ export const NewTargetLink: React.FC = (props) => { const commonStyles = useCommonStyles(); const styles = useStyles(); - const link = ( + const icon = external ? : null; + + return ( - {children} + {inline ? ( + + {children} + {icon} + + ) : ( +
+ {children} + {icon} +
+ )} ); - - const icon = external ? : null; - return inline ? ( - - {link} - {icon} - - ) : ( -
- {link} - {icon} -
- ); }; diff --git a/packages/zapp/console/src/components/common/ReactJsonView.tsx b/packages/zapp/console/src/components/common/ReactJsonView.tsx index ea7e9d1a1..c90618ab0 100644 --- a/packages/zapp/console/src/components/common/ReactJsonView.tsx +++ b/packages/zapp/console/src/components/common/ReactJsonView.tsx @@ -32,6 +32,9 @@ const useStyles = makeStyles((theme: Theme) => ({ '& .object-key': { color: `${theme.palette.grey[500]} !important`, }, + '& .node-ellipsis': { + color: `${theme.palette.grey[500]} !important`, + }, }, })); diff --git a/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx b/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx index 319200494..ca4a1fbf6 100644 --- a/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx +++ b/packages/zapp/console/src/components/common/test/NewTargetLink.spec.tsx @@ -14,9 +14,8 @@ const renderExternalLink = () => ); test('renders a blank target link', () => { - const { getByText } = renderLink(); - const anchor = getByText(linkText); - expect(anchor).toHaveAttribute('target', '_blank'); + const { container } = renderLink(); + expect(container.firstElementChild).toHaveAttribute('target', '_blank'); }); test('renders with additional icon for external links', () => { diff --git a/packages/zapp/console/src/components/hooks/Entity/constants.ts b/packages/zapp/console/src/components/hooks/Entity/constants.ts new file mode 100644 index 000000000..6086866a3 --- /dev/null +++ b/packages/zapp/console/src/components/hooks/Entity/constants.ts @@ -0,0 +1,41 @@ +import { ResourceType } from 'models/Common/types'; +import { listTasks } from 'models/Task/api'; +import { listWorkflows } from 'models/Workflow/api'; +import { listLaunchPlans } from 'models/Launch/api'; +import { Workflow } from 'models/Workflow/types'; +import { Task } from 'models/Task/types'; +import { LaunchPlan } from 'models/Launch/types'; + +interface EntityFunctions { + description?: boolean; + executions?: boolean; + launch?: boolean; + listEntity?: any; +} + +export type EntityType = Workflow | Task | LaunchPlan; + +const unspecifiedFn = () => { + throw new Error('Unspecified Resourcetype.'); +}; +const unimplementedFn = () => { + throw new Error('Method not implemented.'); +}; + +export const entityFunctions: { [k in ResourceType]: EntityFunctions } = { + [ResourceType.DATASET]: { + listEntity: unimplementedFn, + }, + [ResourceType.LAUNCH_PLAN]: { + listEntity: listLaunchPlans, + }, + [ResourceType.TASK]: { + listEntity: listTasks, + }, + [ResourceType.UNSPECIFIED]: { + listEntity: unspecifiedFn, + }, + [ResourceType.WORKFLOW]: { + listEntity: listWorkflows, + }, +}; diff --git a/packages/zapp/console/src/components/hooks/Entity/useEntityVersions.ts b/packages/zapp/console/src/components/hooks/Entity/useEntityVersions.ts new file mode 100644 index 000000000..df2eb9ee3 --- /dev/null +++ b/packages/zapp/console/src/components/hooks/Entity/useEntityVersions.ts @@ -0,0 +1,20 @@ +import { IdentifierScope, Identifier, ResourceIdentifier } from 'models/Common/types'; +import { RequestConfig } from 'models/AdminEntity/types'; +import { entityStrings } from 'components/Entities/constants'; +import { usePagination } from '../usePagination'; +import { EntityType, entityFunctions } from './constants'; + +/** + * A hook for fetching a paginated list of entity versions. + * @param scope + * @param config + */ +export function useEntityVersions(scope: IdentifierScope, config: RequestConfig) { + const id = scope as ResourceIdentifier; + const listEntity = entityFunctions[id.resourceType]?.listEntity; + + return usePagination( + { ...config, cacheItems: true, fetchArg: scope }, + listEntity, + ); +} diff --git a/packages/zapp/console/src/components/hooks/useTask.ts b/packages/zapp/console/src/components/hooks/useTask.ts index 022cbf076..d602ad29c 100644 --- a/packages/zapp/console/src/components/hooks/useTask.ts +++ b/packages/zapp/console/src/components/hooks/useTask.ts @@ -18,7 +18,7 @@ export function useTaskTemplate(id: Identifier): FetchableData { useCache: true, debugName: 'TaskTemplate', defaultValue: {} as TaskTemplate, - doFetch: async (taskId) => (await getTask(taskId)).closure.compiledTask.template, + doFetch: async (taskId) => (await getTask(taskId)) as TaskTemplate, }, id, ); diff --git a/packages/zapp/console/src/components/hooks/useWorkflowVersions.ts b/packages/zapp/console/src/components/hooks/useWorkflowVersions.ts deleted file mode 100644 index a356ee2b0..000000000 --- a/packages/zapp/console/src/components/hooks/useWorkflowVersions.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { IdentifierScope } from 'models/Common/types'; -import { RequestConfig } from 'models/AdminEntity/types'; -import { listWorkflows } from 'models/Workflow/api'; -import { Workflow } from 'models/Workflow/types'; -import { usePagination } from './usePagination'; - -/** - * A hook for fetching a paginated list of workflow versions. - * @param scope - * @param config - */ -export function useWorkflowVersions(scope: IdentifierScope, config: RequestConfig) { - return usePagination( - { ...config, cacheItems: true, fetchArg: scope }, - listWorkflows, - ); -} diff --git a/packages/zapp/console/src/models/Task/types.ts b/packages/zapp/console/src/models/Task/types.ts index bfccb67d0..e4d53af75 100644 --- a/packages/zapp/console/src/models/Task/types.ts +++ b/packages/zapp/console/src/models/Task/types.ts @@ -26,6 +26,7 @@ export interface TaskTemplate extends Core.ITaskTemplate { id: Identifier; interface?: TypedInterface; metadata?: TaskMetadata; + closure?: TaskClosure; type: string; } diff --git a/packages/zapp/console/src/models/__mocks__/taskData.ts b/packages/zapp/console/src/models/__mocks__/taskData.ts index 2f4d1e02c..e044f9a66 100644 --- a/packages/zapp/console/src/models/__mocks__/taskData.ts +++ b/packages/zapp/console/src/models/__mocks__/taskData.ts @@ -1,8 +1,9 @@ import { getCacheKey } from 'components/Cache/utils'; import { Admin } from 'flyteidl'; import { cloneDeep } from 'lodash'; -import { Identifier } from 'models/Common/types'; +import { Identifier, ResourceType } from 'models/Common/types'; import { Task, TaskClosure } from 'models/Task/types'; +import { testDomain, testProject } from 'mocks/data/constants'; import * as simpleClosure from './simpleTaskClosure.json'; const decodedClosure = Admin.TaskClosure.create( @@ -12,8 +13,9 @@ const decodedClosure = Admin.TaskClosure.create( const taskId: (name: string, version: string) => Identifier = (name, version) => ({ name, version, - project: 'flyte', - domain: 'development', + project: testProject, + domain: testDomain, + resourceType: ResourceType.TASK, }); export const createMockTask: (name: string, version?: string) => Task = ( diff --git a/packages/zapp/console/src/models/__mocks__/workflowData.ts b/packages/zapp/console/src/models/__mocks__/workflowData.ts index 6f09c6b38..a7d5ad264 100644 --- a/packages/zapp/console/src/models/__mocks__/workflowData.ts +++ b/packages/zapp/console/src/models/__mocks__/workflowData.ts @@ -1,8 +1,9 @@ import { getCacheKey } from 'components/Cache/utils'; import { Admin } from 'flyteidl'; import { cloneDeep } from 'lodash'; -import { Identifier } from 'models/Common/types'; +import { Identifier, ResourceType } from 'models/Common/types'; import { Workflow, WorkflowClosure } from 'models/Workflow/types'; +import { testDomain, testProject } from 'mocks/data/constants'; import * as simpleClosure from './simpleWorkflowClosure.json'; const decodedClosure = Admin.WorkflowClosure.create( @@ -12,8 +13,9 @@ const decodedClosure = Admin.WorkflowClosure.create( const workflowId: (name: string, version: string) => Identifier = (name, version) => ({ name, version, - project: 'flyte', - domain: 'development', + project: testProject, + domain: testDomain, + resourceType: ResourceType.WORKFLOW, }); export const createMockWorkflow: (name: string, version?: string) => Workflow = ( diff --git a/packages/zapp/console/src/routes/ApplicationRouter.tsx b/packages/zapp/console/src/routes/ApplicationRouter.tsx index 6840edaa3..0336daf18 100644 --- a/packages/zapp/console/src/routes/ApplicationRouter.tsx +++ b/packages/zapp/console/src/routes/ApplicationRouter.tsx @@ -36,8 +36,8 @@ export const ApplicationRouter: React.FC = () => ( component={withSideNavigation(components.workflowDetails)} /> - makeProjectDomainBoundPath(project, domain, `/workflows/${workflowName}/version/${version}`), - path: `${projectDomainBasePath}/workflows/:workflowName/version/:workflowVersion`, + // Entity Version Details + static EntityVersionDetails = { + makeUrl: ( + project: string, + domain: string, + entityName: string, + entityType: string, + version: string, + ) => + makeProjectDomainBoundPath( + project, + domain, + `/${entityType}/${entityName}/version/${version}`, + ), + path: `${projectDomainBasePath}/:entityType/:entityName/version/:entityVersion`, }; // Tasks From 821299e7a678e5766940f24dfce0a12c42849ae2 Mon Sep 17 00:00:00 2001 From: apTalya <99441958+apTalya@users.noreply.github.com> Date: Wed, 18 May 2022 18:35:23 -0700 Subject: [PATCH 29/93] chore: update Readme with python note + package version update (#486) Signed-off-by: Nastya Rusina Co-authored-by: Nastya Rusina --- README.md | 18 ++++++++++++++++++ package.json | 4 ++-- packages/zapp/console/package.json | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 94feea813..0b35c4583 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,24 @@ For help with installing dependencies look into 4. Explore your local copy at `http://localhost:3000` +### Note: Python errors with OSX + +Recently OSX (12.3) removed python 2.7 from default installation and this can cause build errors for some users depending on it's setup. In this repository you can experience `env: python: No such file or directory` error from gyp ([node-gyp](https://github.com/nodejs/node-gyp)). +The easiest way to fix it: + +- Install the XCode Command Line Tools standalone by running `xcode-select --install` in the terminal + +OR + +``` bash + brew install python # install python with brew + which python # check if python path is properly defined + # if path not defined + where python3 + # Take the version and location from above and run this command (replacing `/usr/bin/python3` with the location of your python instalation). This will symlink python to python3 + ln -s /usr/bin/python3 /usr/local/bin/python +``` + ### Environment Variables * `ADMIN_API_URL` (default: [window.location.origin](https://developer.mozilla.org/en-US/docs/Web/API/Window/location>)) diff --git a/package.json b/package.json index 694d1008c..1567e0af1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "flyteconsole", - "version": "1.1.0-rc1", + "version": "1.1.0", "private": true, "description": "The web UI for the Flyte platform", "repository": { @@ -72,4 +72,4 @@ "@babel/preset-react": "~7.16.7", "@babel/preset-typescript": "~7.16.7" } -} \ No newline at end of file +} diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 678cb3552..e34a1d523 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -1,6 +1,6 @@ { "name": "@flyteconsole/client-app", - "version": "1.1.0-rc1", + "version": "1.1.0", "description": "The web UI for the Flyte platform", "repository": { "type": "git", From c25daea08feee5243c5c53484dd280f83fc0a487 Mon Sep 17 00:00:00 2001 From: Yuvraj Date: Fri, 20 May 2022 22:38:34 +0530 Subject: [PATCH 30/93] hotfix ci pipeline (#487) * hotfix ci pipeline Signed-off-by: Yuvraj * more changes Signed-off-by: Yuvraj Co-authored-by: Yuvraj --- .github/workflows/checks.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index c611c20d7..d448fe901 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -12,14 +12,14 @@ on: - devmain jobs: - extraxt_branch: + extract_branch: runs-on: ubuntu-latest outputs: - currentTag: ${{ steps.extract_branch.outputs.extract_branch }} + branch: ${{ steps.extract_branch.outputs.branch }} steps: - name: Extract branch name shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + run: echo "::set-output name=branch::$(echo ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}})" id: extract_branch unit_tests_with_coverage: @@ -66,7 +66,7 @@ jobs: release: name: Generate Release if: ${{ (github.event_name != 'pull_request') && (needs.extract_branch.outputs.branch == 'master') }} - needs: [unit_tests_with_coverage, lint_project, build_docker_image, extraxt_branch] + needs: [unit_tests_with_coverage, lint_project, build_docker_image, extract_branch] runs-on: ubuntu-latest steps: - name: Checkout From 747b10047ef65fa5ff7abfa199720880ef588fba Mon Sep 17 00:00:00 2001 From: olga-union <101579322+olga-union@users.noreply.github.com> Date: Wed, 18 May 2022 15:47:05 -0500 Subject: [PATCH 31/93] [Mapping][TaskInfo] V.2 - Update Task details to allow check information for child task execution (#467) --- .../ExecutionMetadataExtra.tsx | 14 ++- .../ExecutionWorkflowGraph.tsx | 17 +++- .../NodeExecutionDetailsPanelContent.tsx | 33 +++---- .../NodeExecutionTabs/index.tsx | 25 ++++-- .../NodeExecutionTabs/test/index.test.tsx | 21 +++-- .../Executions/ExecutionStatusBadge.tsx | 2 +- .../MapTaskExecutionDetails.tsx | 45 ++++++++++ .../MapTaskExecutionListItem.tsx | 31 ++++--- .../TaskExecutionDetails.tsx | 24 +++--- .../TaskExecutionLogsCard.tsx | 80 +++++++++++++++++ .../TaskExecutionsList/TaskExecutionsList.tsx | 19 ++++- .../TaskExecutionsListItem.tsx | 65 +++----------- .../test/MapTaskExecutionDetails.test.tsx | 32 +++++++ .../test/TaskExecutionDetails.test.tsx | 52 ++++++++++++ .../test/TaskExecutionLogsCard.test.tsx | 47 ++++++++++ .../test/TaskExecutionsList.test.tsx | 2 +- .../test/TaskExecutionsListItem.test.tsx | 17 ++++ .../TaskExecutionsList/test/utils.spec.ts | 85 ++++++++++++++++++- .../Executions/TaskExecutionsList/utils.ts | 63 +++++++++++++- .../WorkflowGraph/WorkflowGraph.tsx | 13 ++- .../MapTaskStatusInfo.stories.tsx | 16 ++-- .../MapTaskStatusInfo.tsx | 32 +++++-- .../MapTaskExecutionsList/TaskNameList.tsx | 62 ++++++++++++++ .../{ => test}/MapTaskStatusInfo.test.tsx | 26 +++++- .../test/TaskNameList.test.tsx | 59 +++++++++++++ .../components/common/PanelSection/index.tsx | 2 +- .../src/components/common/SectionHeader.tsx | 5 +- .../ReactFlow/ReactFlowGraphComponent.tsx | 9 +- .../ReactFlow/customNodeComponents.tsx | 10 ++- .../ReactFlow/transformDAGToReactFlowV2.tsx | 7 +- .../components/flytegraph/ReactFlow/utils.tsx | 4 +- .../console/src/models/Execution/types.ts | 3 + 32 files changed, 759 insertions(+), 163 deletions(-) create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionDetails.tsx create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionLogsCard.tsx create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/test/MapTaskExecutionDetails.test.tsx create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionDetails.test.tsx create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionLogsCard.test.tsx create mode 100644 packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsListItem.test.tsx create mode 100644 packages/zapp/console/src/components/common/MapTaskExecutionsList/TaskNameList.tsx rename packages/zapp/console/src/components/common/MapTaskExecutionsList/{ => test}/MapTaskStatusInfo.test.tsx (64%) create mode 100644 packages/zapp/console/src/components/common/MapTaskExecutionsList/test/TaskNameList.test.tsx diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx index 6d2d847b8..9c0d72054 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionMetadataExtra.tsx @@ -9,14 +9,12 @@ import { LaunchPlanSpec } from 'models/Launch/types'; import { dashedValueString } from 'common/constants'; import { ExecutionMetadataLabels } from './constants'; -const useStyles = makeStyles((theme: Theme) => { - return { - detailItem: { - flexShrink: 0, - marginLeft: theme.spacing(4), - }, - }; -}); +const useStyles = makeStyles((theme: Theme) => ({ + detailItem: { + flexShrink: 0, + marginLeft: theme.spacing(4), + }, +})); interface DetailItem { className?: string; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx index 379d850ce..4d1502028 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx @@ -9,7 +9,7 @@ import { ExternalResource, LogsByPhase, NodeExecution } from 'models/Execution/t import { endNodeId, startNodeId } from 'models/Node/constants'; import { Workflow, WorkflowId } from 'models/Workflow/types'; import * as React from 'react'; -import { useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { useQuery, useQueryClient } from 'react-query'; import { NodeExecutionsContext } from '../contexts'; import { getGroupedLogs } from '../TaskExecutionsList/utils'; @@ -72,14 +72,25 @@ export const ExecutionWorkflowGraph: React.FC = ({ } : null; - const onCloseDetailsPanel = () => setSelectedNodes([]); + const onCloseDetailsPanel = () => { + setSelectedPhase(undefined); + setIsDetailsTabClosed(true); + setSelectedNodes([]); + }; const [selectedPhase, setSelectedPhase] = useState(undefined); + const [isDetailsTabClosed, setIsDetailsTabClosed] = useState(!selectedExecution); + + useEffect(() => { + setIsDetailsTabClosed(!selectedExecution); + }, [selectedExecution]); const renderGraph = (workflow: Workflow) => ( @@ -92,7 +103,7 @@ export const ExecutionWorkflowGraph: React.FC = ({ {renderGraph} - + {selectedExecution && ( (false); const [dag, setDag] = useState(null); const [details, setDetails] = useState(); - const [shouldShowTaskDetails, setShouldShowTaskDetails] = useState(false); // TODO to be reused in https://github.com/flyteorg/flyteconsole/issues/312 + const [selectedTaskExecution, setSelectedTaskExecution] = useState(null); const isMounted = useRef(false); useEffect(() => { @@ -267,6 +272,10 @@ export const NodeExecutionDetailsPanelContent: React.FC { + setSelectedTaskExecution(null); + }, [nodeExecutionId, phase]); + const nodeExecution = nodeExecutionQuery.data; const getWorkflowDag = async () => { @@ -297,24 +306,17 @@ export const NodeExecutionDetailsPanelContent: React.FC { - setShouldShowTaskDetails(false); + setSelectedTaskExecution(null); }; const headerTitle = useMemo(() => { - // TODO to be reused in https://github.com/flyteorg/flyteconsole/issues/312 - // // eslint-disable-next-line no-useless-escape - // const regex = /\-([\w\s-]+)\-/; // extract string between first and last dash - - // const mapTaskHeader = `${mapTask?.[0].externalId?.match(regex)?.[1]} of ${ - // nodeExecutionId.nodeId - // }`; - // const header = shouldShowTaskDetails ? mapTaskHeader : nodeExecutionId.nodeId; - const header = nodeExecutionId.nodeId; + const mapTaskHeader = `${selectedTaskExecution?.taskIndex} of ${nodeExecutionId.nodeId}`; + const header = selectedTaskExecution ? mapTaskHeader : nodeExecutionId.nodeId; return (
- {shouldShowTaskDetails && ( + {!!selectedTaskExecution && ( @@ -326,7 +328,7 @@ export const NodeExecutionDetailsPanelContent: React.FC ); - }, [nodeExecutionId, shouldShowTaskDetails]); + }, [nodeExecutionId, selectedTaskExecution]); const isRunningPhase = useMemo(() => { return ( @@ -370,9 +372,10 @@ export const NodeExecutionDetailsPanelContent: React.FC ) : null; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx index 0fceb1331..91d6e119d 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/index.tsx @@ -1,13 +1,14 @@ import * as React from 'react'; import { makeStyles } from '@material-ui/core/styles'; import { Tab, Tabs } from '@material-ui/core'; -import { NodeExecution } from 'models/Execution/types'; +import { MapTaskExecution, NodeExecution } from 'models/Execution/types'; import { TaskTemplate } from 'models/Task/types'; import { useTabState } from 'components/hooks/useTabState'; import { PanelSection } from 'components/common/PanelSection'; import { DumpJSON } from 'components/common/DumpJSON'; import { isMapTaskType } from 'models/Task/utils'; import { TaskExecutionPhase } from 'models/Execution/enums'; +import { MapTaskExecutionDetails } from 'components/Executions/TaskExecutionsList/MapTaskExecutionDetails'; import { TaskVersionDetailsLink } from 'components/Entities/VersionDetails/VersionDetailsLink'; import { Identifier } from 'models/Common/types'; import { TaskExecutionsList } from '../../TaskExecutionsList/TaskExecutionsList'; @@ -42,10 +43,11 @@ const defaultTab = tabIds.executions; export const NodeExecutionTabs: React.FC<{ nodeExecution: NodeExecution; - shouldShowTaskDetails: boolean; + selectedTaskExecution: MapTaskExecution | null; + onTaskSelected: (val: MapTaskExecution) => void; phase?: TaskExecutionPhase; taskTemplate?: TaskTemplate | null; -}> = ({ nodeExecution, shouldShowTaskDetails, taskTemplate, phase }) => { +}> = ({ nodeExecution, selectedTaskExecution, onTaskSelected, taskTemplate, phase }) => { const styles = useStyles(); const tabState = useTabState(tabIds, defaultTab); @@ -60,7 +62,15 @@ export const NodeExecutionTabs: React.FC<{ let tabContent: JSX.Element | null = null; switch (tabState.value) { case tabIds.executions: { - tabContent = ; + tabContent = selectedTaskExecution ? ( + + ) : ( + + ); break; } case tabIds.inputs: { @@ -82,11 +92,8 @@ export const NodeExecutionTabs: React.FC<{ } } - const executionLabel = isMapTaskType(taskTemplate?.type) - ? shouldShowTaskDetails - ? 'Execution' - : 'Map Execution' - : 'Executions'; + const executionLabel = + isMapTaskType(taskTemplate?.type) && !selectedTaskExecution ? 'Map Execution' : 'Executions'; return ( <> diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx index 1e5de265f..944fa6f26 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionTabs/test/index.test.tsx @@ -6,6 +6,7 @@ import { createMockNodeExecutions } from 'models/Execution/__mocks__/mockNodeExe import { TaskType } from 'models/Task/constants'; import { createMockWorkflow } from 'models/__mocks__/workflowData'; import * as React from 'react'; +import { mockExecution as mockTaskExecution } from 'models/Execution/__mocks__/mockTaskExecutionsData'; import { NodeExecutionTabs } from '../index'; const getMockNodeExecution = () => createMockNodeExecutions(1).executions[0]; @@ -20,26 +21,28 @@ describe('NodeExecutionTabs', () => { const mockUseTabState = useTabState as jest.Mock; mockUseTabState.mockReturnValue({ onChange: jest.fn(), value: 'executions' }); describe('with map tasks', () => { - it('should display proper tab name when it was provided and shouldShow is TRUE', async () => { + it('should display proper tab name when it was provided and shouldShow is TRUE', () => { const { queryByText, queryAllByRole } = render( , ); expect(queryAllByRole('tab')).toHaveLength(4); - expect(queryByText('Execution')).toBeInTheDocument(); + expect(queryByText('Executions')).toBeInTheDocument(); }); - it('should display proper tab name when it was provided and shouldShow is FALSE', async () => { + it('should display proper tab name when it was provided and shouldShow is FALSE', () => { const { queryByText, queryAllByRole } = render( , ); @@ -49,9 +52,13 @@ describe('NodeExecutionTabs', () => { }); describe('without map tasks', () => { - it('should display proper tab name when mapTask was not provided', async () => { + it('should display proper tab name when mapTask was not provided', () => { const { queryAllByRole, queryByText } = render( - , + , ); expect(queryAllByRole('tab')).toHaveLength(3); diff --git a/packages/zapp/console/src/components/Executions/ExecutionStatusBadge.tsx b/packages/zapp/console/src/components/Executions/ExecutionStatusBadge.tsx index f33e3b0aa..f6725371f 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionStatusBadge.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionStatusBadge.tsx @@ -64,7 +64,7 @@ type ExecutionStatusBadgeProps = | NodeExecutionStatusBadgeProps | TaskExecutionStatusBadgeProps; -function getPhaseConstants( +export function getPhaseConstants( type: 'workflow' | 'node' | 'task', phase: WorkflowExecutionPhase | NodeExecutionPhase | TaskExecutionPhase, ) { diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionDetails.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionDetails.tsx new file mode 100644 index 000000000..cd83a6317 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionDetails.tsx @@ -0,0 +1,45 @@ +import * as React from 'react'; +import { MapTaskExecution } from 'models/Execution/types'; +import { TaskExecutionPhase } from 'models/Execution/enums'; +import { PanelSection } from 'components/common/PanelSection'; +import { formatRetryAttempt, getTaskRetryAtemptsForIndex } from './utils'; +import { TaskExecutionLogsCard } from './TaskExecutionLogsCard'; + +interface MapTaskExecutionDetailsProps { + taskExecution: MapTaskExecution; +} + +/** Renders an individual map task execution attempts as part of a list */ +export const MapTaskExecutionDetails: React.FC = ({ + taskExecution, +}) => { + const { + closure: { metadata }, + taskIndex, + } = taskExecution; + + const filteredResources = getTaskRetryAtemptsForIndex( + metadata?.externalResources ?? [], + taskIndex, + ); + + return ( + + {filteredResources.map((item) => { + const attempt = item.retryAttempt ?? 0; + const headerText = formatRetryAttempt(attempt); + + return ( +
+ +
+ ); + })} +
+ ); +}; diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx index 3fdf143c2..679f3f5d8 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/MapTaskExecutionListItem.tsx @@ -5,7 +5,7 @@ import classnames from 'classnames'; import { PanelSection } from 'components/common/PanelSection'; import { useCommonStyles } from 'components/common/styles'; import { TaskExecutionPhase } from 'models/Execution/enums'; -import { TaskExecution } from 'models/Execution/types'; +import { MapTaskExecution, TaskExecution } from 'models/Execution/types'; import { MapTaskStatusInfo } from 'components/common/MapTaskExecutionsList/MapTaskStatusInfo'; import { TaskExecutionDetails } from './TaskExecutionDetails'; import { TaskExecutionError } from './TaskExecutionError'; @@ -34,6 +34,7 @@ const useStyles = makeStyles((theme: Theme) => ({ interface MapTaskExecutionsListItemProps { taskExecution: TaskExecution; showAttempts: boolean; + onTaskSelected: (val: MapTaskExecution) => void; selectedPhase?: TaskExecutionPhase; } @@ -41,19 +42,23 @@ interface MapTaskExecutionsListItemProps { export const MapTaskExecutionsListItem: React.FC = ({ taskExecution, showAttempts, + onTaskSelected, selectedPhase, }) => { const commonStyles = useCommonStyles(); const styles = useStyles(); - const { closure } = taskExecution; - const taskHasStarted = closure.phase >= TaskExecutionPhase.QUEUED; - const headerText = formatRetryAttempt(taskExecution.id.retryAttempt); - const logsByPhase = getGroupedLogs(closure.metadata?.externalResources ?? []); + const { + closure: { error, startedAt, updatedAt, duration, phase, logs, metadata }, + id: { retryAttempt }, + } = taskExecution; + const taskHasStarted = phase >= TaskExecutionPhase.QUEUED; + const headerText = formatRetryAttempt(retryAttempt); + const logsByPhase = getGroupedLogs(metadata?.externalResources ?? []); return ( - {/* Attempts header is ahown only if there is more than one attempt */} + {/* Attempts header is shown only if there is more than one attempt */} {showAttempts ? (
@@ -64,16 +69,16 @@ export const MapTaskExecutionsListItem: React.FC
) : null} {/* Error info is shown only if there is an error present for this map task */} - {closure.error ? ( + {error ? (
- +
) : null} {/* If main map task has log attached - show it here */} - {closure.logs && closure.logs.length > 0 ? ( + {logs && logs.length > 0 ? (
- +
) : null} {/* child/array logs separated by subtasks phase */} @@ -85,10 +90,12 @@ export const MapTaskExecutionsListItem: React.FC const key = `${id}-${phase}`; return ( ); })} @@ -96,7 +103,7 @@ export const MapTaskExecutionsListItem: React.FC {/* If map task is actively started - show 'started' and 'run time' details */} {taskHasStarted && (
- +
)}
diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx index 76b22c71f..80d323388 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionDetails.tsx @@ -2,40 +2,38 @@ import { unknownValueString } from 'common/constants'; import { dateWithFromNow, protobufDurationToHMS } from 'common/formatters'; import { timestampToDate } from 'common/utils'; import { DetailsGroup } from 'components/common/DetailsGroup'; -import { TaskExecution } from 'models/Execution/types'; import * as React from 'react'; +import { Protobuf } from 'flyteidl'; /** Renders the less important details for a `TaskExecution` as a `DetailsGroup` */ export const TaskExecutionDetails: React.FC<{ - taskExecution: TaskExecution; -}> = ({ taskExecution }) => { - const labelWidthGridUnits = taskExecution.closure.startedAt ? 7 : 10; + startedAt?: Protobuf.ITimestamp; + updatedAt?: Protobuf.ITimestamp | null; + duration?: Protobuf.Duration; +}> = ({ startedAt, duration, updatedAt }) => { + const labelWidthGridUnits = startedAt ? 7 : 10; const detailItems = React.useMemo(() => { - if (taskExecution.closure.startedAt) { + if (startedAt) { return [ { name: 'started', - content: dateWithFromNow(timestampToDate(taskExecution.closure.startedAt)), + content: dateWithFromNow(timestampToDate(startedAt)), }, { name: 'run time', - content: taskExecution.closure.duration - ? protobufDurationToHMS(taskExecution.closure.duration) - : unknownValueString, + content: duration ? protobufDurationToHMS(duration) : unknownValueString, }, ]; } else { return [ { name: 'last updated', - content: taskExecution.closure.updatedAt - ? dateWithFromNow(timestampToDate(taskExecution.closure.updatedAt)) - : unknownValueString, + content: updatedAt ? dateWithFromNow(timestampToDate(updatedAt)) : unknownValueString, }, ]; } - }, [taskExecution]); + }, [startedAt, duration, updatedAt]); return (
diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionLogsCard.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionLogsCard.tsx new file mode 100644 index 000000000..3f4f14b5f --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionLogsCard.tsx @@ -0,0 +1,80 @@ +import * as React from 'react'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import Typography from '@material-ui/core/Typography'; +import classnames from 'classnames'; +import { useCommonStyles } from 'components/common/styles'; +import { TaskExecutionPhase } from 'models/Execution/enums'; +import { TaskExecution } from 'models/Execution/types'; +import { Core } from 'flyteidl'; +import { ExecutionStatusBadge } from '../ExecutionStatusBadge'; +import { TaskExecutionDetails } from './TaskExecutionDetails'; +import { TaskExecutionError } from './TaskExecutionError'; +import { TaskExecutionLogs } from './TaskExecutionLogs'; + +const useStyles = makeStyles((theme: Theme) => ({ + detailsLink: { + fontWeight: 'normal', + }, + header: { + marginBottom: theme.spacing(1), + }, + title: { + marginBottom: theme.spacing(1), + }, + showDetailsButton: { + marginTop: theme.spacing(1), + }, + section: { + marginBottom: theme.spacing(2), + }, +})); + +interface TaskExecutionLogsCardProps { + taskExecution: TaskExecution; + headerText: string; + phase: TaskExecutionPhase; + logs: Core.ITaskLog[]; +} + +export const TaskExecutionLogsCard: React.FC = ({ + taskExecution, + headerText, + phase, + logs, +}) => { + const commonStyles = useCommonStyles(); + const styles = useStyles(); + + const { + closure: { error, startedAt, updatedAt, duration }, + } = taskExecution; + const taskHasStarted = phase >= TaskExecutionPhase.QUEUED; + + return ( + <> +
+
+ + {headerText} + +
+ +
+ {!!error && ( +
+ +
+ )} + {taskHasStarted && ( + <> +
+ +
+
+ +
+ + )} + + ); +}; diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx index ef354206c..f59c27f06 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx @@ -3,7 +3,7 @@ import { makeStyles, Theme } from '@material-ui/core/styles'; import { noExecutionsFoundString } from 'common/constants'; import { NonIdealState } from 'components/common/NonIdealState'; import { WaitForData } from 'components/common/WaitForData'; -import { NodeExecution, TaskExecution } from 'models/Execution/types'; +import { MapTaskExecution, NodeExecution, TaskExecution } from 'models/Execution/types'; import { isMapTaskType } from 'models/Task/utils'; import { TaskExecutionPhase } from 'models/Execution/enums'; import { useTaskExecutions, useTaskExecutionsRefresher } from '../useTaskExecutions'; @@ -19,13 +19,15 @@ const useStyles = makeStyles((theme: Theme) => ({ interface TaskExecutionsListProps { nodeExecution: NodeExecution; + onTaskSelected: (val: MapTaskExecution) => void; phase?: TaskExecutionPhase; } export const TaskExecutionsListContent: React.FC<{ taskExecutions: TaskExecution[]; + onTaskSelected: (val: MapTaskExecution) => void; phase?: TaskExecutionPhase; -}> = ({ taskExecutions, phase }) => { +}> = ({ taskExecutions, onTaskSelected, phase }) => { const styles = useStyles(); if (!taskExecutions.length) { return ( @@ -49,6 +51,7 @@ export const TaskExecutionsListContent: React.FC<{ taskExecution={taskExecution} showAttempts={taskExecutions.length > 1} selectedPhase={phase} + onTaskSelected={onTaskSelected} /> ) : ( = ({ nodeExecution, phase }) => { +export const TaskExecutionsList: React.FC = ({ + nodeExecution, + onTaskSelected, + phase, +}) => { const taskExecutions = useTaskExecutions(nodeExecution.id); useTaskExecutionsRefresher(nodeExecution, taskExecutions); return ( - + ); }; diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx index ac899606e..3ddcc3639 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsListItem.tsx @@ -1,34 +1,8 @@ import * as React from 'react'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import Typography from '@material-ui/core/Typography'; -import classnames from 'classnames'; import { PanelSection } from 'components/common/PanelSection'; -import { useCommonStyles } from 'components/common/styles'; -import { TaskExecutionPhase } from 'models/Execution/enums'; import { TaskExecution } from 'models/Execution/types'; -import { ExecutionStatusBadge } from '../ExecutionStatusBadge'; -import { TaskExecutionDetails } from './TaskExecutionDetails'; -import { TaskExecutionError } from './TaskExecutionError'; -import { TaskExecutionLogs } from './TaskExecutionLogs'; import { formatRetryAttempt } from './utils'; - -const useStyles = makeStyles((theme: Theme) => ({ - detailsLink: { - fontWeight: 'normal', - }, - header: { - marginBottom: theme.spacing(1), - }, - title: { - marginBottom: theme.spacing(1), - }, - showDetailsButton: { - marginTop: theme.spacing(1), - }, - section: { - marginBottom: theme.spacing(2), - }, -})); +import { TaskExecutionLogsCard } from './TaskExecutionLogsCard'; interface TaskExecutionsListItemProps { taskExecution: TaskExecution; @@ -38,38 +12,19 @@ interface TaskExecutionsListItemProps { export const TaskExecutionsListItem: React.FC = ({ taskExecution, }) => { - const commonStyles = useCommonStyles(); - const styles = useStyles(); - const { closure } = taskExecution; - const { error } = closure; + const { + closure: { phase, logs }, + } = taskExecution; const headerText = formatRetryAttempt(taskExecution.id.retryAttempt); - const taskHasStarted = closure.phase >= TaskExecutionPhase.QUEUED; return ( -
-
- - {headerText} - -
- -
- {!!error && ( -
- -
- )} - {taskHasStarted && ( - <> -
- -
-
- -
- - )} +
); }; diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/MapTaskExecutionDetails.test.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/MapTaskExecutionDetails.test.tsx new file mode 100644 index 000000000..4a51832a5 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/MapTaskExecutionDetails.test.tsx @@ -0,0 +1,32 @@ +import { render } from '@testing-library/react'; +import * as React from 'react'; +import { MapTaskExecutionDetails } from '../MapTaskExecutionDetails'; +import { MockMapTaskExecution } from '../TaskExecutions.mocks'; + +jest.mock('../TaskExecutionLogsCard.tsx', () => ({ + TaskExecutionLogsCard: jest.fn(({ children }) =>
{children}
), +})); + +describe('MapTaskExecutionDetails', () => { + it('should render list with 1 execution attempt', () => { + const { queryAllByTestId } = render( + , + ); + const logsCards = queryAllByTestId('logs-card'); + expect(logsCards).toHaveLength(1); + logsCards.forEach((card) => { + expect(card).toBeInTheDocument(); + }); + }); + + it('should render list with 2 execution attempts', () => { + const { queryAllByTestId } = render( + , + ); + const logsCards = queryAllByTestId('logs-card'); + expect(logsCards).toHaveLength(2); + logsCards.forEach((card) => { + expect(card).toBeInTheDocument(); + }); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionDetails.test.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionDetails.test.tsx new file mode 100644 index 000000000..594032831 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionDetails.test.tsx @@ -0,0 +1,52 @@ +import { render } from '@testing-library/react'; +import { unknownValueString } from 'common/constants'; +import * as React from 'react'; +import { long } from 'test/utils'; +import { TaskExecutionDetails } from '../TaskExecutionDetails'; + +const date = { seconds: long(5), nanos: 0 }; +const duration = { seconds: long(0), nanos: 0 }; + +const dateContent = '1/1/1970 12:00:05 AM UTC (52 years ago)'; + +describe('TaskExecutionDetails', () => { + it('should render details with task started info and duration', () => { + const { queryByText } = render(); + + expect(queryByText('started')).toBeInTheDocument(); + expect(queryByText('last updated')).not.toBeInTheDocument(); + expect(queryByText(dateContent)).toBeInTheDocument(); + expect(queryByText('run time')).toBeInTheDocument(); + expect(queryByText('0s')).toBeInTheDocument(); + }); + + it('should render details with task started info without duration', () => { + const { queryByText } = render(); + + expect(queryByText('started')).toBeInTheDocument(); + expect(queryByText('last updated')).not.toBeInTheDocument(); + expect(queryByText(dateContent)).toBeInTheDocument(); + expect(queryByText('run time')).toBeInTheDocument(); + expect(queryByText(unknownValueString)).toBeInTheDocument(); + }); + + it('should render details with task updated info and duration', () => { + const { queryByText } = render(); + + expect(queryByText('started')).not.toBeInTheDocument(); + expect(queryByText('last updated')).toBeInTheDocument(); + expect(queryByText(dateContent)).toBeInTheDocument(); + expect(queryByText('run time')).not.toBeInTheDocument(); + expect(queryByText('0s')).not.toBeInTheDocument(); + }); + + it('should render details with task updated info without duration', () => { + const { queryByText } = render(); + + expect(queryByText('started')).not.toBeInTheDocument(); + expect(queryByText('last updated')).toBeInTheDocument(); + expect(queryByText(dateContent)).toBeInTheDocument(); + expect(queryByText('run time')).not.toBeInTheDocument(); + expect(queryByText(unknownValueString)).not.toBeInTheDocument(); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionLogsCard.test.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionLogsCard.test.tsx new file mode 100644 index 000000000..8d5e7b6a5 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionLogsCard.test.tsx @@ -0,0 +1,47 @@ +import { render } from '@testing-library/react'; +import * as React from 'react'; +import { mockExecution as mockTaskExecution } from 'models/Execution/__mocks__/mockTaskExecutionsData'; +import { TaskExecutionPhase } from 'models/Execution/enums'; +import { noLogsFoundString } from 'components/Executions/constants'; +import { getPhaseConstants } from 'components/Executions/ExecutionStatusBadge'; +import { TaskExecutionLogsCard } from '../TaskExecutionLogsCard'; +import { formatRetryAttempt } from '../utils'; + +const headerText = formatRetryAttempt(0); +const taskLogs = [{ uri: '#', name: 'Kubernetes Logs #0-0' }]; +const phase = TaskExecutionPhase.SUCCEEDED; + +describe('TaskExecutionLogsCard', () => { + it('should render card with logs provided', () => { + const { queryByText } = render( + , + ); + const { text } = getPhaseConstants('task', phase); + + expect(queryByText(headerText)).toBeInTheDocument(); + expect(queryByText(text)).toBeInTheDocument(); + expect(queryByText(taskLogs[0].name)).toBeInTheDocument(); + }); + + it('should render card with no logs found string', () => { + const { queryByText } = render( + , + ); + + const { text } = getPhaseConstants('task', phase); + + expect(queryByText(headerText)).toBeInTheDocument(); + expect(queryByText(text)).toBeInTheDocument(); + expect(queryByText(noLogsFoundString)).toBeInTheDocument(); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx index d95c1407a..a805b1832 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsList.test.tsx @@ -21,7 +21,7 @@ describe('TaskExecutionsList', () => { listTaskExecutions: mockListTaskExecutions, })} > - + , ); beforeEach(() => { diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsListItem.test.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsListItem.test.tsx new file mode 100644 index 000000000..c977f5690 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/TaskExecutionsListItem.test.tsx @@ -0,0 +1,17 @@ +import { render } from '@testing-library/react'; +import * as React from 'react'; +import { TaskExecutionsListItem } from '../TaskExecutionsListItem'; +import { MockMapTaskExecution } from '../TaskExecutions.mocks'; + +jest.mock('../TaskExecutionLogsCard.tsx', () => ({ + TaskExecutionLogsCard: jest.fn(({ children }) =>
{children}
), +})); + +describe('TaskExecutionsListItem', () => { + it('should render execution logs card', () => { + const { queryByTestId } = render( + , + ); + expect(queryByTestId('logs-card')).toBeInTheDocument(); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/utils.spec.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/utils.spec.ts index 53b0a4599..1990f4890 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/utils.spec.ts +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/test/utils.spec.ts @@ -1,8 +1,14 @@ +import { getTaskLogName, getTaskIndex } from 'components/Executions/TaskExecutionsList/utils'; import { Event } from 'flyteidl'; import { TaskExecutionPhase } from 'models/Execution/enums'; import { obj } from 'test/utils'; -import { getMockMapTaskLogItem } from '../TaskExecutions.mocks'; -import { formatRetryAttempt, getGroupedLogs, getUniqueTaskExecutionName } from '../utils'; +import { + getTaskRetryAtemptsForIndex, + formatRetryAttempt, + getGroupedLogs, + getUniqueTaskExecutionName, +} from '../utils'; +import { getMockMapTaskLogItem, MockMapTaskExecution } from '../TaskExecutions.mocks'; describe('getUniqueTaskExecutionName', () => { const cases: [{ name: string; retryAttempt: number }, string][] = [ @@ -46,7 +52,7 @@ describe('getGroupedLogs', () => { getMockMapTaskLogItem(TaskExecutionPhase.FAILED, false, 2), ]; - it(`Should properly group to Success and Failed`, () => { + it('should properly group to Success and Failed', () => { const logs = getGroupedLogs(resources); // Do not have key which was not in the logs expect(logs.get(TaskExecutionPhase.QUEUED)).toBeUndefined(); @@ -62,3 +68,76 @@ describe('getGroupedLogs', () => { expect(logs.get(TaskExecutionPhase.FAILED)?.length).toEqual(1); }); }); + +describe('getTaskRetryAttemptsForIndex', () => { + it('should return 2 filtered attempts for provided index', () => { + const index = 3; + // '?? []' -> TS check, mock contains externalResources + const result = getTaskRetryAtemptsForIndex( + MockMapTaskExecution.closure.metadata?.externalResources ?? [], + index, + ); + expect(result).toHaveLength(2); + }); + + it('should return 1 filtered attempt for provided index', () => { + const index = 0; + // '?? []' -> TS check, mock contains externalResources + const result = getTaskRetryAtemptsForIndex( + MockMapTaskExecution.closure.metadata?.externalResources ?? [], + index, + ); + expect(result).toHaveLength(1); + }); + + it('should return empty array when null index provided', () => { + const index = null; + // '?? []' -> TS check, mock contains externalResources + const result = getTaskRetryAtemptsForIndex( + MockMapTaskExecution.closure.metadata?.externalResources ?? [], + index, + ); + expect(result).toHaveLength(0); + }); +}); + +describe('getTaskIndex', () => { + it('should return index if selected log has a match in externalResources list', () => { + const index = 3; + const log = getMockMapTaskLogItem(TaskExecutionPhase.SUCCEEDED, true, index, 1).logs?.[0]; + + // TS check + if (log) { + const result1 = getTaskIndex(MockMapTaskExecution, log); + expect(result1).toStrictEqual(index); + } + }); +}); + +describe('getTaskLogName', () => { + it('should return correct names', () => { + const taskName1 = 'task_name_1'; + const taskName2 = 'task.task_name_1'; + const taskLogName1 = 'abc'; + const taskLogName2 = 'abc-1'; + const taskLogName3 = 'abc-1-1'; + + const result1 = getTaskLogName(taskName1, taskLogName1); + expect(result1).toStrictEqual(taskName1); + + const result2 = getTaskLogName(taskName1, taskLogName2); + expect(result2).toStrictEqual('task_name_1-1'); + + const result3 = getTaskLogName(taskName1, taskLogName3); + expect(result3).toStrictEqual('task_name_1-1-1'); + + const result4 = getTaskLogName(taskName2, taskLogName1); + expect(result4).toStrictEqual(taskName1); + + const result5 = getTaskLogName(taskName2, taskLogName2); + expect(result5).toStrictEqual('task_name_1-1'); + + const result6 = getTaskLogName(taskName2, taskLogName3); + expect(result6).toStrictEqual('task_name_1-1-1'); + }); +}); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts b/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts index e307f7ec1..7beb824ee 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/utils.ts @@ -1,6 +1,6 @@ -import { LogsByPhase, TaskExecution } from 'models/Execution/types'; +import { ExternalResource, LogsByPhase, TaskExecution } from 'models/Execution/types'; import { leftPaddedNumber } from 'common/formatters'; -import { Event } from 'flyteidl'; +import { Core, Event } from 'flyteidl'; import { TaskExecutionPhase } from 'models/Execution/enums'; /** Generates a unique name for a task execution, suitable for display in a @@ -61,3 +61,62 @@ export const getGroupedLogs = (resources: Event.IExternalResourceInfo[]): LogsBy return logsByPhase; }; + +export const getTaskRetryAtemptsForIndex = ( + resources: ExternalResource[], + taskIndex: number | null, +): ExternalResource[] => { + // check spesifically for null values, to make sure we're not skipping logs for 0 index + if (taskIndex === null) { + return []; + } + + const filtered = resources.filter((a) => { + const index = a.index ?? 0; + return index === taskIndex; + }); + + // sort output sample [0-2, 0-1, 0, 1, 2], where 0-1 means index = 0 retry = 1 + filtered.sort((a, b) => { + const aIndex = a.index ?? 0; + const bIndex = b.index ?? 0; + if (aIndex !== bIndex) { + // return smaller index first + return aIndex - bIndex; + } + + const aRetry = a.retryAttempt ?? 0; + const bRetry = b.retryAttempt ?? 0; + return bRetry - aRetry; + }); + return filtered; +}; + +export function getTaskIndex( + taskExecution: TaskExecution, + selectedLog: Core.ITaskLog, +): number | null { + const externalResources = taskExecution.closure.metadata?.externalResources ?? []; + for (const item of externalResources) { + const logs = item.logs ?? []; + for (const log of logs) { + if (log.uri) { + if (log.name === selectedLog.name && log.uri === selectedLog.uri) { + return item.index ?? 0; + } + } else if (log.name === selectedLog.name) { + return item.index ?? 0; + } + } + } + + return null; +} + +export function getTaskLogName(taskName: string, taskLogName: string): string { + const lastDotIndex = taskName.lastIndexOf('.'); + const prefix = lastDotIndex !== -1 ? taskName.slice(lastDotIndex + 1) : taskName; + const firstDahIndex = taskLogName.indexOf('-'); + const suffix = firstDahIndex !== -1 ? taskLogName.slice(firstDahIndex) : ''; + return `${prefix}${suffix}`; +} diff --git a/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx b/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx index 6b2a6bfe1..ff0035bb4 100644 --- a/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx +++ b/packages/zapp/console/src/components/WorkflowGraph/WorkflowGraph.tsx @@ -16,6 +16,8 @@ import { transformerWorkflowToDag } from './transformerWorkflowToDag'; export interface WorkflowGraphProps { onNodeSelectionChanged: (selectedNodes: string[]) => void; onPhaseSelectionChanged: (phase: TaskExecutionPhase) => void; + selectedPhase?: TaskExecutionPhase; + isDetailsTabClosed: boolean; workflow: Workflow; nodeExecutionsById?: any; } @@ -56,7 +58,14 @@ export interface DynamicWorkflowMapping { dynamicExecutions: any[]; } export const WorkflowGraph: React.FC = (props) => { - const { onNodeSelectionChanged, onPhaseSelectionChanged, nodeExecutionsById, workflow } = props; + const { + onNodeSelectionChanged, + onPhaseSelectionChanged, + selectedPhase, + isDetailsTabClosed, + nodeExecutionsById, + workflow, + } = props; const { dag, staticExecutionIdsMap, error } = workflowToDag(workflow); /** * Note: @@ -113,6 +122,8 @@ export const WorkflowGraph: React.FC = (props) => { data={merged} onNodeSelectionChanged={onNodeSelectionChanged} onPhaseSelectionChanged={onPhaseSelectionChanged} + selectedPhase={selectedPhase} + isDetailsTabClosed={isDetailsTabClosed} /> ); }; diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx index f5fdfc86b..199c6f869 100644 --- a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.stories.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { ComponentStory, ComponentMeta } from '@storybook/react'; import { TaskExecutionPhase } from 'models/Execution/enums'; +import { mockExecution as mockTaskExecution } from 'models/Execution/__mocks__/mockTaskExecutionsData'; import { MapTaskStatusInfo } from './MapTaskStatusInfo'; import { PanelViewDecorator } from '../__stories__/Decorators'; @@ -17,19 +18,24 @@ const Template: ComponentStory = (args) => ( export const Default = Template.bind({}); Default.decorators = [(Story) => PanelViewDecorator(Story)]; Default.args = { + taskExecution: mockTaskExecution, taskLogs: [ + // logs without URI should be black and not clickable { uri: '#', name: 'Kubernetes Logs #0-0' }, { uri: '#', name: 'Kubernetes Logs #0-1' }, - { uri: '#', name: 'Kubernetes Logs #0-2' }, - { uri: '#', name: 'Kubernetes Logs #0-3' }, + { name: 'Kubernetes Logs #0-2' }, + { name: 'Kubernetes Logs #0-3' }, { uri: '#', name: 'Kubernetes Logs #0-4' }, ], - status: TaskExecutionPhase.QUEUED, - expanded: true, + phase: TaskExecutionPhase.QUEUED, + selectedPhase: TaskExecutionPhase.QUEUED, + onTaskSelected: () => {}, }; export const AllSpace = Template.bind({}); AllSpace.args = { + taskExecution: mockTaskExecution, taskLogs: [], - status: TaskExecutionPhase.SUCCEEDED, + phase: TaskExecutionPhase.SUCCEEDED, + onTaskSelected: () => {}, }; diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx index cef9b2be6..2aa314f36 100644 --- a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.tsx @@ -1,12 +1,13 @@ import * as React from 'react'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { Typography } from '@material-ui/core'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { RowExpander } from 'components/Executions/Tables/RowExpander'; import { TaskExecutionPhase } from 'models/Execution/enums'; import { getTaskExecutionPhaseConstants } from 'components/Executions/utils'; -import { TaskLogList } from 'components/Executions/TaskExecutionsList/TaskExecutionLogs'; import { Core } from 'flyteidl'; +import { MapTaskExecution, TaskExecution } from 'models/Execution/types'; +import { TaskNameList } from './TaskNameList'; const useStyles = makeStyles((_theme: Theme) => ({ mainWrapper: { @@ -36,20 +37,33 @@ const useStyles = makeStyles((_theme: Theme) => ({ })); interface MapTaskStatusInfoProps { + taskExecution: TaskExecution; taskLogs: Core.ITaskLog[]; phase: TaskExecutionPhase; - isExpanded: boolean; + selectedPhase?: TaskExecutionPhase; + onTaskSelected: (val: MapTaskExecution) => void; } -export const MapTaskStatusInfo = ({ taskLogs, phase, isExpanded }: MapTaskStatusInfoProps) => { - const [expanded, setExpanded] = useState(isExpanded); +export const MapTaskStatusInfo = ({ + taskExecution, + taskLogs, + phase, + selectedPhase, + onTaskSelected, +}: MapTaskStatusInfoProps) => { + const [expanded, setExpanded] = useState(selectedPhase === phase); const styles = useStyles(); + const phaseData = getTaskExecutionPhaseConstants(phase); + + useEffect(() => { + setExpanded(selectedPhase === phase); + }, [selectedPhase, phase]); + const toggleExpanded = () => { setExpanded(!expanded); }; - const phaseData = getTaskExecutionPhaseConstants(phase); return (
@@ -62,7 +76,11 @@ export const MapTaskStatusInfo = ({ taskLogs, phase, isExpanded }: MapTaskStatus
{expanded && (
- +
)}
diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/TaskNameList.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/TaskNameList.tsx new file mode 100644 index 000000000..41d7d1c79 --- /dev/null +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/TaskNameList.tsx @@ -0,0 +1,62 @@ +import * as React from 'react'; +import { Typography } from '@material-ui/core'; +import { makeStyles, Theme } from '@material-ui/core/styles'; +import { Core } from 'flyteidl'; +import { getTaskIndex, getTaskLogName } from 'components/Executions/TaskExecutionsList/utils'; +import { MapTaskExecution, TaskExecution } from 'models/Execution/types'; +import { noLogsFoundString } from 'components/Executions/constants'; +import { useCommonStyles } from '../styles'; + +interface StyleProps { + isLink: boolean; +} + +const useStyles = makeStyles((_theme: Theme) => ({ + taskTitle: ({ isLink }: StyleProps) => ({ + cursor: isLink ? 'pointer' : 'default', + '&:hover': { + textDecoration: isLink ? 'underline' : 'none', + }, + }), +})); + +interface TaskNameListProps { + taskExecution: TaskExecution; + logs: Core.ITaskLog[]; + onTaskSelected: (val: MapTaskExecution) => void; +} + +export const TaskNameList = ({ taskExecution, logs, onTaskSelected }: TaskNameListProps) => { + const commonStyles = useCommonStyles(); + + if (logs.length === 0) { + return {noLogsFoundString}; + } + + return ( + <> + {logs.map((log) => { + const styles = useStyles({ isLink: !!log.uri }); + const taskLogName = getTaskLogName(taskExecution.id.taskId.name, log.name ?? ''); + const taskIndex = getTaskIndex(taskExecution, log); + + const handleClick = () => { + onTaskSelected({ ...taskExecution, taskIndex }); + }; + + return ( + + {taskLogName} + + ); + })} + + ); +}; diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/test/MapTaskStatusInfo.test.tsx similarity index 64% rename from packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx rename to packages/zapp/console/src/components/common/MapTaskExecutionsList/test/MapTaskStatusInfo.test.tsx index 399a92309..29885c99c 100644 --- a/packages/zapp/console/src/components/common/MapTaskExecutionsList/MapTaskStatusInfo.test.tsx +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/test/MapTaskStatusInfo.test.tsx @@ -3,8 +3,13 @@ import { noLogsFoundString } from 'components/Executions/constants'; import { getTaskExecutionPhaseConstants } from 'components/Executions/utils'; import { TaskExecutionPhase } from 'models/Execution/enums'; import * as React from 'react'; +import { mockExecution as mockTaskExecution } from 'models/Execution/__mocks__/mockTaskExecutionsData'; -import { MapTaskStatusInfo } from './MapTaskStatusInfo'; +import { + getTaskLogName, + getUniqueTaskExecutionName, +} from 'components/Executions/TaskExecutionsList/utils'; +import { MapTaskStatusInfo } from '../MapTaskStatusInfo'; const taskLogs = [ { uri: '#', name: 'Kubernetes Logs #0-0' }, @@ -18,7 +23,12 @@ describe('MapTaskStatusInfo', () => { const phaseData = getTaskExecutionPhaseConstants(phase); const { queryByText, getByTitle } = render( - , + , ); expect(queryByText(phaseData.text)).toBeInTheDocument(); @@ -29,7 +39,9 @@ describe('MapTaskStatusInfo', () => { const buttonEl = getByTitle('Expand row'); fireEvent.click(buttonEl); await waitFor(() => { - expect(queryByText(taskLogs[0].name)).toBeInTheDocument(); + const taskName = getUniqueTaskExecutionName(mockTaskExecution); + const taskLogName = getTaskLogName(taskName, taskLogs[0].name); + expect(queryByText(taskLogName)).toBeInTheDocument(); }); }); @@ -38,7 +50,13 @@ describe('MapTaskStatusInfo', () => { const phaseData = getTaskExecutionPhaseConstants(phase); const { queryByText } = render( - , + , ); expect(queryByText(phaseData.text)).toBeInTheDocument(); diff --git a/packages/zapp/console/src/components/common/MapTaskExecutionsList/test/TaskNameList.test.tsx b/packages/zapp/console/src/components/common/MapTaskExecutionsList/test/TaskNameList.test.tsx new file mode 100644 index 000000000..59a620df0 --- /dev/null +++ b/packages/zapp/console/src/components/common/MapTaskExecutionsList/test/TaskNameList.test.tsx @@ -0,0 +1,59 @@ +import ThemeProvider from '@material-ui/styles/ThemeProvider'; +import { render } from '@testing-library/react'; +import { muiTheme } from 'components/Theme/muiTheme'; +import * as React from 'react'; +import { mockExecution as mockTaskExecution } from 'models/Execution/__mocks__/mockTaskExecutionsData'; + +import { TaskNameList } from '../TaskNameList'; + +const taskLogs = [ + { uri: '#', name: 'Kubernetes Logs #0-0' }, + { uri: '#', name: 'Kubernetes Logs #0-1' }, + { uri: '#', name: 'Kubernetes Logs #0-2' }, +]; + +const taskLogsWithoutUri = [ + { name: 'Kubernetes Logs #0-0' }, + { name: 'Kubernetes Logs #0-1' }, + { name: 'Kubernetes Logs #0-2' }, +]; + +describe('TaskNameList', () => { + it('should render log names in color if they have URI', async () => { + const { queryAllByTestId } = render( + + + , + ); + + const logs = queryAllByTestId('map-task-log'); + expect(logs).toHaveLength(3); + logs.forEach((log) => { + expect(log).toBeInTheDocument(); + expect(log).toHaveStyle({ color: '#8B37FF' }); + }); + }); + + it('should render log names in black if they have URI', () => { + const { queryAllByTestId } = render( + + + , + ); + + const logs = queryAllByTestId('map-task-log'); + expect(logs).toHaveLength(3); + logs.forEach((log) => { + expect(log).toBeInTheDocument(); + expect(log).toHaveStyle({ color: '#292936' }); + }); + }); +}); diff --git a/packages/zapp/console/src/components/common/PanelSection/index.tsx b/packages/zapp/console/src/components/common/PanelSection/index.tsx index ace1ab503..cb6dfd91e 100644 --- a/packages/zapp/console/src/components/common/PanelSection/index.tsx +++ b/packages/zapp/console/src/components/common/PanelSection/index.tsx @@ -3,11 +3,11 @@ import { makeStyles } from '@material-ui/core/styles'; const useStyle = makeStyles((theme) => ({ detailsPanelCard: { - borderBottom: `1px solid ${theme.palette.divider}`, paddingBottom: '150px', // TODO @FC 454 temporary fix for panel height issue }, detailsPanelCardContent: { padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`, + borderBottom: `1px solid ${theme.palette.divider}`, }, })); diff --git a/packages/zapp/console/src/components/common/SectionHeader.tsx b/packages/zapp/console/src/components/common/SectionHeader.tsx index 4bb112752..acb722171 100644 --- a/packages/zapp/console/src/components/common/SectionHeader.tsx +++ b/packages/zapp/console/src/components/common/SectionHeader.tsx @@ -6,7 +6,6 @@ const useStyles = makeStyles((theme: Theme) => ({ container: { marginBottom: theme.spacing(1), }, - title: {}, })); export interface SectionHeaderProps { @@ -17,9 +16,7 @@ export const SectionHeader: React.FC = ({ title, subtitle }) const styles = useStyles(); return (
- - {title} - + {title} {!!subtitle && {subtitle}}
); diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx index a3c4079f5..7735be04d 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx @@ -48,6 +48,8 @@ const ReactFlowGraphComponent = (props) => { data, onNodeSelectionChanged, onPhaseSelectionChanged, + selectedPhase, + isDetailsTabClosed, nodeExecutionsById, dynamicWorkflows, } = props; @@ -56,6 +58,7 @@ const ReactFlowGraphComponent = (props) => { dynamicWorkflows, currentNestedView: {}, nodeExecutionsById, + selectedPhase, onNodeSelectionChanged, onPhaseSelectionChanged, rfGraphJson: null, @@ -92,6 +95,7 @@ const ReactFlowGraphComponent = (props) => { nodeExecutionsById: state.nodeExecutionsById, onNodeSelectionChanged: state.onNodeSelectionChanged, onPhaseSelectionChanged: state.onPhaseSelectionChanged, + selectedPhase, onAddNestedView, onRemoveNestedView, currentNestedView: state.currentNestedView, @@ -105,7 +109,7 @@ const ReactFlowGraphComponent = (props) => { ...state, rfGraphJson: newRFGraphData, })); - }, [state.currentNestedView, state.nodeExecutionsById]); + }, [state.currentNestedView, state.nodeExecutionsById, isDetailsTabClosed]); useEffect(() => { if (graphNodeCountChanged(state.data, data)) { @@ -130,8 +134,9 @@ const ReactFlowGraphComponent = (props) => { ...state, onNodeSelectionChanged, onPhaseSelectionChanged, + selectedPhase, })); - }, [onNodeSelectionChanged, onPhaseSelectionChanged]); + }, [onNodeSelectionChanged, onPhaseSelectionChanged, selectedPhase]); const backgroundStyle = getRFBackground().nested; diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx index 791bcd8b3..27383b4ee 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/customNodeComponents.tsx @@ -262,7 +262,9 @@ export const ReactFlowCustomTaskNode = ({ data }: any) => { const onNodeSelectionChanged = data.onNodeSelectionChanged; const onPhaseSelectionChanged = data.onPhaseSelectionChanged; const [selectedNode, setSelectedNode] = useState(false); - const [selectedPhase, setSelectedPhase] = useState(undefined); + const [selectedPhase, setSelectedPhase] = useState( + data.selectedPhase, + ); useEffect(() => { if (selectedNode === true) { @@ -349,12 +351,14 @@ export const ReactFlowCustomTaskNode = ({ data }: any) => { if (!logsByPhase.has(phase)) { return null; } - + const defaultColor = getStatusColor(); + const phaseColor = getStatusColor(phase); + const color = !selectedPhase || phase === selectedPhase ? phaseColor : defaultColor; const key = `${id}-${phase}`; return ( void; + selectedPhase: TaskExecutionPhase; onAddNestedView: any; onRemoveNestedView: any; rootParentNode: dNode; @@ -58,6 +59,7 @@ const buildReactFlowDataProps = (props: BuildDataProps) => { nodeExecutionsById, onNodeSelectionChanged, onPhaseSelectionChanged, + selectedPhase, onAddNestedView, onRemoveNestedView, rootParentNode, @@ -95,6 +97,7 @@ const buildReactFlowDataProps = (props: BuildDataProps) => { taskType, nodeLogsByPhase, cacheStatus, + selectedPhase, onNodeSelectionChanged: () => { if (onNodeSelectionChanged) { onNodeSelectionChanged([scopedId]); @@ -199,6 +202,7 @@ export const buildGraphMapping = (props): ReactFlowGraphMapping => { nodeExecutionsById, onNodeSelectionChanged, onPhaseSelectionChanged, + selectedPhase, onAddNestedView, onRemoveNestedView, currentNestedView, @@ -208,6 +212,7 @@ export const buildGraphMapping = (props): ReactFlowGraphMapping => { nodeExecutionsById, onNodeSelectionChanged, onPhaseSelectionChanged, + selectedPhase, onAddNestedView, onRemoveNestedView, currentNestedView, diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx index ac74ef775..a62901298 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx @@ -104,9 +104,9 @@ export const nodePhaseColorMapping = { * @returns */ export const getStatusColor = ( - nodeExecutionStatus: NodeExecutionPhase | TaskExecutionPhase, + nodeExecutionStatus?: NodeExecutionPhase | TaskExecutionPhase, ): string => { - if (nodePhaseColorMapping[nodeExecutionStatus]) { + if (nodeExecutionStatus && nodePhaseColorMapping[nodeExecutionStatus]) { return nodePhaseColorMapping[nodeExecutionStatus].color; } else { /** @TODO decide what we want default color to be */ diff --git a/packages/zapp/console/src/models/Execution/types.ts b/packages/zapp/console/src/models/Execution/types.ts index 96998afbc..f03d5a4a4 100644 --- a/packages/zapp/console/src/models/Execution/types.ts +++ b/packages/zapp/console/src/models/Execution/types.ts @@ -111,6 +111,9 @@ export interface TaskExecutionIdentifier extends Core.ITaskExecutionIdentifier { nodeExecutionId: NodeExecutionIdentifier; retryAttempt?: number; } +export interface MapTaskExecution extends TaskExecution { + taskIndex: number | null; +} export interface TaskExecution extends Admin.ITaskExecution { id: TaskExecutionIdentifier; From b70d14b35b04f3a9ceb0ba7308111c0d130e0cf7 Mon Sep 17 00:00:00 2001 From: olga-union <101579322+olga-union@users.noreply.github.com> Date: Thu, 19 May 2022 14:49:23 -0500 Subject: [PATCH 32/93] fix: add eventVersion check for map tasks (#484) --- .../ExecutionWorkflowGraph.tsx | 13 ++++++++- .../TaskExecutionsList/TaskExecutionsList.tsx | 13 ++++++--- .../WorkflowGraph/test/WorkflowGraph.test.tsx | 1 + .../zapp/console/src/models/Task/task.test.ts | 29 ++++++++++++++++++- .../zapp/console/src/models/Task/utils.ts | 9 ++++++ 5 files changed, 59 insertions(+), 6 deletions(-) diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx index 4d1502028..a536ecd46 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionWorkflowGraph.tsx @@ -7,6 +7,7 @@ import { keyBy } from 'lodash'; import { TaskExecutionPhase } from 'models/Execution/enums'; import { ExternalResource, LogsByPhase, NodeExecution } from 'models/Execution/types'; import { endNodeId, startNodeId } from 'models/Node/constants'; +import { isMapTaskV1 } from 'models/Task/utils'; import { Workflow, WorkflowId } from 'models/Workflow/types'; import * as React from 'react'; import { useEffect, useMemo, useState } from 'react'; @@ -32,6 +33,16 @@ export const ExecutionWorkflowGraph: React.FC = ({ const taskExecutions = useTaskExecutions(nodeExecution.id); useTaskExecutionsRefresher(nodeExecution, taskExecutions); + const useNewMapTaskView = taskExecutions.value.every((taskExecution) => { + const { + closure: { taskType, metadata, eventVersion = 0 }, + } = taskExecution; + return isMapTaskV1( + eventVersion, + metadata?.externalResources?.length ?? 0, + taskType ?? undefined, + ); + }); const externalResources: ExternalResource[] = taskExecutions.value .map((taskExecution) => taskExecution.closure.metadata?.externalResources) .flat() @@ -41,7 +52,7 @@ export const ExecutionWorkflowGraph: React.FC = ({ return { ...nodeExecution, - ...(logsByPhase.size > 0 && { logsByPhase }), + ...(useNewMapTaskView && logsByPhase.size > 0 && { logsByPhase }), }; }); diff --git a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx index f59c27f06..15baf2e05 100644 --- a/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx +++ b/packages/zapp/console/src/components/Executions/TaskExecutionsList/TaskExecutionsList.tsx @@ -4,7 +4,7 @@ import { noExecutionsFoundString } from 'common/constants'; import { NonIdealState } from 'components/common/NonIdealState'; import { WaitForData } from 'components/common/WaitForData'; import { MapTaskExecution, NodeExecution, TaskExecution } from 'models/Execution/types'; -import { isMapTaskType } from 'models/Task/utils'; +import { isMapTaskV1 } from 'models/Task/utils'; import { TaskExecutionPhase } from 'models/Execution/enums'; import { useTaskExecutions, useTaskExecutionsRefresher } from '../useTaskExecutions'; import { MapTaskExecutionsListItem } from './MapTaskExecutionListItem'; @@ -42,9 +42,14 @@ export const TaskExecutionsListContent: React.FC<{ return ( <> {taskExecutions.map((taskExecution) => { - const taskType = taskExecution.closure.taskType ?? undefined; - const useNewMapTaskView = - isMapTaskType(taskType) && taskExecution.closure.metadata?.externalResources; + const { + closure: { taskType, metadata, eventVersion = 0 }, + } = taskExecution; + const useNewMapTaskView = isMapTaskV1( + eventVersion, + metadata?.externalResources?.length ?? 0, + taskType ?? undefined, + ); return useNewMapTaskView ? ( { onPhaseSelectionChanged={jest.fn} workflow={workflow} nodeExecutionsById={nodeExecutionsById} + isDetailsTabClosed={true} /> , ); diff --git a/packages/zapp/console/src/models/Task/task.test.ts b/packages/zapp/console/src/models/Task/task.test.ts index 3d6872029..9496afd7d 100644 --- a/packages/zapp/console/src/models/Task/task.test.ts +++ b/packages/zapp/console/src/models/Task/task.test.ts @@ -1,5 +1,5 @@ import { TaskType } from './constants'; -import { isMapTaskType } from './utils'; +import { isMapTaskType, isMapTaskV1 } from './utils'; describe('models/Task', () => { it('isMapTaskType propely identifies mapped tasks', async () => { @@ -14,4 +14,31 @@ describe('models/Task', () => { // when regular task is provided - to be false expect(isMapTaskType(TaskType.PYTHON)).toBeFalsy(); }); + + it('isMapTaskV1 propely identifies mapped task events above version 1', () => { + const eventVersionZero = 0; + const eventVersionN = 3; + const resourcesLengthZero = 0; + const resourcesLengthN = 5; + const mapTaskTypes = [TaskType.ARRAY, TaskType.ARRAY_AWS, TaskType.ARRAY_K8S]; + const nonMapTaskType = TaskType.PYTHON; + + describe('FALSE cases:', () => { + // when no task is provided + expect(isMapTaskV1(eventVersionN, resourcesLengthN)).toBeFalsy(); + // when regular task is provided + expect(isMapTaskV1(eventVersionN, resourcesLengthN, nonMapTaskType)).toBeFalsy(); + // when eventVersion < 1 + expect(isMapTaskV1(eventVersionZero, resourcesLengthN, mapTaskTypes[0])).toBeFalsy(); + // when externalResources array has length of 0 + expect(isMapTaskV1(eventVersionN, resourcesLengthZero, mapTaskTypes[0])).toBeFalsy(); + }); + + describe('TRUE cases:', () => { + // when mapped task is provided AND eventVersion >= 1 AND externalResources array length > 0 + for (const task of mapTaskTypes) { + expect(isMapTaskV1(eventVersionN, resourcesLengthN, task)).toBeTruthy(); + } + }); + }); }); diff --git a/packages/zapp/console/src/models/Task/utils.ts b/packages/zapp/console/src/models/Task/utils.ts index 40af20849..79a7c286f 100644 --- a/packages/zapp/console/src/models/Task/utils.ts +++ b/packages/zapp/console/src/models/Task/utils.ts @@ -24,3 +24,12 @@ export function isMapTaskType(taskType?: string): boolean { taskType === TaskType.ARRAY_K8S ); } + +/** Returns true if tasks schema is treated as a map task AND eventVersion >= 1 AND externalResources array length > 0 */ +export function isMapTaskV1( + eventVersion: number, + externalResourcesLength: number, + taskType?: string, +): boolean { + return isMapTaskType(taskType) && eventVersion >= 1 && externalResourcesLength > 0; +} From 7f6305f27c034e0c92d5a103e38906b76aff156e Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 19 May 2022 14:43:43 -0700 Subject: [PATCH 33/93] fix: resolve minimist package to v1.2.6 (#492) Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> --- package.json | 3 ++- yarn.lock | 13 ++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 1567e0af1..c49f1d8d8 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "@babel/plugin-proposal-object-rest-spread": "~7.16.7", "@babel/preset-env": "~7.16.11", "@babel/preset-react": "~7.16.7", - "@babel/preset-typescript": "~7.16.7" + "@babel/preset-typescript": "~7.16.7", + "minimist": "1.2.6" } } diff --git a/yarn.lock b/yarn.lock index 0c2eee12f..238e49d19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13619,15 +13619,10 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, 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== +minimist@0.0.8, minimist@1.2.6, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: + 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" From 144349c359380e49cf171a9cc9b08784d993f8ff Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 19 May 2022 14:44:09 -0700 Subject: [PATCH 34/93] ci: add flyte-api plugin package (#490) Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> --- .storybook/main.js | 1 + jest.config.js | 8 ++-- packages/plugins/flyte-api/README.md | 1 + packages/plugins/flyte-api/jest.config.js | 6 +++ packages/plugins/flyte-api/package.json | 35 ++++++++++++++++ .../plugins/flyte-api/src/Sample/index.tsx | 41 +++++++++++++++++++ .../flyte-api/src/Sample/sample.stories.tsx | 34 +++++++++++++++ .../flyte-api/src/Sample/sample.test.tsx | 11 +++++ packages/plugins/flyte-api/src/index.ts | 1 + .../plugins/flyte-api/tsconfig.build.json | 16 ++++++++ packages/plugins/flyte-api/tsconfig.json | 9 ++++ .../zapp/console/src/routes/NavBarRouter.tsx | 2 - packages/zapp/console/tsconfig.build.json | 3 +- packages/zapp/console/tsconfig.json | 3 +- .../zapp/console/webpack.common.config.ts | 3 +- 15 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 packages/plugins/flyte-api/README.md create mode 100644 packages/plugins/flyte-api/jest.config.js create mode 100644 packages/plugins/flyte-api/package.json create mode 100644 packages/plugins/flyte-api/src/Sample/index.tsx create mode 100644 packages/plugins/flyte-api/src/Sample/sample.stories.tsx create mode 100644 packages/plugins/flyte-api/src/Sample/sample.test.tsx create mode 100644 packages/plugins/flyte-api/src/index.ts create mode 100644 packages/plugins/flyte-api/tsconfig.build.json create mode 100644 packages/plugins/flyte-api/tsconfig.json diff --git a/.storybook/main.js b/.storybook/main.js index 98cc11aa9..b7c1cda1c 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -29,6 +29,7 @@ module.exports = { '@flyteconsole/locale': path.resolve(__dirname, '../packages/basics/locale/src'), '@flyteconsole/ui-atoms': path.resolve(__dirname, '../packages/composites/ui-atoms/src'), '@flyteconsole/components': path.resolve(__dirname, '../packages/plugins/components/src'), + '@flyteconsole/flyte-api': path.resolve(__dirname, '../packages/plugins/flyte-api/src'), }; return config; diff --git a/jest.config.js b/jest.config.js index bfcf060b8..f2e406cd7 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,10 +8,10 @@ module.exports = { setupFilesAfterEnv: ['./script/test/jest-setup.ts'], projects: [ - '/packages/basics/locale', - '/packages/composites/ui-atoms', - '/packages/plugins/components', - '/packages/zapp/console', + '/packages/basics/*', + '/packages/composites/*', + '/packages/plugins/*', + '/packages/zapp/*', ], coverageDirectory: '/.coverage', diff --git a/packages/plugins/flyte-api/README.md b/packages/plugins/flyte-api/README.md new file mode 100644 index 000000000..b8c09ddd5 --- /dev/null +++ b/packages/plugins/flyte-api/README.md @@ -0,0 +1 @@ +This is a flyte-API package for flyteconsole plugin system diff --git a/packages/plugins/flyte-api/jest.config.js b/packages/plugins/flyte-api/jest.config.js new file mode 100644 index 000000000..ecb112b22 --- /dev/null +++ b/packages/plugins/flyte-api/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/packages/plugins/flyte-api/package.json b/packages/plugins/flyte-api/package.json new file mode 100644 index 000000000..10d551800 --- /dev/null +++ b/packages/plugins/flyte-api/package.json @@ -0,0 +1,35 @@ +{ + "name": "@flyteconsole/flyte-api", + "version": "0.0.1-rc.1", + "description": "FlyteConsole plugin to allow access FlyteAPI", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm --project ./tsconfig.build.json", + "build:cjs": "tsc --project ./tsconfig.build.json", + "test": "NODE_ENV=test jest" + }, + "dependencies": { + "@material-ui/core": "^4.0.0", + "@material-ui/icons": "^4.0.0", + "classnames": "^2.3.1" + }, + "peerDependencies": { + "react": "^16.13.1", + "react-dom": "^16.13.1" + }, + "devDependencies": { + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "react": "^16.13.1", + "react-dom": "^16.13.1" + } +} diff --git a/packages/plugins/flyte-api/src/Sample/index.tsx b/packages/plugins/flyte-api/src/Sample/index.tsx new file mode 100644 index 000000000..7be98984d --- /dev/null +++ b/packages/plugins/flyte-api/src/Sample/index.tsx @@ -0,0 +1,41 @@ +import * as React from 'react'; +import { AppBar, Toolbar, IconButton, makeStyles, Theme } from '@material-ui/core'; +import MenuIcon from '@material-ui/icons/Menu'; + +const useStyles = makeStyles((theme: Theme) => ({ + spacer: { + flexGrow: 1, + }, + menuButton: { + marginRight: theme.spacing(2), + }, +})); + +export interface SampleComponentProps { + useCustomContent?: boolean; // rename to show that it is a backNavigation + className?: string; +} + +/** Contains all content in the top navbar of the application. */ +export const SampleComponent = (props: SampleComponentProps) => { + const styles = useStyles(); + + return ( + + +
+ {' Sample Text '} +
+ + + + + + ); +}; diff --git a/packages/plugins/flyte-api/src/Sample/sample.stories.tsx b/packages/plugins/flyte-api/src/Sample/sample.stories.tsx new file mode 100644 index 000000000..12b58a5e6 --- /dev/null +++ b/packages/plugins/flyte-api/src/Sample/sample.stories.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { makeStyles, Theme } from '@material-ui/core/styles'; + +import { SampleComponent } from '.'; + +export default { + title: 'Flyte-API/Sample', + component: SampleComponent, +} as ComponentMeta; + +const useStyles = makeStyles((_theme: Theme) => ({ + updatedOne: { + backgroundColor: 'lightblue', + color: 'black', + }, + updatedTwo: { + backgroundColor: 'black', + color: 'yellow', + }, +})); + +const Template: ComponentStory = () => ; +export const Primary = Template.bind({}); + +export const Secondary: ComponentStory = () => { + const styles = useStyles(); + return ; +}; + +export const Tertiary: ComponentStory = () => { + const styles = useStyles(); + return ; +}; diff --git a/packages/plugins/flyte-api/src/Sample/sample.test.tsx b/packages/plugins/flyte-api/src/Sample/sample.test.tsx new file mode 100644 index 000000000..e6728d223 --- /dev/null +++ b/packages/plugins/flyte-api/src/Sample/sample.test.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import { render, screen } from '@testing-library/react'; +import { SampleComponent } from './index'; + +describe('add function', () => { + it('SampleComponent is rendered contains correct text', () => { + render(); + const text = screen.getByText('Sample Text'); + expect(text).toBeInTheDocument(); + }); +}); diff --git a/packages/plugins/flyte-api/src/index.ts b/packages/plugins/flyte-api/src/index.ts new file mode 100644 index 000000000..21c680758 --- /dev/null +++ b/packages/plugins/flyte-api/src/index.ts @@ -0,0 +1 @@ +export { SampleComponent } from './Sample'; diff --git a/packages/plugins/flyte-api/tsconfig.build.json b/packages/plugins/flyte-api/tsconfig.build.json new file mode 100644 index 000000000..30f9e4e65 --- /dev/null +++ b/packages/plugins/flyte-api/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + // files excluded from the build, we can not put it inro default tsconfig + // as it will screw VSCode IntelliSence + "**/test", + "**/mocks", + "**/__mocks__", + "**/__stories__", + "**/*.spec.*", + "**/*.test.*", + "**/*.mock.*", + "**/*.stories.*" + ], + "references": [] +} diff --git a/packages/plugins/flyte-api/tsconfig.json b/packages/plugins/flyte-api/tsconfig.json new file mode 100644 index 000000000..c535f41d8 --- /dev/null +++ b/packages/plugins/flyte-api/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "references": [], + "include": ["src/**/*"] +} diff --git a/packages/zapp/console/src/routes/NavBarRouter.tsx b/packages/zapp/console/src/routes/NavBarRouter.tsx index 76d7f6e5a..4b820e695 100644 --- a/packages/zapp/console/src/routes/NavBarRouter.tsx +++ b/packages/zapp/console/src/routes/NavBarRouter.tsx @@ -1,5 +1,4 @@ import { NavBar } from 'components/Navigation/NavBar'; -// import { NavBar as NewNavBar } from '@flyteconsole/components'; import * as React from 'react'; import { Route, Switch } from 'react-router-dom'; import { Routes } from './routes'; @@ -11,7 +10,6 @@ export const NavBarRouter: React.FC<{}> = () => ( <> - {/* */} diff --git a/packages/zapp/console/tsconfig.build.json b/packages/zapp/console/tsconfig.build.json index ec0791e92..0276c1861 100644 --- a/packages/zapp/console/tsconfig.build.json +++ b/packages/zapp/console/tsconfig.build.json @@ -15,6 +15,7 @@ "references": [ { "path": "../../basics/locale/tsconfig.build.json" }, { "path": "../../composites/ui-atoms/tsconfig.build.json" }, - { "path": "../../plugins/components/tsconfig.build.json" } + { "path": "../../plugins/components/tsconfig.build.json" }, + { "path": "../../plugins/flyte-api/tsconfig.build.json" } ] } diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index e3dfdb756..1ca3ba136 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -20,7 +20,8 @@ "references": [ { "path": "../../basics/locale" }, { "path": "../../composites/ui-atoms" }, - { "path": "../../plugins/components" } + { "path": "../../plugins/components" }, + { "path": "../../plugins/flyte-api" } ], "include": ["src/**/*"] } diff --git a/packages/zapp/console/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts index 70e4cf4ff..4b7b1212a 100644 --- a/packages/zapp/console/webpack.common.config.ts +++ b/packages/zapp/console/webpack.common.config.ts @@ -3,7 +3,7 @@ import chalk from 'chalk'; import * as path from 'path'; import * as webpack from 'webpack'; -import { processEnv as env, ASSETS_PATH as publicPath, processEnv } from './env'; +import { processEnv as env, ASSETS_PATH as publicPath } from './env'; const { StatsWriterPlugin } = require('webpack-stats-plugin'); const FavIconWebpackPlugin = require('favicons-webpack-plugin'); @@ -95,6 +95,7 @@ const resolve = { '@flyteconsole/locale': path.resolve(__dirname, '../../basics/locale/src'), '@flyteconsole/ui-atoms': path.resolve(__dirname, '../../composites/ui-atoms/src'), '@flyteconsole/components': path.resolve(__dirname, '../../plugins/components/src'), + '@flyteconsole/flyte-api': path.resolve(__dirname, '../../plugins/flyte-api/src'), }, }; From 64b279327a91266a18ab54e45a7fbb7466852201 Mon Sep 17 00:00:00 2001 From: olga-union <101579322+olga-union@users.noreply.github.com> Date: Mon, 23 May 2022 11:14:49 -0500 Subject: [PATCH 35/93] fix: update/add graph related stories (#493) --- .../__stories__/WorkflowGraph.stories.tsx | 6 +- .../ReactFlow/ReactFlowGraphComponent.tsx | 1 + .../components/flytegraph/ReactFlow/utils.tsx | 10 +- .../__stories__/CustomNodes.stories.tsx | 149 ++++++++++++++++++ 4 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 packages/zapp/console/src/components/flytegraph/__stories__/CustomNodes.stories.tsx diff --git a/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx b/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx index ecedabf25..197e34698 100644 --- a/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx +++ b/packages/zapp/console/src/components/WorkflowGraph/__stories__/WorkflowGraph.stories.tsx @@ -22,7 +22,7 @@ const workflow: Workflow = { }; const onNodeSelectionChanged = action('nodeSelected'); -const onMapTaskSelectionChanged = action('mapTaskSelected'); +const onPhaseSelectionChanged = action('phaseSelected'); const cache = createCache(); const taskTemplates = extractTaskTemplates(workflow); @@ -38,6 +38,7 @@ stories.addDecorator((story) => ( right: '35vw', left: 0, bottom: 0, + height: '450px', }} > {story()} @@ -49,7 +50,8 @@ stories.addDecorator((story) => ( stories.add('TaskNodeRenderer', () => ( )); diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx index 7735be04d..2fb41b801 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/ReactFlowGraphComponent.tsx @@ -146,6 +146,7 @@ const ReactFlowGraphComponent = (props) => { flexDirection: 'column', minHeight: '100px', minWidth: '200px', + height: '100%', }; const renderGraph = () => { diff --git a/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx index a62901298..8e815ad34 100644 --- a/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx +++ b/packages/zapp/console/src/components/flytegraph/ReactFlow/utils.tsx @@ -154,6 +154,9 @@ export const getGraphNodeStyle = ( type: dTypes, nodeExecutionStatus?: NodeExecutionPhase, ): CSSProperties => { + // getStatusColor accepts undefined, and falls back to default gray color + const nodePrimaryColor = getStatusColor(nodeExecutionStatus); + /** Base styles for displaying graph nodes */ const baseStyle = { boxShadow: '1px 3px 5px rgba(0,0,0,.2)', @@ -161,7 +164,7 @@ export const getGraphNodeStyle = ( fontSize: '.6rem', color: '#323232', borderRadius: '.25rem', - border: '.15rem solid #555', + border: `.15rem solid ${nodePrimaryColor}`, background: '#fff', minWidth: '.5rem', minHeight: '.5rem', @@ -186,11 +189,6 @@ export const getGraphNodeStyle = ( color: '#fff', }; - let nodePrimaryColor = ''; - if (nodeExecutionStatus) { - nodePrimaryColor = getStatusColor(nodeExecutionStatus); - } - /** Override the base styles with node-type specific styles */ const overrideStyles = { start: { diff --git a/packages/zapp/console/src/components/flytegraph/__stories__/CustomNodes.stories.tsx b/packages/zapp/console/src/components/flytegraph/__stories__/CustomNodes.stories.tsx new file mode 100644 index 000000000..52fe28b1f --- /dev/null +++ b/packages/zapp/console/src/components/flytegraph/__stories__/CustomNodes.stories.tsx @@ -0,0 +1,149 @@ +import { action } from '@storybook/addon-actions'; +import { storiesOf } from '@storybook/react'; +import { RENDER_ORDER } from 'components/Executions/TaskExecutionsList/constants'; +import { NodeExecutionDisplayType } from 'components/Executions/types'; +import { getTaskExecutionPhaseConstants } from 'components/Executions/utils'; +import { CatalogCacheStatus, NodeExecutionPhase } from 'models/Execution/enums'; +import { TaskType } from 'models/Task/constants'; +import * as React from 'react'; +import { ReactFlowProvider } from 'react-flow-renderer'; +import { ReactFlowCustomTaskNode } from '../ReactFlow/customNodeComponents'; + +const stories = storiesOf('CustomNodes', module); +stories.addDecorator((story) => ( + <> + {story()} + +)); + +const commonData = { + onNodeSelectionChanged: action('nodeSelected'), + onPhaseSelectionChanged: action('phaseSelected'), + scopedId: 'n0', +}; + +const taskData = { + ...commonData, + nodeType: NodeExecutionDisplayType.PythonTask, + taskType: TaskType.PYTHON, + cacheStatus: 0, +}; + +stories.add('Task Node', () => ( + <> + {RENDER_ORDER.map((phase, i) => ( +
+ +
+ ))} + +)); + +const cachedTaskData = { + ...commonData, + nodeType: NodeExecutionDisplayType.PythonTask, + nodeExecutionStatus: NodeExecutionPhase.SUCCEEDED, + taskType: TaskType.PYTHON, +}; + +const CACHE_STATUSES = [ + { status: CatalogCacheStatus.CACHE_DISABLED, text: 'cache disabled' }, + { status: CatalogCacheStatus.CACHE_HIT, text: 'cache hit' }, + { status: CatalogCacheStatus.CACHE_LOOKUP_FAILURE, text: 'cache lookup failure' }, + { status: CatalogCacheStatus.CACHE_MISS, text: 'cache miss' }, + { status: CatalogCacheStatus.CACHE_POPULATED, text: 'cache populated' }, + { status: CatalogCacheStatus.CACHE_PUT_FAILURE, text: 'cache put failure' }, +]; + +stories.add('Task Node by Cache Status', () => ( + <> + {CACHE_STATUSES.map((cacheStatus, i) => ( +
+ +
+ ))} + +)); + +const logsByPhase = new Map(); +logsByPhase.set(5, [ + { + uri: '#', + name: 'Kubernetes Logs #0-0-1', + messageFormat: 2, + }, + { + uri: '#', + name: 'Kubernetes Logs #0-1', + messageFormat: 2, + }, +]); +logsByPhase.set(2, [ + { + uri: '#', + name: 'Kubernetes Logs #0-2-1', + messageFormat: 2, + }, +]); +logsByPhase.set(6, [ + { + name: 'ff21a6480a4c84742ad4-n0-0-3', + }, +]); + +const mapTaskData = { + ...commonData, + nodeType: NodeExecutionDisplayType.MapTask, + taskType: TaskType.ARRAY, + cacheStatus: 0, + nodeLogsByPhase: logsByPhase, +}; + +stories.add('Map Task Node', () => ( + <> + {RENDER_ORDER.map((phase, i) => ( +
+ +
+ ))} + +)); From 7ea0c9f4074c0aab180d8cb15924cacc2d3cd7d5 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Wed, 25 May 2022 10:57:03 -0700 Subject: [PATCH 36/93] fix: separate api auth to plugin folder (#495) * fix: separate api auth to plugin folder * chore: for local admin URL is undefined * chore: update README.md * test: fix tests + add new ones * v0.0.2 - release for flyte-api plugin Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> --- packages/composites/ui-atoms/package.json | 6 +- packages/plugins/components/package.json | 6 +- packages/plugins/flyte-api/README.md | 40 +++++++- packages/plugins/flyte-api/package.json | 16 ++-- .../src/ApiProvider/apiProvider.test.tsx | 47 ++++++++++ .../flyte-api/src/ApiProvider/index.tsx | 56 +++++++++++ .../flyte-api/src/ApiProvider/login.ts | 22 +++++ .../plugins/flyte-api/src/Sample/index.tsx | 41 -------- .../flyte-api/src/Sample/sample.stories.tsx | 34 ------- .../flyte-api/src/Sample/sample.test.tsx | 11 --- packages/plugins/flyte-api/src/index.ts | 5 +- .../plugins/flyte-api/src/utils/constants.ts | 10 ++ .../plugins/flyte-api/src/utils/errors.ts | 36 +++++++ packages/plugins/flyte-api/src/utils/index.ts | 74 +++++++++++++++ .../plugins/flyte-api/src/utils/nodeChecks.ts | 4 + .../plugins/flyte-api/src/utils/utils.test.ts | 65 +++++++++++++ packages/zapp/console/package.json | 6 +- .../zapp/console/src/components/App/App.tsx | 31 +++--- .../filters/useOnlyMyExecutionsFilterState.ts | 2 +- .../components/Navigation/UserInformation.tsx | 20 ++-- .../Navigation/test/UserInformation.test.tsx | 35 ++++--- .../Project/test/ProjectDashboard.test.tsx | 40 ++++---- .../Project/test/ProjectTask.test.tsx | 21 +++-- .../Project/test/ProjectWorkflows.test.tsx | 20 ++-- .../data/QueryAuthorizationObserver.tsx | 6 +- .../console/src/components/data/apiContext.ts | 29 +----- .../src/components/hooks/useFetchableData.ts | 6 +- .../src/components/hooks/useUserProfile.ts | 8 +- .../src/components/hooks/useVersion.ts | 8 +- .../AdminEntity/transformRequestError.ts | 2 +- .../console/src/models/AdminEntity/utils.ts | 21 ----- .../zapp/console/src/models/Common/api.ts | 51 ++-------- .../console/src/models/Common/constants.ts | 22 ----- yarn.lock | 94 ++++++++++++------- 34 files changed, 550 insertions(+), 345 deletions(-) create mode 100644 packages/plugins/flyte-api/src/ApiProvider/apiProvider.test.tsx create mode 100644 packages/plugins/flyte-api/src/ApiProvider/index.tsx create mode 100644 packages/plugins/flyte-api/src/ApiProvider/login.ts delete mode 100644 packages/plugins/flyte-api/src/Sample/index.tsx delete mode 100644 packages/plugins/flyte-api/src/Sample/sample.stories.tsx delete mode 100644 packages/plugins/flyte-api/src/Sample/sample.test.tsx create mode 100644 packages/plugins/flyte-api/src/utils/constants.ts create mode 100644 packages/plugins/flyte-api/src/utils/errors.ts create mode 100644 packages/plugins/flyte-api/src/utils/index.ts create mode 100644 packages/plugins/flyte-api/src/utils/nodeChecks.ts create mode 100644 packages/plugins/flyte-api/src/utils/utils.test.ts diff --git a/packages/composites/ui-atoms/package.json b/packages/composites/ui-atoms/package.json index 3d53063d4..0ef6e457f 100644 --- a/packages/composites/ui-atoms/package.json +++ b/packages/composites/ui-atoms/package.json @@ -3,8 +3,8 @@ "version": "0.0.1-rc.2", "description": "Flyteconsole UI atoms, which didn't plan to be published and would be consumed as is internally", "main": "./dist/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/esm/index.d.ts", + "module": "./lib/index.js", + "types": "./lib/index.d.ts", "license": "Apache-2.0", "private": false, "publishConfig": { @@ -13,7 +13,7 @@ }, "scripts": { "build": "yarn build:esm && yarn build:cjs", - "build:esm": "tsc --module esnext --outDir lib/esm", + "build:esm": "tsc --module esnext --outDir lib", "build:cjs": "tsc", "test": "NODE_ENV=test jest" }, diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json index 0e88f35b4..50905e212 100644 --- a/packages/plugins/components/package.json +++ b/packages/plugins/components/package.json @@ -3,8 +3,8 @@ "version": "0.0.1-rc.2", "description": "Flyteconsole Components module, which is published as npm package and can be consumed by 3rd parties", "main": "./dist/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/esm/index.d.ts", + "module": "./lib/index.js", + "types": "./lib/index.d.ts", "license": "Apache-2.0", "private": false, "publishConfig": { @@ -13,7 +13,7 @@ }, "scripts": { "build": "yarn build:esm && yarn build:cjs", - "build:esm": "tsc --module esnext --outDir lib/esm --project ./tsconfig.build.json", + "build:esm": "tsc --module esnext --outDir lib --project ./tsconfig.build.json", "build:cjs": "tsc --project ./tsconfig.build.json", "test": "NODE_ENV=test jest" }, diff --git a/packages/plugins/flyte-api/README.md b/packages/plugins/flyte-api/README.md index b8c09ddd5..bf4f72fa3 100644 --- a/packages/plugins/flyte-api/README.md +++ b/packages/plugins/flyte-api/README.md @@ -1 +1,39 @@ -This is a flyte-API package for flyteconsole plugin system +## @flyteconsole/flyte-api + +This package provides ability to do FlyteAdmin API calls from JS/TS code. + +At this point it allows to get though authentication steps, request user profile and FlyteAdmin version. +In future releases we will add ability to do all types of FlyteAdmin API calls. + +### Installation + +To install the package please run: +```bash +yarn add @flyteconsole/flyte-api +``` + +### Usage + +To use in your application + +- Wrap parent component with + +`ADMIN_API_URL` is a flyte admin domain URL to which `/api/v1/_endpoint` part would be added, to perform REST API call. + ` +Then from any child component + +```js +import useAxios from 'axios-hooks'; +import { useFlyteApi, defaultAxiosConfig } from '@flyteconsole/flyte-api'; + +... +/** Get profile information */ +const apiContext = useFlyteApi(); + +const profilePath = apiContext.getProfileUrl(); +const [{ data: profile, loading }] = useAxios({ + url: profilePath, + method: 'GET', + ...defaultAxiosConfig, +}); +``` diff --git a/packages/plugins/flyte-api/package.json b/packages/plugins/flyte-api/package.json index 10d551800..b5bcda356 100644 --- a/packages/plugins/flyte-api/package.json +++ b/packages/plugins/flyte-api/package.json @@ -1,10 +1,10 @@ { "name": "@flyteconsole/flyte-api", - "version": "0.0.1-rc.1", + "version": "0.0.2", "description": "FlyteConsole plugin to allow access FlyteAPI", "main": "./dist/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/esm/index.d.ts", + "module": "./lib/index.js", + "types": "./lib/index.d.ts", "license": "Apache-2.0", "private": false, "publishConfig": { @@ -12,15 +12,17 @@ "registry": "https://registry.npmjs.org/" }, "scripts": { + "clean": "rm -rf dist && rm -rf lib", "build": "yarn build:esm && yarn build:cjs", - "build:esm": "tsc --module esnext --outDir lib/esm --project ./tsconfig.build.json", + "build:esm": "tsc --module esnext --outDir lib --project ./tsconfig.build.json", "build:cjs": "tsc --project ./tsconfig.build.json", + "push:update": "yarn clean && yarn build && yarn publish", "test": "NODE_ENV=test jest" }, "dependencies": { - "@material-ui/core": "^4.0.0", - "@material-ui/icons": "^4.0.0", - "classnames": "^2.3.1" + "axios": "^0.27.2", + "camelcase-keys": "^7.0.2", + "snakecase-keys": "^5.4.2" }, "peerDependencies": { "react": "^16.13.1", diff --git a/packages/plugins/flyte-api/src/ApiProvider/apiProvider.test.tsx b/packages/plugins/flyte-api/src/ApiProvider/apiProvider.test.tsx new file mode 100644 index 000000000..63b84cbb3 --- /dev/null +++ b/packages/plugins/flyte-api/src/ApiProvider/apiProvider.test.tsx @@ -0,0 +1,47 @@ +import * as React from 'react'; +import { render } from '@testing-library/react'; +import { FlyteApiProvider, useFlyteApi } from '.'; +import { AdminEndpoint } from '../utils/constants'; +import { getLoginUrl } from './login'; + +const MockCoponent = () => { + const context = useFlyteApi(); + + return ( + <> +
{context.getProfileUrl()}
+
{context.getAdminApiUrl('/magic')}
+
{context.getLoginUrl()}
+ + ); +}; + +describe('fltyte-api/ApiProvider', () => { + it('getLoginUrl properly adds redirect url', () => { + const result = getLoginUrl(AdminEndpoint.Version, `http://some.nonsense`); + expect(result).toEqual('/version/login?redirect_url=http://some.nonsense'); + }); + + it('If FlyteApiContext is not defined, returned URL uses default value', () => { + const { getAllByText } = render(); + expect(getAllByText('#').length).toBe(3); + }); + + it('If FlyteApiContext is defined, but flyteApiDomain is not point to localhost', () => { + const { getByText } = render( + + + , + ); + expect(getByText('http://localhost/me')).toBeInTheDocument(); + }); + + it('If FlyteApiContext provides flyteApiDomain value', () => { + const { getByText } = render( + + + , + ); + expect(getByText('https://some.domain.here/me')).toBeInTheDocument(); + }); +}); diff --git a/packages/plugins/flyte-api/src/ApiProvider/index.tsx b/packages/plugins/flyte-api/src/ApiProvider/index.tsx new file mode 100644 index 000000000..137caf2b9 --- /dev/null +++ b/packages/plugins/flyte-api/src/ApiProvider/index.tsx @@ -0,0 +1,56 @@ +import * as React from 'react'; +import { createContext, useContext } from 'react'; +import { getAdminApiUrl, getEndpointUrl } from '../utils'; +import { AdminEndpoint, RawEndpoint } from '../utils/constants'; +import { defaultLoginStatus, getLoginUrl, LoginStatus } from './login'; + +export interface FlyteApiContextState { + loginStatus: LoginStatus; + getLoginUrl: (redirect?: string) => string; + getProfileUrl: () => string; + getAdminApiUrl: (endpoint: AdminEndpoint | string) => string; +} + +const FlyteApiContext = createContext({ + // default values - used when Provider wrapper is not found + loginStatus: defaultLoginStatus, + getLoginUrl: () => '#', + getProfileUrl: () => '#', + getAdminApiUrl: () => '#', +}); + +interface FlyteApiProviderProps { + flyteApiDomain?: string; + children?: React.ReactNode; +} + +export const useFlyteApi = () => useContext(FlyteApiContext); + +export const FlyteApiProvider = (props: FlyteApiProviderProps) => { + const { flyteApiDomain } = props; + + const [loginExpired, setLoginExpired] = React.useState(false); + + // Whenever we detect expired credentials, trigger a login redirect automatically + React.useEffect(() => { + if (loginExpired) { + window.location.href = getLoginUrl(flyteApiDomain); + } + }, [loginExpired]); + + return ( + getLoginUrl(flyteApiDomain, redirect), + getProfileUrl: () => getEndpointUrl(RawEndpoint.Profile, flyteApiDomain), + getAdminApiUrl: (endpoint) => getAdminApiUrl(endpoint, flyteApiDomain), + }} + > + {props.children} + + ); +}; diff --git a/packages/plugins/flyte-api/src/ApiProvider/login.ts b/packages/plugins/flyte-api/src/ApiProvider/login.ts new file mode 100644 index 000000000..f0c70b943 --- /dev/null +++ b/packages/plugins/flyte-api/src/ApiProvider/login.ts @@ -0,0 +1,22 @@ +import { getEndpointUrl } from '../utils'; +import { RawEndpoint } from '../utils/constants'; + +export interface LoginStatus { + expired: boolean; + setExpired(expired: boolean): void; +} + +export const defaultLoginStatus: LoginStatus = { + expired: true, + setExpired: () => { + /** Do nothing */ + }, +}; + +/** Constructs a url for redirecting to the Admin login endpoint and returning + * to the current location after completing the flow. + */ +export function getLoginUrl(adminUrl?: string, redirectUrl: string = window.location.href) { + const baseUrl = getEndpointUrl(RawEndpoint.Login, adminUrl); + return `${baseUrl}?redirect_url=${redirectUrl}`; +} diff --git a/packages/plugins/flyte-api/src/Sample/index.tsx b/packages/plugins/flyte-api/src/Sample/index.tsx deleted file mode 100644 index 7be98984d..000000000 --- a/packages/plugins/flyte-api/src/Sample/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import * as React from 'react'; -import { AppBar, Toolbar, IconButton, makeStyles, Theme } from '@material-ui/core'; -import MenuIcon from '@material-ui/icons/Menu'; - -const useStyles = makeStyles((theme: Theme) => ({ - spacer: { - flexGrow: 1, - }, - menuButton: { - marginRight: theme.spacing(2), - }, -})); - -export interface SampleComponentProps { - useCustomContent?: boolean; // rename to show that it is a backNavigation - className?: string; -} - -/** Contains all content in the top navbar of the application. */ -export const SampleComponent = (props: SampleComponentProps) => { - const styles = useStyles(); - - return ( - - -
- {' Sample Text '} -
- - - - - - ); -}; diff --git a/packages/plugins/flyte-api/src/Sample/sample.stories.tsx b/packages/plugins/flyte-api/src/Sample/sample.stories.tsx deleted file mode 100644 index 12b58a5e6..000000000 --- a/packages/plugins/flyte-api/src/Sample/sample.stories.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as React from 'react'; -import { ComponentStory, ComponentMeta } from '@storybook/react'; -import { makeStyles, Theme } from '@material-ui/core/styles'; - -import { SampleComponent } from '.'; - -export default { - title: 'Flyte-API/Sample', - component: SampleComponent, -} as ComponentMeta; - -const useStyles = makeStyles((_theme: Theme) => ({ - updatedOne: { - backgroundColor: 'lightblue', - color: 'black', - }, - updatedTwo: { - backgroundColor: 'black', - color: 'yellow', - }, -})); - -const Template: ComponentStory = () => ; -export const Primary = Template.bind({}); - -export const Secondary: ComponentStory = () => { - const styles = useStyles(); - return ; -}; - -export const Tertiary: ComponentStory = () => { - const styles = useStyles(); - return ; -}; diff --git a/packages/plugins/flyte-api/src/Sample/sample.test.tsx b/packages/plugins/flyte-api/src/Sample/sample.test.tsx deleted file mode 100644 index e6728d223..000000000 --- a/packages/plugins/flyte-api/src/Sample/sample.test.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import * as React from 'react'; -import { render, screen } from '@testing-library/react'; -import { SampleComponent } from './index'; - -describe('add function', () => { - it('SampleComponent is rendered contains correct text', () => { - render(); - const text = screen.getByText('Sample Text'); - expect(text).toBeInTheDocument(); - }); -}); diff --git a/packages/plugins/flyte-api/src/index.ts b/packages/plugins/flyte-api/src/index.ts index 21c680758..ef7f4f4f2 100644 --- a/packages/plugins/flyte-api/src/index.ts +++ b/packages/plugins/flyte-api/src/index.ts @@ -1 +1,4 @@ -export { SampleComponent } from './Sample'; +export { FlyteApiProvider, useFlyteApi, type FlyteApiContextState } from './ApiProvider'; + +export { AdminEndpoint, RawEndpoint } from './utils/constants'; +export { getAxiosApiCall, defaultAxiosConfig } from './utils'; diff --git a/packages/plugins/flyte-api/src/utils/constants.ts b/packages/plugins/flyte-api/src/utils/constants.ts new file mode 100644 index 000000000..49cf31413 --- /dev/null +++ b/packages/plugins/flyte-api/src/utils/constants.ts @@ -0,0 +1,10 @@ +export enum RawEndpoint { + Login = '/login', + Profile = '/me', +} + +export const adminApiPrefix = '/api/v1'; + +export enum AdminEndpoint { + Version = '/version', +} diff --git a/packages/plugins/flyte-api/src/utils/errors.ts b/packages/plugins/flyte-api/src/utils/errors.ts new file mode 100644 index 000000000..81c66bd2c --- /dev/null +++ b/packages/plugins/flyte-api/src/utils/errors.ts @@ -0,0 +1,36 @@ +/* eslint-disable max-classes-per-file */ +import { AxiosError } from 'axios'; + +export class NotFoundError extends Error { + constructor(public override name: string, msg = 'The requested item could not be found') { + super(msg); + } +} + +/** Indicates failure to fetch a resource because the user is not authorized (401) */ +export class NotAuthorizedError extends Error { + constructor(msg = 'User is not authorized to view this resource') { + super(msg); + } +} + +/** Detects special cases for errors returned from Axios and lets others pass through. */ +export function transformRequestError(err: unknown, path: string) { + const error = err as AxiosError; + + if (!error.response) { + return error; + } + + // For some status codes, we'll throw a special error to allow + // client code and components to handle separately + if (error.response.status === 404) { + return new NotFoundError(path); + } + if (error.response.status === 401) { + return new NotAuthorizedError(); + } + + // this error is not decoded. + return error; +} diff --git a/packages/plugins/flyte-api/src/utils/index.ts b/packages/plugins/flyte-api/src/utils/index.ts new file mode 100644 index 000000000..2658a6a22 --- /dev/null +++ b/packages/plugins/flyte-api/src/utils/index.ts @@ -0,0 +1,74 @@ +import axios, { + AxiosRequestConfig, + AxiosRequestTransformer, + AxiosResponseTransformer, +} from 'axios'; +import * as snakecaseKeys from 'snakecase-keys'; +import * as camelcaseKeys from 'camelcase-keys'; +import { AdminEndpoint, adminApiPrefix, RawEndpoint } from './constants'; +import { isObject } from './nodeChecks'; +import { transformRequestError } from './errors'; + +/** Ensures that a string is slash-prefixed */ +function ensureSlashPrefixed(path: string) { + return path.startsWith('/') ? path : `/${path}`; +} + +/** Creates a URL to the same host with a given path */ +function createLocalURL(path: string) { + return `${window.location.origin}${ensureSlashPrefixed(path)}`; +} + +/** Updates Enpoint url depending on admin domain */ +export function getEndpointUrl(endpoint: RawEndpoint | string, adminUrl?: string) { + if (adminUrl) { + return `${adminUrl}${endpoint}`; + } + + return createLocalURL(endpoint); +} + +/** Adds admin api prefix to domain Url */ +export function getAdminApiUrl(endpoint: AdminEndpoint | string, adminUrl?: string) { + const finalUrl = `${adminApiPrefix}${ensureSlashPrefixed(endpoint)}`; + + if (adminUrl) { + return `${adminUrl}${finalUrl}`; + } + + return createLocalURL(finalUrl); +} + +/** Config object that can be used for requests that are not sent to + * the Admin entity API (`/api/v1/...`), such as the `/me` endpoint. This config + * ensures that requests/responses are correctly converted and that cookies are + * included. + */ +export const defaultAxiosConfig: AxiosRequestConfig = { + transformRequest: [ + (data: any) => (isObject(data) ? snakecaseKeys(data) : data), + ...(axios.defaults.transformRequest as AxiosRequestTransformer[]), + ], + transformResponse: [ + ...(axios.defaults.transformResponse as AxiosResponseTransformer[] as any), + camelcaseKeys, + ], + withCredentials: true, +}; + +/** + * @deprecated Please use `axios-hooks` instead, it will allow you to get full call status. + * example usage https://www.npmjs.com/package/axios-hooks: + * const [{ data: profile, loading, errot }] = useAxios({url: path, method: 'GET', ...defaultAxiosConfig}); + */ +export const getAxiosApiCall = async (path: string): Promise => { + try { + const { data } = await axios.get(path, defaultAxiosConfig); + return data; + } catch (e) { + const { message } = transformRequestError(e, path); + // eslint-disable-next-line no-console + console.error(`Failed to fetch data: ${message}`); + return null; + } +}; diff --git a/packages/plugins/flyte-api/src/utils/nodeChecks.ts b/packages/plugins/flyte-api/src/utils/nodeChecks.ts new file mode 100644 index 000000000..13dc100b7 --- /dev/null +++ b/packages/plugins/flyte-api/src/utils/nodeChecks.ts @@ -0,0 +1,4 @@ +// recommended util.d.ts implementation +export const isObject = (value: unknown): boolean => { + return value !== null && typeof value === 'object'; +}; diff --git a/packages/plugins/flyte-api/src/utils/utils.test.ts b/packages/plugins/flyte-api/src/utils/utils.test.ts new file mode 100644 index 000000000..fb2d2b6a1 --- /dev/null +++ b/packages/plugins/flyte-api/src/utils/utils.test.ts @@ -0,0 +1,65 @@ +import { getAdminApiUrl, getEndpointUrl } from '.'; +import { AdminEndpoint, RawEndpoint } from './constants'; +import { transformRequestError } from './errors'; +import { isObject } from './nodeChecks'; + +describe('flyte-api/utils', () => { + it('getEndpointUrl properly uses local or admin domain', () => { + // when admin domain is not provided - uses localhost + let result = getEndpointUrl(RawEndpoint.Profile); + expect(result).toEqual('http://localhost/me'); + + // when admin domain is empty - uses localhost + result = getEndpointUrl(RawEndpoint.Profile, ''); + expect(result).toEqual('http://localhost/me'); + + // when admin domain is empty - uses localhost + result = getEndpointUrl(RawEndpoint.Profile, ''); + expect(result).toEqual('http://localhost/me'); + + // when admin domain provided - uses it + result = getEndpointUrl(RawEndpoint.Profile, 'https://admin.domain.io'); + expect(result).toEqual('https://admin.domain.io/me'); + }); + + it('getAdminApiUrl properly adds api/v1 prefix', () => { + // when admin domain is not provided - uses localhost + let result = getAdminApiUrl(AdminEndpoint.Version); + expect(result).toEqual('http://localhost/api/v1/version'); + + result = getAdminApiUrl('execution?=filter', 'https://admin.domain.io'); + expect(result).toEqual('https://admin.domain.io/api/v1/execution?=filter'); + }); + + it('isObject properly identifies objects', () => { + // Not an objects + expect(isObject(null)).toBeFalsy(); + expect(isObject(undefined)).toBeFalsy(); + expect(isObject(3)).toBeFalsy(); + expect(isObject('abc')).toBeFalsy(); + expect(isObject(true)).toBeFalsy(); + + // Objects + expect(isObject({ hi: 'there' })).toBeTruthy(); + expect(isObject([])).toBeTruthy(); + expect(isObject({})).toBeTruthy(); + }); + + it('transformRequestError', () => { + // no status - return item as is + let result = transformRequestError({ message: 'default' }, ''); + expect(result.message).toEqual('default'); + + // 401 - Unauthorised + result = transformRequestError({ response: { status: 401 }, message: 'default' }, ''); + expect(result.message).toEqual('User is not authorized to view this resource'); + + // 404 - Not Found + result = transformRequestError({ response: { status: 404 }, message: 'default' }, ''); + expect(result.message).toEqual('The requested item could not be found'); + + // unnown status - return item as is + result = transformRequestError({ response: { status: 502 }, message: 'default' }, ''); + expect(result.message).toEqual('default'); + }); +}); diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index e34a1d523..145dfa5c5 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -95,11 +95,11 @@ "@typescript-eslint/parser": "^5.15.0", "@xstate/react": "^1.0.0", "autoprefixer": "^8.3.0", - "axios": "^0.21.2", + "axios": "^0.27.2", "axios-mock-adapter": "^1.16.0", "babel-loader": "^8.2.5", "babel-polyfill": "^6.26.0", - "camelcase-keys": "^6.1.1", + "camelcase-keys": "^7.0.2", "classnames": "^2.3.1", "compression-webpack-plugin": "^9.2.0", "contrast": "^1.0.1", @@ -147,7 +147,7 @@ "resolve-url-loader": "^5.0.0", "semantic-release": "^17.2.3", "shallowequal": "^1.1.0", - "snakecase-keys": "^3.1.0", + "snakecase-keys": "^5.4.2", "source-map-loader": "^3.0.1", "ts-loader": "^9.2.6", "ts-node": "^8.0.2", diff --git a/packages/zapp/console/src/components/App/App.tsx b/packages/zapp/console/src/components/App/App.tsx index ef417ab10..9ef9d323d 100644 --- a/packages/zapp/console/src/components/App/App.tsx +++ b/packages/zapp/console/src/components/App/App.tsx @@ -1,5 +1,7 @@ +import * as React from 'react'; import { CssBaseline, Collapse } from '@material-ui/core'; import { ThemeProvider } from '@material-ui/styles'; +import { FlyteApiProvider } from '@flyteconsole/flyte-api'; import { SnackbarProvider } from 'notistack'; import { FeatureFlagsProvider } from 'basics/FeatureFlags'; import { env } from 'common/env'; @@ -11,7 +13,6 @@ import { createQueryClient } from 'components/data/queryCache'; import { SystemStatusBanner } from 'components/Notifications/SystemStatusBanner'; import { skeletonColor, skeletonHighlightColor } from 'components/Theme/constants'; import { muiTheme } from 'components/Theme/muiTheme'; -import * as React from 'react'; import { hot } from 'react-hot-loader'; import { SkeletonTheme } from 'react-loading-skeleton'; import { QueryClientProvider } from 'react-query'; @@ -41,19 +42,21 @@ export const AppComponent: React.FC = () => { TransitionComponent={Collapse} > - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/packages/zapp/console/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts b/packages/zapp/console/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts index 2e39dd12b..f1d071a68 100644 --- a/packages/zapp/console/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts +++ b/packages/zapp/console/src/components/Executions/filters/useOnlyMyExecutionsFilterState.ts @@ -25,7 +25,7 @@ export function useOnlyMyExecutionsFilterState({ initialValue, }: OnlyMyExecutionsFilterStateProps): OnlyMyExecutionsFilterState { const profile = useUserProfile(); - const userId = profile.value?.subject ? profile.value.subject : ''; + const userId = profile.value?.subject ?? ''; const isFlagEnabled = useFeatureFlag(FeatureFlag.OnlyMine); const onlyMineExecutionsSelectedValue = useOnlyMineSelectedValue(OnlyMyFilter.OnlyMyExecutions); const [onlyMyExecutionsValue, setOnlyMyExecutionsValue] = useState( diff --git a/packages/zapp/console/src/components/Navigation/UserInformation.tsx b/packages/zapp/console/src/components/Navigation/UserInformation.tsx index 31527df77..acac76357 100644 --- a/packages/zapp/console/src/components/Navigation/UserInformation.tsx +++ b/packages/zapp/console/src/components/Navigation/UserInformation.tsx @@ -1,9 +1,8 @@ import * as React from 'react'; -import Link from '@material-ui/core/Link'; -import { makeStyles, Theme } from '@material-ui/core/styles'; +import { useFlyteApi } from '@flyteconsole/flyte-api'; +import { Link, makeStyles, Theme } from '@material-ui/core'; import { WaitForData } from 'components/common/WaitForData'; import { useUserProfile } from 'components/hooks/useUserProfile'; -import { getLoginUrl } from 'models/AdminEntity/utils'; import t from './strings'; const useStyles = makeStyles((theme: Theme) => ({ @@ -12,22 +11,25 @@ const useStyles = makeStyles((theme: Theme) => ({ }, })); -const LoginLink: React.FC = () => ( - - {t('login')} - -); +const LoginLink = (props: { loginUrl: string }) => { + return ( + + {t('login')} + + ); +}; /** Displays user info if logged in, or a login link otherwise. */ export const UserInformation: React.FC<{}> = () => { const style = useStyles(); const profile = useUserProfile(); + const apiContext = useFlyteApi(); return (
{!profile.value ? ( - + ) : !profile.value.preferredUsername || profile.value.preferredUsername === '' ? ( profile.value.name ) : ( diff --git a/packages/zapp/console/src/components/Navigation/test/UserInformation.test.tsx b/packages/zapp/console/src/components/Navigation/test/UserInformation.test.tsx index 09bbf23bc..4e0eb83a0 100644 --- a/packages/zapp/console/src/components/Navigation/test/UserInformation.test.tsx +++ b/packages/zapp/console/src/components/Navigation/test/UserInformation.test.tsx @@ -1,42 +1,39 @@ import { render, waitFor } from '@testing-library/react'; -import { APIContext } from 'components/data/apiContext'; -import { mockAPIContextValue } from 'components/data/__mocks__/apiContext'; -import { getUserProfile } from 'models/Common/api'; +import { FetchableData } from 'components/hooks/types'; +import { useUserProfile } from 'components/hooks/useUserProfile'; +import { loadedFetchable } from 'components/hooks/__mocks__/fetchableData'; import { UserProfile } from 'models/Common/types'; import * as React from 'react'; + import { UserInformation } from '../UserInformation'; +jest.mock('components/hooks/useUserProfile'); + describe('UserInformation', () => { const sampleUserProfile: UserProfile = { preferredUsername: 'testUser@example.com', } as UserProfile; - let mockGetUserProfile: jest.Mock>; - - const UserInformationWithContext = () => ( - - - - ); - - beforeEach(() => { - mockGetUserProfile = jest.fn().mockResolvedValue(null); - }); + const mockUseUserProfile = useUserProfile as jest.Mock>; it('Shows login link if no user profile exists', async () => { - const { getByText } = render(); + mockUseUserProfile.mockReturnValue(loadedFetchable(null, jest.fn())); + const { getByText } = render(); + await waitFor(() => getByText('Login')); - expect(mockGetUserProfile).toHaveBeenCalled(); + expect(mockUseUserProfile).toHaveBeenCalled(); + const element = getByText('Login'); expect(element).toBeInTheDocument(); expect(element.tagName).toBe('A'); }); it('Shows user preferredName if profile exists', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); - const { getByText } = render(); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); + const { getByText } = render(); + await waitFor(() => getByText(sampleUserProfile.preferredUsername)); - expect(mockGetUserProfile).toHaveBeenCalled(); + expect(mockUseUserProfile).toHaveBeenCalled(); expect(getByText(sampleUserProfile.preferredUsername)).toBeInTheDocument(); }); }); diff --git a/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx index fe4af21af..1008c4152 100644 --- a/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx +++ b/packages/zapp/console/src/components/Project/test/ProjectDashboard.test.tsx @@ -13,16 +13,16 @@ import * as React from 'react'; import { QueryClient, QueryClientProvider } from 'react-query'; import { MemoryRouter } from 'react-router'; import { createTestQueryClient, disableQueryLogger, enableQueryLogger } from 'test/utils'; - -import { APIContext } from 'components/data/apiContext'; -import { mockAPIContextValue } from 'components/data/__mocks__/apiContext'; -import { getUserProfile } from 'models/Common/api'; +import { useUserProfile } from 'components/hooks/useUserProfile'; +import { FetchableData } from 'components/hooks/types'; +import { loadedFetchable } from 'components/hooks/__mocks__/fetchableData'; import { getProjectDomainAttributes } from 'models/Project/api'; import { Admin } from 'flyteidl'; import * as LocalCache from 'basics/LocalCache'; import { ProjectDashboard } from '../ProjectDashboard'; import { failedToLoadExecutionsString } from '../constants'; +jest.mock('components/hooks/useUserProfile'); jest.mock('components/Executions/Tables/WorkflowExecutionsTable'); jest.mock('notistack', () => ({ useSnackbar: () => ({ enqueueSnackbar: jest.fn() }), @@ -48,13 +48,14 @@ jest.mock('models/Project/api', () => ({ })); describe('ProjectDashboard', () => { + const mockUseUserProfile = useUserProfile as jest.Mock>; + let basicPythonFixture: ReturnType; let failedTaskFixture: ReturnType; let executions1: Execution[]; let executions2: Execution[]; let scope: DomainIdentifierScope; let queryClient: QueryClient; - let mockGetUserProfile: jest.Mock>; const sampleUserProfile: UserProfile = { subject: 'subject', @@ -74,12 +75,13 @@ describe('ProjectDashboard', () => { jest.spyOn(LocalCache, 'useLocalCache'); beforeEach(() => { - mockGetUserProfile = jest.fn().mockResolvedValue(null); + mockUseUserProfile.mockReturnValue(loadedFetchable(null, jest.fn())); queryClient = createTestQueryClient(); basicPythonFixture = basicPythonWorkflow.generate(); failedTaskFixture = oneFailedTaskWorkflow.generate(); insertFixture(mockServer, basicPythonFixture); insertFixture(mockServer, failedTaskFixture); + executions1 = [ basicPythonFixture.workflowExecutions.top.data, failedTaskFixture.workflowExecutions.top.data, @@ -94,13 +96,7 @@ describe('ProjectDashboard', () => { const renderView = () => render( - - - + , { wrapper: MemoryRouter }, ); @@ -114,14 +110,14 @@ describe('ProjectDashboard', () => { }); it('should show loading spinner', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { queryByTestId } = renderView(); await waitFor(() => {}); expect(queryByTestId(/loading-spinner/i)).toBeDefined(); }); it('should display WorkflowExecutionsTable and BarChart ', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { queryByTestId } = renderView(); await waitFor(() => {}); expect(queryByTestId('workflow-table')).toBeDefined(); @@ -130,15 +126,17 @@ describe('ProjectDashboard', () => { it('should not display checkbox if user does not login', async () => { const { queryByTestId } = renderView(); await waitFor(() => {}); - expect(mockGetUserProfile).toHaveBeenCalled(); + expect(mockUseUserProfile).toHaveBeenCalled(); expect(queryByTestId(/checkbox/i)).toBeNull(); }); it('should display checkboxes if user login', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getAllByRole } = renderView(); + await waitFor(() => {}); - expect(mockGetUserProfile).toHaveBeenCalled(); + expect(mockUseUserProfile).toHaveBeenCalled(); + // There are 2 checkboxes on a page: 1 - onlyMyExecutions, 2 - show archived, both unchecked by default const checkboxes = getAllByRole(/checkbox/i) as HTMLInputElement[]; expect(checkboxes).toHaveLength(2); @@ -148,16 +146,18 @@ describe('ProjectDashboard', () => { /** user doesn't have its own workflow */ it('should not display workflow if the user does not have one when filtered onlyMyExecutions', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getByText, queryByText, getAllByRole } = renderView(); await waitFor(() => {}); - expect(mockGetUserProfile).toHaveBeenCalled(); + expect(mockUseUserProfile).toHaveBeenCalled(); + // There are 2 checkboxes on a page: 1 - onlyMyExecutions, 2 - show archived, both unchecked by default const checkboxes = getAllByRole(/checkbox/i) as HTMLInputElement[]; expect(checkboxes[0]).toBeTruthy(); expect(checkboxes[0]?.checked).toEqual(false); await waitFor(() => expect(getByText(executions1[0].closure.workflowId.name))); fireEvent.click(checkboxes[0]); + // when user selects checkbox, table should have no executions to display await waitFor(() => expect(queryByText(executions1[0].closure.workflowId.name)).toBeNull()); }); diff --git a/packages/zapp/console/src/components/Project/test/ProjectTask.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectTask.test.tsx index 9642f01e8..b8afe58bc 100644 --- a/packages/zapp/console/src/components/Project/test/ProjectTask.test.tsx +++ b/packages/zapp/console/src/components/Project/test/ProjectTask.test.tsx @@ -1,8 +1,11 @@ import { fireEvent, render, waitFor } from '@testing-library/react'; import { APIContext } from 'components/data/apiContext'; +import { useUserProfile } from 'components/hooks/useUserProfile'; import { mockAPIContextValue } from 'components/data/__mocks__/apiContext'; +import { FetchableData } from 'components/hooks/types'; +import { loadedFetchable } from 'components/hooks/__mocks__/fetchableData'; import { FilterOperationName } from 'models/AdminEntity/types'; -import { getUserProfile, listNamedEntities } from 'models/Common/api'; +import { listNamedEntities } from 'models/Common/api'; import { NamedEntity, NamedEntityIdentifier, @@ -27,6 +30,7 @@ const sampleUserProfile: UserProfile = { subject: 'subject', } as UserProfile; +jest.mock('components/hooks/useUserProfile'); jest.mock('notistack', () => ({ useSnackbar: () => ({ enqueueSnackbar: jest.fn() }), })); @@ -41,10 +45,10 @@ describe('ProjectTasks', () => { let tasks: NamedEntity[]; let queryClient: QueryClient; let mockListNamedEntities: jest.Mock>; - let mockGetUserProfile: jest.Mock>; + const mockUseUserProfile = useUserProfile as jest.Mock>; beforeEach(() => { - mockGetUserProfile = jest.fn().mockResolvedValue(null); + mockUseUserProfile.mockReturnValue(loadedFetchable(null, jest.fn())); queryClient = createTestQueryClient(); tasks = ['MyTask', 'MyOtherTask'].map((name) => createTask({ domain, name, project })); mockListNamedEntities = jest.fn().mockResolvedValue({ entities: tasks }); @@ -60,10 +64,7 @@ describe('ProjectTasks', () => { render( @@ -91,7 +92,7 @@ describe('ProjectTasks', () => { }); it('should display checkbox if user login', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getAllByRole } = renderComponent(); await waitFor(() => {}); const checkboxes = getAllByRole(/checkbox/i) as HTMLInputElement[]; @@ -101,7 +102,7 @@ describe('ProjectTasks', () => { }); it('should display archive button', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getByText, getAllByTitle, findAllByText } = renderComponent(); await waitFor(() => {}); @@ -130,7 +131,7 @@ describe('ProjectTasks', () => { }); it('clicking show archived should hide active tasks', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getByText, queryByText, getAllByRole } = renderComponent(); await waitFor(() => {}); diff --git a/packages/zapp/console/src/components/Project/test/ProjectWorkflows.test.tsx b/packages/zapp/console/src/components/Project/test/ProjectWorkflows.test.tsx index 49a43be48..da1bd7f5b 100644 --- a/packages/zapp/console/src/components/Project/test/ProjectWorkflows.test.tsx +++ b/packages/zapp/console/src/components/Project/test/ProjectWorkflows.test.tsx @@ -1,8 +1,11 @@ import { fireEvent, render, waitFor } from '@testing-library/react'; import { APIContext } from 'components/data/apiContext'; import { mockAPIContextValue } from 'components/data/__mocks__/apiContext'; +import { FetchableData } from 'components/hooks/types'; +import { useUserProfile } from 'components/hooks/useUserProfile'; +import { loadedFetchable } from 'components/hooks/__mocks__/fetchableData'; import { FilterOperationName } from 'models/AdminEntity/types'; -import { getUserProfile, listNamedEntities } from 'models/Common/api'; +import { listNamedEntities } from 'models/Common/api'; import { NamedEntity, UserProfile } from 'models/Common/types'; import { NamedEntityState } from 'models/enums'; import * as React from 'react'; @@ -16,6 +19,7 @@ const sampleUserProfile: UserProfile = { subject: 'subject', } as UserProfile; +jest.mock('components/hooks/useUserProfile'); jest.mock('notistack', () => ({ useSnackbar: () => ({ enqueueSnackbar: jest.fn() }), })); @@ -26,10 +30,11 @@ describe('ProjectWorkflows', () => { let workflowNames: NamedEntity[]; let queryClient: QueryClient; let mockListNamedEntities: jest.Mock>; - let mockGetUserProfile: jest.Mock>; + + const mockUseUserProfile = useUserProfile as jest.Mock>; beforeEach(() => { - mockGetUserProfile = jest.fn().mockResolvedValue(null); + mockUseUserProfile.mockReturnValue(loadedFetchable(null, jest.fn())); queryClient = createTestQueryClient(); workflowNames = ['MyWorkflow', 'MyOtherWorkflow'].map((name) => createWorkflowName({ domain, name, project }), @@ -41,10 +46,7 @@ describe('ProjectWorkflows', () => { render( @@ -71,7 +73,7 @@ describe('ProjectWorkflows', () => { }); it('should display checkbox if user login', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getAllByRole } = renderComponent(); await waitFor(() => {}); const checkboxes = getAllByRole(/checkbox/i) as HTMLInputElement[]; @@ -82,7 +84,7 @@ describe('ProjectWorkflows', () => { /** user doesn't have its own workflow */ it('clicking show archived should hide active workflows', async () => { - mockGetUserProfile.mockResolvedValue(sampleUserProfile); + mockUseUserProfile.mockReturnValue(loadedFetchable(sampleUserProfile, jest.fn())); const { getByText, queryByText, getAllByRole } = renderComponent(); await waitFor(() => {}); const checkboxes = getAllByRole(/checkbox/i) as HTMLInputElement[]; diff --git a/packages/zapp/console/src/components/data/QueryAuthorizationObserver.tsx b/packages/zapp/console/src/components/data/QueryAuthorizationObserver.tsx index 915112fdd..7a99851f7 100644 --- a/packages/zapp/console/src/components/data/QueryAuthorizationObserver.tsx +++ b/packages/zapp/console/src/components/data/QueryAuthorizationObserver.tsx @@ -1,15 +1,17 @@ import { NotAuthorizedError } from 'errors/fetchErrors'; import * as React from 'react'; import { onlineManager, Query, useQueryClient } from 'react-query'; -import { useAPIContext } from './apiContext'; +import { useFlyteApi } from '@flyteconsole/flyte-api'; /** Watches all queries to detect a NotAuthorized error, disabling future queries * and triggering the login refresh flow. * Note: Should be placed just below the QueryClient and ApiContext providers. */ + +// TODO: narusina - move this one to flyte-api too export const QueryAuthorizationObserver: React.FC = () => { const queryCache = useQueryClient().getQueryCache(); - const apiContext = useAPIContext(); + const apiContext = useFlyteApi(); React.useEffect(() => { const unsubscribe = queryCache.subscribe((query?: Query | undefined) => { if (!query || !query.state.error) { diff --git a/packages/zapp/console/src/components/data/apiContext.ts b/packages/zapp/console/src/components/data/apiContext.ts index 8378354ba..3dca31cd1 100644 --- a/packages/zapp/console/src/components/data/apiContext.ts +++ b/packages/zapp/console/src/components/data/apiContext.ts @@ -1,4 +1,3 @@ -import { getLoginUrl } from 'models/AdminEntity/utils'; import * as CommonAPI from 'models/Common/api'; import * as ExecutionAPI from 'models/Execution/api'; import * as LaunchAPI from 'models/Launch/api'; @@ -14,12 +13,8 @@ type APIFunctions = typeof CommonAPI & typeof TaskAPI & typeof WorkflowAPI; -export interface LoginStatus { - expired: boolean; - setExpired(expired: boolean): void; -} export interface APIContextValue extends APIFunctions { - loginStatus: LoginStatus; + // use API functions only, for now } export const defaultAPIContextValue = { @@ -29,12 +24,6 @@ export const defaultAPIContextValue = { ...ProjectAPI, ...TaskAPI, ...WorkflowAPI, - loginStatus: { - expired: false, - setExpired: () => { - // do nothing - }, - }, }; /** Exposes all of the model layer api functions for use by data fetching @@ -43,26 +32,10 @@ export const defaultAPIContextValue = { */ export const APIContext = React.createContext(defaultAPIContextValue); -function useLoginStatus(): LoginStatus { - const [expired, setExpired] = React.useState(false); - - // Whenever we detect expired credentials, trigger a login redirect automatically - React.useEffect(() => { - if (expired) { - window.location.href = getLoginUrl(); - } - }, [expired]); - return { - expired, - setExpired, - }; -} - /** Creates a state object that can be used as the value for APIContext.Provider */ export function useAPIState(): APIContextValue { return { ...defaultAPIContextValue, - loginStatus: useLoginStatus(), }; } diff --git a/packages/zapp/console/src/components/hooks/useFetchableData.ts b/packages/zapp/console/src/components/hooks/useFetchableData.ts index d4a397783..d6f1d91d2 100644 --- a/packages/zapp/console/src/components/hooks/useFetchableData.ts +++ b/packages/zapp/console/src/components/hooks/useFetchableData.ts @@ -1,10 +1,10 @@ import { useMachine } from '@xstate/react'; +import { FlyteApiContextState, useFlyteApi } from '@flyteconsole/flyte-api'; import { createDebugLogger } from 'common/log'; import { CacheContext } from 'components/Cache/CacheContext'; import { ValueCache } from 'components/Cache/createCache'; import { getCacheKey } from 'components/Cache/utils'; import { defaultStateMachineConfig } from 'components/common/constants'; -import { APIContextValue, useAPIContext } from 'components/data/apiContext'; import { NotAuthorizedError } from 'errors/fetchErrors'; import { useContext, useEffect, useMemo, useRef } from 'react'; import { fetchMachine } from './fetchMachine'; @@ -33,7 +33,7 @@ function isHashableInput(value: any): value is object | string { } interface CreateFetchFnConfig { - apiContext: APIContextValue; + apiContext: FlyteApiContextState; cache: ValueCache; cacheKey?: string; debugName?: string; @@ -110,7 +110,7 @@ export function useFetchableData( const cacheKey = isHashableInput(data) ? getCacheKey(data) : undefined; const contextCacheKey = useRef(); const cache = useContext(CacheContext); - const apiContext = useAPIContext(); + const apiContext = useFlyteApi(); const fetchFn = useMemo( () => createFetchFn({ diff --git a/packages/zapp/console/src/components/hooks/useUserProfile.ts b/packages/zapp/console/src/components/hooks/useUserProfile.ts index 1259bdffe..7f68aea4f 100644 --- a/packages/zapp/console/src/components/hooks/useUserProfile.ts +++ b/packages/zapp/console/src/components/hooks/useUserProfile.ts @@ -1,14 +1,16 @@ -import { useAPIContext } from 'components/data/apiContext'; import { UserProfile } from 'models/Common/types'; +import { useFlyteApi, getAxiosApiCall } from '@flyteconsole/flyte-api'; import { useFetchableData } from './useFetchableData'; /** State hook that returns the user information if logged in, null otherwise */ export function useUserProfile() { - const { getUserProfile } = useAPIContext(); + const { getProfileUrl } = useFlyteApi(); + const profilePath = getProfileUrl(); + return useFetchableData({ debugName: 'UserProfile', defaultValue: null, - doFetch: getUserProfile, + doFetch: () => getAxiosApiCall(profilePath), useCache: true, }); } diff --git a/packages/zapp/console/src/components/hooks/useVersion.ts b/packages/zapp/console/src/components/hooks/useVersion.ts index 59aca5c06..c4531f233 100644 --- a/packages/zapp/console/src/components/hooks/useVersion.ts +++ b/packages/zapp/console/src/components/hooks/useVersion.ts @@ -1,14 +1,16 @@ -import { useAPIContext } from 'components/data/apiContext'; +import { useFlyteApi, AdminEndpoint, getAxiosApiCall } from '@flyteconsole/flyte-api'; import { GetVersionResponse } from 'models/Common/types'; import { useFetchableData } from './useFetchableData'; /** State hook that returns the version information */ function useVersion() { - const { getVersion } = useAPIContext(); + const { getAdminApiUrl } = useFlyteApi(); + const versionPath = getAdminApiUrl(AdminEndpoint.Version); + return useFetchableData({ debugName: 'Version', defaultValue: null, - doFetch: getVersion, + doFetch: () => getAxiosApiCall(versionPath), useCache: true, }); } diff --git a/packages/zapp/console/src/models/AdminEntity/transformRequestError.ts b/packages/zapp/console/src/models/AdminEntity/transformRequestError.ts index 9df4275f3..a5d6b36ae 100644 --- a/packages/zapp/console/src/models/AdminEntity/transformRequestError.ts +++ b/packages/zapp/console/src/models/AdminEntity/transformRequestError.ts @@ -8,7 +8,7 @@ function decodeErrorResponseMessage(error: AxiosError) { try { // probablly using a wrong decode type.. is there a decode type for the error message? const decodedErrorResponseMessage = decodeProtoResponse( - error.response?.data, + error.response?.data as any, Admin.RawOutputDataConfig, ); if (decodedErrorResponseMessage && decodedErrorResponseMessage.outputLocationPrefix) { diff --git a/packages/zapp/console/src/models/AdminEntity/utils.ts b/packages/zapp/console/src/models/AdminEntity/utils.ts index 780f12b2a..8a067e3ac 100644 --- a/packages/zapp/console/src/models/AdminEntity/utils.ts +++ b/packages/zapp/console/src/models/AdminEntity/utils.ts @@ -10,9 +10,6 @@ import { } from './types'; const debug = createDebugLogger('adminEntity'); -const loginEndpoint = '/login'; -const profileEndpoint = '/me'; -const redirectParam = 'redirect_url'; /** Converts a path into a full Admin API url */ export function adminApiUrl(url: string) { @@ -23,24 +20,6 @@ export function adminApiUrl(url: string) { return createLocalURL(`${apiPrefix}${finalUrl}`); } -/** Constructs a url for redirecting to the Admin login endpoint and returning - * to the current location after completing the flow. - */ -export function getLoginUrl(redirectUrl: string = window.location.href) { - const baseUrl = env.ADMIN_API_URL - ? `${env.ADMIN_API_URL}${loginEndpoint}` - : createLocalURL(loginEndpoint); - return `${baseUrl}?${redirectParam}=${redirectUrl}`; -} - -/** Constructs a URL for fetching the current user profile. */ -export function getProfileUrl() { - if (env.ADMIN_API_URL) { - return `${env.ADMIN_API_URL}${profileEndpoint}`; - } - return createLocalURL(profileEndpoint); -} - // Helper to log out the contents of a protobuf response, since the Network tab // shows binary values :-). export function logProtoResponse(url: string, data: T): T { diff --git a/packages/zapp/console/src/models/Common/api.ts b/packages/zapp/console/src/models/Common/api.ts index 1ac7ef97d..bfaefc8ee 100644 --- a/packages/zapp/console/src/models/Common/api.ts +++ b/packages/zapp/console/src/models/Common/api.ts @@ -1,21 +1,16 @@ -import axios from 'axios'; import { env } from 'common/env'; -import { log } from 'common/log'; import { Admin, Core } from 'flyteidl'; +import { getAxiosApiCall } from '@flyteconsole/flyte-api'; import { getAdminEntity } from 'models/AdminEntity/AdminEntity'; import { defaultPaginationConfig } from 'models/AdminEntity/constants'; -import { transformRequestError } from 'models/AdminEntity/transformRequestError'; import { PaginatedEntityResponse, RequestConfig } from 'models/AdminEntity/types'; -import { adminApiUrl, getProfileUrl } from 'models/AdminEntity/utils'; -import { defaultAxiosConfig, defaultSystemStatus, identifierPrefixes } from './constants'; +import { defaultSystemStatus, identifierPrefixes } from './constants'; import { - GetVersionResponse, IdentifierScope, NamedEntity, NamedEntityIdentifier, ResourceType, SystemStatus, - UserProfile, } from './types'; import { makeIdentifierPath, makeNamedEntityPath } from './utils'; @@ -97,37 +92,6 @@ export const listNamedEntities = (input: ListNamedEntitiesInput, requestConfig?: ); }; -/** Fetches the current user profile. NOTE: This will *not* fail in cases - * where the user is not logged in or the session is expired. Admin does not - * distinguish between these cases, so the profile will be `null` in both cases. - * A value of `null` indicates that a redirect to the login endpoint is needed. - */ -export const getUserProfile = async () => { - const path = getProfileUrl(); - try { - const { data } = await axios.get(path, defaultAxiosConfig); - return data; - } catch (e) { - const { message } = transformRequestError(e, path); - log.error(`Failed to fetch user profile: ${message}`); - return null; - } -}; - -/** Fetches the current admin version. - */ -export const getVersion = async () => { - const path = adminApiUrl('/version'); - try { - const { data } = await axios.get(path, defaultAxiosConfig); - return data; - } catch (e) { - const { message } = transformRequestError(e, path); - log.error(`Failed to fetch version: ${message}`); - return null; - } -}; - /** If env.STATUS_URL is set, will issue a fetch to retrieve the current system * status. If not, will resolve immediately with a default value indicating * normal system status. @@ -138,11 +102,10 @@ export const getSystemStatus = async () => { } const path = env.STATUS_URL; - try { - const { data } = await axios.get(path, defaultAxiosConfig); - return data; - } catch (e) { - const { message } = transformRequestError(e, path); - throw new Error(`Failed to fetch system status: ${message}`); + const result = await getAxiosApiCall(path); + if (!result) { + throw new Error('Failed to fetch system status'); } + + return result; }; diff --git a/packages/zapp/console/src/models/Common/constants.ts b/packages/zapp/console/src/models/Common/constants.ts index 6962189fe..f011b0727 100644 --- a/packages/zapp/console/src/models/Common/constants.ts +++ b/packages/zapp/console/src/models/Common/constants.ts @@ -1,13 +1,5 @@ -import axios, { AxiosRequestConfig, AxiosTransformer } from 'axios'; -import * as camelcaseKeys from 'camelcase-keys'; -import * as snakecaseKeys from 'snakecase-keys'; import { LiteralMapBlob, ResourceType, SystemStatus } from './types'; -// recommended util.d.ts implementation -const isObject = (value: unknown): boolean => { - return value !== null && typeof value === 'object'; -}; - export const endpointPrefixes = { execution: '/executions', launchPlan: '/launch_plans', @@ -36,18 +28,4 @@ export const emptyLiteralMapBlob: LiteralMapBlob = { values: { literals: {} }, }; -/** Config object that can be used for requests that are not sent to - * the Admin entity API (`/api/v1/...`), such as the `/me` endpoint. This config - * ensures that requests/responses are correctly converted and that cookies are - * included. - */ -export const defaultAxiosConfig: AxiosRequestConfig = { - transformRequest: [ - (data: any) => (isObject(data) ? snakecaseKeys(data) : data), - ...(axios.defaults.transformRequest as AxiosTransformer[]), - ], - transformResponse: [...(axios.defaults.transformResponse as AxiosTransformer[]), camelcaseKeys], - withCredentials: true, -}; - export const defaultSystemStatus: SystemStatus = { status: 'normal' }; diff --git a/yarn.lock b/yarn.lock index 238e49d19..d37c27cdc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5409,12 +5409,13 @@ axios-mock-adapter@^1.16.0: fast-deep-equal "^3.1.3" is-buffer "^2.0.3" -axios@^0.21.2: - version "0.21.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017" - integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg== +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.14.9" + form-data "^4.0.0" axobject-query@^2.2.0: version "2.2.0" @@ -6256,7 +6257,7 @@ camelcase-keys@^4.0.0: map-obj "^2.0.0" quick-lru "^1.0.0" -camelcase-keys@^6.1.1, camelcase-keys@^6.2.2: +camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== @@ -6265,6 +6266,16 @@ camelcase-keys@^6.1.1, camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" +camelcase-keys@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252" + integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg== + dependencies: + camelcase "^6.3.0" + map-obj "^4.1.0" + quick-lru "^5.1.1" + type-fest "^1.2.1" + camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -6280,7 +6291,7 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -camelcase@^6.2.0: +camelcase@^6.2.0, camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -9607,11 +9618,16 @@ flux@^4.0.1: fbemitter "^3.0.0" fbjs "^3.0.1" -follow-redirects@^1.0.0, follow-redirects@^1.14.0: +follow-redirects@^1.0.0: version "1.14.8" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== +follow-redirects@^1.14.9: + version "1.15.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" + integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -9688,6 +9704,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -15744,6 +15769,11 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + qw@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" @@ -17355,13 +17385,22 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== -snakecase-keys@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/snakecase-keys/-/snakecase-keys-3.2.1.tgz#ce5d1a2de8a93c939d7992f76f2743aa59f3d5ad" - integrity sha512-CjU5pyRfwOtaOITYv5C8DzpZ8XA/ieRsDpr93HI2r6e3YInC6moZpSQbmUtg8cTk58tq2x3jcG2gv+p1IZGmMA== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +snakecase-keys@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/snakecase-keys/-/snakecase-keys-5.4.2.tgz#b886f77c9a5fc347b04bd0ad1a05213190e60b9e" + integrity sha512-6mzBNP9t1ghArxcaCxZNGIJewE9qyH+eUQIGba9I7MJcZoV4WX4fM2Y+/K9+BGHCFB94ZASfoC3F44UxLXce+A== dependencies: map-obj "^4.1.0" - to-snake-case "^1.0.0" + snake-case "^3.0.4" + type-fest "^2.5.2" snapdragon-node@^2.0.1: version "2.1.1" @@ -18347,11 +18386,6 @@ to-ico@^1.1.5: parse-png "^1.0.0" resize-img "^1.1.0" -to-no-case@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" - integrity sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo= - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -18384,20 +18418,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -to-snake-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-snake-case/-/to-snake-case-1.0.0.tgz#ce746913897946019a87e62edfaeaea4c608ab8c" - integrity sha1-znRpE4l5RgGah+Yu366upMYIq4w= - dependencies: - to-space-case "^1.0.0" - -to-space-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-space-case/-/to-space-case-1.0.0.tgz#b052daafb1b2b29dc770cea0163e5ec0ebc9fc17" - integrity sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc= - dependencies: - to-no-case "^1.0.0" - toggle-selection@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" @@ -18618,6 +18638,16 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-fest@^2.5.2: + version "2.12.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.12.2.tgz#80a53614e6b9b475eb9077472fb7498dc7aa51d0" + integrity sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" From 4a23f4e21f2629ae560f092662cf17b3a6e46dc4 Mon Sep 17 00:00:00 2001 From: Eugene Jahn Date: Thu, 26 May 2022 13:19:27 -0700 Subject: [PATCH 37/93] feat: rerun task action in execution page (#488) * feat: task rerun done Signed-off-by: Eugene Jahn * feat: fix initialParameters Signed-off-by: Eugene Jahn * fix: remove a file Signed-off-by: Eugene Jahn * feat: rerun task done Signed-off-by: Eugene Jahn * feat: rerun fix literal type Signed-off-by: Eugene Jahn * feat: small typo fixed Signed-off-by: Eugene Jahn * feat: small typo fixed Signed-off-by: Eugene Jahn * feat: fix test coverage Signed-off-by: Eugene Jahn --- .../ui-atoms/src/Icons/RerunIcon/index.tsx | 26 +++++ .../composites/ui-atoms/src/Icons/index.tsx | 1 + .../ExecutionDetailsActions.tsx | 70 ++++++++++++ .../NodeExecutionDetailsPanelContent.tsx | 13 +++ .../Executions/ExecutionDetails/strings.tsx | 8 ++ .../Tables/NodeExecutionActions.tsx | 101 ++++++++++++++++++ .../Tables/nodeExecutionColumns.tsx | 7 +- .../components/Executions/Tables/strings.tsx | 9 ++ .../Launch/LaunchForm/LaunchFormDialog.tsx | 51 +++++++++ .../src/components/Launch/LaunchForm/utils.ts | 20 ++++ 10 files changed, 303 insertions(+), 3 deletions(-) create mode 100644 packages/composites/ui-atoms/src/Icons/RerunIcon/index.tsx create mode 100644 packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx create mode 100644 packages/zapp/console/src/components/Executions/ExecutionDetails/strings.tsx create mode 100644 packages/zapp/console/src/components/Executions/Tables/NodeExecutionActions.tsx create mode 100644 packages/zapp/console/src/components/Executions/Tables/strings.tsx create mode 100644 packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx diff --git a/packages/composites/ui-atoms/src/Icons/RerunIcon/index.tsx b/packages/composites/ui-atoms/src/Icons/RerunIcon/index.tsx new file mode 100644 index 000000000..048345443 --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/RerunIcon/index.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; + +interface IconProps { + size?: number; + className?: string; + onClick?: () => void; +} + +export const RerunIcon = (props: IconProps): JSX.Element => { + const { size = 18, className, onClick } = props; + return ( + + + + ); +}; diff --git a/packages/composites/ui-atoms/src/Icons/index.tsx b/packages/composites/ui-atoms/src/Icons/index.tsx index 5b32e816c..0cbe71ead 100644 --- a/packages/composites/ui-atoms/src/Icons/index.tsx +++ b/packages/composites/ui-atoms/src/Icons/index.tsx @@ -1,2 +1,3 @@ export { FlyteLogo } from './FlyteLogo'; export { InfoIcon } from './InfoIcon'; +export { RerunIcon } from './RerunIcon'; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx new file mode 100644 index 000000000..e5251378f --- /dev/null +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx @@ -0,0 +1,70 @@ +import { Button } from '@material-ui/core'; +import * as React from 'react'; +import { ResourceIdentifier, Identifier, Variable } from 'models/Common/types'; +import { getTask } from 'models/Task/api'; +import { LaunchFormDialog } from 'components/Launch/LaunchForm/LaunchFormDialog'; +import { NodeExecutionIdentifier } from 'models/Execution/types'; +import { useNodeExecutionData } from 'components/hooks/useNodeExecution'; +import { literalsToLiteralValueMap } from 'components/Launch/LaunchForm/utils'; +import { TaskInitialLaunchParameters } from 'components/Launch/LaunchForm/types'; +import { NodeExecutionDetails } from '../types'; +import t from './strings'; + +interface ExecutionDetailsActionsProps { + className?: string; + details: NodeExecutionDetails; + nodeExecutionId: NodeExecutionIdentifier; +} + +export const ExecutionDetailsActions = (props: ExecutionDetailsActionsProps): JSX.Element => { + const { className, details, nodeExecutionId } = props; + + const [showLaunchForm, setShowLaunchForm] = React.useState(false); + const [taskInputsTypes, setTaskInputsTypes] = React.useState< + Record | undefined + >(); + + const executionData = useNodeExecutionData(nodeExecutionId); + + const id = details.taskTemplate?.id as ResourceIdentifier | undefined; + + React.useEffect(() => { + const fetchTask = async () => { + const task = await getTask(id as Identifier); + setTaskInputsTypes(task.closure.compiledTask.template?.interface?.inputs?.variables); + }; + if (id) fetchTask(); + }, [id]); + + if (!id) { + return <>; + } + + const literals = executionData.value.fullInputs?.literals; + + const initialParameters: TaskInitialLaunchParameters = { + values: literals && taskInputsTypes && literalsToLiteralValueMap(literals, taskInputsTypes), + taskId: id as Identifier | undefined, + }; + + const rerunOnClick = (e: React.MouseEvent) => { + e.stopPropagation(); + setShowLaunchForm(true); + }; + + return ( + <> +
+ +
+ + + ); +}; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx index f0575986b..ee96d2c34 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx @@ -41,6 +41,7 @@ import { getTaskExecutionDetailReasons } from './utils'; import { ExpandableMonospaceText } from '../../common/ExpandableMonospaceText'; import { fetchWorkflowExecution } from '../useWorkflowExecution'; import { NodeExecutionTabs } from './NodeExecutionTabs'; +import { ExecutionDetailsActions } from './ExecutionDetailsActions'; const useStyles = makeStyles((theme: Theme) => { const paddingVertical = `${theme.spacing(2)}px`; @@ -93,6 +94,11 @@ const useStyles = makeStyles((theme: Theme) => { marginTop: theme.spacing(2), paddingTop: theme.spacing(2), }, + actionsContainer: { + borderTop: `1px solid ${theme.palette.divider}`, + marginTop: theme.spacing(2), + paddingTop: theme.spacing(2), + }, nodeTypeContent: { minWidth: theme.spacing(9), }, @@ -395,6 +401,13 @@ export const NodeExecutionDetailsPanelContent: React.FC {statusContent} {!dag && detailsContent} + {details && ( + + )}
{dag ? : tabsContent} diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/strings.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/strings.tsx new file mode 100644 index 000000000..4595ae70e --- /dev/null +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/strings.tsx @@ -0,0 +1,8 @@ +import { createLocalizedString } from '@flyteconsole/locale'; + +const str = { + rerun: 'RERUN', +}; + +export { patternKey } from '@flyteconsole/locale'; +export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Executions/Tables/NodeExecutionActions.tsx b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionActions.tsx new file mode 100644 index 000000000..62ef88c35 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/Tables/NodeExecutionActions.tsx @@ -0,0 +1,101 @@ +import { IconButton, Tooltip } from '@material-ui/core'; +import { NodeExecution } from 'models/Execution/types'; +import * as React from 'react'; +import InputsAndOutputsIcon from '@material-ui/icons/Tv'; +import { RerunIcon } from '@flyteconsole/ui-atoms'; +import { Identifier, ResourceIdentifier, Variable } from 'models/Common/types'; +import { LaunchFormDialog } from 'components/Launch/LaunchForm/LaunchFormDialog'; +import { getTask } from 'models/Task/api'; +import { useNodeExecutionData } from 'components/hooks/useNodeExecution'; +import { TaskInitialLaunchParameters } from 'components/Launch/LaunchForm/types'; +import { literalsToLiteralValueMap } from 'components/Launch/LaunchForm/utils'; +import { NodeExecutionsTableState } from './types'; +import { useNodeExecutionContext } from '../contextProvider/NodeExecutionDetails'; +import { NodeExecutionDetails } from '../types'; +import t from './strings'; + +interface NodeExecutionActionsProps { + execution: NodeExecution; + state: NodeExecutionsTableState; +} + +export const NodeExecutionActions = (props: NodeExecutionActionsProps): JSX.Element => { + const { execution, state } = props; + + const detailsContext = useNodeExecutionContext(); + const [showLaunchForm, setShowLaunchForm] = React.useState(false); + const [nodeExecutionDetails, setNodeExecutionDetails] = React.useState< + NodeExecutionDetails | undefined + >(); + const [taskInputsTypes, setTaskInputsTypes] = React.useState< + Record | undefined + >(); + + const executionData = useNodeExecutionData(execution.id); + const literals = executionData.value.fullInputs?.literals; + const id = nodeExecutionDetails?.taskTemplate?.id as ResourceIdentifier; + + React.useEffect(() => { + detailsContext.getNodeExecutionDetails(execution).then((res) => { + setNodeExecutionDetails(res); + }); + }); + + React.useEffect(() => { + const fetchTask = async () => { + const task = await getTask(id as Identifier); + setTaskInputsTypes(task.closure.compiledTask.template?.interface?.inputs?.variables); + }; + if (id) fetchTask(); + }, [id]); + + // open the side panel for selected execution's detail + const inputsAndOutputsIconOnClick = (e: React.MouseEvent) => { + // prevent the parent row body onClick event trigger + e.stopPropagation(); + // use null in case if there is no execution provided - when it is null will close panel + state.setSelectedExecution(execution?.id ?? null); + }; + + const rerunIconOnClick = (e: React.MouseEvent) => { + e.stopPropagation(); + setShowLaunchForm(true); + }; + + const renderRerunAction = () => { + if (!id) { + return <>; + } + + const initialParameters: TaskInitialLaunchParameters = { + values: literals && taskInputsTypes && literalsToLiteralValueMap(literals, taskInputsTypes), + taskId: id as Identifier | undefined, + }; + return ( + <> + + + + + + + + ); + }; + + return ( +
+ + + + + + {renderRerunAction()} +
+ ); +}; diff --git a/packages/zapp/console/src/components/Executions/Tables/nodeExecutionColumns.tsx b/packages/zapp/console/src/components/Executions/Tables/nodeExecutionColumns.tsx index e03d00d47..5a9925b62 100644 --- a/packages/zapp/console/src/components/Executions/Tables/nodeExecutionColumns.tsx +++ b/packages/zapp/console/src/components/Executions/Tables/nodeExecutionColumns.tsx @@ -10,6 +10,7 @@ import { useNodeExecutionContext } from '../contextProvider/NodeExecutionDetails import { ExecutionStatusBadge } from '../ExecutionStatusBadge'; import { NodeExecutionCacheStatus } from '../NodeExecutionCacheStatus'; import { getNodeExecutionTimingMS } from '../utils'; +import { NodeExecutionActions } from './NodeExecutionActions'; import { SelectNodeExecutionLink } from './SelectNodeExecutionLink'; import { useColumnStyles } from './styles'; import { NodeExecutionCellRendererData, NodeExecutionColumnDefinition } from './types'; @@ -201,11 +202,11 @@ export function generateColumns( }, { cellRenderer: ({ execution, state }) => ( - + ), className: styles.columnLogs, - key: 'logs', - label: 'logs', + key: 'actions', + label: '', }, ]; } diff --git a/packages/zapp/console/src/components/Executions/Tables/strings.tsx b/packages/zapp/console/src/components/Executions/Tables/strings.tsx new file mode 100644 index 000000000..402c312c7 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/Tables/strings.tsx @@ -0,0 +1,9 @@ +import { createLocalizedString } from '@flyteconsole/locale'; + +const str = { + inputsAndOutputsTooltip: 'View Inputs & Outpus', + rerunTooltip: 'Rerun', +}; + +export { patternKey } from '@flyteconsole/locale'; +export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx new file mode 100644 index 000000000..1c3a25716 --- /dev/null +++ b/packages/zapp/console/src/components/Launch/LaunchForm/LaunchFormDialog.tsx @@ -0,0 +1,51 @@ +import { Dialog } from '@material-ui/core'; +import * as React from 'react'; +import { LaunchForm } from 'components/Launch/LaunchForm/LaunchForm'; +import { ResourceIdentifier, ResourceType } from 'models/Common/types'; +import { + TaskInitialLaunchParameters, + WorkflowInitialLaunchParameters, +} from 'components/Launch/LaunchForm/types'; + +interface LaunchFormDialogProps { + id: ResourceIdentifier; + initialParameters: TaskInitialLaunchParameters | WorkflowInitialLaunchParameters; + showLaunchForm: boolean; + setShowLaunchForm: React.Dispatch>; +} + +function getLaunchProps(id: ResourceIdentifier) { + if (id.resourceType === ResourceType.TASK) { + return { taskId: id }; + } else if (id.resourceType === ResourceType.WORKFLOW) { + return { workflowId: id }; + } + throw new Error('Unknown Resource Type'); +} + +export const LaunchFormDialog = (props: LaunchFormDialogProps): JSX.Element => { + const { id, initialParameters, showLaunchForm, setShowLaunchForm } = props; + + const onCancelLaunch = () => setShowLaunchForm(false); + + // prevent child onclick event in the dialog triggers parent onclick event + const dialogOnClick = (e: React.MouseEvent) => { + e.stopPropagation(); + }; + + return ( + + + + ); +}; diff --git a/packages/zapp/console/src/components/Launch/LaunchForm/utils.ts b/packages/zapp/console/src/components/Launch/LaunchForm/utils.ts index 2b8befe5d..fa59ec600 100644 --- a/packages/zapp/console/src/components/Launch/LaunchForm/utils.ts +++ b/packages/zapp/console/src/components/Launch/LaunchForm/utils.ts @@ -6,6 +6,7 @@ import { LaunchPlan } from 'models/Launch/types'; import { Task } from 'models/Task/types'; import { Workflow } from 'models/Workflow/types'; import * as moment from 'moment'; +import { LiteralValueMap } from 'components/Launch/LaunchForm/types'; import { simpleTypeToInputType, typeLabels } from './constants'; import { inputToLiteral } from './inputHelpers/inputHelpers'; import { typeIsSupported } from './inputHelpers/utils'; @@ -190,3 +191,22 @@ export function isEnterInputsState(state: BaseInterpretedLaunchState): boolean { LaunchState.SUBMIT_SUCCEEDED, ].some(state.matches); } + +export function literalsToLiteralValueMap( + literals: { + [k: string]: Core.ILiteral; + }, + nameToTypeMap: Record, +): LiteralValueMap { + const literalValueMap: LiteralValueMap = new Map(); + + for (var i = 0; i < Object.keys(literals).length; i++) { + const name = Object.keys(literals)[i]; + const type = nameToTypeMap[name].type; + const typeDefinition = getInputDefintionForLiteralType(type); + const inputKey = createInputCacheKey(name, typeDefinition); + literalValueMap.set(inputKey, literals[Object.keys(literals)[i]]); + } + + return literalValueMap; +} From aaca9db819e7b05ed56b98d4181bfad93d347c6f Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 2 Jun 2022 12:08:33 -0700 Subject: [PATCH 38/93] chore: update release version (#501) Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> --- packages/zapp/console/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 145dfa5c5..806665802 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -1,6 +1,6 @@ { "name": "@flyteconsole/client-app", - "version": "1.1.0", + "version": "1.1.1", "description": "The web UI for the Flyte platform", "repository": { "type": "git", From d407301c3f3544872626ae7d8d5f795b4f98c409 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jun 2022 12:00:44 -0700 Subject: [PATCH 39/93] chore(deps-dev): bump protobufjs from 6.8.9 to 6.11.3 (#502) Bumps [protobufjs](https://github.com/protobufjs/protobuf.js) from 6.8.9 to 6.11.3. - [Release notes](https://github.com/protobufjs/protobuf.js/releases) - [Changelog](https://github.com/protobufjs/protobuf.js/blob/v6.11.3/CHANGELOG.md) - [Commits](https://github.com/protobufjs/protobuf.js/commits/v6.11.3) --- updated-dependencies: - dependency-name: protobufjs dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/zapp/console/package.json | 2 +- yarn.lock | 41 +++++++++++++----------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 806665802..055000982 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -132,7 +132,7 @@ "notistack": "^1.0.10", "object-hash": "^1.3.1", "prettier": "^2.5.1", - "protobufjs": "~6.8.0", + "protobufjs": "~6.11.3", "query-string": "^6.5.0", "react": "^16.13.1", "react-dom": "^16.13.1", diff --git a/yarn.lock b/yarn.lock index d37c27cdc..f4154f415 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4031,10 +4031,10 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69" integrity sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA== -"@types/long@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/lossless-json@^1.0.0": version "1.0.0" @@ -4090,15 +4090,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>= 8": - version "14.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" - integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== - -"@types/node@^10.1.0": - version "10.17.48" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.48.tgz#726e7f25d00bf58d79c8f00dd586dd9a10d06a4f" - integrity sha512-Agl6xbYP6FOMDeAsr3QVZ+g7Yzg0uhPHWx0j5g4LFdUBHVtqtU+gH660k/lCEe506jJLOGbEzsnqPDTZGJQLag== +"@types/node@*", "@types/node@>= 8", "@types/node@>=13.7.0": + version "17.0.38" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.38.tgz#f8bb07c371ccb1903f3752872c89f44006132947" + integrity sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g== "@types/node@^14.0.10", "@types/node@^14.18.12": version "14.18.12" @@ -9124,7 +9119,7 @@ exit@^0.1.2: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -9740,7 +9735,7 @@ forwarded@~0.1.2: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" @@ -14520,7 +14515,7 @@ object.hasown@^1.1.0: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" @@ -15256,7 +15251,7 @@ portfinder@^1.0.28: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-flexbugs-fixes@^4.2.1: version "4.2.1" @@ -15582,10 +15577,10 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -protobufjs@~6.8.0: - version "6.8.9" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.9.tgz#0b1adbcdaa983d369c3d9108a97c814edc030754" - integrity sha512-j2JlRdUeL/f4Z6x4aU4gj9I2LECglC+5qR2TrWb193Tla1qfdaNQTZ8I27Pt7K0Ajmvjjpft7O3KWTGciz4gpw== +protobufjs@~6.11.3: + version "6.11.3" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" + integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -15597,8 +15592,8 @@ protobufjs@~6.8.0: "@protobufjs/path" "^1.1.2" "@protobufjs/pool" "^1.1.0" "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.0" - "@types/node" "^10.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" long "^4.0.0" protoduck@^5.0.1: From 606e37eea4cd702a546ac227b412cf5c1b95f2ff Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:03:54 -0700 Subject: [PATCH 40/93] chore: add package generator for basics/composites/plugins (#503) * chore: add package generator for basics/composites/plugins Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> * Update CONTRIBUTING.md with package generate info --- .vscode/launch.json | 16 + CONTRIBUTING.md | 24 + package.json | 4 +- script/generator/.eslintrc.cjs | 10 + script/generator/package.json | 20 + script/generator/src/cli.js | 7 + script/generator/src/constants.js | 29 + script/generator/src/index.js | 4 + script/generator/src/main.js | 35 + script/generator/src/questions.js | 110 ++ script/generator/src/utils.js | 40 + .../generator/templates/basics/jest.config.js | 7 + .../generator/templates/basics/package.json | 25 + .../basics/src/SampleComponent/index.tsx | 9 + .../src/SampleComponent/navbar.stories.tsx | 16 + .../src/SampleComponent/navbar.test.tsx | 16 + .../generator/templates/basics/src/index.ts | 1 + .../generator/templates/basics/tsconfig.json | 8 + script/generator/yarn.lock | 1185 +++++++++++++++++ yarn.lock | 283 +++- 20 files changed, 1838 insertions(+), 11 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 script/generator/.eslintrc.cjs create mode 100755 script/generator/package.json create mode 100755 script/generator/src/cli.js create mode 100644 script/generator/src/constants.js create mode 100755 script/generator/src/index.js create mode 100644 script/generator/src/main.js create mode 100644 script/generator/src/questions.js create mode 100644 script/generator/src/utils.js create mode 100644 script/generator/templates/basics/jest.config.js create mode 100644 script/generator/templates/basics/package.json create mode 100644 script/generator/templates/basics/src/SampleComponent/index.tsx create mode 100644 script/generator/templates/basics/src/SampleComponent/navbar.stories.tsx create mode 100644 script/generator/templates/basics/src/SampleComponent/navbar.test.tsx create mode 100644 script/generator/templates/basics/src/index.ts create mode 100644 script/generator/templates/basics/tsconfig.json create mode 100644 script/generator/yarn.lock diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..2b570e2c7 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "launch generator", + "type": "node", + "request": "launch", + "skipFiles": ["/**"], + "program": "${workspaceFolder}/script/generator/src/index.js", + "console": "integratedTerminal" + } + ] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 34d40bfeb..219f2aff3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,6 +22,30 @@ a single module, you can specify that one specifically (ex. `localStorage.debug = 'flyte:adminEntity'` to only see decoded Flyte Admin API requests). +## Generate new package + +To add a new package use a script + +```bash +yarn generate:package +``` + +After new package is generated, you will need to update some values to be able to use it with other packages. +For example in case if package plan to be used in `console` app + +Ensure to add proper webpack alias path resolutions into: +* ./storybook/main.js - as `'@flyteconsole/flyte-api': path.resolve(__dirname, '../packages/plugins/flyte-api/src’),` +* packages/zapp/console/webpack.common.config.ts to alias section - as `'@flyteconsole/flyte-api': path.resolve(__dirname, '../packages/plugins/flyte-api/src’),` + +To add child package usage to other package, in parent package -> +* Add `{ "path": “../../${type}/${package-name}" }` to tsconfig.json +* Add `{ "path": “../../${type}/${package-name}/tsconfig.build.json" }` to tsconfig.build.json (if exists) +- Then you can import your changes as `import { getLoginUrl } from '@flyteconsole/flyte-api’;` + +> If you see `yarn lint` package not defined issues update `.\eslintrc.js` by adding your package to + 'import/core-modules': ['@clients/locale', '@clients/primitives', '@clients/theme'], + + ## Storybook This project has support for [Storybook](https://storybook.js.org/). diff --git a/package.json b/package.json index c49f1d8d8..a4158731e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "packages/basics/**", "packages/composites/**", "packages/plugins/**", - "packages/zapp/**" + "packages/zapp/**", + "script/generator/**" ], "scripts": { "clean": "yarn workspace @flyteconsole/client-app clean", @@ -20,6 +21,7 @@ "start:prod": "yarn workspace @flyteconsole/client-app start:prod", "build:prod": "yarn workspace @flyteconsole/client-app build:prod", "build:storybook": "build-storybook", + "generate:package": "yarn workspace @flyteconsole/generator start", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "storybook": "start-storybook -p 6006", "test": "NODE_ENV=test jest", diff --git a/script/generator/.eslintrc.cjs b/script/generator/.eslintrc.cjs new file mode 100644 index 000000000..e42234132 --- /dev/null +++ b/script/generator/.eslintrc.cjs @@ -0,0 +1,10 @@ +/** + * Note: at the time of creation, eslint.cjs files are recommended for "type":"module" projects. + * https://eslint.org/docs/user-guide/configuring/configuration-files + */ +module.exports = { + rules: { + 'no-console': 'off', + 'import/no-extraneous-dependencies': 'off', + }, +}; diff --git a/script/generator/package.json b/script/generator/package.json new file mode 100755 index 000000000..16cee10e1 --- /dev/null +++ b/script/generator/package.json @@ -0,0 +1,20 @@ +{ + "name": "@flyteconsole/generator", + "version": "1.0.0", + "exports": "./src/index.js", + "license": "MIT", + "private": true, + "type": "module", + "node": ">=17.6.0", + "scripts": { + "start": "yarn install && ./src/index.js" + }, + "dependencies": {}, + "devDependencies": { + "eslint": "^8.15.0", + "chalk": "^5.0.1", + "inquirer": "^8.2.4", + "listr": "^0.14.3", + "ncp": "^2.0.0" + } +} diff --git a/script/generator/src/cli.js b/script/generator/src/cli.js new file mode 100755 index 000000000..47e00f458 --- /dev/null +++ b/script/generator/src/cli.js @@ -0,0 +1,7 @@ +import askQuestions from './questions.js'; +import createProject from './main.js'; + +export async function cli() { + const options = await askQuestions(); + createProject(options); +} diff --git a/script/generator/src/constants.js b/script/generator/src/constants.js new file mode 100644 index 000000000..cf410607d --- /dev/null +++ b/script/generator/src/constants.js @@ -0,0 +1,29 @@ +import path from 'path'; +import { fileURLToPath } from 'url'; + +// eslint-disable-next-line no-underscore-dangle +const __filename = fileURLToPath(import.meta.url); + +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(__filename); + +export const projectTypeSoSettingsMap = { + basics: { + packagePartialPath: 'packages/basics/', + targetDirectoryPartialPath: path.resolve(__dirname, '../../../packages/basics/'), + // using the same template for basics, components and microapps for now + templateDirectory: path.resolve(__dirname, '../templates', 'basics'), + }, + composites: { + packagePartialPath: 'packages/composites/', + targetDirectoryPartialPath: path.resolve(__dirname, '../../../packages/composites/'), + // using the same template for basics, components and microapps for now + templateDirectory: path.resolve(__dirname, '../templates', 'basics'), + }, + plugins: { + packagePartialPath: 'packages/plugins/', + targetDirectoryPartialPath: path.resolve(__dirname, '../../../packages/plugins/'), + // using the same template for basics, components and microapps for now + templateDirectory: path.resolve(__dirname, '../templates', 'basics'), + }, +}; diff --git a/script/generator/src/index.js b/script/generator/src/index.js new file mode 100755 index 000000000..aeea6abc4 --- /dev/null +++ b/script/generator/src/index.js @@ -0,0 +1,4 @@ +#!/usr/bin/env node +import { cli } from './cli.js'; + +cli(); diff --git a/script/generator/src/main.js b/script/generator/src/main.js new file mode 100644 index 000000000..f380c0031 --- /dev/null +++ b/script/generator/src/main.js @@ -0,0 +1,35 @@ +import chalk from 'chalk'; +import ncp from 'ncp'; +import { promisify } from 'util'; +import Listr from 'listr'; +import { editPackageJSON } from './utils.js'; + +const copy = promisify(ncp); + +async function copyTemplateFiles(options) { + return copy(options.templateDirectory, options.targetDirectory, { + clobber: false, // if set to false, ncp will not overwrite destination files that already exist + }); +} + +async function createProject(config) { + const tasks = new Listr([ + { + title: 'Copy template files', + task: async () => copyTemplateFiles(config), + }, + { + title: 'Update package.json', + task: async () => editPackageJSON(config), + enabled: () => true, + }, + ]); + + await tasks.run(); + + console.log(`${chalk.green.bold('DONE')}. Project ready`); + + return true; +} + +export default createProject; diff --git a/script/generator/src/questions.js b/script/generator/src/questions.js new file mode 100644 index 000000000..8d475ee7f --- /dev/null +++ b/script/generator/src/questions.js @@ -0,0 +1,110 @@ +import path from 'path'; +import chalk from 'chalk'; +import inquirer from 'inquirer'; +import { checkPathExists } from './utils.js'; +import { projectTypeSoSettingsMap } from './constants.js'; + +const askQuestions = async () => { + console.log( + chalk.hex('#e7c99a')('Use the up and down arrow keys to navigate multi-choice questions'), + ); + + const questionsSetProjectType = [ + { + name: 'type', + type: 'list', + message: 'Please choose a project type to use: ', + choices: [ + { + name: 'Basic', + value: 'basics', + }, + { + name: 'Composite', + value: 'composites', + }, + { + name: 'Plugin', + value: 'plugins', + }, + ], + default: 'composites', + }, + ]; + + /* Initial set of questions */ + const getQuestionsSetFolderName = (templateDirectory, targetDirectory) => [ + { + name: 'name', + type: 'input', + message: 'Project name(folder): ', + validate: (projectName) => { + let valid = true; + + /* Reg ex to ensure that project name starts with a letter, includes letters, numbers, underscores and hashes */ + if (/^[a-z]*-?[a-z]*$/gm.test(projectName)) { + valid = valid && true; + } else { + return 'Project must \n 1) start with a letter \n 2) name may only include letters, numbers, underscores and hashes.'; + } + + /* Check that no folder exists at this location */ + if (!checkPathExists(templateDirectory)) { + return 'Could not find a template for your selected choice'; + } + + /* Check that no folder exists at this location */ + if (checkPathExists(path.resolve(targetDirectory, projectName))) { + return 'Project with this name already exists at this location'; + } + + return valid && true; + }, + }, + { + name: 'description', + type: 'input', + message: 'Project description: ', + }, + ]; + + try { + /* Actually ask the questions */ + const answersA = await inquirer.prompt(questionsSetProjectType); + + const projectType = answersA.type; + + const { targetDirectoryPartialPath, templateDirectory, packagePartialPath } = + projectTypeSoSettingsMap[projectType]; + + const questionsB = getQuestionsSetFolderName(templateDirectory, targetDirectoryPartialPath); + const answersB = await inquirer.prompt(questionsB); + + const projectName = answersB.name; + + /* Collate answers */ + const answers = { + ...answersA, + ...answersB, + templateDirectory, + targetDirectory: path.resolve(targetDirectoryPartialPath, projectName), + testPath: path.join(packagePartialPath, projectName), + }; + + return answers; + } catch (err) { + if (err) { + switch (err.status) { + case 401: + console.error('401'); + break; + default: + console.error(err); + } + } + } + + return {}; +}; + +export default askQuestions; diff --git a/script/generator/src/utils.js b/script/generator/src/utils.js new file mode 100644 index 000000000..de49e72a7 --- /dev/null +++ b/script/generator/src/utils.js @@ -0,0 +1,40 @@ +import fs from 'fs'; + +const checkPathExists = (pathToCheck) => { + try { + return fs.existsSync(pathToCheck); + } catch (err) { + console.error(err); + } + + return false; +}; + +async function editPackageJSON(options) { + const targetDir = options.targetDirectory; + let jsonFile; + + await fs.readFile(`${targetDir}/package.json`, (err, data) => { + /* If no package.json, this will be skipped */ + if (!err) { + jsonFile = JSON.parse(data); + jsonFile.name = `@flyteconsole/${options.name}`; + jsonFile.description = options.description; + + jsonFile.scripts.test = jsonFile.scripts.test.replace('folder-path', options.testPath); + + fs.writeFile(`${targetDir}/package.json`, JSON.stringify(jsonFile, null, '\t'), (err2) => { + if (err2) { + throw new Error('Unable to update package.json'); + } + }); + } + }); +} + +const mapToTemplates = { + 'Node-Express-Mongo-JS': 'jemn', + 'HTML,CSS,JS': 'basic', +}; + +export { checkPathExists, mapToTemplates, editPackageJSON }; diff --git a/script/generator/templates/basics/jest.config.js b/script/generator/templates/basics/jest.config.js new file mode 100644 index 000000000..ba06dc0aa --- /dev/null +++ b/script/generator/templates/basics/jest.config.js @@ -0,0 +1,7 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +// eslint-disable-next-line import/no-unresolved +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/script/generator/templates/basics/package.json b/script/generator/templates/basics/package.json new file mode 100644 index 000000000..597cb1834 --- /dev/null +++ b/script/generator/templates/basics/package.json @@ -0,0 +1,25 @@ +{ + "name": "placeholder", + "version": "0.1.0", + "description": "Your description here", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "private": false, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm", + "build:cjs": "tsc", + "test": "NODE_ENV=test jest" + }, + "peerDependencies": { + "react": "^16.13.1", + "react-dom": "^16.13.1" + }, + "devDependencies": { + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "react": "^16.13.1", + "react-dom": "^16.13.1" + } +} diff --git a/script/generator/templates/basics/src/SampleComponent/index.tsx b/script/generator/templates/basics/src/SampleComponent/index.tsx new file mode 100644 index 000000000..e04e715c1 --- /dev/null +++ b/script/generator/templates/basics/src/SampleComponent/index.tsx @@ -0,0 +1,9 @@ +import * as React from 'react'; + +export const SampleComponent = (): React.ReactElement => { + return
It's me - Navigation Bar
; +}; + +export const add = (a: number, b: number) => { + return a + b; +}; diff --git a/script/generator/templates/basics/src/SampleComponent/navbar.stories.tsx b/script/generator/templates/basics/src/SampleComponent/navbar.stories.tsx new file mode 100644 index 000000000..64f9185ac --- /dev/null +++ b/script/generator/templates/basics/src/SampleComponent/navbar.stories.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; + +import { SampleComponent } from '.'; + +export default { + title: 'Primitives/NavBar', + component: SampleComponent, +} as ComponentMeta; + +export const Primary: ComponentStory = () => { + return ; +}; + +const Template: ComponentStory = () => ; +export const Secondary = Template.bind({}); diff --git a/script/generator/templates/basics/src/SampleComponent/navbar.test.tsx b/script/generator/templates/basics/src/SampleComponent/navbar.test.tsx new file mode 100644 index 000000000..b1eff2c8b --- /dev/null +++ b/script/generator/templates/basics/src/SampleComponent/navbar.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { render, screen } from '@testing-library/react'; +import { SampleComponent, add } from './index'; + +describe('add function', () => { + it('should add two number together', () => { + const result = add(10, 5); + expect(result).toBe(15); + }); + + it('NavBar contains correct text', () => { + render(); + const text = screen.getByText("It's me - Navigation Bar"); + expect(text).toBeInTheDocument(); + }); +}); diff --git a/script/generator/templates/basics/src/index.ts b/script/generator/templates/basics/src/index.ts new file mode 100644 index 000000000..2b6304b31 --- /dev/null +++ b/script/generator/templates/basics/src/index.ts @@ -0,0 +1 @@ +export { SampleComponent } from './SampleComponent'; diff --git a/script/generator/templates/basics/tsconfig.json b/script/generator/templates/basics/tsconfig.json new file mode 100644 index 000000000..a6178cb4a --- /dev/null +++ b/script/generator/templates/basics/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"] +} diff --git a/script/generator/yarn.lock b/script/generator/yarn.lock new file mode 100644 index 000000000..2031843a9 --- /dev/null +++ b/script/generator/yarn.lock @@ -0,0 +1,1185 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== + dependencies: + any-observable "^0.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg== + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + +debug@^4.1.1, debug@^4.3.2: + 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" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.15.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.16.0.tgz#6d936e2d524599f2a86c708483b4c372c5d3bbae" + integrity sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== + dependencies: + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + dependencies: + type-fest "^0.20.2" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA== + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ== + dependencies: + chalk "^1.0.0" + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.1.1, 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" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ncp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.3.3: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + 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== + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/yarn.lock b/yarn.lock index f4154f415..6b1636e85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1635,6 +1635,21 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + "@flyteorg/flyteidl@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@flyteorg/flyteidl/-/flyteidl-1.1.0.tgz#9fcf06d878616439939e932c5a35357d3d7eea04" @@ -4822,6 +4837,11 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^7.1.1, acorn-walk@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" @@ -4842,6 +4862,11 @@ acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -5211,7 +5236,7 @@ array-includes@^3.0.3, array-includes@^3.1.3, array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-union@^1.0.2: +array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= @@ -5744,6 +5769,15 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -6382,7 +6416,7 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.2: +chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6390,6 +6424,11 @@ chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -6410,6 +6449,11 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + chart.js@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.6.2.tgz#47342c551f688ffdda2cd53b534cb7e461ecec33" @@ -6572,6 +6616,13 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clean-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" + integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== + dependencies: + del "^4.1.1" + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -6597,6 +6648,18 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + cli-table3@^0.5.0, cli-table3@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -6631,6 +6694,11 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -8037,6 +8105,19 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + del@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" @@ -8947,6 +9028,47 @@ eslint@^8.11.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^8.15.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.16.0.tgz#6d936e2d524599f2a86c708483b4c372c5d3bbae" + integrity sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + espree@^9.3.1: version "9.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" @@ -8956,6 +9078,15 @@ espree@^9.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^3.3.0" +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== + dependencies: + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -9245,6 +9376,15 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -10149,7 +10289,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0: +glob@^7.0.0, glob@^7.0.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -10193,6 +10333,13 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^13.15.0: + version "13.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + dependencies: + type-fest "^0.20.2" + globals@^13.6.0, globals@^13.9.0: version "13.13.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" @@ -10231,6 +10378,17 @@ globby@^11.0.2, globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + globby@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" @@ -10861,7 +11019,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -iconv-lite@0.4, iconv-lite@0.4.24: +iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -11058,6 +11216,27 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== +inquirer@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -11404,6 +11583,11 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -11465,11 +11649,18 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-cwd@^2.2.0: +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" @@ -11477,6 +11668,13 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + is-path-inside@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" @@ -11607,6 +11805,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-weakref@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -12802,7 +13005,7 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr@^0.14.1: +listr@^0.14.1, listr@^0.14.3: version "0.14.3" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== @@ -13086,6 +13289,14 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-update@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" @@ -13829,7 +14040,7 @@ multicast-dns@^7.2.4: dns-packet "^5.2.2" thunky "^1.0.2" -mute-stream@~0.0.4: +mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== @@ -13876,6 +14087,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +ncp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -14627,6 +14843,21 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -14646,7 +14877,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -16803,6 +17034,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -16862,6 +17101,11 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.1.10" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" @@ -16886,6 +17130,13 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" +rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -18308,7 +18559,7 @@ through2@^4.0.0, through2@^4.0.2: dependencies: readable-stream "3" -through@2, "through@>=2.2.7 <3": +through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -18355,6 +18606,13 @@ tinycolor2@^1.1.2, tinycolor2@^1.4.1, tinycolor2@^1.4.2: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -18560,6 +18818,11 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.3.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -19277,7 +19540,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0: +wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= From 1a0dc0f494184bd37c0cd59215ed66f04af3a2a9 Mon Sep 17 00:00:00 2001 From: Nastya <55718143+anrusina@users.noreply.github.com> Date: Thu, 9 Jun 2022 08:45:26 -0700 Subject: [PATCH 41/93] fix(bug-508): executions can not be filtered by start time (#509) Signed-off-by: Nastya <55718143+anrusina@users.noreply.github.com> --- packages/zapp/console/package.json | 2 +- .../Executions/filters/startTimeFilters.ts | 2 +- yarn.lock | 58 +++---------------- 3 files changed, 11 insertions(+), 51 deletions(-) diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 055000982..38c8c14f7 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -126,7 +126,7 @@ "lint-staged": "^7.0.4", "lossless-json": "^1.0.3", "memoize-one": "^5.0.0", - "moment": "^2.29.2", + "moment": "^2.29.3", "moment-timezone": "^0.5.28", "msw": "^0.24.1", "notistack": "^1.0.10", diff --git a/packages/zapp/console/src/components/Executions/filters/startTimeFilters.ts b/packages/zapp/console/src/components/Executions/filters/startTimeFilters.ts index 0673076c6..bd268a7b8 100644 --- a/packages/zapp/console/src/components/Executions/filters/startTimeFilters.ts +++ b/packages/zapp/console/src/components/Executions/filters/startTimeFilters.ts @@ -1,5 +1,5 @@ +import * as moment from 'moment'; import { FilterOperationName } from 'models/AdminEntity/types'; -import moment from 'moment'; import { FilterMap } from './types'; const workflowExecutionStartTimeKey = 'execution_created_at'; diff --git a/yarn.lock b/yarn.lock index 6b1636e85..f99512f29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5236,7 +5236,7 @@ array-includes@^3.0.3, array-includes@^3.1.3, array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-union@^1.0.1, array-union@^1.0.2: +array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= @@ -6616,13 +6616,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-webpack-plugin@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" - integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== - dependencies: - del "^4.1.1" - cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -8105,19 +8098,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - del@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" @@ -10289,7 +10269,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3: +glob@^7.0.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -10378,17 +10358,6 @@ globby@^11.0.2, globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globby@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" @@ -11649,18 +11618,11 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: +is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" @@ -11668,13 +11630,6 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - is-path-inside@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" @@ -13966,11 +13921,16 @@ moment-timezone@*, moment-timezone@^0.5.28: dependencies: moment ">= 2.9.0" -"moment@>= 2.9.0", moment@^2.29.2: +"moment@>= 2.9.0": version "2.29.2" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== +moment@^2.29.3: + version "2.29.3" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" + integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== + morgan@^1.8.2: version "1.10.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" From 1013deb1644be844380b1ae1733e66036ad2ea09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jun 2022 10:34:21 -0700 Subject: [PATCH 42/93] chore(deps-dev): bump semantic-release from 17.2.3 to 19.0.3 (#510) Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 17.2.3 to 19.0.3. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v17.2.3...v19.0.3) --- updated-dependencies: - dependency-name: semantic-release dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/zapp/console/package.json | 2 +- yarn.lock | 1588 +++++++++++++++++++++------- 2 files changed, 1231 insertions(+), 359 deletions(-) diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index 38c8c14f7..a191e7e60 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -145,7 +145,7 @@ "react-router-dom": "^5.0.1", "react-virtualized": "^9.21.1", "resolve-url-loader": "^5.0.0", - "semantic-release": "^17.2.3", + "semantic-release": "^19.0.3", "shallowequal": "^1.1.0", "snakecase-keys": "^5.4.2", "source-map-loader": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index f99512f29..4954f87aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1371,6 +1371,11 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@commitlint/cli@^8.3.5": version "8.3.5" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-8.3.5.tgz#6d93a3a8b2437fa978999d3f6a336bcc70be3fd3" @@ -1635,27 +1640,12 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - "@flyteorg/flyteidl@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@flyteorg/flyteidl/-/flyteidl-1.1.0.tgz#9fcf06d878616439939e932c5a35357d3d7eea04" integrity sha512-p07Vd6rxmASKJvfF56ArVyuZLjxTJPnAQsTs3rDJL74gd9Ixs4cEDa/A4+iMYSNl42iTVPvAkM4movXDD1Hmgg== -"@gar/promisify@^1.0.1": +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": 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== @@ -1683,6 +1673,11 @@ update-notifier "^2.2.0" yargs "^8.0.2" +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2369,6 +2364,72 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@npmcli/arborist@^5.0.0", "@npmcli/arborist@^5.0.4": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.2.1.tgz#4f38187cb694946f551a825df17e6efd565b8946" + integrity sha512-DNyTHov3lU7PtCGHABzrPqQOUiBdiYzZ5dLv3D0RD5I9KbmhTLcZI/rv3ddZY0K9vpDE/R+R48b+cU/dUkL0Tw== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/metavuln-calculator" "^3.0.1" + "@npmcli/move-file" "^2.0.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/package-json" "^2.0.0" + "@npmcli/run-script" "^3.0.0" + bin-links "^3.0.0" + cacache "^16.0.6" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.2" + pacote "^13.0.5" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.0" + treeverse "^2.0.0" + walk-up-path "^1.0.0" + +"@npmcli/ci-detect@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" + integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== + +"@npmcli/config@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.1.0.tgz#5c92e5ded2a44baf76b94926646329c3b39e79b8" + integrity sha512-cPQmIQ2Q0vuOfrenrA3isikdMFMAHgzlXV+EmvZ8f2JeJsU5xTU2bG7ipXECiMvPF9nM+QDnMLuIg8QLw9H4xg== + dependencies: + "@npmcli/map-workspaces" "^2.0.2" + ini "^3.0.0" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + proc-log "^2.0.0" + read-package-json-fast "^2.0.3" + semver "^7.3.5" + walk-up-path "^1.0.0" + +"@npmcli/disparity-colors@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba" + integrity sha512-FFXGrIjhvd2qSZ8iS0yDvbI7nbjdyT2VNO7wotosjYZM2p2r8PN3B7Om3M5NO9KqW/OVzfzLB3L0V5Vo5QXC7A== + dependencies: + ansi-styles "^4.3.0" + "@npmcli/fs@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" @@ -2377,6 +2438,57 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" +"@npmcli/fs@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" + integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" + integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz#2d3c75119ee53246e9aa75bc469a55281cd5f08f" + integrity sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^8.0.1" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" + +"@npmcli/metavuln-calculator@^3.0.1": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.0.tgz#b1c2f0991c4f2d992b1615a54d4358c05efc3702" + integrity sha512-Q5fbQqGDlYqk7kWrbg6E2j/mtqQjZop0ZE6735wYA1tYNHguIDjAuWs+kFb5rJCkLIlXllfapvsyotYKiZOTBA== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -2385,6 +2497,48 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@npmcli/move-file@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" + integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/package-json@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.1": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-3.0.3.tgz#66afa6e0c4c3484056195f295fa6c1d1a45ddf58" + integrity sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^8.4.1" + read-package-json-fast "^2.0.3" + "@octokit/auth-token@^2.4.0": version "2.4.4" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" @@ -2603,7 +2757,7 @@ fs-extra "^9.0.0" lodash "^4.17.4" -"@semantic-release/commit-analyzer@^8.0.0", "@semantic-release/commit-analyzer@^8.0.1": +"@semantic-release/commit-analyzer@^8.0.1": version "8.0.1" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz#5d2a37cd5a3312da0e3ac05b1ca348bf60b90bca" integrity sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A== @@ -2616,11 +2770,29 @@ lodash "^4.17.4" micromatch "^4.0.2" +"@semantic-release/commit-analyzer@^9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" + integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.2.3" + debug "^4.0.0" + import-from "^4.0.0" + lodash "^4.17.4" + micromatch "^4.0.2" + "@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" integrity sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== +"@semantic-release/error@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" + integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== + "@semantic-release/git@^9.0.0": version "9.0.0" resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-9.0.0.tgz#304c4883c87d095b1faaae93300f1f1e0466e9a5" @@ -2635,7 +2807,7 @@ micromatch "^4.0.0" p-reduce "^2.0.0" -"@semantic-release/github@^7.0.0", "@semantic-release/github@^7.0.5": +"@semantic-release/github@^7.0.5": version "7.2.0" resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-7.2.0.tgz#925f3efd91adabfc4bbe0de24b79fe1a8a38b4e2" integrity sha512-tMRnWiiWb43whRHvbDGXq4DGEbKRi56glDpXDJZit4PIiwDPX7Kx3QzmwRtDOcG+8lcpGjpdPabYZ9NBxoI2mw== @@ -2657,7 +2829,29 @@ p-retry "^4.0.0" url-join "^4.0.0" -"@semantic-release/npm@^7.0.0", "@semantic-release/npm@^7.0.5": +"@semantic-release/github@^8.0.0": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.4.tgz#4ea242f6ad10a0474b0fbb09462e10c43518002a" + integrity sha512-But4e8oqqP3anZI5tjzZssZc2J6eoUdeeE0s7LVKKwyiAXJiQDWNNvtPOpgG2DsIz4+Exuse7cEQgjGMxwtLmg== + dependencies: + "@octokit/rest" "^18.0.0" + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + bottleneck "^2.18.1" + debug "^4.0.0" + dir-glob "^3.0.0" + fs-extra "^10.0.0" + globby "^11.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + issue-parser "^6.0.0" + lodash "^4.17.4" + mime "^3.0.0" + p-filter "^2.0.0" + p-retry "^4.0.0" + url-join "^4.0.0" + +"@semantic-release/npm@^7.0.5": version "7.0.8" resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-7.0.8.tgz#228b6327d9e9e9d0adc7bf37b8be3d6fc9744e3e" integrity sha512-8c1TLwKB/xT5E1FNs5l4GFtaNTznHesJk7tw3pGSlVxRqDXa1EZI+DfziZlO58Wk3PpS2ecu661kvBdz9aMgYQ== @@ -2676,7 +2870,42 @@ semver "^7.1.2" tempy "^1.0.0" -"@semantic-release/release-notes-generator@^9.0.0", "@semantic-release/release-notes-generator@^9.0.1": +"@semantic-release/npm@^9.0.0": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.1.tgz#d81828eb1fb771e2767b3a8ee989915e1af27075" + integrity sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + execa "^5.0.0" + fs-extra "^10.0.0" + lodash "^4.17.15" + nerf-dart "^1.0.0" + normalize-url "^6.0.0" + npm "^8.3.0" + rc "^1.2.8" + read-pkg "^5.0.0" + registry-auth-token "^4.0.0" + semver "^7.1.2" + tempy "^1.0.0" + +"@semantic-release/release-notes-generator@^10.0.0": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" + integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.2.3" + debug "^4.0.0" + get-stream "^6.0.0" + import-from "^4.0.0" + into-stream "^6.0.0" + lodash "^4.17.4" + read-pkg-up "^7.0.0" + +"@semantic-release/release-notes-generator@^9.0.1": version "9.0.1" resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.1.tgz#732d285d103064f2a64f08a32031551ebb4f918b" integrity sha512-bOoTiH6SiiR0x2uywSNR7uZcRDl22IpZhj+Q5Bn0v+98MFtOMhCxFhbrKQjhbYoZw7vps1mvMRmFkp/g6R9cvQ== @@ -3755,6 +3984,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@types/aria-query@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" @@ -4837,11 +5071,6 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - acorn-walk@^7.1.1, acorn-walk@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" @@ -4862,11 +5091,6 @@ acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== -acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -4887,7 +5111,7 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -4908,6 +5132,15 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5007,13 +5240,20 @@ ansi-escapes@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-html-community@0.0.8, ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" @@ -5056,7 +5296,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -5147,6 +5387,14 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -5743,6 +5991,18 @@ bin-links@^1.1.2, bin-links@^1.1.8: npm-normalize-package-bin "^1.0.0" write-file-atomic "^2.3.0" +bin-links@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" + integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^1.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -5753,6 +6013,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== +binary-extensions@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -5769,15 +6034,6 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -5895,6 +6151,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -6104,6 +6367,13 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -6168,7 +6438,7 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.5: +cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -6192,6 +6462,30 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" +cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: + version "16.1.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" + integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6416,7 +6710,7 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6424,7 +6718,7 @@ chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.1: +chalk@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== @@ -6449,11 +6743,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - chart.js@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.6.2.tgz#47342c551f688ffdda2cd53b534cb7e461ecec33" @@ -6559,6 +6848,13 @@ cidr-regex@^2.0.10: dependencies: ip-regex "^2.1.0" +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== + dependencies: + ip-regex "^4.1.0" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -6634,6 +6930,14 @@ cli-columns@^3.1.2: string-width "^2.0.0" strip-ansi "^3.0.1" +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== + dependencies: + string-width "^4.2.3" + strip-ansi "^6.0.1" + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -6641,18 +6945,6 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - cli-table3@^0.5.0, cli-table3@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -6672,12 +6964,14 @@ cli-table3@^0.6.1: optionalDependencies: colors "1.4.0" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= +cli-table3@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== dependencies: - colors "1.0.3" + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" cli-truncate@^0.2.1: version "0.2.1" @@ -6687,11 +6981,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -6779,6 +7068,13 @@ cmd-shim@^3.0.0, cmd-shim@^3.0.3: graceful-fs "^4.1.2" mkdirp "~0.5.0" +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -6839,7 +7135,7 @@ color-string@^1.6.0: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.2: +color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -6862,16 +7158,19 @@ colorette@^2.0.10, colorette@^2.0.14: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - colors@1.4.0, colors@^1.1.2, colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -6917,6 +7216,11 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -7132,6 +7436,21 @@ conventional-changelog-writer@^4.0.0: split "^1.0.0" through2 "^4.0.0" +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" @@ -7153,6 +7472,18 @@ conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: through2 "^4.0.0" trim-off-newlines "^1.0.0" +conventional-commits-parser@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + convert-source-map@^1.1.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -7286,18 +7617,7 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmiconfig@^7.0.1: +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== @@ -7969,10 +8289,10 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: + 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" @@ -7983,13 +8303,6 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -8122,7 +8435,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@~1.1.2: +depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -8208,6 +8521,11 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -8577,7 +8895,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11: +encoding@^0.1.11, encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -8650,6 +8968,11 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -9008,63 +9331,13 @@ eslint@^8.11.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^8.15.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.16.0.tgz#6d936e2d524599f2a86c708483b4c372c5d3bbae" - integrity sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA== +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" - integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== - dependencies: - acorn "^8.7.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.3.0" - -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" + acorn "^8.7.0" + acorn-jsx "^5.3.1" eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: @@ -9356,15 +9629,6 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -9697,13 +9961,20 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-versions@^3.0.0, find-versions@^3.2.0: +find-versions@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== dependencies: semver-regex "^2.0.0" +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== + dependencies: + semver-regex "^3.1.2" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -9932,7 +10203,7 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -10046,6 +10317,20 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -10293,6 +10578,17 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.0, global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -10313,13 +10609,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.15.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - dependencies: - type-fest "^0.20.2" - globals@^13.6.0, globals@^13.9.0: version "13.13.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" @@ -10399,7 +10688,7 @@ graceful-fs@^4.1.9, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -graceful-fs@^4.2.6: +graceful-fs@^4.2.10, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -10702,13 +10991,27 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.0, hosted-git-info@^3.0.6: +hosted-git-info@^3.0.6: version "3.0.7" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== dependencies: lru-cache "^6.0.0" +hosted-git-info@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" + integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== + dependencies: + lru-cache "^7.5.1" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -10830,6 +11133,11 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -10891,7 +11199,7 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-agent@^4.0.0: +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== @@ -10900,6 +11208,15 @@ http-proxy-agent@^4.0.0: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-middleware@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.5.tgz#2d12fb41a414889372643a1f54279a2f6470aa93" @@ -10988,7 +11305,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4, iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -11043,6 +11360,13 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + ignore@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -11098,6 +11422,11 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" +import-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -11166,6 +11495,11 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.0.tgz#2f6de95006923aa75feed8894f5686165adc08f1" + integrity sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw== + init-package-json@^1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" @@ -11180,32 +11514,24 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" +init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== + dependencies: + npm-package-arg "^9.0.1" + promzard "^0.3.0" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inquirer@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -11233,6 +11559,14 @@ into-stream@^5.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" +into-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" + integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -11255,6 +11589,11 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + ip@1.1.5, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -11390,6 +11729,13 @@ is-cidr@^3.0.0: dependencies: cidr-regex "^2.0.10" +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== + dependencies: + cidr-regex "^3.1.1" + is-core-module@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -11552,10 +11898,10 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-map@^2.0.2: version "2.0.2" @@ -11760,11 +12106,6 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-weakref@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -12456,7 +12797,7 @@ json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-bet resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -12497,6 +12838,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -12539,7 +12885,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: +jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= @@ -12648,6 +12994,16 @@ junk@^3.1.0: resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== +just-diff-apply@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.3.1.tgz#30f40809ffed55ad76dccf73fa9b85a76964c867" + integrity sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA== + +just-diff@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" + integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -12814,6 +13170,16 @@ libnpmaccess@^3.0.2: npm-package-arg "^6.1.0" npm-registry-fetch "^4.0.0" +libnpmaccess@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" + integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + libnpmconfig@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" @@ -12823,6 +13189,45 @@ libnpmconfig@^1.2.1: find-up "^3.0.0" ini "^1.3.5" +libnpmdiff@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.3.tgz#ad3997330c887c1098ac42682f1e5ad014d49cec" + integrity sha512-AiwBtXtH7HjfmT7FbTf9LFzJB347RrIA4I+IewMfhq8vYXaUveHwJMVNgMM2H/o2J+7Hf12JCBoOF5bTwlmGyw== + dependencies: + "@npmcli/disparity-colors" "^2.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + binary-extensions "^2.2.0" + diff "^5.0.0" + minimatch "^5.0.1" + npm-package-arg "^9.0.1" + pacote "^13.0.5" + tar "^6.1.0" + +libnpmexec@^4.0.2: + version "4.0.6" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.6.tgz#600beffd6f265cf92a096a7f336f330bc0019e82" + integrity sha512-v1jAPJyFFex6R0YHYXuudR4liQ3tYJ7vVZ6eThOex4+WzQEnoShLVfK3MLyFbjdGNO85wCHcVWVpXaBOVnVa/w== + dependencies: + "@npmcli/arborist" "^5.0.0" + "@npmcli/ci-detect" "^2.0.0" + "@npmcli/run-script" "^3.0.0" + chalk "^4.1.0" + mkdirp-infer-owner "^2.0.0" + npm-package-arg "^9.0.1" + npmlog "^6.0.2" + pacote "^13.0.5" + proc-log "^2.0.0" + read "^1.0.7" + read-package-json-fast "^2.0.2" + walk-up-path "^1.0.0" + +libnpmfund@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.2.tgz#7da0827950f0db2cce0acb0dc7652d1834a8b239" + integrity sha512-wmFMP/93Wjy+jDg5LaSldDgAhSgCyA64JUUmp806Kae7y3YP9Qv5m1vUhPxT4yebxgB2v/I6G1/RUcNb1y0kVg== + dependencies: + "@npmcli/arborist" "^5.0.0" + libnpmhook@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" @@ -12833,6 +13238,14 @@ libnpmhook@^5.0.3: get-stream "^4.0.0" npm-registry-fetch "^4.0.0" +libnpmhook@^8.0.2: + version "8.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.3.tgz#9628518a63455d21dafda312ee46175275707ff5" + integrity sha512-TEdNI1mC5zS+w/juCgxrwwQnpbq9lY76NDOS0N37pn6pWIUxB1Yq8mwy6MUEXR1TgH4HurSQyKT6I6Kp9Wjm4A== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + libnpmorg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" @@ -12843,6 +13256,23 @@ libnpmorg@^1.0.1: get-stream "^4.0.0" npm-registry-fetch "^4.0.0" +libnpmorg@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.3.tgz#a85cbdb3665ad4f7c7279d239a4581ec2eeef5a6" + integrity sha512-r4CpmCEF+e5PbFMBi64xSXmqn0uGgV4T7NWpGL4/A6KT/DTtIxALILQZq+l0ZdN1xm4RjOvqSDR22oT4il8rAQ== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmpack@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.0.tgz#93a170b67bc52e15edc7b1f2e09b2c36e532b897" + integrity sha512-BHwojfEbJvVVJXivZjOCe3Y0IzQ47p6c/bfebrpzazuFNRoS9XOsbkncRbl3f23+u9b51eplzwaPh/5xSOAWHg== + dependencies: + "@npmcli/run-script" "^3.0.0" + npm-package-arg "^9.0.1" + pacote "^13.5.0" + libnpmpublish@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" @@ -12858,6 +13288,17 @@ libnpmpublish@^1.1.2: semver "^5.5.1" ssri "^6.0.1" +libnpmpublish@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b" + integrity sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg== + dependencies: + normalize-package-data "^4.0.0" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + semver "^7.3.7" + ssri "^9.0.0" + libnpmsearch@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" @@ -12867,6 +13308,13 @@ libnpmsearch@^2.0.2: get-stream "^4.0.0" npm-registry-fetch "^4.0.0" +libnpmsearch@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.3.tgz#ed502a4c2c70ea36723180455fae1357546b2184" + integrity sha512-Ofq76qKAPhxbiyzPf/5LPjJln26VTKwU9hIU0ACxQ6tNtBJ1CHmI7iITrdp7vNezhZc0FlkXwrIpqXjhBJZgLQ== + dependencies: + npm-registry-fetch "^13.0.0" + libnpmteam@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" @@ -12877,6 +13325,25 @@ libnpmteam@^1.0.2: get-stream "^4.0.0" npm-registry-fetch "^4.0.0" +libnpmteam@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.3.tgz#9335fbbd032b3770f5c9b7ffc6203f47d1ed144a" + integrity sha512-LsYYLz4TlTpcqkusInY5MhKjiHFaCx1GV0LmydXJ/QMh+3IWBJpUhes4ynTZuFoJKkDIFjxyMU09ul+RZixgdg== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmversion@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.4.tgz#a30f563416ea1e2dd69878b4a9edf4eb4a070ef8" + integrity sha512-q5hvZlso0SMLgKm4AMtleRWtq4pERprebEGV6OwKi24efgAOgNDP98+jNUX2mIR2wp9eAa6ybkNNWu4yMaCsVw== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/run-script" "^3.0.0" + json-parse-even-better-errors "^2.3.1" + proc-log "^2.0.0" + semver "^7.3.7" + libnpx@^10.2.4: version "10.2.4" resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" @@ -12960,7 +13427,7 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr@^0.14.1, listr@^0.14.3: +listr@^0.14.1: version "0.14.3" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== @@ -13195,11 +13662,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -13244,14 +13706,6 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - log-update@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" @@ -13328,6 +13782,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.10.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.10.1.tgz#db577f42a94c168f676b638d15da8fb073448cab" + integrity sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A== + lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" @@ -13360,6 +13819,28 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.1.6: + version "10.1.7" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.1.7.tgz#b1402cb3c9fad92b380ff3a863cdae5414a42f76" + integrity sha512-J/2xa2+7zlIUKqfyXDCXFpH3ypxO4k3rgkZHPSZkyUYcBT/hM80M3oyKLM/9dVriZFiGeGGS2Ei+0v2zfhqj3Q== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -13377,6 +13858,28 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -13433,22 +13936,22 @@ markdown-to-jsx@^7.1.3: resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.1.6.tgz#421487df2a66fe4231d94db653a34da033691e62" integrity sha512-1wrIGZYwIG2gR3yfRmbr4FlQmhaAKoKTpRo4wur4fp9p0njU1Hi7vR8fj0AUKKIcPduiJmPprzmCB5B/GvlC7g== -marked-terminal@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-4.1.0.tgz#01087372d3636dc7cb286475a1d6147187f500e0" - integrity sha512-5KllfAOW02WS6hLRQ7cNvGOxvKW1BKuXELH4EtbWfyWgxQhROoMxEvuQ/3fTgkNjledR0J48F4HbapvYp1zWkQ== +marked-terminal@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" + integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== dependencies: - ansi-escapes "^4.3.1" + ansi-escapes "^5.0.0" cardinal "^2.1.1" - chalk "^4.0.0" - cli-table "^0.3.1" - node-emoji "^1.10.0" - supports-hyperlinks "^2.1.0" + chalk "^5.0.0" + cli-table3 "^0.6.1" + node-emoji "^1.11.0" + supports-hyperlinks "^2.2.0" -marked@^1.0.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.5.tgz#a44b31f2a0b8b5bfd610f00d55d1952d1ac1dfdb" - integrity sha512-2AlqgYnVPOc9WDyWu7S5DJaEZsfk6dNh/neatQ3IHUW4QLutM/VPSH9lG7bif+XjFWc9K9XR3QvR+fXuECmfdA== +marked@^4.0.10: + version "4.0.16" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.16.tgz#9ec18fc1a723032eb28666100344d9428cf7a264" + integrity sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA== match-sorter@^4.1.0: version "4.2.1" @@ -13724,6 +14227,11 @@ mime@^2.4.3, mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -13788,6 +14296,13 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -13817,6 +14332,28 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" + integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -13824,13 +14361,28 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -13846,6 +14398,13 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" +minipass@^3.1.0, minipass@^3.1.3, minipass@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -13853,7 +14412,7 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" -minizlib@^2.1.1: +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -13890,6 +14449,15 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -13969,7 +14537,7 @@ ms@2.1.2, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -14000,7 +14568,7 @@ multicast-dns@^7.2.4: dns-packet "^5.2.2" thunky "^1.0.2" -mute-stream@0.0.8, mute-stream@~0.0.4: +mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== @@ -14047,17 +14615,12 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -ncp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== - 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: +negotiator@0.6.3, negotiator@^0.6.2, 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== @@ -14109,12 +14672,12 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" -node-emoji@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== +node-emoji@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: - lodash.toarray "^4.4.0" + lodash "^4.17.21" node-fetch-npm@^2.0.2: version "2.0.4" @@ -14154,6 +14717,38 @@ node-gyp@^5.0.2, node-gyp@^5.1.0: tar "^4.4.12" which "^1.3.1" +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-gyp@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" + integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -14232,6 +14827,13 @@ nopt@^4.0.1, nopt@^4.0.3: abbrev "1" osenv "^0.1.4" +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -14252,6 +14854,16 @@ normalize-package-data@^3.0.0: semver "^7.3.2" validate-npm-package-license "^3.0.1" +normalize-package-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" + integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -14274,6 +14886,11 @@ normalize-url@^5.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd" integrity sha512-9/nOVLYYe/dO/eJeQUNaGUF4m4Z5E7cb9oNTKabH+bNf19mqj60txTcveQxL0GlcWLXCxkOu2/LwL8oW0idIDA== +normalize-url@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + notistack@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/notistack/-/notistack-1.0.10.tgz#8db90830034383467a04184f1fa8ff77f4fc58a5" @@ -14290,6 +14907,13 @@ npm-audit-report@^1.3.3: cli-table3 "^0.5.0" console-control-strings "^1.1.0" +npm-audit-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6" + integrity sha512-tWQzfbwz1sc4244Bx2BVELw0EmZlCsCF0X93RDcmmwhonCsPMoEviYsi+32R+mdRvOWXolPce9zo64n2xgPESw== + dependencies: + chalk "^4.0.0" + npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" @@ -14297,6 +14921,13 @@ npm-bundled@^1.0.1: dependencies: npm-normalize-package-bin "^1.0.1" +npm-bundled@^1.1.1, npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + npm-cache-filename@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" @@ -14309,6 +14940,13 @@ npm-install-checks@^3.0.2: dependencies: semver "^2.3.0 || 3.x || 4 || 5" +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" @@ -14343,6 +14981,15 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: semver "^5.6.0" validate-npm-package-name "^3.0.0" +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.0.2.tgz#f3ef7b1b3b02e82564af2d5228b4c36567dcd389" + integrity sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g== + dependencies: + hosted-git-info "^5.0.0" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + npm-packlist@^1.1.12, npm-packlist@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" @@ -14352,6 +14999,16 @@ npm-packlist@^1.1.12, npm-packlist@^1.4.8: npm-bundled "^1.0.1" npm-normalize-package-bin "^1.0.1" +npm-packlist@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.0.tgz#f3fd52903a021009913a133732022132eb355ce7" + integrity sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + npm-path@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" @@ -14368,6 +15025,16 @@ npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: npm-package-arg "^6.0.0" semver "^5.4.1" +npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" + integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^9.0.0" + semver "^7.3.5" + npm-profile@^4.0.2, npm-profile@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" @@ -14377,6 +15044,27 @@ npm-profile@^4.0.2, npm-profile@^4.0.4: figgy-pudding "^3.4.1" npm-registry-fetch "^4.0.0" +npm-profile@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.0.3.tgz#f4a11ce09467f00fa0832db7f27992e55fdfc94b" + integrity sha512-TVeHhnol2Iemud+Sr70/uqax5LnLJ9y361w+m5+Z7WYV2B1t6FhRDxDu72+yYYTvsgshkhnXEqbPjuD87kYXfA== + dependencies: + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b" + integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" @@ -14539,6 +15227,82 @@ npm@^6.14.8: worker-farm "^1.7.0" write-file-atomic "^2.4.3" +npm@^8.3.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/npm/-/npm-8.12.1.tgz#624064fa7a8e0730223f6b2effe087e7127d567b" + integrity sha512-0yOlhfgu1UzP6UijnaFuIS2bES2H9D90EA5OVsf2iOZw7VBrjntXKEwKfCaFA6vMVWkCP8qnPwCxxPdnDVwlNw== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^5.0.4" + "@npmcli/ci-detect" "^2.0.0" + "@npmcli/config" "^4.1.0" + "@npmcli/fs" "^2.1.0" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/package-json" "^2.0.0" + "@npmcli/run-script" "^3.0.1" + abbrev "~1.1.1" + archy "~1.0.0" + cacache "^16.1.0" + chalk "^4.1.2" + chownr "^2.0.0" + cli-columns "^4.0.0" + cli-table3 "^0.6.2" + columnify "^1.6.0" + fastest-levenshtein "^1.0.12" + glob "^8.0.1" + graceful-fs "^4.2.10" + hosted-git-info "^5.0.0" + ini "^3.0.0" + init-package-json "^3.0.2" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + libnpmaccess "^6.0.2" + libnpmdiff "^4.0.2" + libnpmexec "^4.0.2" + libnpmfund "^3.0.1" + libnpmhook "^8.0.2" + libnpmorg "^4.0.2" + libnpmpack "^4.0.2" + libnpmpublish "^6.0.2" + libnpmsearch "^5.0.2" + libnpmteam "^4.0.2" + libnpmversion "^3.0.1" + make-fetch-happen "^10.1.6" + minipass "^3.1.6" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^9.0.0" + nopt "^5.0.0" + npm-audit-report "^3.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.2" + npm-pick-manifest "^7.0.1" + npm-profile "^6.0.3" + npm-registry-fetch "^13.1.1" + npm-user-validate "^1.0.1" + npmlog "^6.0.2" + opener "^1.5.2" + pacote "^13.6.0" + parse-conflict-json "^2.0.2" + proc-log "^2.0.1" + qrcode-terminal "^0.12.0" + read "~1.0.7" + read-package-json "^5.0.1" + read-package-json-fast "^2.0.3" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.1" + tar "^6.1.11" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^2.0.0" + validate-npm-package-name "^4.0.0" + which "^2.0.2" + write-file-atomic "^4.0.1" + npmlog@^4.0.1, npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -14559,6 +15323,16 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + nth-check@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -14774,7 +15548,7 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== -opener@^1.5.1: +opener@^1.5.1, opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -14803,21 +15577,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -14837,7 +15596,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -15017,6 +15776,33 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" +pacote@^13.0.3, pacote@^13.0.5, pacote@^13.5.0, pacote@^13.6.0: + version "13.6.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.0.tgz#79ea3d3ae5a2b29e2994dcf18d75494e8d888032" + integrity sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^3.0.1" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: version "9.5.12" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" @@ -15118,6 +15904,15 @@ parse-bmfont-xml@^1.1.4: xml-parse-from-string "^1.0.0" xml2js "^0.4.5" +parse-conflict-json@^2.0.1, parse-conflict-json@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" + parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -15664,6 +16459,11 @@ prismjs@^1.21.0, prismjs@~1.27.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -15674,6 +16474,16 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -15687,6 +16497,14 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise.allsettled@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz#2443f3d4b2aa8dfa560f6ac2aa6c4ea999d75f53" @@ -16373,6 +17191,11 @@ read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: dependencies: graceful-fs "^4.1.2" +read-cmd-shim@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" + integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== + read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -16387,6 +17210,14 @@ read-installed@~4.0.3: optionalDependencies: graceful-fs "^4.1.2" +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" @@ -16397,6 +17228,16 @@ read-installed@~4.0.3: normalize-package-data "^2.0.0" npm-normalize-package-bin "^1.0.0" +read-package-json@^5.0.0, read-package-json@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" + integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^1.0.1" + read-package-tree@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" @@ -16459,7 +17300,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@~1.0.1, read@~1.0.7: +read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -16479,7 +17320,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -16994,14 +17835,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -17061,11 +17894,6 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.1.10" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" @@ -17090,13 +17918,6 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -17217,30 +18038,30 @@ selfsigned@^2.0.1: dependencies: node-forge "^1" -semantic-release@^17.2.3: - version "17.2.3" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.2.3.tgz#11f10b851d4e75b1015b17515c433049b3df994c" - integrity sha512-MY1MlowGQrkOR7+leOD8ICkVOC6i1szbwDODdbJ0UdshtMx8Ms0bhpRQmEEliqYKEb5PLv/dqs6zKKuHT7UxTg== +semantic-release@^19.0.3: + version "19.0.3" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.3.tgz#9291053ad9890052f28e7c5921d4741530d516fd" + integrity sha512-HaFbydST1cDKZHuFZxB8DTrBLJVK/AnDExpK0s3EqLIAAUAHUgnd+VSJCUtTYQKkAkauL8G9CucODrVCc7BuAA== dependencies: - "@semantic-release/commit-analyzer" "^8.0.0" - "@semantic-release/error" "^2.2.0" - "@semantic-release/github" "^7.0.0" - "@semantic-release/npm" "^7.0.0" - "@semantic-release/release-notes-generator" "^9.0.0" + "@semantic-release/commit-analyzer" "^9.0.2" + "@semantic-release/error" "^3.0.0" + "@semantic-release/github" "^8.0.0" + "@semantic-release/npm" "^9.0.0" + "@semantic-release/release-notes-generator" "^10.0.0" aggregate-error "^3.0.0" - cosmiconfig "^6.0.0" + cosmiconfig "^7.0.0" debug "^4.0.0" env-ci "^5.0.0" - execa "^4.0.0" + execa "^5.0.0" figures "^3.0.0" - find-versions "^3.0.0" - get-stream "^5.0.0" + find-versions "^4.0.0" + get-stream "^6.0.0" git-log-parser "^1.2.0" hook-std "^2.0.0" - hosted-git-info "^3.0.0" - lodash "^4.17.15" - marked "^1.0.0" - marked-terminal "^4.0.0" + hosted-git-info "^4.0.0" + lodash "^4.17.21" + marked "^4.0.10" + marked-terminal "^5.0.0" micromatch "^4.0.2" p-each-series "^2.1.0" p-reduce "^2.0.0" @@ -17249,7 +18070,7 @@ semantic-release@^17.2.3: semver "^7.3.2" semver-diff "^3.1.1" signale "^1.2.1" - yargs "^15.0.1" + yargs "^16.2.0" semver-compare@^1.0.0: version "1.0.0" @@ -17275,6 +18096,11 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== +semver-regex@^3.1.2: + version "3.1.4" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4" + integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA== + "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -17290,17 +18116,10 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.1.2, semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" @@ -17526,7 +18345,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: 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== @@ -17591,6 +18410,11 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -17655,6 +18479,32 @@ socks-proxy-agent@^4.0.0: agent-base "~4.2.1" socks "~2.3.2" +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" @@ -17828,6 +18678,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + split2@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" @@ -17869,13 +18726,20 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.1: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -18276,7 +19140,7 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: +supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== @@ -18284,6 +19148,14 @@ supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-hyperlinks@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -18358,7 +19230,7 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: safe-buffer "^5.2.1" yallist "^3.1.1" -tar@^6.0.2: +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -18519,7 +19391,7 @@ through2@^4.0.0, through2@^4.0.2: dependencies: readable-stream "3" -through@2, "through@>=2.2.7 <3", through@^2.3.6: +through@2, "through@>=2.2.7 <3": version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -18566,13 +19438,6 @@ tinycolor2@^1.1.2, tinycolor2@^1.4.1, tinycolor2@^1.4.2: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -18680,6 +19545,11 @@ traverse@~0.6.6: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +treeverse@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== + trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" @@ -18778,11 +19648,6 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.3.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -18856,7 +19721,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.2.1: +type-fest@^1.0.2, type-fest@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== @@ -19350,6 +20215,13 @@ validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: dependencies: builtins "^1.0.3" +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + validate.io-array@^1.0.3: version "1.0.6" resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" @@ -19453,6 +20325,11 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -19500,7 +20377,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0, wcwidth@^1.0.1: +wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= @@ -19824,7 +20701,7 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -wide-align@^1.1.2: +wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -19941,6 +20818,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + ws@^7.2.3: version "7.5.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" @@ -20096,7 +20981,7 @@ yargs@^14.2.3: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.0.1, yargs@^15.4.1: +yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -20113,20 +20998,7 @@ yargs@^15.0.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.1: - version "16.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1" - integrity sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^16.2.0: +yargs@^16.1.1, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From 32686cce29fe1fa2f2bdb7a49076a27ae7545138 Mon Sep 17 00:00:00 2001 From: james-union <105876962+james-union@users.noreply.github.com> Date: Mon, 13 Jun 2022 12:51:07 -0400 Subject: [PATCH 43/93] feat: support flyte decks (#504) * feat: support flyte deck #none Signed-off-by: James * fix: rebase with master #none Signed-off-by: James * fix: fix iframe height and api response type; #none Signed-off-by: James * fix: modal style; #none; Signed-off-by: James * fix: use env variable for server ssl config #none; Signed-off-by: James * fix: use h2 instead of h3 for future migration #none Signed-off-by: James --- packages/zapp/console/package.json | 2 +- .../ExecutionDetailsActions.tsx | 82 +++++++++++++++++-- .../ExecutionDetails/ExecutionNodeDeck.tsx | 14 ++++ .../NodeExecutionDetailsPanelContent.tsx | 7 +- .../Executions/ExecutionDetails/strings.tsx | 1 + .../src/components/hooks/useDataProxy.ts | 17 ++++ .../console/src/models/Common/constants.ts | 1 + .../zapp/console/src/models/Execution/api.ts | 14 +++- .../console/src/models/Execution/types.ts | 9 +- .../console/src/models/Execution/utils.ts | 4 + packages/zapp/console/webpack.dev.config.ts | 4 +- yarn.lock | 23 +++++- 12 files changed, 158 insertions(+), 20 deletions(-) create mode 100644 packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionNodeDeck.tsx create mode 100644 packages/zapp/console/src/components/hooks/useDataProxy.ts diff --git a/packages/zapp/console/package.json b/packages/zapp/console/package.json index a191e7e60..6304a0a31 100644 --- a/packages/zapp/console/package.json +++ b/packages/zapp/console/package.json @@ -58,7 +58,7 @@ "@commitlint/cli": "^8.3.5", "@commitlint/config-conventional": "^8.3.4", "@date-io/moment": "1.3.9", - "@flyteorg/flyteidl": "1.1.0", + "@flyteorg/flyteidl": "1.1.4", "@material-ui/core": "^4.0.0", "@material-ui/icons": "^4.0.0", "@material-ui/pickers": "^3.2.2", diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx index e5251378f..8177f5066 100644 --- a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionDetailsActions.tsx @@ -1,23 +1,70 @@ -import { Button } from '@material-ui/core'; +import { Button, Dialog, IconButton } from '@material-ui/core'; import * as React from 'react'; import { ResourceIdentifier, Identifier, Variable } from 'models/Common/types'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import { getTask } from 'models/Task/api'; import { LaunchFormDialog } from 'components/Launch/LaunchForm/LaunchFormDialog'; import { NodeExecutionIdentifier } from 'models/Execution/types'; -import { useNodeExecutionData } from 'components/hooks/useNodeExecution'; +import { useNodeExecution, useNodeExecutionData } from 'components/hooks/useNodeExecution'; import { literalsToLiteralValueMap } from 'components/Launch/LaunchForm/utils'; import { TaskInitialLaunchParameters } from 'components/Launch/LaunchForm/types'; +import { NodeExecutionPhase } from 'models/Execution/enums'; +import Close from '@material-ui/icons/Close'; import { NodeExecutionDetails } from '../types'; import t from './strings'; +import { ExecutionNodeDeck } from './ExecutionNodeDeck'; + +const useStyles = makeStyles((theme: Theme) => { + return { + actionsContainer: { + borderTop: `1px solid ${theme.palette.divider}`, + marginTop: theme.spacing(2), + paddingTop: theme.spacing(2), + '& button': { + marginRight: theme.spacing(1), + }, + }, + dialog: { + maxWidth: `calc(100% - ${theme.spacing(12)}px)`, + maxHeight: `calc(100% - ${theme.spacing(12)}px)`, + height: theme.spacing(90), + width: theme.spacing(110), + '& iframe': { + border: 'none', + }, + }, + dialogTitle: { + display: 'flex', + alignItems: 'center', + padding: theme.spacing(2), + paddingBottom: theme.spacing(0), + fontFamily: 'Open sans', + }, + deckTitle: { + flexGrow: 1, + textAlign: 'center', + fontSize: '24px', + lineHeight: '32px', + marginBlock: 0, + paddingTop: theme.spacing(2), + paddingBottom: theme.spacing(2), + }, + close: { + position: 'absolute', + right: theme.spacing(2), + }, + }; +}); interface ExecutionDetailsActionsProps { - className?: string; details: NodeExecutionDetails; nodeExecutionId: NodeExecutionIdentifier; + phase?: NodeExecutionPhase; } export const ExecutionDetailsActions = (props: ExecutionDetailsActionsProps): JSX.Element => { - const { className, details, nodeExecutionId } = props; + const { details, nodeExecutionId, phase } = props; + const styles = useStyles(); const [showLaunchForm, setShowLaunchForm] = React.useState(false); const [taskInputsTypes, setTaskInputsTypes] = React.useState< @@ -25,6 +72,7 @@ export const ExecutionDetailsActions = (props: ExecutionDetailsActionsProps): JS >(); const executionData = useNodeExecutionData(nodeExecutionId); + const execution = useNodeExecution(nodeExecutionId); const id = details.taskTemplate?.id as ResourceIdentifier | undefined; @@ -36,6 +84,9 @@ export const ExecutionDetailsActions = (props: ExecutionDetailsActionsProps): JS if (id) fetchTask(); }, [id]); + const [showDeck, setShowDeck] = React.useState(false); + const onCloseDeck = () => setShowDeck(false); + if (!id) { return <>; } @@ -54,7 +105,17 @@ export const ExecutionDetailsActions = (props: ExecutionDetailsActionsProps): JS return ( <> -
+
+ {execution?.value?.closure?.deckUri && ( + + )} @@ -65,6 +126,17 @@ export const ExecutionDetailsActions = (props: ExecutionDetailsActionsProps): JS showLaunchForm={showLaunchForm} setShowLaunchForm={setShowLaunchForm} /> + {execution?.value?.closure?.deckUri ? ( + +
+

{t('flyteDeck')}

+ + + +
+ +
+ ) : null} ); }; diff --git a/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionNodeDeck.tsx b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionNodeDeck.tsx new file mode 100644 index 000000000..e0b702915 --- /dev/null +++ b/packages/zapp/console/src/components/Executions/ExecutionDetails/ExecutionNodeDeck.tsx @@ -0,0 +1,14 @@ +import { useDownloadLocation } from 'components/hooks/useDataProxy'; +import { WaitForData } from 'components/common/WaitForData'; +import * as React from 'react'; + +/** Fetches and renders the deck data for a given `deckUri` */ +export const ExecutionNodeDeck: React.FC<{ deckUri: string }> = ({ deckUri }) => { + const downloadLocation = useDownloadLocation(deckUri); + + return ( + +