diff --git a/packages/grafana-e2e/package.json b/packages/grafana-e2e/package.json index 123d0294ea1..70bf9207d76 100644 --- a/packages/grafana-e2e/package.json +++ b/packages/grafana-e2e/package.json @@ -49,7 +49,7 @@ "@mochajs/json-file-reporter": "^1.2.0", "blink-diff": "1.0.13", "commander": "5.0.0", - "cypress": "^4.9.0", + "cypress": "^4.12.1", "cypress-file-upload": "^4.0.7", "execa": "4.0.0", "resolve-as-bin": "2.1.0", diff --git a/packages/grafana-e2e/src/flows/addDashboard.ts b/packages/grafana-e2e/src/flows/addDashboard.ts index 481357e2e57..a1625993c92 100644 --- a/packages/grafana-e2e/src/flows/addDashboard.ts +++ b/packages/grafana-e2e/src/flows/addDashboard.ts @@ -8,8 +8,21 @@ export interface AddDashboardConfig { timeRange: DashboardTimeRangeConfig; timezone: string; title: string; + variables: Partial[]; } +export interface AddVariableConfig { + constantValue?: string; + dataSource?: string; + hide?: string; + label?: string; + name: string; + query?: string; + regex?: string; + type: string; +} + +// @todo improve config input/output: https://stackoverflow.com/a/63507459/923745 // @todo this actually returns type `Cypress.Chainable` export const addDashboard = (config?: Partial): any => { const fullConfig = { @@ -19,10 +32,11 @@ export const addDashboard = (config?: Partial): any => { }, timezone: 'Coordinated Universal Time', title: `e2e-${Date.now()}`, + variables: [], ...config, } as AddDashboardConfig; - const { timeRange, timezone, title } = fullConfig; + const { timeRange, timezone, title, variables } = fullConfig; e2e().logToConsole('Adding dashboard with title:', title); @@ -33,11 +47,11 @@ export const addDashboard = (config?: Partial): any => { // @todo use the time range picker's time zone control selectOption(e2e.pages.Dashboard.Settings.General.timezone(), timezone); + addVariables(variables); + e2e.components.BackButton.backArrow().click(); - if (timeRange) { - setDashboardTimeRange(timeRange); - } + setDashboardTimeRange(timeRange); e2e.pages.Dashboard.Toolbar.toolbarItems('Save dashboard').click(); @@ -62,9 +76,79 @@ export const addDashboard = (config?: Partial): any => { }); // @todo remove `wrap` when possible - return e2e().wrap({ - config: fullConfig, - uid, - }); + return e2e().wrap( + { + config: fullConfig, + uid, + }, + { log: false } + ); }); }; + +export const VARIABLE_TYPE_AD_HOC_FILTERS = 'Ad hoc filters'; +export const VARIABLE_TYPE_CONSTANT = 'Constant'; +export const VARIABLE_TYPE_DATASOURCE = 'Datasource'; +export const VARIABLE_TYPE_QUERY = 'Query'; + +const addVariable = (config: Partial, isFirst: boolean): any => { + const fullConfig = { + type: VARIABLE_TYPE_QUERY, + ...config, + } as AddVariableConfig; + + if (isFirst) { + e2e.pages.Dashboard.Settings.Variables.List.addVariableCTA().click(); + } else { + e2e.pages.Dashboard.Settings.Variables.List.newButton().click(); + } + + const { constantValue, dataSource, hide, label, name, query, regex, type } = fullConfig; + + if (hide) { + e2e.pages.Dashboard.Settings.Variables.Edit.General.generalHideSelect().select(hide); + } + + if (label) { + e2e.pages.Dashboard.Settings.Variables.Edit.General.generalLabelInput().type(label); + } + + e2e.pages.Dashboard.Settings.Variables.Edit.General.generalNameInput().type(name); + + if (type !== VARIABLE_TYPE_QUERY) { + e2e.pages.Dashboard.Settings.Variables.Edit.General.generalTypeSelect().select(type); + } + + if ( + dataSource && + (type === VARIABLE_TYPE_AD_HOC_FILTERS || type === VARIABLE_TYPE_DATASOURCE || type === VARIABLE_TYPE_QUERY) + ) { + e2e.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsDataSourceSelect().select(dataSource); + } + + if (constantValue && type === VARIABLE_TYPE_CONSTANT) { + e2e.pages.Dashboard.Settings.Variables.Edit.ConstantVariable.constantOptionsQueryInput().type(constantValue); + } + + if (type === VARIABLE_TYPE_QUERY) { + if (query) { + e2e.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsQueryInput().type(query); + } + + if (regex) { + e2e.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsRegExInput().type(regex); + } + } + + e2e.pages.Dashboard.Settings.Variables.Edit.General.addButton().click(); + + return fullConfig; +}; + +const addVariables = (configs: Partial[]): any => { + if (configs.length > 0) { + e2e.pages.Dashboard.Settings.General.sectionItems('Variables').click(); + } + + return configs.map((config, i) => addVariable(config, i === 0)); +}; diff --git a/packages/grafana-e2e/src/flows/addDataSource.ts b/packages/grafana-e2e/src/flows/addDataSource.ts index c47b2849d87..fddaf799d58 100644 --- a/packages/grafana-e2e/src/flows/addDataSource.ts +++ b/packages/grafana-e2e/src/flows/addDataSource.ts @@ -14,6 +14,7 @@ export interface AddDataSourceConfig { type: string; } +// @todo improve config input/output: https://stackoverflow.com/a/63507459/923745 // @todo this actually returns type `Cypress.Chainable` export const addDataSource = (config?: Partial): any => { const fullConfig = { @@ -110,9 +111,12 @@ export const addDataSource = (config?: Partial): any => { } // @todo remove `wrap` when possible - return e2e().wrap({ - config: fullConfig, - id, - }); + return e2e().wrap( + { + config: fullConfig, + id, + }, + { log: false } + ); }); }; diff --git a/packages/grafana-e2e/src/flows/addPanel.ts b/packages/grafana-e2e/src/flows/addPanel.ts index f06ac010032..8ea1b7c2ecb 100644 --- a/packages/grafana-e2e/src/flows/addPanel.ts +++ b/packages/grafana-e2e/src/flows/addPanel.ts @@ -1,169 +1,24 @@ -import { e2e } from '../index'; -import { getLocalStorage, requireLocalStorage } from '../support/localStorage'; +import { configurePanel, ConfigurePanelConfig } from './configurePanel'; import { getScenarioContext } from '../support/scenarioContext'; -import { selectOption } from './selectOption'; -export interface AddPanelConfig { - chartData: { - method: string; - route: string | RegExp; - }; - dashboardUid: string; +export interface AddPanelConfig extends ConfigurePanelConfig { dataSourceName: string; - matchScreenshot: boolean; queriesForm: (config: AddPanelConfig) => void; panelTitle: string; - screenshotName: string; visualizationName: string; } +// @todo improve config input/output: https://stackoverflow.com/a/63507459/923745 // @todo this actually returns type `Cypress.Chainable` export const addPanel = (config?: Partial): any => - getScenarioContext().then(({ lastAddedDashboardUid, lastAddedDataSource }: any) => { - const fullConfig = { - chartData: { - method: 'POST', - route: '/api/ds/query', - }, - dashboardUid: lastAddedDashboardUid, - dataSourceName: lastAddedDataSource, - matchScreenshot: false, - panelTitle: `e2e-${Date.now()}`, - queriesForm: () => {}, - screenshotName: 'chart', - visualizationName: 'Table', - ...config, - } as AddPanelConfig; - - const { - chartData, - dashboardUid, - dataSourceName, - matchScreenshot, - panelTitle, - queriesForm, - screenshotName, - visualizationName, - } = fullConfig; - - e2e.flows.openDashboard({ uid: dashboardUid }); - e2e.pages.Dashboard.Toolbar.toolbarItems('Add panel').click(); - e2e.pages.AddDashboard.addNewPanel().click(); - - e2e().server(); - - // @todo alias '/**/*.js*' as '@pluginModule' when possible: https://github.com/cypress-io/cypress/issues/1296 - - e2e() - .route(chartData.method, chartData.route) - .as('chartData'); - - selectOption(e2e.components.DataSourcePicker.container(), dataSourceName); - - // @todo instead wait for '@pluginModule' - e2e().wait(2000); - - openOptions(); - - openOptionsGroup('settings'); - getOptionsGroup('settings') - .find('[value="Panel Title"]') - .scrollIntoView() - .clear() - .type(panelTitle); - closeOptionsGroup('settings'); - - openOptionsGroup('type'); - e2e.components.PluginVisualization.item(visualizationName) - .scrollIntoView() - .click(); - closeOptionsGroup('type'); - - closeOptions(); - - queriesForm(fullConfig); - - e2e().wait('@chartData'); - - // @todo enable when plugins have this implemented - //e2e.components.QueryEditorRow.actionButton('Disable/enable query').click(); - //e2e.components.Panels.Panel.containerByTitle(panelTitle).find('.panel-content').contains('No data'); - //e2e.components.QueryEditorRow.actionButton('Disable/enable query').click(); - - e2e() - .get('button[title="Apply changes and go back to dashboard"]') - .click(); - - e2e().wait('@chartData'); - - // Wait for RxJS - e2e().wait(500); - - if (matchScreenshot) { - e2e.components.Panels.Panel.containerByTitle(panelTitle) - .find('.panel-content') - .screenshot(screenshotName); - e2e().compareScreenshots(screenshotName); - } - - // @todo remove `wrap` when possible - return e2e().wrap({ config: fullConfig }); - }); - -// @todo this actually returns type `Cypress.Chainable` -const closeOptions = (): any => - isOptionsOpen().then((isOpen: any) => { - if (isOpen) { - e2e.components.PanelEditor.OptionsPane.close().click(); - } - }); - -// @todo this actually returns type `Cypress.Chainable` -const closeOptionsGroup = (name: string): any => - isOptionsGroupOpen(name).then((isOpen: any) => { - if (isOpen) { - toggleOptionsGroup(name); - } - }); - -const getOptionsGroup = (name: string) => e2e().get(`.options-group:has([aria-label="Options group Panel ${name}"])`); - -// @todo this actually returns type `Cypress.Chainable` -const isOptionsGroupOpen = (name: string): any => - requireLocalStorage(`grafana.dashboard.editor.ui.optionGroup[Panel ${name}]`).then(({ defaultToClosed }: any) => { - // @todo remove `wrap` when possible - return e2e().wrap(!defaultToClosed); - }); - -// @todo this actually returns type `Cypress.Chainable` -const isOptionsOpen = (): any => - getLocalStorage('grafana.dashboard.editor.ui').then((data: any) => { - if (data) { - // @todo remove `wrap` when possible - return e2e().wrap(data.isPanelOptionsVisible); - } else { - // @todo remove `wrap` when possible - return e2e().wrap(true); - } - }); - -// @todo this actually returns type `Cypress.Chainable` -const openOptions = (): any => - isOptionsOpen().then((isOpen: any) => { - if (!isOpen) { - e2e.components.PanelEditor.OptionsPane.open().click(); - } - }); - -// @todo this actually returns type `Cypress.Chainable` -const openOptionsGroup = (name: string): any => - isOptionsGroupOpen(name).then((isOpen: any) => { - if (!isOpen) { - toggleOptionsGroup(name); - } - }); - -const toggleOptionsGroup = (name: string) => - getOptionsGroup(name) - .find('.editor-options-group-toggle') - .click(); + getScenarioContext().then(({ lastAddedDataSource }: any) => + configurePanel( + { + dataSourceName: lastAddedDataSource, + panelTitle: `e2e-${Date.now()}`, + visualizationName: 'Table', + ...config, + } as AddPanelConfig, + false + ) + ); diff --git a/packages/grafana-e2e/src/flows/configurePanel.ts b/packages/grafana-e2e/src/flows/configurePanel.ts new file mode 100644 index 00000000000..882fb68b36a --- /dev/null +++ b/packages/grafana-e2e/src/flows/configurePanel.ts @@ -0,0 +1,201 @@ +import { e2e } from '../index'; +import { getLocalStorage, requireLocalStorage } from '../support/localStorage'; +import { getScenarioContext } from '../support/scenarioContext'; +import { selectOption } from './selectOption'; + +export interface ConfigurePanelConfig { + chartData: { + method: string; + route: string | RegExp; + }; + dashboardUid: string; + dataSourceName?: string; + matchScreenshot: boolean; + queriesForm?: (config: any) => void; + panelTitle: string; + screenshotName: string; + visitDashboardAtStart: boolean; // @todo remove when possible + visualizationName?: string; +} + +// @todo improve config input/output: https://stackoverflow.com/a/63507459/923745 +// @todo this actually returns type `Cypress.Chainable` +export const configurePanel = (config: Partial, edit: boolean): any => + getScenarioContext().then(({ lastAddedDashboardUid }: any) => { + const fullConfig = { + chartData: { + method: 'POST', + route: '/api/ds/query', + }, + dashboardUid: lastAddedDashboardUid, + matchScreenshot: false, + saveDashboard: true, + screenshotName: 'chart', + visitDashboardAtStart: true, + ...config, + } as ConfigurePanelConfig; + + const { + chartData, + dashboardUid, + dataSourceName, + matchScreenshot, + panelTitle, + queriesForm, + screenshotName, + visitDashboardAtStart, + visualizationName, + } = fullConfig; + + if (visitDashboardAtStart) { + e2e.flows.openDashboard({ uid: dashboardUid }); + } + + if (edit) { + e2e.components.Panels.Panel.title(panelTitle).click(); + e2e.components.Panels.Panel.headerItems('Edit').click(); + } else { + e2e.pages.Dashboard.Toolbar.toolbarItems('Add panel').click(); + e2e.pages.AddDashboard.addNewPanel().click(); + } + + e2e().server(); + + // @todo alias '/**/*.js*' as '@pluginModule' when possible: https://github.com/cypress-io/cypress/issues/1296 + + e2e() + .route(chartData.method, chartData.route) + .as('chartData'); + + if (dataSourceName) { + selectOption(e2e.components.DataSourcePicker.container(), dataSourceName); + } + + // @todo instead wait for '@pluginModule' + e2e().wait(2000); + + e2e().wait('@chartData'); + + // `panelTitle` is needed to edit the panel, and unlikely to have its value changed at that point + const changeTitle = panelTitle && !edit; + + if (changeTitle || visualizationName) { + openOptions(); + + if (changeTitle) { + openOptionsGroup('settings'); + getOptionsGroup('settings') + .find('[value="Panel Title"]') + .scrollIntoView() + .clear() + .type(panelTitle); + closeOptionsGroup('settings'); + } + + if (visualizationName) { + openOptionsGroup('type'); + e2e.components.PluginVisualization.item(visualizationName) + .scrollIntoView() + .click(); + closeOptionsGroup('type'); + } + + closeOptions(); + } else { + // Options are consistently closed + closeOptions(); + } + + if (queriesForm) { + queriesForm(fullConfig); + e2e().wait('@chartData'); + } + + // @todo enable when plugins have this implemented + //e2e.components.QueryEditorRow.actionButton('Disable/enable query').click(); + //e2e().wait('@chartData'); + //e2e.components.Panels.Panel.containerByTitle(panelTitle).find('.panel-content').contains('No data'); + //e2e.components.QueryEditorRow.actionButton('Disable/enable query').click(); + //e2e().wait('@chartData'); + + e2e() + .get('button[title="Apply changes and go back to dashboard"]') + .click(); + + e2e() + .url() + .should('include', `/d/${dashboardUid}`); + + e2e().wait('@chartData'); + + // Wait for RxJS + e2e().wait(500); + + if (matchScreenshot) { + e2e.components.Panels.Panel.containerByTitle(panelTitle) + .find('.panel-content') + .screenshot(screenshotName); + e2e().compareScreenshots(screenshotName); + } + + // @todo remove `wrap` when possible + return e2e().wrap({ config: fullConfig }, { log: false }); + }); + +// @todo this actually returns type `Cypress.Chainable` +const closeOptions = (): any => + isOptionsOpen().then((isOpen: any) => { + if (isOpen) { + e2e.components.PanelEditor.OptionsPane.close().click(); + } + }); + +// @todo this actually returns type `Cypress.Chainable` +const closeOptionsGroup = (name: string): any => + isOptionsGroupOpen(name).then((isOpen: any) => { + if (isOpen) { + toggleOptionsGroup(name); + } + }); + +const getOptionsGroup = (name: string) => e2e().get(`.options-group:has([aria-label="Options group Panel ${name}"])`); + +// @todo this actually returns type `Cypress.Chainable` +const isOptionsGroupOpen = (name: string): any => + requireLocalStorage(`grafana.dashboard.editor.ui.optionGroup[Panel ${name}]`).then(({ defaultToClosed }: any) => { + // @todo remove `wrap` when possible + return e2e().wrap(!defaultToClosed, { log: false }); + }); + +// @todo this actually returns type `Cypress.Chainable` +const isOptionsOpen = (): any => + getLocalStorage('grafana.dashboard.editor.ui').then((data: any) => { + if (data) { + // @todo remove `wrap` when possible + return e2e().wrap(data.isPanelOptionsVisible, { log: false }); + } else { + // @todo remove `wrap` when possible + return e2e().wrap(true, { log: false }); + } + }); + +// @todo this actually returns type `Cypress.Chainable` +const openOptions = (): any => + isOptionsOpen().then((isOpen: any) => { + if (!isOpen) { + e2e.components.PanelEditor.OptionsPane.open().click(); + } + }); + +// @todo this actually returns type `Cypress.Chainable` +const openOptionsGroup = (name: string): any => + isOptionsGroupOpen(name).then((isOpen: any) => { + if (!isOpen) { + toggleOptionsGroup(name); + } + }); + +const toggleOptionsGroup = (name: string) => + getOptionsGroup(name) + .find('.editor-options-group-toggle') + .click(); diff --git a/packages/grafana-e2e/src/flows/editPanel.ts b/packages/grafana-e2e/src/flows/editPanel.ts new file mode 100644 index 00000000000..6f77b659642 --- /dev/null +++ b/packages/grafana-e2e/src/flows/editPanel.ts @@ -0,0 +1,9 @@ +import { configurePanel, ConfigurePanelConfig } from './configurePanel'; + +export interface EditPanelConfig extends ConfigurePanelConfig { + queriesForm?: (config: EditPanelConfig) => void; +} + +// @todo improve config input/output: https://stackoverflow.com/a/63507459/923745 +// @todo this actually returns type `Cypress.Chainable` +export const editPanel = (config: Partial): any => configurePanel(config, true); diff --git a/packages/grafana-e2e/src/flows/index.ts b/packages/grafana-e2e/src/flows/index.ts index bb907b1211d..73fc9e8b74e 100644 --- a/packages/grafana-e2e/src/flows/index.ts +++ b/packages/grafana-e2e/src/flows/index.ts @@ -1,28 +1,13 @@ -import { addDashboard } from './addDashboard'; -import { addDataSource } from './addDataSource'; -import { addPanel } from './addPanel'; -import { assertSuccessNotification } from './assertSuccessNotification'; -import { deleteDashboard } from './deleteDashboard'; -import { deleteDataSource } from './deleteDataSource'; -import { login } from './login'; -import { openDashboard } from './openDashboard'; -import { saveDashboard } from './saveDashboard'; -import { openPanelMenuItem, PanelMenuItems } from './openPanelMenuItem'; -import { revertAllChanges } from './revertAllChanges'; -import { selectOption } from './selectOption'; - -export const Flows = { - addDashboard, - addDataSource, - addPanel, - assertSuccessNotification, - deleteDashboard, - deleteDataSource, - login, - openDashboard, - saveDashboard, - openPanelMenuItem, - PanelMenuItems, - revertAllChanges, - selectOption, -}; +export * from './addDashboard'; +export * from './addDataSource'; +export * from './addPanel'; +export * from './assertSuccessNotification'; +export * from './deleteDashboard'; +export * from './deleteDataSource'; +export * from './editPanel'; +export * from './login'; +export * from './openDashboard'; +export * from './openPanelMenuItem'; +export * from './revertAllChanges'; +export * from './saveDashboard'; +export * from './selectOption'; diff --git a/packages/grafana-e2e/src/flows/openDashboard.ts b/packages/grafana-e2e/src/flows/openDashboard.ts index fc85e1d7b66..139d7825bab 100644 --- a/packages/grafana-e2e/src/flows/openDashboard.ts +++ b/packages/grafana-e2e/src/flows/openDashboard.ts @@ -7,6 +7,7 @@ export interface OpenDashboardConfig { uid: string; } +// @todo improve config input/output: https://stackoverflow.com/a/63507459/923745 export const openDashboard = (config?: Partial) => getScenarioContext().then(({ lastAddedDashboardUid }: any) => { const fullConfig = { @@ -23,5 +24,5 @@ export const openDashboard = (config?: Partial) => } // @todo remove `wrap` when possible - return e2e().wrap({ config: fullConfig }); + return e2e().wrap({ config: fullConfig }, { log: false }); }); diff --git a/packages/grafana-e2e/src/index.ts b/packages/grafana-e2e/src/index.ts index 48721200aad..a74b419f517 100644 --- a/packages/grafana-e2e/src/index.ts +++ b/packages/grafana-e2e/src/index.ts @@ -4,10 +4,10 @@ * @packageDocumentation */ import { e2eScenario, ScenarioArguments } from './support/scenario'; -import { Flows } from './flows'; import { getScenarioContext, setScenarioContext } from './support/scenarioContext'; import { e2eFactory } from './support'; import { selectors } from '@grafana/e2e-selectors'; +import * as flows from './flows'; const e2eObject = { env: (args: string) => Cypress.env(args), @@ -17,7 +17,7 @@ const e2eObject = { scenario: (args: ScenarioArguments) => e2eScenario(args), pages: e2eFactory({ selectors: selectors.pages }), components: e2eFactory({ selectors: selectors.components }), - flows: Flows, + flows, getScenarioContext, setScenarioContext, }; diff --git a/packages/grafana-e2e/src/support/localStorage.ts b/packages/grafana-e2e/src/support/localStorage.ts index eaf3b355500..eec99559ef6 100644 --- a/packages/grafana-e2e/src/support/localStorage.ts +++ b/packages/grafana-e2e/src/support/localStorage.ts @@ -3,7 +3,7 @@ import { e2e } from '../index'; // @todo this actually returns type `Cypress.Chainable` const get = (key: string): any => e2e() - .wrap({ getLocalStorage: () => localStorage.getItem(key) }) + .wrap({ getLocalStorage: () => localStorage.getItem(key) }, { log: false }) .invoke('getLocalStorage'); // @todo this actually returns type `Cypress.Chainable` diff --git a/packages/grafana-e2e/src/support/scenario.ts b/packages/grafana-e2e/src/support/scenario.ts index e1c8ea9060d..1a499c8218a 100644 --- a/packages/grafana-e2e/src/support/scenario.ts +++ b/packages/grafana-e2e/src/support/scenario.ts @@ -1,5 +1,4 @@ import { e2e } from '../'; -import { Flows } from '../flows'; export interface ScenarioArguments { describeName: string; @@ -22,20 +21,20 @@ export const e2eScenario = ({ if (skipScenario) { it.skip(itName, () => scenario()); } else { - before(() => Flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD'))); + before(() => e2e.flows.login(e2e.env('USERNAME'), e2e.env('PASSWORD'))); beforeEach(() => { Cypress.Cookies.preserveOnce('grafana_session'); if (addScenarioDataSource) { - Flows.addDataSource(); + e2e.flows.addDataSource(); } if (addScenarioDashBoard) { - Flows.addDashboard(); + e2e.flows.addDashboard(); } }); - afterEach(() => Flows.revertAllChanges()); + afterEach(() => e2e.flows.revertAllChanges()); after(() => e2e().clearCookies()); it(itName, () => scenario()); diff --git a/packages/grafana-e2e/src/support/scenarioContext.ts b/packages/grafana-e2e/src/support/scenarioContext.ts index 17f085855b8..974c621cfd3 100644 --- a/packages/grafana-e2e/src/support/scenarioContext.ts +++ b/packages/grafana-e2e/src/support/scenarioContext.ts @@ -37,19 +37,25 @@ const lastProperty = e2e() - .wrap({ - getScenarioContext: () => ({ ...scenarioContext } as ScenarioContext), - }) - .invoke('getScenarioContext'); + .wrap( + { + getScenarioContext: () => ({ ...scenarioContext } as ScenarioContext), + }, + { log: false } + ) + .invoke({ log: false }, 'getScenarioContext'); // @todo this actually returns type `Cypress.Chainable` export const setScenarioContext = (newContext: Partial): any => e2e() - .wrap({ - setScenarioContext: () => { - Object.entries(newContext).forEach(([key, value]) => { - scenarioContext[key] = value; - }); + .wrap( + { + setScenarioContext: () => { + Object.entries(newContext).forEach(([key, value]) => { + scenarioContext[key] = value; + }); + }, }, - }) - .invoke('setScenarioContext'); + { log: false } + ) + .invoke({ log: false }, 'setScenarioContext'); diff --git a/yarn.lock b/yarn.lock index 35300a95f31..b8753ffe423 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2985,7 +2985,7 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@cypress/listr-verbose-renderer@0.4.1": +"@cypress/listr-verbose-renderer@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= @@ -2995,7 +2995,7 @@ date-fns "^1.27.2" figures "^1.7.0" -"@cypress/request@2.88.5": +"@cypress/request@^2.88.5": version "2.88.5" resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== @@ -3033,7 +3033,7 @@ "@babel/preset-env" "^7.0.0" babel-loader "^8.0.2" -"@cypress/xvfb@1.2.4": +"@cypress/xvfb@^1.2.4": version "1.2.4" resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== @@ -6656,12 +6656,12 @@ resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.2.tgz#5e2f1d120f07b9cda07e5dedd4f3bf8888fccdb9" integrity sha512-T+m89VdXj/eidZyejvmoP9jivXgBDdkOSBVQjU9kF349NEx10QdPNGxHeZUaj1IlJ32/ewdyXJjnJxyxJroYwg== -"@types/sinonjs__fake-timers@6.0.1": +"@types/sinonjs__fake-timers@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz#681df970358c82836b42f989188d133e218c458e" integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA== -"@types/sizzle@*", "@types/sizzle@2.3.2": +"@types/sizzle@*", "@types/sizzle@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== @@ -7592,7 +7592,7 @@ aproba@^2.0.0: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -arch@2.1.2: +arch@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== @@ -8602,7 +8602,7 @@ bluebird@3.7.1, bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== -bluebird@3.7.2: +bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -8997,7 +8997,7 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cachedir@2.3.0: +cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== @@ -9287,7 +9287,7 @@ charenc@~0.0.1: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -check-more-types@2.24.0: +check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= @@ -9477,7 +9477,7 @@ cli-spinners@^2.2.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== -cli-table3@0.5.1: +cli-table3@0.5.1, cli-table3@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== @@ -9781,11 +9781,6 @@ commander@2.9.x: dependencies: graceful-readlink ">= 1.0.0" -commander@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@5.0.0, commander@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.0.0.tgz#dbf1909b49e5044f8fdaf0adc809f0c0722bdfd0" @@ -9796,6 +9791,11 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -9806,7 +9806,7 @@ comment-parser@^0.7.5: resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.5.tgz#06db157a3b34addf8502393743e41897e2c73059" integrity sha512-iH9YA35ccw94nx5244GVkpyC9eVTsL71jZz6iz5w6RIf79JLF2AsXHXq9p6Oaohyl3sx5qSMnGsWUDFIAfWL4w== -common-tags@1.8.0, common-tags@^1.8.0: +common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -10709,48 +10709,48 @@ cypress-file-upload@^4.0.7: dependencies: mime "^2.4.4" -cypress@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.9.0.tgz#c188a3864ddf841c0fdc81a9e4eff5cf539cd1c1" - integrity sha512-qGxT5E0j21FPryzhb0OBjCdhoR/n1jXtumpFFSBPYWsaZZhNaBvc3XlBUDEZKkkXPsqUFYiyhWdHN/zo0t5FcA== - dependencies: - "@cypress/listr-verbose-renderer" "0.4.1" - "@cypress/request" "2.88.5" - "@cypress/xvfb" "1.2.4" - "@types/sinonjs__fake-timers" "6.0.1" - "@types/sizzle" "2.3.2" - arch "2.1.2" - bluebird "3.7.2" - cachedir "2.3.0" - chalk "2.4.2" - check-more-types "2.24.0" - cli-table3 "0.5.1" - commander "4.1.1" - common-tags "1.8.0" - debug "4.1.1" - eventemitter2 "6.4.2" - execa "1.0.0" - executable "4.1.1" - extract-zip "1.7.0" - fs-extra "8.1.0" - getos "3.2.1" - is-ci "2.0.0" - is-installed-globally "0.3.2" - lazy-ass "1.6.0" - listr "0.14.3" - lodash "4.17.15" - log-symbols "3.0.0" - minimist "1.2.5" - moment "2.26.0" - ospath "1.2.2" - pretty-bytes "5.3.0" - ramda "0.26.1" - request-progress "3.0.0" - supports-color "7.1.0" - tmp "0.1.0" - untildify "4.0.0" - url "0.11.0" - yauzl "2.10.0" +cypress@^4.12.1: + version "4.12.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.12.1.tgz#0ead1b9f4c0917d69d8b57f996b6e01fe693b6ec" + integrity sha512-9SGIPEmqU8vuRA6xst2CMTYd9sCFCxKSzrHt0wr+w2iAQMCIIsXsQ5Gplns1sT6LDbZcmLv6uehabAOl3fhc9Q== + dependencies: + "@cypress/listr-verbose-renderer" "^0.4.1" + "@cypress/request" "^2.88.5" + "@cypress/xvfb" "^1.2.4" + "@types/sinonjs__fake-timers" "^6.0.1" + "@types/sizzle" "^2.3.2" + arch "^2.1.2" + bluebird "^3.7.2" + cachedir "^2.3.0" + chalk "^2.4.2" + check-more-types "^2.24.0" + cli-table3 "~0.5.1" + commander "^4.1.1" + common-tags "^1.8.0" + debug "^4.1.1" + eventemitter2 "^6.4.2" + execa "^1.0.0" + executable "^4.1.1" + extract-zip "^1.7.0" + fs-extra "^8.1.0" + getos "^3.2.1" + is-ci "^2.0.0" + is-installed-globally "^0.3.2" + lazy-ass "^1.6.0" + listr "^0.14.3" + lodash "^4.17.19" + log-symbols "^3.0.0" + minimist "^1.2.5" + moment "^2.27.0" + ospath "^1.2.2" + pretty-bytes "^5.3.0" + ramda "~0.26.1" + request-progress "^3.0.0" + supports-color "^7.1.0" + tmp "~0.1.0" + untildify "^4.0.0" + url "^0.11.0" + yauzl "^2.10.0" d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: version "1.2.4" @@ -12444,10 +12444,10 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -eventemitter2@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.2.tgz#f31f8b99d45245f0edbc5b00797830ff3b388970" - integrity sha512-r/Pwupa5RIzxIHbEKCkNXqpEQIIT4uQDxmP4G/Lug/NokVUWj0joz/WzWl3OxRpC5kDrH/WdiUJoR+IrwvXJEw== +eventemitter2@^6.4.2: + version "6.4.3" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.3.tgz#35c563619b13f3681e7eb05cbdaf50f56ba58820" + integrity sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ== eventemitter2@~0.4.13: version "0.4.14" @@ -12489,19 +12489,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@1.0.0, execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" @@ -12530,6 +12517,19 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" @@ -12561,7 +12561,7 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -executable@4.1.1: +executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== @@ -12721,16 +12721,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - extract-zip@^1.6.6: version "1.6.7" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" @@ -12741,6 +12731,16 @@ extract-zip@^1.6.6: mkdirp "0.5.1" yauzl "2.4.1" +extract-zip@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== + dependencies: + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -13682,7 +13682,7 @@ getobject@~0.1.0: resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" integrity sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw= -getos@3.2.1: +getos@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== @@ -15316,13 +15316,6 @@ is-callable@^1.1.5: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== -is-ci@2.0.0, is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -15330,6 +15323,13 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -15507,14 +15507,6 @@ is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= -is-installed-globally@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -15523,6 +15515,14 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-installed-globally@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -17135,7 +17135,7 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" -lazy-ass@1.6.0: +lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= @@ -17339,7 +17339,7 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr@0.14.3, listr@^0.14.3: +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== @@ -17616,6 +17616,11 @@ lodash@^3.6.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + log-symbols@2.2.0, log-symbols@^2.1.0, log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -17623,13 +17628,6 @@ log-symbols@2.2.0, log-symbols@^2.1.0, log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-symbols@3.0.0, log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -17637,6 +17635,13 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + log-update@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" @@ -18257,16 +18262,16 @@ minimist@1.1.x: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= -minimist@1.2.5, 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@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +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.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -18432,10 +18437,10 @@ moment@*, moment@2.24.0, moment@2.x, "moment@>= 2.9.0", moment@>=2.14.0, moment@ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -moment@2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a" - integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw== +moment@^2.27.0: + version "2.27.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" + integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== monaco-editor-webpack-plugin@1.9.0: version "1.9.0" @@ -19448,7 +19453,7 @@ osenv@0, osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -ospath@1.2.2: +ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= @@ -20917,16 +20922,16 @@ prettier@^1.16.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== -pretty-bytes@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" - integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== - pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk= +pretty-bytes@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" + integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== + pretty-error@^2.0.2, pretty-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -21447,16 +21452,16 @@ railroad-diagrams@^1.0.0: resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= -ramda@0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" - integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== - ramda@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= +ramda@~0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + randexp@0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" @@ -22985,7 +22990,7 @@ replace-in-file@^4.1.0: glob "^7.1.4" yargs "^13.3.0" -request-progress@3.0.0: +request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= @@ -25008,13 +25013,6 @@ supports-color@6.1.0, supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@7.1.0, supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -25034,6 +25032,13 @@ supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -25521,13 +25526,6 @@ title-case@^2.1.0: no-case "^2.2.0" upper-case "^1.0.3" -tmp@0.1.0, tmp@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -25535,6 +25533,13 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.1.0, tmp@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -26260,7 +26265,7 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@4.0.0: +untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== @@ -26339,7 +26344,7 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" -url@0.11.0, url@^0.11.0: +url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -27481,14 +27486,6 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" -yauzl@2.10.0, yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yauzl@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" @@ -27496,6 +27493,14 @@ yauzl@2.4.1: dependencies: fd-slicer "~1.0.1" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"