From 64656b30668afdf693ce54f75d784683d6bc865c Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Fri, 5 Nov 2021 08:36:10 +1100 Subject: [PATCH 01/10] move exp show output fixture --- extension/src/cli/reader.test.ts | 6 +++--- extension/src/experiments/data/collect.test.ts | 4 ++-- .../experiments/model/livePlots/collect.test.ts | 4 ++-- .../experiments/paramsAndMetrics/collect.test.ts | 4 ++-- .../output.ts} | 4 ++-- .../test/suite/experiments/data/index.test.ts | 16 +++++++--------- .../src/test/suite/experiments/index.test.ts | 16 +++++----------- extension/src/test/suite/experiments/util.ts | 14 +++++++------- extension/src/test/suite/extension.test.ts | 4 ++-- extension/src/test/suite/plots/index.test.ts | 4 ++-- 10 files changed, 34 insertions(+), 42 deletions(-) rename extension/src/test/fixtures/{complex-output-example.ts => expShow/output.ts} (99%) diff --git a/extension/src/cli/reader.test.ts b/extension/src/cli/reader.test.ts index fa4a361962..e4e5988164 100644 --- a/extension/src/cli/reader.test.ts +++ b/extension/src/cli/reader.test.ts @@ -7,7 +7,7 @@ import { CliReader } from './reader' import { createProcess } from '../processExecution' import { getFailingMockedProcess, getMockedProcess } from '../test/util/jest' import { getProcessEnv } from '../env' -import complexExperimentsOutput from '../test/fixtures/complex-output-example' +import expShowFixture from '../test/fixtures/expShow/output' import { Config } from '../config' jest.mock('vscode') @@ -82,11 +82,11 @@ describe('CliReader', () => { it('should match the expected output', async () => { const cwd = __dirname mockedCreateProcess.mockReturnValueOnce( - getMockedProcess(JSON.stringify(complexExperimentsOutput)) + getMockedProcess(JSON.stringify(expShowFixture)) ) const experiments = await cliReader.experimentShow(cwd) - expect(experiments).toEqual(complexExperimentsOutput) + expect(experiments).toEqual(expShowFixture) expect(mockedCreateProcess).toBeCalledWith({ args: ['exp', 'show', SHOW_JSON], cwd, diff --git a/extension/src/experiments/data/collect.test.ts b/extension/src/experiments/data/collect.test.ts index c9235b33be..ba33ca7267 100644 --- a/extension/src/experiments/data/collect.test.ts +++ b/extension/src/experiments/data/collect.test.ts @@ -1,11 +1,11 @@ import { join } from 'path' import { collectFiles } from './collect' import { ExperimentsRepoJSONOutput } from '../../cli/reader' -import complexExperimentsOutput from '../../test/fixtures/complex-output-example' +import expShowFixture from '../../test/fixtures/expShow/output' describe('collectFiles', () => { it('should collect all of the available files from the test fixture', () => { - expect(collectFiles(complexExperimentsOutput)).toEqual([ + expect(collectFiles(expShowFixture)).toEqual([ 'params.yaml', join('nested', 'params.yaml'), 'summary.json' diff --git a/extension/src/experiments/model/livePlots/collect.test.ts b/extension/src/experiments/model/livePlots/collect.test.ts index 039e5590f4..b6fb60bc46 100644 --- a/extension/src/experiments/model/livePlots/collect.test.ts +++ b/extension/src/experiments/model/livePlots/collect.test.ts @@ -1,10 +1,10 @@ import { collectLivePlotsData } from './collect' -import complexExperimentsOutput from '../../../test/fixtures/complex-output-example' +import expShowFixture from '../../../test/fixtures/expShow/output' import complexLivePlotsData from '../../../test/fixtures/complex-live-plots-example' describe('collectLivePlotsData', () => { it('should return the expected data from the test fixture', () => { - const data = collectLivePlotsData(complexExperimentsOutput) + const data = collectLivePlotsData(expShowFixture) expect(data).toEqual(complexLivePlotsData) }) }) diff --git a/extension/src/experiments/paramsAndMetrics/collect.test.ts b/extension/src/experiments/paramsAndMetrics/collect.test.ts index 0ee16c2559..5c46fb2c31 100644 --- a/extension/src/experiments/paramsAndMetrics/collect.test.ts +++ b/extension/src/experiments/paramsAndMetrics/collect.test.ts @@ -2,7 +2,7 @@ import { join } from 'path' import { collectChanges, collectParamsAndMetrics } from './collect' import { joinParamOrMetricPath } from './paths' import { ParamOrMetric } from '../webview/contract' -import complexExperimentsOutput from '../../test/fixtures/complex-output-example' +import expShowFixture from '../../test/fixtures/expShow/output' import { ExperimentsRepoJSONOutput } from '../../cli/reader' describe('collectParamsAndMetrics', () => { @@ -363,7 +363,7 @@ describe('collectParamsAndMetrics', () => { it('should collect all params and metrics from the test fixture', () => { expect( - collectParamsAndMetrics(complexExperimentsOutput).map(({ path }) => path) + collectParamsAndMetrics(expShowFixture).map(({ path }) => path) ).toEqual([ joinParamOrMetricPath('params', 'params.yaml', 'epochs'), joinParamOrMetricPath('params', 'params.yaml', 'learning_rate'), diff --git a/extension/src/test/fixtures/complex-output-example.ts b/extension/src/test/fixtures/expShow/output.ts similarity index 99% rename from extension/src/test/fixtures/complex-output-example.ts rename to extension/src/test/fixtures/expShow/output.ts index cd2beb3541..476f8153e9 100644 --- a/extension/src/test/fixtures/complex-output-example.ts +++ b/extension/src/test/fixtures/expShow/output.ts @@ -1,5 +1,5 @@ -import { join } from '../util/path' -import { ExperimentsRepoJSONOutput } from '../../cli/reader' +import { join } from '../../util/path' +import { ExperimentsRepoJSONOutput } from '../../../cli/reader' const data: ExperimentsRepoJSONOutput = { workspace: { diff --git a/extension/src/test/suite/experiments/data/index.test.ts b/extension/src/test/suite/experiments/data/index.test.ts index 142e182846..dd9deb0744 100644 --- a/extension/src/test/suite/experiments/data/index.test.ts +++ b/extension/src/test/suite/experiments/data/index.test.ts @@ -5,7 +5,7 @@ import { expect } from 'chai' import { stub, restore, useFakeTimers } from 'sinon' import { Disposable } from '../../../../extension' import { CliReader } from '../../../../cli/reader' -import complexExperimentsOutput from '../../../fixtures/complex-output-example' +import expShowFixture from '../../../fixtures/expShow/output' import { Config } from '../../../../config' import { dvcDemoPath, getFirstArgOfCall } from '../../util' import { OutputChannel } from '../../../../vscode/outputChannel' @@ -35,7 +35,7 @@ suite('Experiments Data Test Suite', () => { const config = disposable.track(new Config()) const cliReader = disposable.track(new CliReader(config)) const mockExperimentShow = stub(cliReader, 'experimentShow').resolves( - complexExperimentsOutput + expShowFixture ) const outputChannel = disposable.track( @@ -68,7 +68,7 @@ suite('Experiments Data Test Suite', () => { const config = disposable.track(new Config()) const cliReader = disposable.track(new CliReader(config)) const mockExperimentShow = stub(cliReader, 'experimentShow').resolves( - complexExperimentsOutput + expShowFixture ) const mockCreateFileSystemWatcher = stub( @@ -108,7 +108,7 @@ suite('Experiments Data Test Suite', () => { const config = disposable.track(new Config()) const cliReader = disposable.track(new CliReader(config)) const mockExperimentShow = stub(cliReader, 'experimentShow').resolves( - complexExperimentsOutput + expShowFixture ) const mockDispose = stub() @@ -137,21 +137,19 @@ suite('Experiments Data Test Suite', () => { mockExperimentShow.resolves( Object.assign( - { ...complexExperimentsOutput }, + { ...expShowFixture }, { workspace: { baseline: { data: { metrics: { - ...(complexExperimentsOutput.workspace.baseline.data - ?.metrics || {}), + ...(expShowFixture.workspace.baseline.data?.metrics || {}), 'new_summary.json': { data: { auc: 0, loss: 1 } } }, params: { - ...(complexExperimentsOutput.workspace.baseline.data - ?.params || {}), + ...(expShowFixture.workspace.baseline.data?.params || {}), 'new_params.yml': { data: { new_seed: 10000, new_weight_decay: 0 } } diff --git a/extension/src/test/suite/experiments/index.test.ts b/extension/src/test/suite/experiments/index.test.ts index c317206f8c..28b1acac21 100644 --- a/extension/src/test/suite/experiments/index.test.ts +++ b/extension/src/test/suite/experiments/index.test.ts @@ -10,7 +10,7 @@ import { } from './util' import { Disposable } from '../../../extension' import { CliReader } from '../../../cli/reader' -import complexExperimentsOutput from '../../fixtures/complex-output-example' +import expShowFixture from '../../fixtures/expShow/output' import complexRowData from '../../fixtures/complex-row-example' import complexColumnData from '../../fixtures/complex-column-example' import complexChangesData from '../../fixtures/complex-changes-example' @@ -93,10 +93,7 @@ suite('Experiments Test Suite', () => { describe('showWebview', () => { it('should be able to make the experiment webview visible', async () => { - const { experiments } = buildExperiments( - disposable, - complexExperimentsOutput - ) + const { experiments } = buildExperiments(disposable, expShowFixture) const messageSpy = spy(BaseWebview.prototype, 'show') @@ -144,10 +141,7 @@ suite('Experiments Test Suite', () => { }).timeout(5000) it('should handle column reordering messages from the webview', async () => { - const { experiments } = buildExperiments( - disposable, - complexExperimentsOutput - ) + const { experiments } = buildExperiments(disposable, expShowFixture) const mockMessageReceived = disposable.track( new EventEmitter() @@ -388,7 +382,7 @@ suite('Experiments Test Suite', () => { buildMockData() ) ) - testRepository.setState(complexExperimentsOutput) + testRepository.setState(expShowFixture) await testRepository.isReady() expect( mementoSpy, @@ -497,7 +491,7 @@ suite('Experiments Test Suite', () => { buildMockData() ) ) - testRepository.setState(complexExperimentsOutput) + testRepository.setState(expShowFixture) await testRepository.isReady() expect(mementoSpy).to.be.calledWith('sortBy:test', []) expect(mementoSpy).to.be.calledWith('filterBy:test', []) diff --git a/extension/src/test/suite/experiments/util.ts b/extension/src/test/suite/experiments/util.ts index b295e064ff..577fff913d 100644 --- a/extension/src/test/suite/experiments/util.ts +++ b/extension/src/test/suite/experiments/util.ts @@ -8,7 +8,7 @@ import { Disposer } from '../../../extension' import * as Git from '../../../git' import { ResourceLocator } from '../../../resourceLocator' import { OutputChannel } from '../../../vscode/outputChannel' -import complexExperimentsOutput from '../../fixtures/complex-output-example' +import expShowFixture from '../../fixtures/expShow/output' import { buildMockMemento } from '../../util' import { dvcDemoPath, extensionUri } from '../util' import { WebviewColorTheme } from '../../../webview/contract' @@ -22,7 +22,7 @@ export const buildMockData = () => const buildDependencies = ( disposer: Disposer, - experimentShowData = complexExperimentsOutput + experimentShowData = expShowFixture ) => { const config = disposer.track(new Config()) const cliReader = disposer.track(new CliReader(config)) @@ -49,7 +49,7 @@ const buildDependencies = ( export const buildExperiments = ( disposer: Disposer, - experimentShowData = complexExperimentsOutput, + experimentShowData = expShowFixture, dvcRoot = dvcDemoPath ) => { const { config, internalCommands, mockExperimentShow, resourceLocator } = @@ -81,7 +81,7 @@ export const buildMultiRepoExperiments = (disposer: Disposer) => { internalCommands, experiments: mockExperiments, resourceLocator - } = buildExperiments(disposer, complexExperimentsOutput, 'other/dvc/root') + } = buildExperiments(disposer, expShowFixture, 'other/dvc/root') stub(Git, 'getGitRepositoryRoot').resolves(dvcDemoPath) const workspaceExperiments = disposer.track( @@ -93,7 +93,7 @@ export const buildMultiRepoExperiments = (disposer: Disposer) => { [dvcDemoPath], resourceLocator ) - experiments.setState(complexExperimentsOutput) + experiments.setState(expShowFixture) return { experiments, workspaceExperiments } } @@ -109,7 +109,7 @@ export const buildSingleRepoExperiments = (disposer: Disposer) => { resourceLocator ) - experiments.setState(complexExperimentsOutput) + experiments.setState(expShowFixture) return { workspaceExperiments } } @@ -123,7 +123,7 @@ export const buildMockInternalCommands = (disposer: Disposer) => { ) mockedInternalCommands.registerCommand( AvailableCommands.EXPERIMENT_SHOW, - () => Promise.resolve(complexExperimentsOutput) + () => Promise.resolve(expShowFixture) ) return mockedInternalCommands diff --git a/extension/src/test/suite/extension.test.ts b/extension/src/test/suite/extension.test.ts index b7113864ad..ec0eb2392d 100644 --- a/extension/src/test/suite/extension.test.ts +++ b/extension/src/test/suite/extension.test.ts @@ -11,7 +11,7 @@ import { } from './util' import { Disposable } from '../../extension' import { CliReader, ListOutput, StatusOutput } from '../../cli/reader' -import complexExperimentsOutput from '../fixtures/complex-output-example' +import expShowFixture from '../fixtures/expShow/output' import * as Disposer from '../../util/disposable' import { RegisteredCommands } from '../../commands/external' import * as Setup from '../../setup' @@ -191,7 +191,7 @@ suite('Extension Test Suite', () => { const mockExperimentShow = stub( CliReader.prototype, 'experimentShow' - ).resolves(complexExperimentsOutput) + ).resolves(expShowFixture) stub(CliReader.prototype, 'listDvcOnlyRecursive').resolves([ { path: join('data', 'MNIST', 'raw', 't10k-images-idx3-ubyte') }, diff --git a/extension/src/test/suite/plots/index.test.ts b/extension/src/test/suite/plots/index.test.ts index 860ee58009..f2178f23d4 100644 --- a/extension/src/test/suite/plots/index.test.ts +++ b/extension/src/test/suite/plots/index.test.ts @@ -3,7 +3,7 @@ import { expect } from 'chai' import { spy, restore } from 'sinon' import { buildExperiments } from '../experiments/util' import { Disposable } from '../../../extension' -import complexExperimentsOutput from '../../fixtures/complex-output-example' +import expShowFixture from '../../fixtures/expShow/output' import complexLivePlotsData from '../../fixtures/complex-live-plots-example' import { closeAllEditors, dvcDemoPath } from '../util' import { BaseWebview } from '../../../webview' @@ -25,7 +25,7 @@ suite('Plots Test Suite', () => { describe('showWebview', () => { it('should be able to make the plots webview visible', async () => { const { experiments, internalCommands, resourceLocator } = - buildExperiments(disposable, complexExperimentsOutput) + buildExperiments(disposable, expShowFixture) const messageSpy = spy(BaseWebview.prototype, 'show') From 6395c076ae219f42a4887ecf303960fb5f47a60a Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Fri, 5 Nov 2021 08:43:35 +1100 Subject: [PATCH 02/10] move exp show changes fixture --- .../workspaceChanges.ts} | 4 ++-- extension/src/test/suite/experiments/index.test.ts | 4 ++-- .../src/test/suite/experiments/model/filterBy/tree.test.ts | 6 +++--- webview/src/stories/Table.stories.tsx | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) rename extension/src/test/fixtures/{complex-changes-example.ts => expShow/workspaceChanges.ts} (77%) diff --git a/extension/src/test/fixtures/complex-changes-example.ts b/extension/src/test/fixtures/expShow/workspaceChanges.ts similarity index 77% rename from extension/src/test/fixtures/complex-changes-example.ts rename to extension/src/test/fixtures/expShow/workspaceChanges.ts index 73e6794c30..6034b25632 100644 --- a/extension/src/test/fixtures/complex-changes-example.ts +++ b/extension/src/test/fixtures/expShow/workspaceChanges.ts @@ -1,4 +1,4 @@ -const complexChangesData = [ +const data = [ 'metrics:summary.json:accuracy', 'metrics:summary.json:loss', 'metrics:summary.json:val_accuracy', @@ -7,4 +7,4 @@ const complexChangesData = [ 'params:params.yaml:learning_rate' ] -export default complexChangesData +export default data diff --git a/extension/src/test/suite/experiments/index.test.ts b/extension/src/test/suite/experiments/index.test.ts index 28b1acac21..f8e762ed7a 100644 --- a/extension/src/test/suite/experiments/index.test.ts +++ b/extension/src/test/suite/experiments/index.test.ts @@ -13,7 +13,7 @@ import { CliReader } from '../../../cli/reader' import expShowFixture from '../../fixtures/expShow/output' import complexRowData from '../../fixtures/complex-row-example' import complexColumnData from '../../fixtures/complex-column-example' -import complexChangesData from '../../fixtures/complex-changes-example' +import workspaceChangesFixture from '../../fixtures/expShow/workspaceChanges' import { Experiments } from '../../../experiments' import { Config } from '../../../config' import { ResourceLocator } from '../../../resourceLocator' @@ -100,7 +100,7 @@ suite('Experiments Test Suite', () => { const webview = await experiments.showWebview() const expectedTableData: TableData = { - changes: complexChangesData, + changes: workspaceChangesFixture, columns: complexColumnData, columnsOrder: [], rows: complexRowData, diff --git a/extension/src/test/suite/experiments/model/filterBy/tree.test.ts b/extension/src/test/suite/experiments/model/filterBy/tree.test.ts index 29f9ee8dc9..81121fc9f6 100644 --- a/extension/src/test/suite/experiments/model/filterBy/tree.test.ts +++ b/extension/src/test/suite/experiments/model/filterBy/tree.test.ts @@ -5,7 +5,7 @@ import { window, commands, QuickPickItem } from 'vscode' import { Disposable } from '../../../../../extension' import complexColumnData from '../../../../fixtures/complex-column-example' import complexRowData from '../../../../fixtures/complex-row-example' -import complexChangesData from '../../../../fixtures/complex-changes-example' +import workspaceChangesFixture from '../../../../fixtures/expShow/workspaceChanges' import { WorkspaceExperiments } from '../../../../../experiments/workspace' import { getFilterId, @@ -104,7 +104,7 @@ suite('Experiments Filter By Tree Test Suite', () => { expect(messageSpy).to.be.calledWith({ data: { - changes: complexChangesData, + changes: workspaceChangesFixture, columns: complexColumnData, columnsOrder: [], rows: filteredRows, @@ -128,7 +128,7 @@ suite('Experiments Filter By Tree Test Suite', () => { await tableFilterRemoved const expectedTableData: TableData = { - changes: complexChangesData, + changes: workspaceChangesFixture, columns: complexColumnData, columnsOrder: [], rows: complexRowData, diff --git a/webview/src/stories/Table.stories.tsx b/webview/src/stories/Table.stories.tsx index 3efc037c88..3496c932ed 100644 --- a/webview/src/stories/Table.stories.tsx +++ b/webview/src/stories/Table.stories.tsx @@ -3,7 +3,7 @@ import { Story, Meta } from '@storybook/react/types-6-0' import { action } from '@storybook/addon-actions' import complexRowData from 'dvc/src/test/fixtures/complex-row-example' import complexColumnData from 'dvc/src/test/fixtures/complex-column-example' -import complexChangesData from 'dvc/src/test/fixtures/complex-changes-example' +import workspaceChangesFixture from 'dvc/src/test/fixtures/expShow/workspaceChanges' import Experiments from '../experiments/components/Experiments' import './test-vscode-styles.scss' @@ -23,7 +23,7 @@ export default { }, args: { tableData: { - changes: complexChangesData, + changes: workspaceChangesFixture, columns: complexColumnData, columnsOrder: [], rows: complexRowData, From fc87aa25b0f0086f2c53b643b7510989eaa4228d Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Fri, 5 Nov 2021 08:47:07 +1100 Subject: [PATCH 03/10] move exp show columns fixture --- .../src/experiments/paramsAndMetrics/tree.test.ts | 8 ++++---- .../{complex-column-example.ts => expShow/columns.ts} | 6 +++--- extension/src/test/suite/experiments/index.test.ts | 4 ++-- .../test/suite/experiments/model/filterBy/tree.test.ts | 10 +++++----- webview/src/experiments/components/App.test.tsx | 4 ++-- webview/src/stories/Table.stories.tsx | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) rename extension/src/test/fixtures/{complex-column-example.ts => expShow/columns.ts} (94%) diff --git a/extension/src/experiments/paramsAndMetrics/tree.test.ts b/extension/src/experiments/paramsAndMetrics/tree.test.ts index 41cf007ab7..060dec8712 100644 --- a/extension/src/experiments/paramsAndMetrics/tree.test.ts +++ b/extension/src/experiments/paramsAndMetrics/tree.test.ts @@ -4,7 +4,7 @@ import { mocked } from 'ts-jest/utils' import { commands, TreeItem, TreeItemCollapsibleState, window } from 'vscode' import { ExperimentsParamsAndMetricsTree } from './tree' import { joinParamOrMetricPath } from './paths' -import complexColumnData from '../../test/fixtures/complex-column-example' +import columnsFixture from '../../test/fixtures/expShow/columns' import { Resource, ResourceLocator } from '../../resourceLocator' import { Status } from '../paramsAndMetrics/model' import { RegisteredCommands } from '../../commands/external' @@ -60,7 +60,7 @@ beforeEach(() => { }) describe('ExperimentsParamsAndMetricsTree', () => { - const rootParamsAndMetrics = complexColumnData + const rootParamsAndMetrics = columnsFixture .filter(paramOrMetric => ['metrics', 'params'].includes(paramOrMetric.parentPath) ) @@ -182,7 +182,7 @@ describe('ExperimentsParamsAndMetricsTree', () => { ]) mockedGetChildParamsOrMetrics.mockReturnValueOnce( - complexColumnData + columnsFixture .filter(paramOrMetric => paramsPath === paramOrMetric.parentPath) .map(param => { if (param.path === processPath) { @@ -250,7 +250,7 @@ describe('ExperimentsParamsAndMetricsTree', () => { ]) mockedGetChildParamsOrMetrics.mockReturnValueOnce( - complexColumnData + columnsFixture .filter(paramOrMetric => processPath === paramOrMetric.parentPath) .map(param => ({ ...param, diff --git a/extension/src/test/fixtures/complex-column-example.ts b/extension/src/test/fixtures/expShow/columns.ts similarity index 94% rename from extension/src/test/fixtures/complex-column-example.ts rename to extension/src/test/fixtures/expShow/columns.ts index 92deea4320..e1bd4fbe74 100644 --- a/extension/src/test/fixtures/complex-column-example.ts +++ b/extension/src/test/fixtures/expShow/columns.ts @@ -1,6 +1,6 @@ -import { join } from '../../test/util/path' -import { ParamOrMetric } from '../../experiments/webview/contract' -import { joinParamOrMetricPath } from '../../experiments/paramsAndMetrics/paths' +import { join } from '../../../test/util/path' +import { ParamOrMetric } from '../../../experiments/webview/contract' +import { joinParamOrMetricPath } from '../../../experiments/paramsAndMetrics/paths' const nestedParamsFile = join('nested', 'params.yaml') diff --git a/extension/src/test/suite/experiments/index.test.ts b/extension/src/test/suite/experiments/index.test.ts index f8e762ed7a..5bf59ce10c 100644 --- a/extension/src/test/suite/experiments/index.test.ts +++ b/extension/src/test/suite/experiments/index.test.ts @@ -12,7 +12,7 @@ import { Disposable } from '../../../extension' import { CliReader } from '../../../cli/reader' import expShowFixture from '../../fixtures/expShow/output' import complexRowData from '../../fixtures/complex-row-example' -import complexColumnData from '../../fixtures/complex-column-example' +import columnsFixture from '../../fixtures/expShow/columns' import workspaceChangesFixture from '../../fixtures/expShow/workspaceChanges' import { Experiments } from '../../../experiments' import { Config } from '../../../config' @@ -101,7 +101,7 @@ suite('Experiments Test Suite', () => { const expectedTableData: TableData = { changes: workspaceChangesFixture, - columns: complexColumnData, + columns: columnsFixture, columnsOrder: [], rows: complexRowData, sorts: [] diff --git a/extension/src/test/suite/experiments/model/filterBy/tree.test.ts b/extension/src/test/suite/experiments/model/filterBy/tree.test.ts index 81121fc9f6..76fc0c56ff 100644 --- a/extension/src/test/suite/experiments/model/filterBy/tree.test.ts +++ b/extension/src/test/suite/experiments/model/filterBy/tree.test.ts @@ -3,7 +3,7 @@ import { expect } from 'chai' import { stub, spy, restore } from 'sinon' import { window, commands, QuickPickItem } from 'vscode' import { Disposable } from '../../../../../extension' -import complexColumnData from '../../../../fixtures/complex-column-example' +import columnsFixture from '../../../../fixtures/expShow/columns' import complexRowData from '../../../../fixtures/complex-row-example' import workspaceChangesFixture from '../../../../fixtures/expShow/workspaceChanges' import { WorkspaceExperiments } from '../../../../../experiments/workspace' @@ -57,7 +57,7 @@ suite('Experiments Filter By Tree Test Suite', () => { value: '0.45' } - const accuracy = complexColumnData.find( + const accuracy = columnsFixture.find( paramOrMetric => paramOrMetric.path === accuracyPath ) mockShowQuickPick @@ -105,7 +105,7 @@ suite('Experiments Filter By Tree Test Suite', () => { expect(messageSpy).to.be.calledWith({ data: { changes: workspaceChangesFixture, - columns: complexColumnData, + columns: columnsFixture, columnsOrder: [], rows: filteredRows, sorts: [] @@ -129,7 +129,7 @@ suite('Experiments Filter By Tree Test Suite', () => { const expectedTableData: TableData = { changes: workspaceChangesFixture, - columns: complexColumnData, + columns: columnsFixture, columnsOrder: [], rows: complexRowData, sorts: [] @@ -150,7 +150,7 @@ suite('Experiments Filter By Tree Test Suite', () => { const lossPath = joinParamOrMetricPath('metrics', 'summary.json', 'loss') - const loss = complexColumnData.find( + const loss = columnsFixture.find( paramOrMetric => paramOrMetric.path === lossPath ) mockShowQuickPick diff --git a/webview/src/experiments/components/App.test.tsx b/webview/src/experiments/components/App.test.tsx index 9fc864ef54..f07a2ac3c3 100644 --- a/webview/src/experiments/components/App.test.tsx +++ b/webview/src/experiments/components/App.test.tsx @@ -12,7 +12,7 @@ import { import '@testing-library/jest-dom/extend-expect' import { mocked } from 'ts-jest/utils' import complexRowData from 'dvc/src/test/fixtures/complex-row-example' -import complexColumnData from 'dvc/src/test/fixtures/complex-column-example' +import columnsFixture from 'dvc/src/test/fixtures/expShow/columns' import { MessageFromWebviewType, MessageToWebviewType, @@ -75,7 +75,7 @@ describe('App', () => { const messageToChangeState = new MessageEvent('message', { data: { data: { - columns: complexColumnData, + columns: columnsFixture, rows: complexRowData, sorts: [] }, diff --git a/webview/src/stories/Table.stories.tsx b/webview/src/stories/Table.stories.tsx index 3496c932ed..b4fa86a77e 100644 --- a/webview/src/stories/Table.stories.tsx +++ b/webview/src/stories/Table.stories.tsx @@ -2,7 +2,7 @@ import React from 'react' import { Story, Meta } from '@storybook/react/types-6-0' import { action } from '@storybook/addon-actions' import complexRowData from 'dvc/src/test/fixtures/complex-row-example' -import complexColumnData from 'dvc/src/test/fixtures/complex-column-example' +import columnsFixture from 'dvc/src/test/fixtures/expShow/columns' import workspaceChangesFixture from 'dvc/src/test/fixtures/expShow/workspaceChanges' import Experiments from '../experiments/components/Experiments' @@ -24,7 +24,7 @@ export default { args: { tableData: { changes: workspaceChangesFixture, - columns: complexColumnData, + columns: columnsFixture, columnsOrder: [], rows: complexRowData, sorts: [ From 743569e91bb32dfb7fa246d2953272f52355f043 Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Fri, 5 Nov 2021 08:49:38 +1100 Subject: [PATCH 04/10] move exp show live plots fixture --- extension/src/experiments/model/livePlots/collect.test.ts | 4 ++-- .../{complex-live-plots-example.ts => expShow/livePlots.ts} | 2 +- extension/src/test/suite/plots/index.test.ts | 4 ++-- extension/src/webview/factory.test.ts | 4 ++-- webview/src/stories/Plots.stories.tsx | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) rename extension/src/test/fixtures/{complex-live-plots-example.ts => expShow/livePlots.ts} (97%) diff --git a/extension/src/experiments/model/livePlots/collect.test.ts b/extension/src/experiments/model/livePlots/collect.test.ts index b6fb60bc46..0609fa7d26 100644 --- a/extension/src/experiments/model/livePlots/collect.test.ts +++ b/extension/src/experiments/model/livePlots/collect.test.ts @@ -1,10 +1,10 @@ import { collectLivePlotsData } from './collect' import expShowFixture from '../../../test/fixtures/expShow/output' -import complexLivePlotsData from '../../../test/fixtures/complex-live-plots-example' +import livePlotsFixture from '../../../test/fixtures/expShow/livePlots' describe('collectLivePlotsData', () => { it('should return the expected data from the test fixture', () => { const data = collectLivePlotsData(expShowFixture) - expect(data).toEqual(complexLivePlotsData) + expect(data).toEqual(livePlotsFixture) }) }) diff --git a/extension/src/test/fixtures/complex-live-plots-example.ts b/extension/src/test/fixtures/expShow/livePlots.ts similarity index 97% rename from extension/src/test/fixtures/complex-live-plots-example.ts rename to extension/src/test/fixtures/expShow/livePlots.ts index 4fa2d73f5e..c0436a3c0b 100644 --- a/extension/src/test/fixtures/complex-live-plots-example.ts +++ b/extension/src/test/fixtures/expShow/livePlots.ts @@ -1,4 +1,4 @@ -import { PlotsData } from '../../plots/webview/contract' +import { PlotsData } from '../../../plots/webview/contract' const data: PlotsData = [ { diff --git a/extension/src/test/suite/plots/index.test.ts b/extension/src/test/suite/plots/index.test.ts index f2178f23d4..f12f543661 100644 --- a/extension/src/test/suite/plots/index.test.ts +++ b/extension/src/test/suite/plots/index.test.ts @@ -4,7 +4,7 @@ import { spy, restore } from 'sinon' import { buildExperiments } from '../experiments/util' import { Disposable } from '../../../extension' import expShowFixture from '../../fixtures/expShow/output' -import complexLivePlotsData from '../../fixtures/complex-live-plots-example' +import livePlotsFixture from '../../fixtures/expShow/livePlots' import { closeAllEditors, dvcDemoPath } from '../util' import { BaseWebview } from '../../../webview' import { PlotsData } from '../../../plots/webview/contract' @@ -37,7 +37,7 @@ suite('Plots Test Suite', () => { const webview = await plots.showWebview() - const expectedPlotsData: PlotsData = complexLivePlotsData + const expectedPlotsData: PlotsData = livePlotsFixture expect(messageSpy).to.be.calledWith({ data: expectedPlotsData }) diff --git a/extension/src/webview/factory.test.ts b/extension/src/webview/factory.test.ts index c4f3fdb858..79a7e1806a 100644 --- a/extension/src/webview/factory.test.ts +++ b/extension/src/webview/factory.test.ts @@ -1,13 +1,13 @@ import { ViewKey } from './constants' import { isValidState } from './factory' -import complexPlotsData from '../test/fixtures/complex-live-plots-example' +import livePlotsFixture from '../test/fixtures/expShow/livePlots' describe('isValidState', () => { const dvcRoot = 'test' it('Successfully validates example plots data', () => { expect( isValidState(ViewKey.PLOTS, { - data: complexPlotsData, + data: livePlotsFixture, dvcRoot }) ).toBe(true) diff --git a/webview/src/stories/Plots.stories.tsx b/webview/src/stories/Plots.stories.tsx index 1270366374..c8472ec3b3 100644 --- a/webview/src/stories/Plots.stories.tsx +++ b/webview/src/stories/Plots.stories.tsx @@ -1,13 +1,13 @@ import React from 'react' import { Story, Meta } from '@storybook/react/types-6-0' import { PlotsData } from 'dvc/src/plots/webview/contract' -import complexPlotsData from 'dvc/src/test/fixtures/complex-live-plots-example' +import livePlotsFixture from 'dvc/src/test/fixtures/expShow/livePlots' import Plots from '../plots/components/Plots' import './test-vscode-styles.scss' export default { args: { - plotsData: complexPlotsData + plotsData: livePlotsFixture }, component: Plots, title: 'Plots' From 9c7b92236a3ad83aafc440c6ccfc794139e5f40b Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Fri, 5 Nov 2021 08:52:11 +1100 Subject: [PATCH 05/10] move exp show rows fixture --- .../fixtures/{complex-row-example.ts => expShow/rows.ts} | 4 ++-- extension/src/test/suite/experiments/index.test.ts | 4 ++-- .../src/test/suite/experiments/model/filterBy/tree.test.ts | 6 +++--- webview/src/experiments/components/App.test.tsx | 4 ++-- webview/src/stories/Table.stories.tsx | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) rename extension/src/test/fixtures/{complex-row-example.ts => expShow/rows.ts} (99%) diff --git a/extension/src/test/fixtures/complex-row-example.ts b/extension/src/test/fixtures/expShow/rows.ts similarity index 99% rename from extension/src/test/fixtures/complex-row-example.ts rename to extension/src/test/fixtures/expShow/rows.ts index 2b90691e3f..3aad9c8794 100644 --- a/extension/src/test/fixtures/complex-row-example.ts +++ b/extension/src/test/fixtures/expShow/rows.ts @@ -1,5 +1,5 @@ -import { join } from '../util/path' -import { RowData } from '../../experiments/webview/contract' +import { join } from '../../util/path' +import { RowData } from '../../../experiments/webview/contract' const data: RowData[] = [ { diff --git a/extension/src/test/suite/experiments/index.test.ts b/extension/src/test/suite/experiments/index.test.ts index 5bf59ce10c..cc2c16f4e6 100644 --- a/extension/src/test/suite/experiments/index.test.ts +++ b/extension/src/test/suite/experiments/index.test.ts @@ -11,7 +11,7 @@ import { import { Disposable } from '../../../extension' import { CliReader } from '../../../cli/reader' import expShowFixture from '../../fixtures/expShow/output' -import complexRowData from '../../fixtures/complex-row-example' +import rowsFixture from '../../fixtures/expShow/rows' import columnsFixture from '../../fixtures/expShow/columns' import workspaceChangesFixture from '../../fixtures/expShow/workspaceChanges' import { Experiments } from '../../../experiments' @@ -103,7 +103,7 @@ suite('Experiments Test Suite', () => { changes: workspaceChangesFixture, columns: columnsFixture, columnsOrder: [], - rows: complexRowData, + rows: rowsFixture, sorts: [] } diff --git a/extension/src/test/suite/experiments/model/filterBy/tree.test.ts b/extension/src/test/suite/experiments/model/filterBy/tree.test.ts index 76fc0c56ff..5c6d651ed9 100644 --- a/extension/src/test/suite/experiments/model/filterBy/tree.test.ts +++ b/extension/src/test/suite/experiments/model/filterBy/tree.test.ts @@ -4,7 +4,7 @@ import { stub, spy, restore } from 'sinon' import { window, commands, QuickPickItem } from 'vscode' import { Disposable } from '../../../../../extension' import columnsFixture from '../../../../fixtures/expShow/columns' -import complexRowData from '../../../../fixtures/complex-row-example' +import rowsFixture from '../../../../fixtures/expShow/rows' import workspaceChangesFixture from '../../../../fixtures/expShow/workspaceChanges' import { WorkspaceExperiments } from '../../../../../experiments/workspace' import { @@ -81,7 +81,7 @@ suite('Experiments Filter By Tree Test Suite', () => { await tableFilterAdded - const [workspace, master] = complexRowData + const [workspace, master] = rowsFixture const filteredRows = [ workspace, @@ -131,7 +131,7 @@ suite('Experiments Filter By Tree Test Suite', () => { changes: workspaceChangesFixture, columns: columnsFixture, columnsOrder: [], - rows: complexRowData, + rows: rowsFixture, sorts: [] } diff --git a/webview/src/experiments/components/App.test.tsx b/webview/src/experiments/components/App.test.tsx index f07a2ac3c3..7706a68390 100644 --- a/webview/src/experiments/components/App.test.tsx +++ b/webview/src/experiments/components/App.test.tsx @@ -11,7 +11,7 @@ import { } from '@testing-library/react' import '@testing-library/jest-dom/extend-expect' import { mocked } from 'ts-jest/utils' -import complexRowData from 'dvc/src/test/fixtures/complex-row-example' +import rowsFixture from 'dvc/src/test/fixtures/expShow/rows' import columnsFixture from 'dvc/src/test/fixtures/expShow/columns' import { MessageFromWebviewType, @@ -76,7 +76,7 @@ describe('App', () => { data: { data: { columns: columnsFixture, - rows: complexRowData, + rows: rowsFixture, sorts: [] }, type: MessageToWebviewType.setData diff --git a/webview/src/stories/Table.stories.tsx b/webview/src/stories/Table.stories.tsx index b4fa86a77e..b906641d62 100644 --- a/webview/src/stories/Table.stories.tsx +++ b/webview/src/stories/Table.stories.tsx @@ -1,7 +1,7 @@ import React from 'react' import { Story, Meta } from '@storybook/react/types-6-0' import { action } from '@storybook/addon-actions' -import complexRowData from 'dvc/src/test/fixtures/complex-row-example' +import rowsFixture from 'dvc/src/test/fixtures/expShow/rows' import columnsFixture from 'dvc/src/test/fixtures/expShow/columns' import workspaceChangesFixture from 'dvc/src/test/fixtures/expShow/workspaceChanges' import Experiments from '../experiments/components/Experiments' @@ -26,7 +26,7 @@ export default { changes: workspaceChangesFixture, columns: columnsFixture, columnsOrder: [], - rows: complexRowData, + rows: rowsFixture, sorts: [ { descending: true, path: 'params:params.yaml:epochs' }, { descending: false, path: 'params:params.yaml:log_file' } From f3392c0ac37fc1b79a326a7bc4076610594ee8b5 Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Fri, 5 Nov 2021 08:54:00 +1100 Subject: [PATCH 06/10] move plots show output fixture --- .../{complex-static-plots-example.ts => plotsShow/output.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename extension/src/test/fixtures/{complex-static-plots-example.ts => plotsShow/output.ts} (100%) diff --git a/extension/src/test/fixtures/complex-static-plots-example.ts b/extension/src/test/fixtures/plotsShow/output.ts similarity index 100% rename from extension/src/test/fixtures/complex-static-plots-example.ts rename to extension/src/test/fixtures/plotsShow/output.ts From 1e0e8010e376711360a7e1743968a1ba97a61010 Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Thu, 4 Nov 2021 14:30:43 +1100 Subject: [PATCH 07/10] stub plots show so we can build out the feature --- extension/package.json | 1 + extension/src/cli/args.ts | 6 ++++- extension/src/cli/reader.test.ts | 21 +++++++++++++++++ extension/src/cli/reader.ts | 23 +++++++++++++++++-- .../src/test/fixtures/plotsShow/output.ts | 8 ++++--- 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/extension/package.json b/extension/package.json index 29eecf16ef..0ab270f50b 100644 --- a/extension/package.json +++ b/extension/package.json @@ -986,6 +986,7 @@ "@types/lodash.omit": "^4.5.6", "@types/mocha": "^8.2.0", "@types/node": "^14.14.22", + "@types/react-vega": "^7.0.0", "@types/sinon-chai": "^3.2.5", "@types/vscode": "^1.61.0", "chai": "^4.2.0", diff --git a/extension/src/cli/args.ts b/extension/src/cli/args.ts index cf3edfd0e9..7a94c8ac89 100644 --- a/extension/src/cli/args.ts +++ b/extension/src/cli/args.ts @@ -7,6 +7,7 @@ export enum Command { INITIALIZE = 'init', LIST = 'list', MOVE = 'move', + PLOTS = 'plots', PULL = 'pull', PUSH = 'push', REMOVE = 'remove', @@ -16,6 +17,10 @@ export enum Command { METRICS = 'metrics' } +export enum SubCommand { + SHOW = 'show' +} + export enum Flag { FORCE = '-f', HELP = '-h', @@ -29,7 +34,6 @@ export enum ExperimentSubCommand { BRANCH = 'branch', GARBAGE_COLLECT = 'gc', LIST = 'list', - SHOW = 'show', REMOVE = 'remove', RUN = 'run' } diff --git a/extension/src/cli/reader.test.ts b/extension/src/cli/reader.test.ts index e4e5988164..0f66acc8dd 100644 --- a/extension/src/cli/reader.test.ts +++ b/extension/src/cli/reader.test.ts @@ -8,6 +8,7 @@ import { createProcess } from '../processExecution' import { getFailingMockedProcess, getMockedProcess } from '../test/util/jest' import { getProcessEnv } from '../env' import expShowFixture from '../test/fixtures/expShow/output' +import plotsShowFixture from '../test/fixtures/plotsShow/output' import { Config } from '../config' jest.mock('vscode') @@ -303,6 +304,26 @@ describe('CliReader', () => { }) }) + describe('plotsShow', () => { + it('should match the expected output', async () => { + const cwd = __dirname + + mockedCreateProcess.mockReturnValueOnce( + getMockedProcess(JSON.stringify(plotsShowFixture)) + ) + + const plots = await cliReader.plotsShow(cwd) + expect(plots).toEqual(plotsShowFixture) + expect(mockedCreateProcess).not.toBeCalled() + // expect(mockedCreateProcess).toBeCalledWith({ + // args: ['plots', 'show', SHOW_JSON], + // cwd, + // env: mockedEnv, + // executable: 'dvc' + // }) + }) + }) + describe('root', () => { it('should return the root relative to the cwd', async () => { const stdout = join('..', '..') diff --git a/extension/src/cli/reader.ts b/extension/src/cli/reader.ts index 2acc0b5780..425c65f067 100644 --- a/extension/src/cli/reader.ts +++ b/extension/src/cli/reader.ts @@ -1,3 +1,5 @@ +import isEqual from 'lodash.isequal' +import { VisualizationSpec } from 'react-vega' import { Cli, typeCheckCommands } from '.' import { Args, @@ -5,10 +7,12 @@ import { ExperimentFlag, ExperimentSubCommand, Flag, - ListFlag + ListFlag, + SubCommand } from './args' import { retry } from './retry' import { trimAndSplit } from '../util/stdout' +import plotsShowFixture from '../test/fixtures/plotsShow/output' export type PathOutput = { path: string } @@ -96,6 +100,8 @@ export interface ExperimentsRepoJSONOutput { } } +export type PlotsOutput = Record + export const autoRegisteredCommands = { DIFF: 'diff', EXPERIMENT_LIST_CURRENT: 'experimentListCurrent', @@ -125,7 +131,7 @@ export class CliReader extends Cli { return this.readProcessJson( cwd, Command.EXPERIMENT, - ExperimentSubCommand.SHOW + SubCommand.SHOW ) } @@ -157,6 +163,14 @@ export class CliReader extends Cli { ) } + public plotsShow(cwd: string): Promise { + return this.readProcessJson( + cwd, + Command.PLOTS, + SubCommand.SHOW + ) + } + public async root(cwd: string): Promise { try { return await this.executeProcess(cwd, Command.ROOT) @@ -172,6 +186,11 @@ export class CliReader extends Cli { formatter: typeof trimAndSplit | typeof JSON.parse, ...args: Args ): Promise { + // Stubbed until DVC ready + if (isEqual(args, ['plots', 'show', '--show-json'])) { + return Promise.resolve(formatter(JSON.stringify(plotsShowFixture))) + } + const output = await retry( () => this.executeProcess(cwd, ...args), args.join(' ') diff --git a/extension/src/test/fixtures/plotsShow/output.ts b/extension/src/test/fixtures/plotsShow/output.ts index 619a3aad41..48b01d3d4b 100644 --- a/extension/src/test/fixtures/plotsShow/output.ts +++ b/extension/src/test/fixtures/plotsShow/output.ts @@ -1,3 +1,5 @@ +import { VisualizationSpec } from 'react-vega' + const data = { 'logs/loss.tsv': { $schema: 'https://vega.github.io/schema/vega-lite/v5.json', @@ -173,7 +175,7 @@ const data = { ] } ] - }, + } as VisualizationSpec, 'logs/acc.tsv': { $schema: 'https://vega.github.io/schema/vega-lite/v5.json', data: { @@ -348,7 +350,7 @@ const data = { ] } ] - }, + } as VisualizationSpec, 'predictions.json': { $schema: 'https://vega.github.io/schema/vega-lite/v5.json', data: { @@ -50447,7 +50449,7 @@ const data = { } ] } - } + } as VisualizationSpec } export default data From 0fa2ba5150b1ff2ec04ff78d6a3f94dd7541b748 Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Thu, 4 Nov 2021 14:42:40 +1100 Subject: [PATCH 08/10] add plots show into list of available commands --- extension/src/cli/reader.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/extension/src/cli/reader.ts b/extension/src/cli/reader.ts index 425c65f067..6a79fe353d 100644 --- a/extension/src/cli/reader.ts +++ b/extension/src/cli/reader.ts @@ -108,6 +108,7 @@ export const autoRegisteredCommands = { EXPERIMENT_SHOW: 'experimentShow', LIST_DVC_ONLY: 'listDvcOnly', LIST_DVC_ONLY_RECURSIVE: 'listDvcOnlyRecursive', + PLOTS_SHOW: 'plotsShow', STATUS: 'status' } as const From a41d5267eb379378cd80161ef9ae2fc54c15c3ac Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Thu, 4 Nov 2021 15:18:37 +1100 Subject: [PATCH 09/10] remove duplication? --- extension/src/cli/reader.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/extension/src/cli/reader.ts b/extension/src/cli/reader.ts index 6a79fe353d..e8feffaa1b 100644 --- a/extension/src/cli/reader.ts +++ b/extension/src/cli/reader.ts @@ -129,10 +129,9 @@ export class CliReader extends Cli { } public experimentShow(cwd: string): Promise { - return this.readProcessJson( + return this.readShowProcessJson( cwd, - Command.EXPERIMENT, - SubCommand.SHOW + Command.EXPERIMENT ) } @@ -165,11 +164,7 @@ export class CliReader extends Cli { } public plotsShow(cwd: string): Promise { - return this.readProcessJson( - cwd, - Command.PLOTS, - SubCommand.SHOW - ) + return this.readShowProcessJson(cwd, Command.PLOTS) } public async root(cwd: string): Promise { @@ -211,4 +206,8 @@ export class CliReader extends Cli { Flag.SHOW_JSON ) } + + private readShowProcessJson(cwd: string, command: Command): Promise { + return this.readProcessJson(cwd, command, SubCommand.SHOW) + } } From 20a17eb0edeb943d813e2e57241a5c332d6ba975 Mon Sep 17 00:00:00 2001 From: Matt Seddon Date: Thu, 4 Nov 2021 15:36:48 +1100 Subject: [PATCH 10/10] update yarn lock --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 950c724656..cd3f9c5a2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3408,6 +3408,13 @@ dependencies: "@types/react" "*" +"@types/react-vega@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@types/react-vega/-/react-vega-7.0.0.tgz#36e266d0c4841fc3ab8fb277a38d26d0d05cfceb" + integrity sha512-ZW+Sol0KQBi/t2tjoaEOvvKwAQF2u+ChBAfEEL6V/NXgd672XbVJ6x0pKm1fnL+YuZIG/jAZLYOfSEtaVDgs3A== + dependencies: + react-vega "*" + "@types/react@*": version "17.0.20" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.20.tgz#a4284b184d47975c71658cd69e759b6bd37c3b8c" @@ -12555,7 +12562,7 @@ react-textarea-autosize@^8.3.0: use-composed-ref "^1.0.0" use-latest "^1.0.0" -react-vega@^7.4.4: +react-vega@*, react-vega@^7.4.4: version "7.4.4" resolved "https://registry.yarnpkg.com/react-vega/-/react-vega-7.4.4.tgz#098bca8761e8f9b9e7ab300beef434ca18dbb843" integrity sha512-zIQo5+iz82z0+tSHzhT0U32MkMtbzWJG4SVMEJoJlduQJvkeJCQ7qaqfjUaatOhiO8eqjE5oM81BadUAXZ5Njw==