From c3ee31b023a72eb22890b6ebe12feecce43205cf Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 09:46:34 -0600 Subject: [PATCH 01/18] remove positron prefix --- test/automation/src/index.ts | 60 +++--- .../{positronClipboard.ts => clipboard.ts} | 2 +- ...{positronConnections.ts => connections.ts} | 6 +- .../{positronConsole.ts => console.ts} | 10 +- ...ositronDataExplorer.ts => dataExplorer.ts} | 14 +- .../positron/{positronEditor.ts => editor.ts} | 2 +- .../{positronEditors.ts => editors.ts} | 2 +- .../{positronExplorer.ts => explorer.ts} | 2 +- .../{positronExtensions.ts => extensions.ts} | 6 +- ...ronPythonFixtures.ts => pythonFixtures.ts} | 18 +- .../{positronRFixtures.ts => rFixtures.ts} | 8 +- ...ngsFixtures.ts => userSettingsFixtures.ts} | 6 +- .../src/positron/{positronHelp.ts => help.ts} | 2 +- ...eterDropdown.ts => interpreterDropdown.ts} | 4 +- .../{positronLayouts.ts => layouts.ts} | 4 +- ...ewProjectWizard.ts => newProjectWizard.ts} | 6 +- .../{positronNotebooks.ts => notebooks.ts} | 8 +- .../{positronOutline.ts => outline.ts} | 6 +- .../positron/{positronOutput.ts => output.ts} | 8 +- .../positron/{positronPlots.ts => plots.ts} | 2 +- .../positron/{positronPopups.ts => popups.ts} | 2 +- .../{positronQuickInput.ts => quickInput.ts} | 22 +-- ...{positronQuickaccess.ts => quickaccess.ts} | 10 +- .../{positronSettings.ts => settings.ts} | 10 +- .../{positronSideBar.ts => sideBar.ts} | 2 +- .../{positronTerminal.ts => terminal.ts} | 6 +- ...ositronTestExplorer.ts => testExplorer.ts} | 4 +- ...ositronTopActionBar.ts => topActionBar.ts} | 2 +- .../utils/{positronAWSUtils.ts => aws.ts} | 1 + ...nInterpreterInfo.ts => interpreterInfo.ts} | 0 .../{positronVariables.ts => variables.ts} | 2 +- .../positron/{positronViewer.ts => viewer.ts} | 2 +- .../{positronWelcome.ts => welcome.ts} | 2 +- test/automation/src/workbench.ts | 183 ++++++++---------- test/e2e/areas/_test.setup.ts | 2 +- .../action-bar/editor-action-bar.test.ts | 8 +- test/e2e/areas/apps/python-apps.test.ts | 80 ++++---- test/e2e/areas/apps/shiny.test.ts | 20 +- .../areas/connections/connections-db.test.ts | 64 +++--- test/e2e/areas/console/console-ansi.test.ts | 24 +-- .../console/console-autocomplete.test.ts | 16 +- .../areas/console/console-clipboard.test.ts | 8 +- .../e2e/areas/console/console-history.test.ts | 30 +-- test/e2e/areas/console/console-input.test.ts | 46 ++--- test/e2e/areas/console/console-output.test.ts | 8 +- test/e2e/areas/console/console-python.test.ts | 34 ++-- test/e2e/areas/console/console-r.test.ts | 28 +-- .../data-explorer-headless.test.ts | 12 +- .../data-explorer-python-pandas.test.ts | 120 ++++++------ .../data-explorer-python-polars.test.ts | 50 ++--- .../data-explorer/data-explorer-r.test.ts | 58 +++--- .../data-explorer/duckdb-sparklines.test.ts | 30 +-- .../areas/data-explorer/helpers/100x100.ts | 16 +- .../data-explorer/large-data-frame.test.ts | 36 ++-- .../areas/data-explorer/sparklines.test.ts | 16 +- .../very-large-data-frame.test.ts | 44 ++--- .../data-explorer/xlsx-data-frame.test.ts | 24 +-- test/e2e/areas/editor/fast-execution.test.ts | 12 +- test/e2e/areas/help/f1.test.ts | 82 ++++---- test/e2e/areas/help/help.test.ts | 18 +- test/e2e/areas/layouts/layouts.test.ts | 6 +- .../new-project-python.test.ts | 42 ++-- .../new-project-r-jupyter.test.ts | 32 +-- .../areas/notebook/notebook-create.test.ts | 44 ++--- .../notebook/notebook-large-python.test.ts | 8 +- test/e2e/areas/outline/outline.test.ts | 4 +- .../areas/output/console-ouput-log.test.ts | 18 +- .../areas/plots/matplotlib-interact.test.ts | 10 +- test/e2e/areas/plots/plots.test.ts | 162 ++++++++-------- test/e2e/areas/quarto/quarto.test.ts | 10 +- test/e2e/areas/r-markdown/r-markdown.test.ts | 8 +- .../r-pkg-development.test.ts | 44 ++--- test/e2e/areas/reticulate/reticulate.test.ts | 24 +-- .../areas/test-explorer/test-explorer.test.ts | 24 +-- .../interpreter-dropdown.test.ts | 29 ++- .../top-action-bar-save.test.ts | 80 ++++---- .../variables/variables-expanded.test.ts | 18 +- .../variables/variables-notebook.test.ts | 32 +-- .../areas/variables/variables-pane.test.ts | 18 +- test/e2e/areas/viewer/viewer.test.ts | 34 ++-- test/e2e/areas/welcome/welcome.test.ts | 88 ++++----- 81 files changed, 1015 insertions(+), 1030 deletions(-) rename test/automation/src/positron/{positronClipboard.ts => clipboard.ts} (97%) rename test/automation/src/positron/{positronConnections.ts => connections.ts} (92%) rename test/automation/src/positron/{positronConsole.ts => console.ts} (96%) rename test/automation/src/positron/{positronDataExplorer.ts => dataExplorer.ts} (93%) rename test/automation/src/positron/{positronEditor.ts => editor.ts} (99%) rename test/automation/src/positron/{positronEditors.ts => editors.ts} (98%) rename test/automation/src/positron/{positronExplorer.ts => explorer.ts} (98%) rename test/automation/src/positron/{positronExtensions.ts => extensions.ts} (93%) rename test/automation/src/positron/fixtures/{positronPythonFixtures.ts => pythonFixtures.ts} (69%) rename test/automation/src/positron/fixtures/{positronRFixtures.ts => rFixtures.ts} (80%) rename test/automation/src/positron/fixtures/{positronUserSettingsFixtures.ts => userSettingsFixtures.ts} (90%) rename test/automation/src/positron/{positronHelp.ts => help.ts} (98%) rename test/automation/src/positron/{positronInterpreterDropdown.ts => interpreterDropdown.ts} (99%) rename test/automation/src/positron/{positronLayouts.ts => layouts.ts} (96%) rename test/automation/src/positron/{positronNewProjectWizard.ts => newProjectWizard.ts} (98%) rename test/automation/src/positron/{positronNotebooks.ts => notebooks.ts} (95%) rename test/automation/src/positron/{positronOutline.ts => outline.ts} (89%) rename test/automation/src/positron/{positronOutput.ts => output.ts} (81%) rename test/automation/src/positron/{positronPlots.ts => plots.ts} (99%) rename test/automation/src/positron/{positronPopups.ts => popups.ts} (99%) rename test/automation/src/positron/{positronQuickInput.ts => quickInput.ts} (66%) rename test/automation/src/positron/{positronQuickaccess.ts => quickaccess.ts} (95%) rename test/automation/src/positron/{positronSettings.ts => settings.ts} (80%) rename test/automation/src/positron/{positronSideBar.ts => sideBar.ts} (95%) rename test/automation/src/positron/{positronTerminal.ts => terminal.ts} (92%) rename test/automation/src/positron/{positronTestExplorer.ts => testExplorer.ts} (95%) rename test/automation/src/positron/{positronTopActionBar.ts => topActionBar.ts} (97%) rename test/automation/src/positron/utils/{positronAWSUtils.ts => aws.ts} (96%) rename test/automation/src/positron/utils/{positronInterpreterInfo.ts => interpreterInfo.ts} (100%) rename test/automation/src/positron/{positronVariables.ts => variables.ts} (99%) rename test/automation/src/positron/{positronViewer.ts => viewer.ts} (97%) rename test/automation/src/positron/{positronWelcome.ts => welcome.ts} (98%) diff --git a/test/automation/src/index.ts b/test/automation/src/index.ts index b3576710ff2..deca2c42da5 100644 --- a/test/automation/src/index.ts +++ b/test/automation/src/index.ts @@ -21,35 +21,35 @@ export * from './workbench'; // --- End Positron --- // --- Start Positron --- -export * from './positron/positronConsole'; -export * from './positron/positronPopups'; -export * from './positron/positronInterpreterDropdown'; -export * from './positron/positronVariables'; -export * from './positron/positronDataExplorer'; -export * from './positron/positronSideBar'; -export * from './positron/positronPlots'; -export * from './positron/fixtures/positronPythonFixtures'; -export * from './positron/fixtures/positronRFixtures'; -export * from './positron/fixtures/positronUserSettingsFixtures'; -export * from './positron/positronNotebooks'; -export * from './positron/positronNewProjectWizard'; -export * from './positron/positronConnections'; -export * from './positron/positronHelp'; -export * from './positron/positronOutput'; -export * from './positron/positronWelcome'; -export * from './positron/positronTopActionBar'; -export * from './positron/positronLayouts'; -export * from './positron/positronTerminal'; -export * from './positron/positronViewer'; -export * from './positron/positronEditor'; -export * from './positron/positronTestExplorer'; -export * from './positron/positronExplorer'; -export * from './positron/utils/positronAWSUtils'; -export * from './positron/positronQuickaccess'; -export * from './positron/positronOutline'; -export * from './positron/positronClipboard'; -export * from './positron/positronExtensions'; -export * from './positron/positronEditors'; -export * from './positron/positronSettings'; +export * from './positron/console'; +export * from './positron/popups'; +export * from './positron/interpreterDropdown'; +export * from './positron/variables'; +export * from './positron/dataExplorer'; +export * from './positron/sideBar'; +export * from './positron/plots'; +export * from './positron/fixtures/pythonFixtures'; +export * from './positron/fixtures/rFixtures'; +export * from './positron/fixtures/userSettingsFixtures'; +export * from './positron/notebooks'; +export * from './positron/newProjectWizard'; +export * from './positron/connections'; +export * from './positron/help'; +export * from './positron/output'; +export * from './positron/welcome'; +export * from './positron/topActionBar'; +export * from './positron/layouts'; +export * from './positron/terminal'; +export * from './positron/viewer'; +export * from './positron/editor'; +export * from './positron/testExplorer'; +export * from './positron/explorer'; +export * from './positron/utils/aws'; +export * from './positron/quickaccess'; +export * from './positron/outline'; +export * from './positron/clipboard'; +export * from './positron/extensions'; +export * from './positron/editors'; +export * from './positron/settings'; // --- End Positron --- export { getDevElectronPath, getBuildElectronPath, getBuildVersion } from './electron'; diff --git a/test/automation/src/positron/positronClipboard.ts b/test/automation/src/positron/clipboard.ts similarity index 97% rename from test/automation/src/positron/positronClipboard.ts rename to test/automation/src/positron/clipboard.ts index 2c1a0a50c11..dcba1e83eb8 100644 --- a/test/automation/src/positron/positronClipboard.ts +++ b/test/automation/src/positron/clipboard.ts @@ -5,7 +5,7 @@ import { Code } from '../code'; -export class PositronClipboard { +export class Clipboard { constructor(private code: Code) { } diff --git a/test/automation/src/positron/positronConnections.ts b/test/automation/src/positron/connections.ts similarity index 92% rename from test/automation/src/positron/positronConnections.ts rename to test/automation/src/positron/connections.ts index f5062f62b33..12cacb32a8e 100644 --- a/test/automation/src/positron/positronConnections.ts +++ b/test/automation/src/positron/connections.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { QuickAccess } from './quickaccess'; const CONNECTIONS_CONTAINER = '.connections-items-container'; const CONNECTIONS_ITEM = '.connections-item'; @@ -13,7 +13,7 @@ const CONNECTIONS_ITEM = '.connections-item'; /* * Reuseable Positron connections tab functionality for tests to leverage */ -export class PositronConnections { +export class Connections { deleteConnectionButton: Locator; disconnectButton: Locator; @@ -21,7 +21,7 @@ export class PositronConnections { connectionItems: Locator; resumeConnectionButton: Locator; - constructor(private code: Code, private quickaccess: PositronQuickAccess) { + constructor(private code: Code, private quickaccess: QuickAccess) { this.deleteConnectionButton = code.driver.page.getByLabel('Delete Connection'); this.disconnectButton = code.driver.page.getByLabel('Disconnect'); this.connectIcon = code.driver.page.locator('.codicon-arrow-circle-right'); diff --git a/test/automation/src/positron/positronConsole.ts b/test/automation/src/positron/console.ts similarity index 96% rename from test/automation/src/positron/positronConsole.ts rename to test/automation/src/positron/console.ts index 8456b48f2cd..2a57e66df08 100644 --- a/test/automation/src/positron/positronConsole.ts +++ b/test/automation/src/positron/console.ts @@ -6,9 +6,9 @@ import { expect, Locator } from '@playwright/test'; import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; -import { PositronQuickInput } from './positronQuickInput'; -import { InterpreterType } from './utils/positronInterpreterInfo'; +import { QuickAccess } from './quickaccess'; +import { QuickInput } from './quickInput'; +import { InterpreterType } from './utils/interpreterInfo'; const CONSOLE_INPUT = '.console-input'; const ACTIVE_CONSOLE_INSTANCE = '.console-instance[style*="z-index: auto"]'; @@ -24,7 +24,7 @@ const CONSOLE_LINES = `${ACTIVE_CONSOLE_INSTANCE} div span`; * Reuseable Positron console functionality for tests to leverage. Includes the ability to select an interpreter and execute code which * aren't directly console functions, but rather features needed to support console testing. */ -export class PositronConsole { +export class Console { barPowerButton: Locator; barRestartButton: Locator; barClearButton: Locator; @@ -36,7 +36,7 @@ export class PositronConsole { return this.code.driver.page.locator(EMPTY_CONSOLE).getByText('There is no interpreter running'); } - constructor(private code: Code, private quickaccess: PositronQuickAccess, private quickinput: PositronQuickInput) { + constructor(private code: Code, private quickaccess: QuickAccess, private quickinput: QuickInput) { this.barPowerButton = this.code.driver.page.getByLabel('Shutdown console'); this.barRestartButton = this.code.driver.page.getByLabel('Restart console'); this.barClearButton = this.code.driver.page.getByLabel('Clear console'); diff --git a/test/automation/src/positron/positronDataExplorer.ts b/test/automation/src/positron/dataExplorer.ts similarity index 93% rename from test/automation/src/positron/positronDataExplorer.ts rename to test/automation/src/positron/dataExplorer.ts index 478fb5593ec..ac9cac014eb 100644 --- a/test/automation/src/positron/positronDataExplorer.ts +++ b/test/automation/src/positron/dataExplorer.ts @@ -45,7 +45,7 @@ export interface ColumnProfile { /* * Reuseable Positron data explorer functionality for tests to leverage. */ -export class PositronDataExplorer { +export class DataExplorer { clearSortingButton: Locator; @@ -237,10 +237,10 @@ export class PositronDataExplorer { } async maximizeDataExplorer(collapseSummary: boolean = false): Promise { - await this.workbench.positronLayouts.enterLayout('stacked'); - await this.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await this.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await this.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await this.workbench.layouts.enterLayout('stacked'); + await this.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await this.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await this.workbench.quickaccess.runCommand('workbench.action.togglePanel'); if (collapseSummary) { await this.collapseSummary(); @@ -248,10 +248,10 @@ export class PositronDataExplorer { } async collapseSummary(): Promise { - await this.workbench.positronQuickaccess.runCommand('workbench.action.positronDataExplorer.collapseSummary'); + await this.workbench.quickaccess.runCommand('workbench.action.positronDataExplorer.collapseSummary'); } async expandSummary(): Promise { - await this.workbench.positronQuickaccess.runCommand('workbench.action.positronDataExplorer.expandSummary'); + await this.workbench.quickaccess.runCommand('workbench.action.positronDataExplorer.expandSummary'); } } diff --git a/test/automation/src/positron/positronEditor.ts b/test/automation/src/positron/editor.ts similarity index 99% rename from test/automation/src/positron/positronEditor.ts rename to test/automation/src/positron/editor.ts index b6dba7f8152..cdc490d65db 100644 --- a/test/automation/src/positron/positronEditor.ts +++ b/test/automation/src/positron/editor.ts @@ -14,7 +14,7 @@ const PLAY_BUTTON = '.codicon-play'; const OUTER_FRAME = '.webview'; const INNER_FRAME = '#active-frame'; -export class PositronEditor { +export class Editor { viewerFrame = this.code.driver.page.frameLocator(OUTER_FRAME).frameLocator(INNER_FRAME); diff --git a/test/automation/src/positron/positronEditors.ts b/test/automation/src/positron/editors.ts similarity index 98% rename from test/automation/src/positron/positronEditors.ts rename to test/automation/src/positron/editors.ts index 64438e46112..3d271937757 100644 --- a/test/automation/src/positron/positronEditors.ts +++ b/test/automation/src/positron/editors.ts @@ -7,7 +7,7 @@ import { expect } from '@playwright/test'; import { Code } from '../code'; -export class PositronEditors { +export class Editors { activeEditor = this.code.driver.page.locator('div.tab.tab-actions-right.active.selected'); editorIcon = this.code.driver.page.locator('.monaco-icon-label.file-icon'); diff --git a/test/automation/src/positron/positronExplorer.ts b/test/automation/src/positron/explorer.ts similarity index 98% rename from test/automation/src/positron/positronExplorer.ts rename to test/automation/src/positron/explorer.ts index 7ac67f1fd15..042c98fd2ca 100644 --- a/test/automation/src/positron/positronExplorer.ts +++ b/test/automation/src/positron/explorer.ts @@ -14,7 +14,7 @@ const POSITRON_EXPLORER_PROJECT_FILES = 'div[id="workbench.view.explorer"] span[ /* * Reuseable Positron explorer functionality for tests to leverage. */ -export class PositronExplorer { +export class Explorer { explorerProjectTitle: Locator = this.code.driver.page.locator(POSITRON_EXPLORER_PROJECT_TITLE); explorerProjectTitleLocator = this.code.driver.page.locator(POSITRON_EXPLORER_PROJECT_TITLE); diff --git a/test/automation/src/positron/positronExtensions.ts b/test/automation/src/positron/extensions.ts similarity index 93% rename from test/automation/src/positron/positronExtensions.ts rename to test/automation/src/positron/extensions.ts index 1a157b045bf..1c74a6b510f 100644 --- a/test/automation/src/positron/positronExtensions.ts +++ b/test/automation/src/positron/extensions.ts @@ -5,11 +5,11 @@ import { expect } from '@playwright/test'; import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { QuickAccess } from './quickaccess'; -export class PositronExtensions { +export class Extensions { - constructor(private code: Code, private quickaccess: PositronQuickAccess) { } + constructor(private code: Code, private quickaccess: QuickAccess) { } async searchForExtension(id: string): Promise { await this.quickaccess.runCommand('Extensions: Focus on Extensions View', { exactLabelMatch: true }); diff --git a/test/automation/src/positron/fixtures/positronPythonFixtures.ts b/test/automation/src/positron/fixtures/pythonFixtures.ts similarity index 69% rename from test/automation/src/positron/fixtures/positronPythonFixtures.ts rename to test/automation/src/positron/fixtures/pythonFixtures.ts index d44ccfe755e..1dec6b79f21 100644 --- a/test/automation/src/positron/fixtures/positronPythonFixtures.ts +++ b/test/automation/src/positron/fixtures/pythonFixtures.ts @@ -5,7 +5,7 @@ import { fail } from 'assert'; import { Application } from '../../application'; -import { InterpreterType } from '../utils/positronInterpreterInfo'; +import { InterpreterType } from '../utils/interpreterInfo'; import { expect } from '@playwright/test'; /* @@ -28,13 +28,13 @@ export class PositronPythonFixtures { } try { - await this.app.workbench.positronConsole.selectInterpreter(InterpreterType.Python, desiredPython, skipReadinessCheck); - await this.app.workbench.positronConsole.waitForReady('>>>', 40000); + await this.app.workbench.console.selectInterpreter(InterpreterType.Python, desiredPython, skipReadinessCheck); + await this.app.workbench.console.waitForReady('>>>', 40000); } catch (e) { await this.app.code.driver.takeScreenshot('startPythonInterpreter'); throw e; } - await this.app.workbench.positronConsole.logConsoleContents(); + await this.app.workbench.console.logConsoleContents(); } async startAndGetPythonInterpreter(installIPyKernelIfPrompted: boolean = false): Promise { @@ -42,17 +42,17 @@ export class PositronPythonFixtures { if (desiredPython === undefined) { fail('Please be sure to set env var POSITRON_PY_VER_SEL to the UI text corresponding to the Python version for the test'); } - await this.app.workbench.positronConsole.selectInterpreter(InterpreterType.Python, desiredPython); + await this.app.workbench.console.selectInterpreter(InterpreterType.Python, desiredPython); if ( installIPyKernelIfPrompted && - (await this.app.workbench.positronPopups.popupCurrentlyOpen()) + (await this.app.workbench.popups.popupCurrentlyOpen()) ) { - await this.app.workbench.positronPopups.installIPyKernel(); + await this.app.workbench.popups.installIPyKernel(); } - await expect(this.app.workbench.positronConsole.activeConsole.getByText('>>>')).toBeVisible({ timeout: 30000 }); - await this.app.workbench.positronConsole.logConsoleContents(); + await expect(this.app.workbench.console.activeConsole.getByText('>>>')).toBeVisible({ timeout: 30000 }); + await this.app.workbench.console.logConsoleContents(); } } diff --git a/test/automation/src/positron/fixtures/positronRFixtures.ts b/test/automation/src/positron/fixtures/rFixtures.ts similarity index 80% rename from test/automation/src/positron/fixtures/positronRFixtures.ts rename to test/automation/src/positron/fixtures/rFixtures.ts index 18139970b91..935d7deffb0 100644 --- a/test/automation/src/positron/fixtures/positronRFixtures.ts +++ b/test/automation/src/positron/fixtures/rFixtures.ts @@ -5,7 +5,7 @@ import { fail } from 'assert'; import { Application } from '../../application'; -import { InterpreterType } from '../utils/positronInterpreterInfo'; +import { InterpreterType } from '../utils/interpreterInfo'; /* * Reuseable Positron R fixture tests can leverage to get an R interpreter selected. @@ -29,14 +29,14 @@ export class PositronRFixtures { // We currently don't capture fixtures in the Playwright trace, so take a screenshot on failure try { - await this.app.workbench.positronConsole.selectInterpreter(InterpreterType.R, desiredR, skipReadinessCheck); - await this.app.workbench.positronConsole.waitForReady('>', 40000); + await this.app.workbench.console.selectInterpreter(InterpreterType.R, desiredR, skipReadinessCheck); + await this.app.workbench.console.waitForReady('>', 40000); } catch (e) { await this.app.code.driver.takeScreenshot('startRInterpreter'); throw e; } - await this.app.workbench.positronConsole.logConsoleContents(); + await this.app.workbench.console.logConsoleContents(); } diff --git a/test/automation/src/positron/fixtures/positronUserSettingsFixtures.ts b/test/automation/src/positron/fixtures/userSettingsFixtures.ts similarity index 90% rename from test/automation/src/positron/fixtures/positronUserSettingsFixtures.ts rename to test/automation/src/positron/fixtures/userSettingsFixtures.ts index 78c5a46fd8d..72160c2e0b5 100644 --- a/test/automation/src/positron/fixtures/positronUserSettingsFixtures.ts +++ b/test/automation/src/positron/fixtures/userSettingsFixtures.ts @@ -35,7 +35,7 @@ export class PositronUserSettingsFixtures { } // Set the user settings - await this.app.workbench.positronSettings.addUserSettings([ + await this.app.workbench.settings.addUserSettings([ // Set editor.wordWrap to "on" to avoid issues with long settings. // See test/automation/src/settings.ts for more explanation. ['editor.wordWrap', '"on"'], @@ -43,7 +43,7 @@ export class PositronUserSettingsFixtures { ]); // Close the settings editor - await this.app.workbench.positronQuickaccess.runCommand('workbench.action.closeActiveEditor'); + await this.app.workbench.quickaccess.runCommand('workbench.action.closeActiveEditor'); // Restart the application if requested, to apply the settings if (restartApp) { @@ -56,7 +56,7 @@ export class PositronUserSettingsFixtures { */ async unsetUserSettings(restartApp = false) { // Clear all user settings - await this.app.workbench.positronSettings.clearUserSettings(); + await this.app.workbench.settings.clearUserSettings(); // Restart the application if requested, to apply the settings if (restartApp) { diff --git a/test/automation/src/positron/positronHelp.ts b/test/automation/src/positron/help.ts similarity index 98% rename from test/automation/src/positron/positronHelp.ts rename to test/automation/src/positron/help.ts index a306331b9cd..beaa570d632 100644 --- a/test/automation/src/positron/positronHelp.ts +++ b/test/automation/src/positron/help.ts @@ -17,7 +17,7 @@ const AUX_BAR = '.part.auxiliarybar'; /* * Reuseable Positron Help functionality for tests to leverage. */ -export class PositronHelp { +export class Help { private auxilaryBar = this.code.driver.page.locator(AUX_BAR); diff --git a/test/automation/src/positron/positronInterpreterDropdown.ts b/test/automation/src/positron/interpreterDropdown.ts similarity index 99% rename from test/automation/src/positron/positronInterpreterDropdown.ts rename to test/automation/src/positron/interpreterDropdown.ts index fc28498b9c2..630bd4e55c8 100644 --- a/test/automation/src/positron/positronInterpreterDropdown.ts +++ b/test/automation/src/positron/interpreterDropdown.ts @@ -6,7 +6,7 @@ import { expect, Locator } from '@playwright/test'; import { Code } from '../code'; -import { getInterpreterType, InterpreterInfo, InterpreterType } from './utils/positronInterpreterInfo'; +import { getInterpreterType, InterpreterInfo, InterpreterType } from './utils/interpreterInfo'; const INTERPRETER_INFO_LINE = '.info .container .line'; const INTERPRETER_ACTIONS_SELECTOR = `.interpreter-actions .action-button`; @@ -14,7 +14,7 @@ const INTERPRETER_ACTIONS_SELECTOR = `.interpreter-actions .action-button`; /* * Reuseable Positron interpreter selection functionality for tests to leverage. */ -export class PositronInterpreterDropdown { +export class InterpreterDropdown { private interpreterGroups = this.code.driver.page.locator( '.positron-modal-popup .interpreter-groups' ); diff --git a/test/automation/src/positron/positronLayouts.ts b/test/automation/src/positron/layouts.ts similarity index 96% rename from test/automation/src/positron/positronLayouts.ts rename to test/automation/src/positron/layouts.ts index 75bdc9a76cd..77d95b7cbfa 100644 --- a/test/automation/src/positron/positronLayouts.ts +++ b/test/automation/src/positron/layouts.ts @@ -33,7 +33,7 @@ const positronLayoutPresets = { * Allows for things like getting various locators for parts of the IDE and entering different * layouts. */ -export class PositronLayouts { +export class Layouts { /** * Locator for the entire IDE. This is the "body" of the root page. @@ -92,7 +92,7 @@ export class PositronLayouts { * @param layout Known layout to enter. */ async enterLayout(layout: keyof typeof positronLayoutPresets): Promise { - await this.workbench.positronQuickaccess.runCommand(positronLayoutPresets[layout], { keepOpen: true }); + await this.workbench.quickaccess.runCommand(positronLayoutPresets[layout], { keepOpen: true }); } /** diff --git a/test/automation/src/positron/positronNewProjectWizard.ts b/test/automation/src/positron/newProjectWizard.ts similarity index 98% rename from test/automation/src/positron/positronNewProjectWizard.ts rename to test/automation/src/positron/newProjectWizard.ts index a292af44b77..58870c539b1 100644 --- a/test/automation/src/positron/positronNewProjectWizard.ts +++ b/test/automation/src/positron/newProjectWizard.ts @@ -6,7 +6,7 @@ import { fail } from 'assert'; import { expect } from '@playwright/test'; import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { QuickAccess } from './quickaccess'; // Selector for the pre-selected dropdown item in the project wizard const PROJECT_WIZARD_PRESELECTED_DROPDOWN_ITEM = @@ -41,7 +41,7 @@ export enum ProjectType { /* * Reuseable Positron new project wizard functionality for tests to leverage. */ -export class PositronNewProjectWizard { +export class NewProjectWizard { projectTypeStep: ProjectWizardProjectTypeStep; projectNameLocationStep: ProjectWizardProjectNameLocationStep; rConfigurationStep: ProjectWizardRConfigurationStep; @@ -53,7 +53,7 @@ export class PositronNewProjectWizard { private nextButton = this.code.driver.page.locator(PROJECT_WIZARD_DEFAULT_BUTTON).getByText('Next'); private createButton = this.code.driver.page.locator(PROJECT_WIZARD_DEFAULT_BUTTON).getByText('Create'); - constructor(private code: Code, private quickaccess: PositronQuickAccess) { + constructor(private code: Code, private quickaccess: QuickAccess) { this.projectTypeStep = new ProjectWizardProjectTypeStep(this.code); this.projectNameLocationStep = new ProjectWizardProjectNameLocationStep(this.code); this.rConfigurationStep = new ProjectWizardRConfigurationStep(this.code); diff --git a/test/automation/src/positron/positronNotebooks.ts b/test/automation/src/positron/notebooks.ts similarity index 95% rename from test/automation/src/positron/positronNotebooks.ts rename to test/automation/src/positron/notebooks.ts index 48125c034f4..f75ee71cf88 100644 --- a/test/automation/src/positron/positronNotebooks.ts +++ b/test/automation/src/positron/notebooks.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { Code } from '../code'; -import { PositronQuickInput } from './positronQuickInput'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { QuickInput } from './quickInput'; +import { QuickAccess } from './quickaccess'; import { basename } from 'path'; import { expect } from '@playwright/test'; @@ -28,13 +28,13 @@ const ACTIVE_ROW_SELECTOR = `.notebook-editor .monaco-list-row.focused`; /* * Reuseable Positron notebook functionality for tests to leverage. Includes selecting the notebook's interpreter. */ -export class PositronNotebooks { +export class Notebooks { kernelLabel = this.code.driver.page.locator(KERNEL_LABEL); frameLocator = this.code.driver.page.frameLocator(OUTER_FRAME).frameLocator(INNER_FRAME); notebookProgressBar = this.code.driver.page.locator('[id="workbench\\.parts\\.editor"]').getByRole('progressbar'); - constructor(private code: Code, private quickinput: PositronQuickInput, private quickaccess: PositronQuickAccess) { } + constructor(private code: Code, private quickinput: QuickInput, private quickaccess: QuickAccess) { } async selectInterpreter(kernelGroup: string, desiredKernel: string) { await expect(this.notebookProgressBar).not.toBeVisible({ timeout: 30000 }); diff --git a/test/automation/src/positron/positronOutline.ts b/test/automation/src/positron/outline.ts similarity index 89% rename from test/automation/src/positron/positronOutline.ts rename to test/automation/src/positron/outline.ts index c8687cda09a..65c01d27859 100644 --- a/test/automation/src/positron/positronOutline.ts +++ b/test/automation/src/positron/outline.ts @@ -6,7 +6,7 @@ import { fail } from 'assert'; import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { QuickAccess } from './quickaccess'; const HORIZONTAL_SASH = '.explorer-viewlet .monaco-sash.horizontal'; const FOCUS_OUTLINE_COMMAND = 'outline.focus'; @@ -15,9 +15,9 @@ const OUTLINE_ELEMENT = '.outline-element'; /* * Reuseable Positron outline functionality for tests to leverage. */ -export class PositronOutline { +export class Outline { - constructor(private code: Code, private quickaccess: PositronQuickAccess) { } + constructor(private code: Code, private quickaccess: QuickAccess) { } async getOutlineData(): Promise { diff --git a/test/automation/src/positron/positronOutput.ts b/test/automation/src/positron/output.ts similarity index 81% rename from test/automation/src/positron/positronOutput.ts rename to test/automation/src/positron/output.ts index 59b304cfa0b..33abf48774f 100644 --- a/test/automation/src/positron/positronOutput.ts +++ b/test/automation/src/positron/output.ts @@ -5,17 +5,17 @@ import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; -import { PositronQuickInput } from './positronQuickInput'; +import { QuickAccess } from './quickaccess'; +import { QuickInput } from './quickInput'; const OUTPUT_LINE = '.view-line'; /* * Reuseable Positron output functionality for tests to leverage. */ -export class PositronOutput { +export class Output { - constructor(private code: Code, private quickaccess: PositronQuickAccess, private quickinput: PositronQuickInput) { } + constructor(private code: Code, private quickaccess: QuickAccess, private quickinput: QuickInput) { } async openOutputPane(outputPaneNameContains: string) { await this.quickaccess.runCommand('workbench.action.showOutputChannels', { keepOpen: true }); diff --git a/test/automation/src/positron/positronPlots.ts b/test/automation/src/positron/plots.ts similarity index 99% rename from test/automation/src/positron/positronPlots.ts rename to test/automation/src/positron/plots.ts index 69e4d0b8b71..c3be1c106b1 100644 --- a/test/automation/src/positron/positronPlots.ts +++ b/test/automation/src/positron/plots.ts @@ -24,7 +24,7 @@ const INNER_WEBVIEW_FRAME = '#active-frame'; /* * Reuseable Positron plots functionality for tests to leverage. */ -export class PositronPlots { +export class Plots { nextPlotButton: Locator; previousPlotButton: Locator; diff --git a/test/automation/src/positron/positronPopups.ts b/test/automation/src/positron/popups.ts similarity index 99% rename from test/automation/src/positron/positronPopups.ts rename to test/automation/src/positron/popups.ts index 9423648f9e8..ee7620b6fb2 100644 --- a/test/automation/src/positron/positronPopups.ts +++ b/test/automation/src/positron/popups.ts @@ -17,7 +17,7 @@ const NOTIFICATION_TOAST = '.notification-toast'; /* * Reuseable Positron popups functionality for tests to leverage. */ -export class PositronPopups { +export class Popups { toastLocator = this.code.driver.page.locator(NOTIFICATION_TOAST); diff --git a/test/automation/src/positron/positronQuickInput.ts b/test/automation/src/positron/quickInput.ts similarity index 66% rename from test/automation/src/positron/positronQuickInput.ts rename to test/automation/src/positron/quickInput.ts index 7407bfdaa78..9796b318667 100644 --- a/test/automation/src/positron/positronQuickInput.ts +++ b/test/automation/src/positron/quickInput.ts @@ -6,11 +6,11 @@ import { expect } from '@playwright/test'; import { Code } from '../code'; -export class PositronQuickInput { +export class QuickInput { private static QUICK_INPUT = '.quick-input-widget'; - private static QUICK_INPUT_INPUT = `${PositronQuickInput.QUICK_INPUT} .quick-input-box input`; - private static QUICK_INPUT_RESULT = `${PositronQuickInput.QUICK_INPUT} .quick-input-list .monaco-list-row`; + private static QUICK_INPUT_INPUT = `${QuickInput.QUICK_INPUT} .quick-input-box input`; + private static QUICK_INPUT_RESULT = `${QuickInput.QUICK_INPUT} .quick-input-list .monaco-list-row`; // Note: this only grabs the label and not the description or detail private static QUICK_INPUT_ENTRY_LABEL = `${this.QUICK_INPUT_RESULT} .quick-input-list-row > .monaco-icon-label .label-name`; private static QUICKINPUT_OK_BUTTON = '.quick-input-widget .quick-input-action a:has-text("OK")'; @@ -18,15 +18,15 @@ export class PositronQuickInput { constructor(private code: Code) { } async waitForQuickInputOpened({ timeout = 10000 }: { timeout?: number } = {}): Promise { - await expect(this.code.driver.page.locator(PositronQuickInput.QUICK_INPUT_INPUT)).toBeVisible({ timeout }); + await expect(this.code.driver.page.locator(QuickInput.QUICK_INPUT_INPUT)).toBeVisible({ timeout }); } async type(value: string): Promise { - await this.code.driver.page.locator(PositronQuickInput.QUICK_INPUT_INPUT).fill(value); + await this.code.driver.page.locator(QuickInput.QUICK_INPUT_INPUT).fill(value); } async waitForQuickInputElementText(): Promise { - const quickInputResult = this.code.driver.page.locator(PositronQuickInput.QUICK_INPUT_RESULT); + const quickInputResult = this.code.driver.page.locator(QuickInput.QUICK_INPUT_RESULT); // Wait for at least one matching element with non-empty text await expect(async () => { @@ -46,7 +46,7 @@ export class PositronQuickInput { } async waitForQuickInputElements(accept: (names: string[]) => boolean): Promise { - const locator = this.code.driver.page.locator(PositronQuickInput.QUICK_INPUT_ENTRY_LABEL); + const locator = this.code.driver.page.locator(QuickInput.QUICK_INPUT_ENTRY_LABEL); await expect(async () => { const names = await locator.allTextContents(); @@ -55,12 +55,12 @@ export class PositronQuickInput { } async waitForQuickInputClosed(): Promise { - await expect(this.code.driver.page.locator(PositronQuickInput.QUICK_INPUT_INPUT)).not.toBeVisible(); + await expect(this.code.driver.page.locator(QuickInput.QUICK_INPUT_INPUT)).not.toBeVisible(); } async selectQuickInputElement(index: number, keepOpen?: boolean): Promise { await this.waitForQuickInputOpened(); - await this.code.driver.page.locator(PositronQuickInput.QUICK_INPUT_RESULT).nth(index).click(); + await this.code.driver.page.locator(QuickInput.QUICK_INPUT_RESULT).nth(index).click(); if (!keepOpen) { await this.waitForQuickInputClosed(); @@ -68,10 +68,10 @@ export class PositronQuickInput { } async selectQuickInputElementContaining(text: string): Promise { - await this.code.driver.page.locator(`${PositronQuickInput.QUICK_INPUT_RESULT}[aria-label*="${text}"]`).first().click({ timeout: 10000 }); + await this.code.driver.page.locator(`${QuickInput.QUICK_INPUT_RESULT}[aria-label*="${text}"]`).first().click({ timeout: 10000 }); } async clickOkOnQuickInput(): Promise { - await this.code.driver.page.locator(PositronQuickInput.QUICKINPUT_OK_BUTTON).click(); + await this.code.driver.page.locator(QuickInput.QUICKINPUT_OK_BUTTON).click(); } } diff --git a/test/automation/src/positron/positronQuickaccess.ts b/test/automation/src/positron/quickaccess.ts similarity index 95% rename from test/automation/src/positron/positronQuickaccess.ts rename to test/automation/src/positron/quickaccess.ts index 5ea6e764652..8da02090228 100644 --- a/test/automation/src/positron/positronQuickaccess.ts +++ b/test/automation/src/positron/quickaccess.ts @@ -5,9 +5,9 @@ import { Code } from '../code'; import { basename, isAbsolute } from 'path'; -import { PositronQuickInput } from './positronQuickInput'; +import { QuickInput } from './quickInput'; import { expect } from '@playwright/test'; -import { PositronEditors } from './positronEditors'; +import { Editors } from './editors'; enum QuickAccessKind { Files = 1, @@ -15,9 +15,9 @@ enum QuickAccessKind { Symbols } -export class PositronQuickAccess { +export class QuickAccess { - constructor(private code: Code, private editors: PositronEditors, private quickInput: PositronQuickInput) { } + constructor(private code: Code, private editors: Editors, private quickInput: QuickInput) { } async openDataFile(path: string): Promise { if (!isAbsolute(path)) { @@ -25,7 +25,7 @@ export class PositronQuickAccess { // result back that is unique and avoid hitting // the search process to reduce chances of // search needing longer. - throw new Error('PositronQuickAccess.openFile requires an absolute path'); + throw new Error('quickAccess.openFile requires an absolute path'); } // quick access shows files with the basename of the path diff --git a/test/automation/src/positron/positronSettings.ts b/test/automation/src/positron/settings.ts similarity index 80% rename from test/automation/src/positron/positronSettings.ts rename to test/automation/src/positron/settings.ts index 58e2c1c4c7f..5c960ea5a25 100644 --- a/test/automation/src/positron/positronSettings.ts +++ b/test/automation/src/positron/settings.ts @@ -5,13 +5,13 @@ import { Code } from '../code'; -import { PositronEditor } from './positronEditor'; -import { PositronEditors } from './positronEditors'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { Editor } from './editor'; +import { Editors } from './editors'; +import { QuickAccess } from './quickaccess'; -export class PositronSettings { +export class Settings { - constructor(private code: Code, private editors: PositronEditors, private editor: PositronEditor, private quickaccess: PositronQuickAccess) { } + constructor(private code: Code, private editors: Editors, private editor: Editor, private quickaccess: QuickAccess) { } async addUserSettings(settings: [key: string, value: string][]): Promise { await this.openUserSettingsFile(); diff --git a/test/automation/src/positron/positronSideBar.ts b/test/automation/src/positron/sideBar.ts similarity index 95% rename from test/automation/src/positron/positronSideBar.ts rename to test/automation/src/positron/sideBar.ts index 8bc6560a8a3..cf2aef0de45 100644 --- a/test/automation/src/positron/positronSideBar.ts +++ b/test/automation/src/positron/sideBar.ts @@ -11,7 +11,7 @@ const HIDE_SECONDARY_SIDE_BAR = '[aria-label="Hide Secondary Side Bar"]'; /* * Reuseable Positron sidebar functionality for tests to leverage. */ -export class PositronSideBar { +export class SideBar { constructor(private code: Code) { } diff --git a/test/automation/src/positron/positronTerminal.ts b/test/automation/src/positron/terminal.ts similarity index 92% rename from test/automation/src/positron/positronTerminal.ts rename to test/automation/src/positron/terminal.ts index 733cbf8115d..88cc6d7f7d7 100644 --- a/test/automation/src/positron/positronTerminal.ts +++ b/test/automation/src/positron/terminal.ts @@ -5,14 +5,14 @@ import { expect, Locator } from '@playwright/test'; import { Code } from '../code'; -import { PositronQuickAccess } from './positronQuickaccess'; +import { QuickAccess } from './quickaccess'; const TERMINAL_WRAPPER = '#terminal .terminal-wrapper'; -export class PositronTerminal { +export class Terminal { terminalTab: Locator; - constructor(private code: Code, private quickaccess: PositronQuickAccess) { + constructor(private code: Code, private quickaccess: QuickAccess) { this.terminalTab = this.code.driver.page.getByRole('tab', { name: 'Terminal' }).locator('a'); } diff --git a/test/automation/src/positron/positronTestExplorer.ts b/test/automation/src/positron/testExplorer.ts similarity index 95% rename from test/automation/src/positron/positronTestExplorer.ts rename to test/automation/src/positron/testExplorer.ts index 7f10bfa06af..a0237ebc438 100644 --- a/test/automation/src/positron/positronTestExplorer.ts +++ b/test/automation/src/positron/testExplorer.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { PositronExplorer } from './positronExplorer'; +import { Explorer } from './explorer'; const TEST_RESULT_ITEM = '.monaco-list-row[aria-level="2"] .test-peek-item'; const NAME = '.name'; @@ -14,7 +14,7 @@ const TEST_EXPLORER_ICON = '.composite-bar .codicon-test-view-icon'; /* * Reuseable Positron test explorer functionality for tests to leverage. */ -export class PositronTestExplorer extends PositronExplorer { +export class TestExplorer extends Explorer { /** * Constructs a object containing test results from the test explorer. diff --git a/test/automation/src/positron/positronTopActionBar.ts b/test/automation/src/positron/topActionBar.ts similarity index 97% rename from test/automation/src/positron/positronTopActionBar.ts rename to test/automation/src/positron/topActionBar.ts index 1e478deed6b..8396d3f8b3a 100644 --- a/test/automation/src/positron/positronTopActionBar.ts +++ b/test/automation/src/positron/topActionBar.ts @@ -14,7 +14,7 @@ const POSITRON_TOP_ACTION_SAVE_ALL_BUTTON = 'div[id="workbench.parts.positron-to /* * Reuseable Positron top action bar functionality for tests to leverage. */ -export class PositronTopActionBar { +export class TopActionBar { topActionBar: Locator; saveButton: Locator; saveAllButton: Locator; diff --git a/test/automation/src/positron/utils/positronAWSUtils.ts b/test/automation/src/positron/utils/aws.ts similarity index 96% rename from test/automation/src/positron/utils/positronAWSUtils.ts rename to test/automation/src/positron/utils/aws.ts index 4fe170cfebe..e47a4f8779d 100644 --- a/test/automation/src/positron/utils/positronAWSUtils.ts +++ b/test/automation/src/positron/utils/aws.ts @@ -3,6 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ +// eslint-disable-next-line local/code-import-patterns import { S3Client, GetObjectCommand, GetObjectCommandOutput } from '@aws-sdk/client-s3'; import { createWriteStream } from 'fs'; import { pipeline } from 'stream'; diff --git a/test/automation/src/positron/utils/positronInterpreterInfo.ts b/test/automation/src/positron/utils/interpreterInfo.ts similarity index 100% rename from test/automation/src/positron/utils/positronInterpreterInfo.ts rename to test/automation/src/positron/utils/interpreterInfo.ts diff --git a/test/automation/src/positron/positronVariables.ts b/test/automation/src/positron/variables.ts similarity index 99% rename from test/automation/src/positron/positronVariables.ts rename to test/automation/src/positron/variables.ts index a7c89c3e176..d08675f6d82 100644 --- a/test/automation/src/positron/positronVariables.ts +++ b/test/automation/src/positron/variables.ts @@ -26,7 +26,7 @@ const VARIABLES_GROUP_SELECTOR = '.positron-variables-container .action-bar-butt /* * Reuseable Positron variables functionality for tests to leverage. */ -export class PositronVariables { +export class Variables { interpreterLocator = this.code.driver.page.locator(VARIABLES_INTERPRETER); constructor(private code: Code) { } diff --git a/test/automation/src/positron/positronViewer.ts b/test/automation/src/positron/viewer.ts similarity index 97% rename from test/automation/src/positron/positronViewer.ts rename to test/automation/src/positron/viewer.ts index 2a90a16ae53..fb341615677 100644 --- a/test/automation/src/positron/positronViewer.ts +++ b/test/automation/src/positron/viewer.ts @@ -12,7 +12,7 @@ const REFRESH_BUTTON = '.codicon-positron-refresh'; const FULL_APP = 'body'; -export class PositronViewer { +export class Viewer { fullApp = this.code.driver.page.locator(FULL_APP); viewerFrame = this.code.driver.page.frameLocator(OUTER_FRAME).frameLocator(INNER_FRAME); diff --git a/test/automation/src/positron/positronWelcome.ts b/test/automation/src/positron/welcome.ts similarity index 98% rename from test/automation/src/positron/positronWelcome.ts rename to test/automation/src/positron/welcome.ts index a1e5d5ce0d2..805edd64ecf 100644 --- a/test/automation/src/positron/positronWelcome.ts +++ b/test/automation/src/positron/welcome.ts @@ -18,7 +18,7 @@ const HEADING_ROLE = 'heading'; const BUTTON_ROLE = 'button'; const LINK_ROLE = 'link'; -export class PositronWelcome { +export class Welcome { logo = this.code.driver.page.locator(LOGO); title = this.code.driver.page.locator(TITLE); diff --git a/test/automation/src/workbench.ts b/test/automation/src/workbench.ts index 126ae4dad88..ff94f093713 100644 --- a/test/automation/src/workbench.ts +++ b/test/automation/src/workbench.ts @@ -4,42 +4,37 @@ *--------------------------------------------------------------------------------------------*/ // --- Start Positron --- -// Removed existing imports -// --- End Positron --- -import { Code } from './code'; -// --- Start Positron --- -// Removed existing imports -// --- End Positron --- +// This entire file has been updated to remove existing vscode imports, properties, POMs, etc +// Everything has been replaced with Positron code: .positron/ -// --- Start Positron --- -import { PositronInterpreterDropdown } from './positron/positronInterpreterDropdown'; -import { PositronPopups } from './positron/positronPopups'; -import { PositronConsole } from './positron/positronConsole'; -import { PositronVariables } from './positron/positronVariables'; -import { PositronDataExplorer } from './positron/positronDataExplorer'; -import { PositronSideBar } from './positron/positronSideBar'; -import { PositronPlots } from './positron/positronPlots'; -import { PositronNotebooks } from './positron/positronNotebooks'; -import { PositronNewProjectWizard } from './positron/positronNewProjectWizard'; -import { PositronExplorer } from './positron/positronExplorer'; -import { PositronConnections } from './positron/positronConnections'; -import { PositronHelp } from './positron/positronHelp'; -import { PositronTopActionBar } from './positron/positronTopActionBar'; -import { PositronLayouts } from './positron/positronLayouts'; -import { PositronOutput } from './positron/positronOutput'; -import { PositronWelcome } from './positron/positronWelcome'; -import { PositronTerminal } from './positron/positronTerminal'; -import { PositronViewer } from './positron/positronViewer'; -import { PositronEditor } from './positron/positronEditor'; -import { PositronEditors } from './positron/positronEditors'; -import { PositronTestExplorer } from './positron/positronTestExplorer'; -import { PositronQuickAccess } from './positron/positronQuickaccess'; -import { PositronOutline } from './positron/positronOutline'; -import { PositronClipboard } from './positron/positronClipboard'; -import { PositronQuickInput } from './positron/positronQuickInput'; -import { PositronExtensions } from './positron/positronExtensions'; -import { PositronSettings } from './positron/positronSettings'; -// --- End Positron --- +import { Code } from './code'; +import { InterpreterDropdown } from './positron/interpreterDropdown'; +import { Popups } from './positron/popups'; +import { Console } from './positron/console'; +import { Variables } from './positron/variables'; +import { DataExplorer } from './positron/dataExplorer'; +import { SideBar } from './positron/sideBar'; +import { Plots } from './positron/plots'; +import { Notebooks } from './positron/notebooks'; +import { NewProjectWizard } from './positron/newProjectWizard'; +import { Explorer } from './positron/explorer'; +import { Connections } from './positron/connections'; +import { Help } from './positron/help'; +import { TopActionBar } from './positron/topActionBar'; +import { Layouts } from './positron/layouts'; +import { Output } from './positron/output'; +import { Welcome } from './positron/welcome'; +import { Terminal } from './positron/terminal'; +import { Viewer } from './positron/viewer'; +import { Editor } from './positron/editor'; +import { Editors } from './positron/editors'; +import { TestExplorer } from './positron/testExplorer'; +import { QuickAccess } from './positron/quickaccess'; +import { Outline } from './positron/outline'; +import { Clipboard } from './positron/clipboard'; +import { QuickInput } from './positron/quickInput'; +import { Extensions } from './positron/extensions'; +import { Settings } from './positron/settings'; export interface Commands { runCommand(command: string, options?: { exactLabelMatch?: boolean }): Promise; @@ -47,71 +42,63 @@ export interface Commands { export class Workbench { - // --- Start Positron --- - - // removed existing properties - - readonly positronInterpreterDropdown: PositronInterpreterDropdown; - readonly positronPopups: PositronPopups; - readonly positronConsole: PositronConsole; - readonly positronVariables: PositronVariables; - readonly positronDataExplorer: PositronDataExplorer; - readonly positronSideBar: PositronSideBar; - readonly positronPlots: PositronPlots; - readonly positronNotebooks: PositronNotebooks; - readonly positronNewProjectWizard: PositronNewProjectWizard; - readonly positronExplorer: PositronExplorer; - readonly positronConnections: PositronConnections; - readonly positronHelp: PositronHelp; - readonly positronTopActionBar: PositronTopActionBar; - readonly positronLayouts: PositronLayouts; - readonly positronOutput: PositronOutput; - readonly positronWelcome: PositronWelcome; - readonly positronTerminal: PositronTerminal; - readonly positronViewer: PositronViewer; - readonly positronEditor: PositronEditor; - readonly positronTestExplorer: PositronTestExplorer; - readonly positronQuickaccess: PositronQuickAccess; - readonly positronOutline: PositronOutline; - readonly positronClipboard: PositronClipboard; - readonly positronQuickInput: PositronQuickInput; - readonly positronExtensions: PositronExtensions; - readonly positronEditors: PositronEditors; - readonly positronSettings: PositronSettings; - // --- End Positron --- + readonly interpreterDropdown: InterpreterDropdown; + readonly popups: Popups; + readonly console: Console; + readonly variables: Variables; + readonly dataExplorer: DataExplorer; + readonly sideBar: SideBar; + readonly plots: Plots; + readonly notebooks: Notebooks; + readonly newProjectWizard: NewProjectWizard; + readonly explorer: Explorer; + readonly connections: Connections; + readonly help: Help; + readonly topActionBar: TopActionBar; + readonly layouts: Layouts; + readonly output: Output; + readonly welcome: Welcome; + readonly terminal: Terminal; + readonly viewer: Viewer; + readonly editor: Editor; + readonly testExplorer: TestExplorer; + readonly quickaccess: QuickAccess; + readonly outline: Outline; + readonly clipboard: Clipboard; + readonly quickInput: QuickInput; + readonly extensions: Extensions; + readonly editors: Editors; + readonly settings: Settings; constructor(code: Code) { - // --- Start Positron --- - // removed existing initializations - - this.positronPopups = new PositronPopups(code); - this.positronInterpreterDropdown = new PositronInterpreterDropdown(code); - this.positronVariables = new PositronVariables(code); - this.positronDataExplorer = new PositronDataExplorer(code, this); - this.positronSideBar = new PositronSideBar(code); - this.positronPlots = new PositronPlots(code); - this.positronExplorer = new PositronExplorer(code); - this.positronHelp = new PositronHelp(code); - this.positronTopActionBar = new PositronTopActionBar(code); - this.positronLayouts = new PositronLayouts(code, this); - this.positronQuickInput = new PositronQuickInput(code); - this.positronEditors = new PositronEditors(code); - this.positronQuickaccess = new PositronQuickAccess(code, this.positronEditors, this.positronQuickInput); - this.positronConnections = new PositronConnections(code, this.positronQuickaccess); - this.positronNewProjectWizard = new PositronNewProjectWizard(code, this.positronQuickaccess); - this.positronOutput = new PositronOutput(code, this.positronQuickaccess, this.positronQuickInput); - this.positronConsole = new PositronConsole(code, this.positronQuickaccess, this.positronQuickInput); - this.positronNotebooks = new PositronNotebooks(code, this.positronQuickInput, this.positronQuickaccess); - this.positronWelcome = new PositronWelcome(code); - this.positronTerminal = new PositronTerminal(code, this.positronQuickaccess); - this.positronViewer = new PositronViewer(code); - this.positronEditor = new PositronEditor(code); - this.positronTestExplorer = new PositronTestExplorer(code); - this.positronOutline = new PositronOutline(code, this.positronQuickaccess); - this.positronClipboard = new PositronClipboard(code); - this.positronExtensions = new PositronExtensions(code, this.positronQuickaccess); - this.positronSettings = new PositronSettings(code, this.positronEditors, this.positronEditor, this.positronQuickaccess); - // --- End Positron --- + this.popups = new Popups(code); + this.interpreterDropdown = new InterpreterDropdown(code); + this.variables = new Variables(code); + this.dataExplorer = new DataExplorer(code, this); + this.sideBar = new SideBar(code); + this.plots = new Plots(code); + this.explorer = new Explorer(code); + this.help = new Help(code); + this.topActionBar = new TopActionBar(code); + this.layouts = new Layouts(code, this); + this.quickInput = new QuickInput(code); + this.editors = new Editors(code); + this.quickaccess = new QuickAccess(code, this.editors, this.quickInput); + this.connections = new Connections(code, this.quickaccess); + this.newProjectWizard = new NewProjectWizard(code, this.quickaccess); + this.output = new Output(code, this.quickaccess, this.quickInput); + this.console = new Console(code, this.quickaccess, this.quickInput); + this.notebooks = new Notebooks(code, this.quickInput, this.quickaccess); + this.welcome = new Welcome(code); + this.terminal = new Terminal(code, this.quickaccess); + this.viewer = new Viewer(code); + this.editor = new Editor(code); + this.testExplorer = new TestExplorer(code); + this.outline = new Outline(code, this.quickaccess); + this.clipboard = new Clipboard(code); + this.extensions = new Extensions(code, this.quickaccess); + this.settings = new Settings(code, this.editors, this.editor, this.quickaccess); } } +// --- End Positron --- diff --git a/test/e2e/areas/_test.setup.ts b/test/e2e/areas/_test.setup.ts index de3ae25767f..e0927bbdac0 100644 --- a/test/e2e/areas/_test.setup.ts +++ b/test/e2e/areas/_test.setup.ts @@ -140,7 +140,7 @@ export const test = base.extend({ { scope: 'test' }], devTools: [async ({ app }, use) => { - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleDevTools'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleDevTools'); await use(); }, diff --git a/test/e2e/areas/action-bar/editor-action-bar.test.ts b/test/e2e/areas/action-bar/editor-action-bar.test.ts index 8eaf0978c65..4a2c7514a15 100644 --- a/test/e2e/areas/action-bar/editor-action-bar.test.ts +++ b/test/e2e/areas/action-bar/editor-action-bar.test.ts @@ -22,7 +22,7 @@ test.describe('Editor Action Bar', { }); test.afterEach(async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors'); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors'); }); test('R Markdown Document [C1080703]', { @@ -71,13 +71,13 @@ test.describe('Editor Action Bar', { async function openFile(app, filePath: string) { const fileName = path.basename(filePath); await test.step(`open file: ${fileName}`, async () => { - await app.workbench.positronQuickaccess.openFile(path.join(app.workspacePathOrFolder, filePath)); + await app.workbench.quickaccess.openFile(path.join(app.workspacePathOrFolder, filePath)); }); } async function openNotebook(app: Application, filePath: string) { await test.step('open jupyter notebook', async () => { - await app.workbench.positronQuickaccess.openDataFile( + await app.workbench.quickaccess.openDataFile( path.join(app.workspacePathOrFolder, filePath) ); }); @@ -171,7 +171,7 @@ async function verifyOpenViewerRendersHtml(app: Application) { async function verifyPreviewRendersHtml(app: Application, heading: string) { await test.step('verify "preview" renders html', async () => { await app.code.driver.page.getByLabel('Preview', { exact: true }).click(); - const viewerFrame = app.workbench.positronViewer.getViewerFrame().frameLocator('iframe'); + const viewerFrame = app.workbench.viewer.getViewerFrame().frameLocator('iframe'); await expect(viewerFrame.getByRole('heading', { name: heading })).toBeVisible({ timeout: 30000 }); }); } diff --git a/test/e2e/areas/apps/python-apps.test.ts b/test/e2e/areas/apps/python-apps.test.ts index 736a7e0088f..ef065fd96b4 100644 --- a/test/e2e/areas/apps/python-apps.test.ts +++ b/test/e2e/areas/apps/python-apps.test.ts @@ -14,43 +14,43 @@ test.describe('Python Applications', { tag: [tags.CRITICAL, tags.APPS, tags.VIEWER, tags.EDITOR] }, () => { test.afterEach(async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors'); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.terminal.focus'); - await app.workbench.positronTerminal.sendKeysToTerminal('Control+C'); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronViewer.clearViewer(); + await app.workbench.quickaccess.runCommand('workbench.action.terminal.focus'); + await app.workbench.terminal.sendKeysToTerminal('Control+C'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + await app.workbench.viewer.clearViewer(); }); test('Python - Verify Basic Dash App [C903305]', { tag: [tags.WIN] }, async function ({ app, python }) { - const viewer = app.workbench.positronViewer; + const viewer = app.workbench.viewer; - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'dash_example', 'dash_example.py')); - await app.workbench.positronEditor.pressPlay(); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'dash_example', 'dash_example.py')); + await app.workbench.editor.pressPlay(); await expect(viewer.getViewerFrame().getByText('Hello World')).toBeVisible({ timeout: 30000 }); await test.step('Verify app can be opened in editor', async () => { - await app.workbench.positronViewer.openViewerToEditor(); - await app.workbench.positronViewer.clearViewer(); + await app.workbench.viewer.openViewerToEditor(); + await app.workbench.viewer.clearViewer(); - const editorFrameLocator = app.workbench.positronEditor.getEditorViewerFrame(); + const editorFrameLocator = app.workbench.editor.getEditorViewerFrame(); await expect(editorFrameLocator.getByText('Hello World')).toBeVisible({ timeout: 30000 }); }); }); test('Python - Verify Basic FastAPI App [C903306]', async function ({ app, python }) { - const viewer = app.workbench.positronViewer; + const viewer = app.workbench.viewer; - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'fastapi_example', 'fastapi_example.py')); - await app.workbench.positronEditor.pressPlay(); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'fastapi_example', 'fastapi_example.py')); + await app.workbench.editor.pressPlay(); await expect(viewer.getViewerFrame().getByText('FastAPI')).toBeVisible({ timeout: 30000 }); await test.step('Verify app can be opened in editor', async () => { - await app.workbench.positronViewer.openViewerToEditor(); - await app.workbench.positronViewer.clearViewer(); + await app.workbench.viewer.openViewerToEditor(); + await app.workbench.viewer.clearViewer(); - const editorHeaderLocator = app.workbench.positronEditor.getEditorViewerLocator('h2'); + const editorHeaderLocator = app.workbench.editor.getEditorViewerLocator('h2'); await expect(editorHeaderLocator).toContainText('FastAPI', { timeout: 30000 }); }); @@ -60,26 +60,26 @@ test.describe('Python Applications', { test('Python - Verify Basic Gradio App [C903307]', { tag: [tags.WIN], }, async function ({ app, python }) { - const viewer = app.workbench.positronViewer; + const viewer = app.workbench.viewer; - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'gradio_example', 'gradio_example.py')); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronEditor.pressPlay(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'gradio_example', 'gradio_example.py')); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.editor.pressPlay(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); await expect(viewer.getViewerFrame().getByRole('button', { name: 'Submit' })).toBeVisible({ timeout: 45000 }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); }); test('Python - Verify Basic Streamlit App [C903308]', { tag: [tags.WEB, tags.WIN] }, async function ({ app, python }) { - const viewer = app.workbench.positronViewer; + const viewer = app.workbench.viewer; - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'streamlit_example', 'streamlit_example.py')); - await app.workbench.positronEditor.pressPlay(); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'streamlit_example', 'streamlit_example.py')); + await app.workbench.editor.pressPlay(); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); const viewerFrame = viewer.getViewerFrame(); await expect(async () => { @@ -92,10 +92,10 @@ test.describe('Python Applications', { }).toPass({ timeout: 60000 }); await test.step('Verify app can be opened in editor', async () => { - await app.workbench.positronViewer.openViewerToEditor(); - await app.workbench.positronViewer.clearViewer(); + await app.workbench.viewer.openViewerToEditor(); + await app.workbench.viewer.clearViewer(); - const editor = app.workbench.positronEditor; + const editor = app.workbench.editor; const editorFrame = editor.getEditorViewerFrame(); const headerLocator = app.web @@ -109,12 +109,12 @@ test.describe('Python Applications', { test('Python - Verify Basic Flask App [C1013655]', { tag: [tags.WEB, tags.WIN] }, async function ({ app, python, page }) { - const viewer = app.workbench.positronViewer; + const viewer = app.workbench.viewer; - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'flask_example', '__init__.py')); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronEditor.pressPlay(); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'python_apps', 'flask_example', '__init__.py')); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.editor.pressPlay(); const viewerFrame = viewer.getViewerFrame(); const loginLocator = app.web ? viewerFrame.frameLocator('iframe').getByText('Log In') @@ -125,10 +125,10 @@ test.describe('Python Applications', { }).toPass({ timeout: 60000 }); await test.step('Verify app can be opened in editor', async () => { - await app.workbench.positronViewer.openViewerToEditor(); - await app.workbench.positronViewer.clearViewer(); + await app.workbench.viewer.openViewerToEditor(); + await app.workbench.viewer.clearViewer(); - const editor = app.workbench.positronEditor; + const editor = app.workbench.editor; const editorFrame = editor.getEditorViewerFrame(); const loginLocator = app.web @@ -138,7 +138,7 @@ test.describe('Python Applications', { await expect(loginLocator).toBeVisible({ timeout: 30000 }); }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); }); }); diff --git a/test/e2e/areas/apps/shiny.test.ts b/test/e2e/areas/apps/shiny.test.ts index b4b06585bb5..39c23508d4f 100644 --- a/test/e2e/areas/apps/shiny.test.ts +++ b/test/e2e/areas/apps/shiny.test.ts @@ -22,16 +22,16 @@ test.describe('Shiny Application', { tag: [tags.APPS, tags.VIEWER, tags.WIN, tag }); test.afterEach(async function ({ app }) { - await app.workbench.positronTerminal.sendKeysToTerminal('Control+C'); - await app.workbench.positronViewer.refreshViewer(); + await app.workbench.terminal.sendKeysToTerminal('Control+C'); + await app.workbench.viewer.refreshViewer(); }); test('Python - Verify Basic Shiny App [C699099]', async function ({ app, python }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'shiny-py-example', 'app.py')); - await app.workbench.positronQuickaccess.runCommand('shiny.python.runApp'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'shiny-py-example', 'app.py')); + await app.workbench.quickaccess.runCommand('shiny.python.runApp'); const headerLocator = app.web - ? app.workbench.positronViewer.viewerFrame.frameLocator('iframe').locator('h1') - : app.workbench.positronViewer.getViewerLocator('h1'); + ? app.workbench.viewer.viewerFrame.frameLocator('iframe').locator('h1') + : app.workbench.viewer.getViewerLocator('h1'); await expect(async () => { await expect(headerLocator).toHaveText('Restaurant tipping', { timeout: 20000 }); @@ -41,11 +41,11 @@ test.describe('Shiny Application', { tag: [tags.APPS, tags.VIEWER, tags.WIN, tag test('R - Verify Basic Shiny App [C699100]', async function ({ app, r }) { const code = `library(shiny) runExample("01_hello")`; - await app.workbench.positronConsole.pasteCodeToConsole(code); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole(code); + await app.workbench.console.sendEnterKey(); const headerLocator = app.web - ? app.workbench.positronViewer.viewerFrame.frameLocator('iframe').locator('h1') - : app.workbench.positronViewer.getViewerLocator('h1'); + ? app.workbench.viewer.viewerFrame.frameLocator('iframe').locator('h1') + : app.workbench.viewer.getViewerLocator('h1'); await expect(async () => { await expect(headerLocator).toHaveText('Hello Shiny!', { timeout: 20000 }); }).toPass({ timeout: 60000 }); diff --git a/test/e2e/areas/connections/connections-db.test.ts b/test/e2e/areas/connections/connections-db.test.ts index 91746ad86cd..3492934ad48 100644 --- a/test/e2e/areas/connections/connections-db.test.ts +++ b/test/e2e/areas/connections/connections-db.test.ts @@ -18,73 +18,73 @@ test.describe('SQLite DB Connection', { }); test.afterEach(async function ({ app }) { - await app.workbench.positronConnections.disconnectButton.click(); - await app.workbench.positronConnections.connectionItems.first().click(); - await app.workbench.positronConnections.deleteConnection(); + await app.workbench.connections.disconnectButton.click(); + await app.workbench.connections.connectionItems.first().click(); + await app.workbench.connections.deleteConnection(); }); test.skip('Python - SQLite DB Connection [C628636]', { annotation: [{ type: 'issue', description: 'https://github.com/posit-dev/positron/issues/5692' }] }, async function ({ app, python }) { await test.step('Open a Python file and run it', async () => { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-py', 'chinook-sqlite.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-py', 'chinook-sqlite.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); }); await test.step('Open connections pane', async () => { - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); // there is a flake of the db connection not displaying in the connections pane after // clicking the db icon. i want to see if waiting for a second will help await app.code.driver.page.waitForTimeout(1000); - await app.workbench.positronVariables.clickDatabaseIconForVariableRow('conn'); - await app.workbench.positronConnections.connectIcon.click(); + await app.workbench.variables.clickDatabaseIconForVariableRow('conn'); + await app.workbench.connections.connectIcon.click(); }); await test.step('Verify connection nodes', async () => { - await app.workbench.positronConnections.openConnectionsNodes(['main']); - await app.workbench.positronConnections.assertConnectionNodes(['albums']); + await app.workbench.connections.openConnectionsNodes(['main']); + await app.workbench.connections.assertConnectionNodes(['albums']); }); await test.step('Disconnect, reconnect with dialog, & reverify', async () => { - await app.workbench.positronConnections.disconnectButton.click(); - await app.workbench.positronConnections.connectIcon.click(); - await app.workbench.positronConnections.resumeConnectionButton.click(); + await app.workbench.connections.disconnectButton.click(); + await app.workbench.connections.connectIcon.click(); + await app.workbench.connections.resumeConnectionButton.click(); - await app.workbench.positronConnections.openConnectionsNodes(['main']); - await app.workbench.positronConnections.assertConnectionNodes(['albums']); + await app.workbench.connections.openConnectionsNodes(['main']); + await app.workbench.connections.assertConnectionNodes(['albums']); }); }); test('R - SQLite DB Connection [C628637]', async function ({ app, r }) { await test.step('Open an R file and run it', async () => { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-r', 'chinook-sqlite.r')); - await app.workbench.positronQuickaccess.runCommand('r.sourceCurrentFile'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-r', 'chinook-sqlite.r')); + await app.workbench.quickaccess.runCommand('r.sourceCurrentFile'); }); await test.step('Open connections pane', async () => { - await app.workbench.positronConnections.openConnectionPane(); - await app.workbench.positronConnections.viewConnection('SQLiteConnection'); + await app.workbench.connections.openConnectionPane(); + await app.workbench.connections.viewConnection('SQLiteConnection'); }); await test.step('Verify connection nodes', async () => { - await app.workbench.positronConnections.openConnectionsNodes(['SQLiteConnection', 'Default']); - await app.workbench.positronConnections.openConnectionsNodes(tables); + await app.workbench.connections.openConnectionsNodes(['SQLiteConnection', 'Default']); + await app.workbench.connections.openConnectionsNodes(tables); }); await test.step('Disconnect, reconnect with dialog, & reverify', async () => { - await app.workbench.positronConnections.disconnectButton.click(); - await app.workbench.positronConnections.connectIcon.click(); - await app.workbench.positronConnections.resumeConnectionButton.click(); + await app.workbench.connections.disconnectButton.click(); + await app.workbench.connections.connectIcon.click(); + await app.workbench.connections.resumeConnectionButton.click(); - await app.workbench.positronConnections.openConnectionsNodes(['SQLiteConnection', 'Default']); - await app.workbench.positronConnections.openConnectionsNodes(tables); + await app.workbench.connections.openConnectionsNodes(['SQLiteConnection', 'Default']); + await app.workbench.connections.openConnectionsNodes(tables); }); }); test('R - Connections are update after adding a database,[C663724]', async function ({ app, page, r }) { await test.step('Open an empty connection', async () => { - await app.workbench.positronConsole.executeCode( + await app.workbench.console.executeCode( 'R', `con <- connections::connection_open(RSQLite::SQLite(), tempfile())`, '>' @@ -92,9 +92,9 @@ test.describe('SQLite DB Connection', { }); await test.step('Open connections pane', async () => { - await app.workbench.positronConnections.openConnectionPane(); - await app.workbench.positronConnections.viewConnection('SQLiteConnection'); - await app.workbench.positronConnections.openConnectionsNodes(['SQLiteConnection', 'Default']); + await app.workbench.connections.openConnectionPane(); + await app.workbench.connections.viewConnection('SQLiteConnection'); + await app.workbench.connections.openConnectionsNodes(['SQLiteConnection', 'Default']); // mtcars node should not exist await expect( @@ -104,7 +104,7 @@ test.describe('SQLite DB Connection', { await test.step('Add a dataframe to the connection', async () => { - await app.workbench.positronConsole.executeCode( + await app.workbench.console.executeCode( 'R', `DBI::dbWriteTable(con, 'mtcars', mtcars)`, '>' @@ -112,7 +112,7 @@ test.describe('SQLite DB Connection', { // refresh and mtcars should exist await page.getByRole('button', { name: 'Refresh' }).click(); - await app.workbench.positronConnections.openConnectionsNodes(['mtcars']); + await app.workbench.connections.openConnectionsNodes(['mtcars']); }); }); diff --git a/test/e2e/areas/console/console-ansi.test.ts b/test/e2e/areas/console/console-ansi.test.ts index 5822b0e4550..5ed0f9f0b24 100644 --- a/test/e2e/areas/console/console-ansi.test.ts +++ b/test/e2e/areas/console/console-ansi.test.ts @@ -12,7 +12,7 @@ test.use({ test.describe('Console ANSI styling', { tag: [tags.CRITICAL, tags.CONSOLE, tags.WIN] }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('fullSizedPanel'); + await app.workbench.layouts.enterLayout('fullSizedPanel'); }); test("R - Can produce clickable file links [C683069]", async function ({ app, r }) { @@ -23,15 +23,15 @@ test.describe('Console ANSI styling', { tag: [tags.CRITICAL, tags.CONSOLE, tags. const inputCode = `cli::cli_inform(r"[{.file ${filePath}}]")`; await expect(async () => { - await app.workbench.positronConsole.pasteCodeToConsole(inputCode); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole(inputCode); + await app.workbench.console.sendEnterKey(); // Locate the link and click on it - const link = app.workbench.positronConsole.getLastClickableLink(); + const link = app.workbench.console.getLastClickableLink(); await expect(link).toContainText(fileName, { useInnerText: true }); await link.click(); - await app.workbench.positronEditors.waitForActiveTab(fileName); + await app.workbench.editors.waitForActiveTab(fileName); }).toPass({ timeout: 60000 }); }); @@ -39,17 +39,17 @@ test.describe('Console ANSI styling', { tag: [tags.CRITICAL, tags.CONSOLE, tags. const inputCode = `cli::cli_inform("{.fun base::mean}")`; await expect(async () => { - await app.workbench.positronConsole.pasteCodeToConsole(inputCode); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole(inputCode); + await app.workbench.console.sendEnterKey(); // Locate the link and click on it - const link = app.workbench.positronConsole.getLastClickableLink(); + const link = app.workbench.console.getLastClickableLink(); await expect(link).toContainText('base::mean', { useInnerText: true }); await link.click(); await app.code.wait(200); - const helpFrame = await app.workbench.positronHelp.getHelpFrame(0); + const helpFrame = await app.workbench.help.getHelpFrame(0); await expect(helpFrame.locator('body')).toContainText('Arithmetic Mean'); }).toPass({ timeout: 60000 }); }); @@ -59,7 +59,7 @@ test.describe('Console ANSI styling', { tag: [tags.CRITICAL, tags.CONSOLE, tags. const rgb_color = "rgb(255, 51, 51)"; // same as above but in rgb await expect(async () => { - await app.workbench.positronConsole.pasteCodeToConsole( + await app.workbench.console.pasteCodeToConsole( ` cli::cli_div(theme = list(span.emph = list(color = "${color}"))) cli::cli_text("This is very {.emph important}") @@ -68,9 +68,9 @@ test.describe('Console ANSI styling', { tag: [tags.CRITICAL, tags.CONSOLE, tags. ); }).toPass(); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.sendEnterKey(); - const styled_locator = app.workbench.positronConsole.activeConsole.getByText("important").last(); + const styled_locator = app.workbench.console.activeConsole.getByText("important").last(); await expect(styled_locator).toHaveCSS('font-style', 'italic'); await expect(styled_locator).toHaveCSS('color', rgb_color); }); diff --git a/test/e2e/areas/console/console-autocomplete.test.ts b/test/e2e/areas/console/console-autocomplete.test.ts index 5f8a01543a8..2152e1a6a87 100644 --- a/test/e2e/areas/console/console-autocomplete.test.ts +++ b/test/e2e/areas/console/console-autocomplete.test.ts @@ -13,19 +13,19 @@ test.describe('Console Autocomplete', { tag: [tags.WEB, tags.WIN, tags.CONSOLE] }, () => { test('Python - Verify Console Autocomplete [C947968]', async function ({ app, python }) { - await app.workbench.positronConsole.pasteCodeToConsole('import pandas as pd'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole('import pandas as pd'); + await app.workbench.console.sendEnterKey(); - await app.workbench.positronConsole.typeToConsole('df = pd.Dat'); - await expect(app.workbench.positronConsole.suggestionList).toHaveCount(8, { timeout: 15000 }); + await app.workbench.console.typeToConsole('df = pd.Dat'); + await expect(app.workbench.console.suggestionList).toHaveCount(8, { timeout: 15000 }); }); test('R - Verify Console Autocomplete [C947969]', async function ({ app, r }) { - await app.workbench.positronConsole.pasteCodeToConsole('library(arrow)'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole('library(arrow)'); + await app.workbench.console.sendEnterKey(); // need to type to console slowly to see suggestions with R - await app.workbench.positronConsole.typeToConsole('df2 <- read_p', 250); - await expect(app.workbench.positronConsole.suggestionList).toHaveCount(4, { timeout: 15000 }); + await app.workbench.console.typeToConsole('df2 <- read_p', 250); + await expect(app.workbench.console.suggestionList).toHaveCount(4, { timeout: 15000 }); }); }); diff --git a/test/e2e/areas/console/console-clipboard.test.ts b/test/e2e/areas/console/console-clipboard.test.ts index 78dffe69e06..b5aec80415b 100644 --- a/test/e2e/areas/console/console-clipboard.test.ts +++ b/test/e2e/areas/console/console-clipboard.test.ts @@ -5,7 +5,7 @@ import * as os from 'os'; import { test, tags } from '../_test.setup'; -import { Application, PositronConsole } from '../../../automation'; +import { Application, Console } from '../../../automation'; test.use({ suiteId: __filename @@ -23,7 +23,7 @@ test.describe('Console - Clipboard', { tag: [tags.CONSOLE, tags.WIN] }, () => { }); async function testConsoleClipboard(app: Application) { - const console = app.workbench.positronConsole; + const console = app.workbench.console; const page = console.activeConsole.page(); const testLine = 'a = 1'; @@ -36,7 +36,7 @@ async function testConsoleClipboard(app: Application) { async function toggleAuxiliaryBar(app: Application) { await test.step('Toggle auxiliary bar', async () => { - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); }); } @@ -47,7 +47,7 @@ async function initializeConsole(console: any) { }); } -async function executeCopyAndPaste(console: PositronConsole, page: any, testLine: string) { +async function executeCopyAndPaste(console: Console, page: any, testLine: string) { const isMac = os.platform() === 'darwin'; const modifier = isMac ? 'Meta' : 'Control'; diff --git a/test/e2e/areas/console/console-history.test.ts b/test/e2e/areas/console/console-history.test.ts index af3293087a7..00bbaa01b90 100644 --- a/test/e2e/areas/console/console-history.test.ts +++ b/test/e2e/areas/console/console-history.test.ts @@ -50,9 +50,9 @@ test.describe('Console History', { async function enterLines(app: Application, lines: string[]) { await test.step('Enter lines into the console', async () => { for (const line of lines) { - await app.workbench.positronConsole.typeToConsole(line); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents(line); + await app.workbench.console.typeToConsole(line); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents(line); } }); } @@ -60,9 +60,9 @@ async function enterLines(app: Application, lines: string[]) { async function clearConsole(app: Application) { await test.step('Clear the console', async () => { - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronConsole.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.console.barClearButton.click(); }); } @@ -72,22 +72,22 @@ async function selectFirstHistoryResult(app: Application, expectedLine: string) await page.keyboard.press('ArrowUp'); await page.keyboard.press('ArrowUp'); await page.keyboard.press('ArrowUp'); - await app.workbench.positronConsole.waitForCurrentConsoleLineContents(expectedLine); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.waitForCurrentConsoleLineContents(expectedLine); + await app.workbench.console.sendEnterKey(); }); } async function verifyFullHistory(app: Application, lines: string[]) { await test.step('Verify the full history', async () => { - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); await app.code.driver.page.keyboard.press('Control+R'); - await app.workbench.positronConsole.waitForHistoryContents(lines[0], 2); - await app.workbench.positronConsole.waitForHistoryContents(lines[1]); - await app.workbench.positronConsole.waitForHistoryContents(lines[2]); + await app.workbench.console.waitForHistoryContents(lines[0], 2); + await app.workbench.console.waitForHistoryContents(lines[1]); + await app.workbench.console.waitForHistoryContents(lines[2]); }); } diff --git a/test/e2e/areas/console/console-input.test.ts b/test/e2e/areas/console/console-input.test.ts index a4421a35775..53048af53db 100644 --- a/test/e2e/areas/console/console-input.test.ts +++ b/test/e2e/areas/console/console-input.test.ts @@ -14,7 +14,7 @@ test.describe('Console Input', { }, () => { test.beforeEach(async function ({ app, r }) { - await app.workbench.positronLayouts.enterLayout('fullSizedPanel'); + await app.workbench.layouts.enterLayout('fullSizedPanel'); }); @@ -22,13 +22,13 @@ test.describe('Console Input', { const inputCode = `val = input("Enter your name: ") print(f'Hello {val}!')`; - await app.workbench.positronConsole.pasteCodeToConsole(inputCode); - await app.workbench.positronConsole.sendEnterKey(); - await expect(app.workbench.positronConsole.activeConsole.getByText('Enter your name:', { exact: true })).toBeVisible(); + await app.workbench.console.pasteCodeToConsole(inputCode); + await app.workbench.console.sendEnterKey(); + await expect(app.workbench.console.activeConsole.getByText('Enter your name:', { exact: true })).toBeVisible(); - await app.workbench.positronConsole.typeToConsole('John Doe'); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('Hello John Doe!'); + await app.workbench.console.typeToConsole('John Doe'); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('Hello John Doe!'); }); @@ -36,31 +36,31 @@ print(f'Hello {val}!')`; test('R - Get Input String Console [C667517]', async function ({ app, r }) { const inputCode = `val <- readline(prompt = "Enter your name: ") cat(sprintf('Hello %s!\n', val))`; - await app.workbench.positronConsole.pasteCodeToConsole(inputCode); - await app.workbench.positronConsole.sendEnterKey(); - await expect(app.workbench.positronConsole.activeConsole.getByText('Enter your name:', { exact: true })).toBeVisible(); + await app.workbench.console.pasteCodeToConsole(inputCode); + await app.workbench.console.sendEnterKey(); + await expect(app.workbench.console.activeConsole.getByText('Enter your name:', { exact: true })).toBeVisible(); // slight wait before starting to type await app.code.wait(200); - await app.workbench.positronConsole.typeToConsole('John Doe'); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('Hello John Doe!'); + await app.workbench.console.typeToConsole('John Doe'); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('Hello John Doe!'); }); test('R - Can use `menu` to select alternatives [C684749]', async function ({ app, r }) { const inputCode = `x <- menu(letters)`; - await app.workbench.positronConsole.pasteCodeToConsole(inputCode); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('Selection:'); + await app.workbench.console.pasteCodeToConsole(inputCode); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('Selection:'); - await app.workbench.positronConsole.typeToConsole('1'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.typeToConsole('1'); + await app.workbench.console.sendEnterKey(); - await app.workbench.positronConsole.typeToConsole('x'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.typeToConsole('x'); + await app.workbench.console.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('[1] 1'); + await app.workbench.console.waitForConsoleContents('[1] 1'); }); test("R - Esc only dismisses autocomplete not full text typed into console [C685868]", async function ({ app, page, r }) { @@ -68,9 +68,9 @@ cat(sprintf('Hello %s!\n', val))`; const inputCode = `base::mea`; - await app.workbench.positronConsole.typeToConsole(inputCode); + await app.workbench.console.typeToConsole(inputCode); - const activeConsole = app.workbench.positronConsole.activeConsole; + const activeConsole = app.workbench.console.activeConsole; // Makes sure the code suggestions are activated const suggestion = activeConsole.locator('.suggest-widget'); diff --git a/test/e2e/areas/console/console-output.test.ts b/test/e2e/areas/console/console-output.test.ts index 10560631ba1..4689c0e3953 100644 --- a/test/e2e/areas/console/console-output.test.ts +++ b/test/e2e/areas/console/console-output.test.ts @@ -11,10 +11,10 @@ test.use({ test.describe('Console Output', { tag: [tags.WIN, tags.CONSOLE] }, () => { test('R - Console output in a loop with short pauses [C885225]', async function ({ app, r }) { - await app.workbench.positronConsole.pasteCodeToConsole(rCode); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('Why do programmers prefer dark mode'); - await app.workbench.positronConsole.waitForConsoleContents('Because light attracts bugs!'); + await app.workbench.console.pasteCodeToConsole(rCode); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('Why do programmers prefer dark mode'); + await app.workbench.console.waitForConsoleContents('Because light attracts bugs!'); }); }); diff --git a/test/e2e/areas/console/console-python.test.ts b/test/e2e/areas/console/console-python.test.ts index 1821576b259..a529ce8928c 100644 --- a/test/e2e/areas/console/console-python.test.ts +++ b/test/e2e/areas/console/console-python.test.ts @@ -13,43 +13,43 @@ test.describe('Console Pane: Python', { tag: [tags.WEB, tags.WIN, tags.CONSOLE] test('Verify restart button inside the console [C377918]', async function ({ app, python }) { await expect(async () => { - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); // workaround issue where power button click fails await app.code.wait(1000); - await app.workbench.positronConsole.barPowerButton.click(); - await app.workbench.positronConsole.consoleRestartButton.click(); + await app.workbench.console.barPowerButton.click(); + await app.workbench.console.consoleRestartButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.waitForReady('>>>'); - await app.workbench.positronConsole.waitForConsoleContents('restarted'); - await expect(app.workbench.positronConsole.consoleRestartButton).not.toBeVisible(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.waitForReady('>>>'); + await app.workbench.console.waitForConsoleContents('restarted'); + await expect(app.workbench.console.consoleRestartButton).not.toBeVisible(); }).toPass(); }); test('Verify restart button on console bar [C617464]', { }, async function ({ app, python }) { // Need to make console bigger to see all bar buttons - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); // workaround issue where "started" text never appears post restart await app.code.wait(1000); - await app.workbench.positronConsole.barRestartButton.click(); + await app.workbench.console.barRestartButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.waitForReady('>>>'); - await app.workbench.positronConsole.waitForConsoleContents('restarted'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.waitForReady('>>>'); + await app.workbench.console.waitForConsoleContents('restarted'); }); test('Verify cancel button on console bar [C...]', { }, async function ({ app, python }) { - await app.workbench.positronConsole.pasteCodeToConsole('import time; time.sleep(10)'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole('import time; time.sleep(10)'); + await app.workbench.console.sendEnterKey(); - await app.workbench.positronConsole.interruptExecution(); + await app.workbench.console.interruptExecution(); }); }); diff --git a/test/e2e/areas/console/console-r.test.ts b/test/e2e/areas/console/console-r.test.ts index 76c28025eae..632151d9624 100644 --- a/test/e2e/areas/console/console-r.test.ts +++ b/test/e2e/areas/console/console-r.test.ts @@ -14,36 +14,36 @@ test.describe('Console Pane: R', { }, () => { test.beforeAll(async function ({ app }) { // Need to make console bigger to see all bar buttons - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); }); test('Verify restart button inside the console [C377917]', async function ({ app, r }) { await expect(async () => { - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronConsole.barPowerButton.click(); - await app.workbench.positronConsole.consoleRestartButton.click(); - await app.workbench.positronConsole.waitForReady('>'); - await app.workbench.positronConsole.waitForConsoleContents('restarted'); - await expect(app.workbench.positronConsole.consoleRestartButton).not.toBeVisible(); + await app.workbench.console.barClearButton.click(); + await app.workbench.console.barPowerButton.click(); + await app.workbench.console.consoleRestartButton.click(); + await app.workbench.console.waitForReady('>'); + await app.workbench.console.waitForConsoleContents('restarted'); + await expect(app.workbench.console.consoleRestartButton).not.toBeVisible(); }).toPass(); }); test('Verify restart button on console bar [C620636]', async function ({ app, r }) { await expect(async () => { - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronConsole.barRestartButton.click(); - await app.workbench.positronConsole.waitForReady('>'); - await app.workbench.positronConsole.waitForConsoleContents('restarted'); + await app.workbench.console.barClearButton.click(); + await app.workbench.console.barRestartButton.click(); + await app.workbench.console.waitForReady('>'); + await app.workbench.console.waitForConsoleContents('restarted'); }).toPass(); }); test('Verify cancel button on console bar [C...]', { }, async function ({ app, r }) { - await app.workbench.positronConsole.pasteCodeToConsole('Sys.sleep(10)'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole('Sys.sleep(10)'); + await app.workbench.console.sendEnterKey(); - await app.workbench.positronConsole.interruptExecution(); + await app.workbench.console.interruptExecution(); // nothing appears in console after interrupting execution }); diff --git a/test/e2e/areas/data-explorer/data-explorer-headless.test.ts b/test/e2e/areas/data-explorer/data-explorer-headless.test.ts index 84222dd1d7f..ddb727b406a 100644 --- a/test/e2e/areas/data-explorer/data-explorer-headless.test.ts +++ b/test/e2e/areas/data-explorer/data-explorer-headless.test.ts @@ -15,11 +15,11 @@ test.describe('Headless Data Explorer - Large Data Frame', { tag: [tags.WEB, tags.DATA_EXPLORER, tags.DUCK_DB, tags.WIN] }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test.afterEach(async function ({ app }) { - await app.workbench.positronDataExplorer.closeDataExplorer(); + await app.workbench.dataExplorer.closeDataExplorer(); }); test('Verifies headless data explorer functionality with large parquet file [C938893]', async function ({ app, logger }) { @@ -34,19 +34,19 @@ test.describe('Headless Data Explorer - Large Data Frame', { async function testBody(app: Application, logger: Logger, fileName: string) { const LAST_CELL_CONTENTS = '2013-09-30 08:00:00'; - await app.workbench.positronQuickaccess.openDataFile(join(app.workspacePathOrFolder, 'data-files', 'flights', fileName)); + await app.workbench.quickaccess.openDataFile(join(app.workspacePathOrFolder, 'data-files', 'flights', fileName)); logger.log('Opening data grid'); await expect(async () => { expect(await app.code.driver.page.locator(`.label-name:has-text("Data: ${fileName}")`).innerText() === `Data: ${fileName}`); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await expect(async () => { // Validate full grid by checking bottom right corner data - await app.workbench.positronDataExplorer.clickLowerRightCorner(); - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.clickLowerRightCorner(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const lastRow = tableData.at(-1); const lastHour = lastRow!['time_hour']; expect(lastHour).toBe(LAST_CELL_CONTENTS); diff --git a/test/e2e/areas/data-explorer/data-explorer-python-pandas.test.ts b/test/e2e/areas/data-explorer/data-explorer-python-pandas.test.ts index c9ac12e0ad4..ef923e49c4e 100644 --- a/test/e2e/areas/data-explorer/data-explorer-python-pandas.test.ts +++ b/test/e2e/areas/data-explorer/data-explorer-python-pandas.test.ts @@ -22,19 +22,19 @@ data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], df = pd.DataFrame(data)`; logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('Python', script, '>>>'); + await app.workbench.console.executeCode('Python', script, '>>>'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]).toStrictEqual({ 'Name': 'Jai', 'Age': '27', 'Address': 'Delhi' }); expect(tableData[1]).toStrictEqual({ 'Name': 'Princi', 'Age': '24', 'Address': 'Kanpur' }); @@ -43,8 +43,8 @@ df = pd.DataFrame(data)`; expect(tableData.length).toBe(4); }).toPass({ timeout: 60000 }); - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronVariables.toggleVariablesView(); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.variables.toggleVariablesView(); }); @@ -62,19 +62,19 @@ data = { df2 = pd.DataFrame(data)`; logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('Python', script, '>>>'); + await app.workbench.console.executeCode('Python', script, '>>>'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df2'); + await app.workbench.variables.doubleClickVariableRow('df2'); await app.code.driver.page.locator('.label-name:has-text("Data: df2")').innerText(); }).toPass(); // Need to make sure the data explorer is visible test.beforeAll we can interact with it - await app.workbench.positronDataExplorer.maximizeDataExplorer(true); + await app.workbench.dataExplorer.maximizeDataExplorer(true); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]).toStrictEqual({ 'A': '1.00', 'B': 'foo', 'C': 'NaN', 'D': 'NaT', 'E': 'None' }); expect(tableData[1]).toStrictEqual({ 'A': '2.00', 'B': 'NaN', 'C': '2.50', 'D': 'NaT', 'E': 'text' }); @@ -85,95 +85,95 @@ df2 = pd.DataFrame(data)`; }).toPass({ timeout: 60000 }); // Need to expand summary for next test - await app.workbench.positronDataExplorer.expandSummary(); + await app.workbench.dataExplorer.expandSummary(); }); // Cannot be run by itself, relies on the previous test test('Python Pandas - Verifies data explorer column info functionality [C734263]', async function ({ app, python }) { - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(1)).toBe('20%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(2)).toBe('40%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(3)).toBe('40%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(4)).toBe('60%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(5)).toBe('40%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(1)).toBe('20%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(2)).toBe('40%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(3)).toBe('40%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(4)).toBe('60%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(5)).toBe('40%'); - await app.workbench.positronLayouts.enterLayout('notebook'); + await app.workbench.layouts.enterLayout('notebook'); - const col1ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(1); + const col1ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(1); expect(col1ProfileInfo.profileData).toStrictEqual({ 'Missing': '1', 'Min': '1.00', 'Median': '3.00', 'Mean': '3.00', 'Max': '5.00', 'SD': '1.83' }); - const col2ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(2); + const col2ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(2); expect(col2ProfileInfo.profileData).toStrictEqual({ 'Missing': '2', 'Empty': '0', 'Unique': '3' }); - const col3ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(3); + const col3ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(3); expect(col3ProfileInfo.profileData).toStrictEqual({ 'Missing': '2', 'Min': '2.50', 'Median': '3.10', 'Mean': '3.47', 'Max': '4.80', 'SD': '1.19' }); - const col4ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(4); + const col4ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(4); expect(col4ProfileInfo.profileData).toStrictEqual({ 'Missing': '3', 'Min': '2023-01-01 00:00:00', 'Median': 'NaT', 'Max': '2023-02-01 00:00:00', 'Timezone': 'None' }); - const col5ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(5); + const col5ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(5); expect(col5ProfileInfo.profileData).toStrictEqual({ 'Missing': '2', 'Empty': '0', 'Unique': '3' }); - await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.layouts.enterLayout('stacked'); + await app.workbench.sideBar.closeSecondarySideBar(); - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronVariables.toggleVariablesView(); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.variables.toggleVariablesView(); }); // This test is not dependent on the previous test, so it refreshes the python environment test('Python Pandas - Verifies data explorer test.afterAll modification [C557574]', async function ({ app, python }) { // Restart python for clean environment & open the file - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronConsole.barRestartButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await expect(app.workbench.positronConsole.activeConsole.getByText('restarted')).toBeVisible({ timeout: 60000 }); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.console.barRestartButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await expect(app.workbench.console.activeConsole.getByText('restarted')).toBeVisible({ timeout: 60000 }); const filename = 'pandas-update-dataframe.ipynb'; - await app.workbench.positronNotebooks.openNotebook(join(app.workspacePathOrFolder, 'workspaces', 'data-explorer-update-datasets', filename)); - await app.workbench.positronNotebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); - await app.workbench.positronNotebooks.focusFirstCell(); - await app.workbench.positronNotebooks.executeActiveCell(); + await app.workbench.notebooks.openNotebook(join(app.workspacePathOrFolder, 'workspaces', 'data-explorer-update-datasets', filename)); + await app.workbench.notebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); + await app.workbench.notebooks.focusFirstCell(); + await app.workbench.notebooks.executeActiveCell(); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass({ timeout: 50000 }); - await app.workbench.positronLayouts.enterLayout('notebook'); + await app.workbench.layouts.enterLayout('notebook'); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData.length).toBe(11); }).toPass({ timeout: 60000 }); await app.code.driver.page.locator('.tabs .label-name:has-text("pandas-update-dataframe.ipynb")').click(); - await app.workbench.positronNotebooks.focusNextCell(); - await app.workbench.positronNotebooks.executeActiveCell(); + await app.workbench.notebooks.focusNextCell(); + await app.workbench.notebooks.executeActiveCell(); await app.code.driver.page.locator('.label-name:has-text("Data: df")').click(); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData.length).toBe(12); }).toPass({ timeout: 60000 }); await app.code.driver.page.locator('.tabs .label-name:has-text("pandas-update-dataframe.ipynb")').click(); - await app.workbench.positronNotebooks.focusNextCell(); - await app.workbench.positronNotebooks.executeActiveCell(); + await app.workbench.notebooks.focusNextCell(); + await app.workbench.notebooks.executeActiveCell(); await app.code.driver.page.locator('.label-name:has-text("Data: df")').click(); - await app.workbench.positronDataExplorer.selectColumnMenuItem(1, 'Sort Descending'); + await app.workbench.dataExplorer.selectColumnMenuItem(1, 'Sort Descending'); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]).toStrictEqual({ 'Year': '2025' }); expect(tableData.length).toBe(12); }).toPass({ timeout: 60000 }); - await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronDataExplorer.closeDataExplorer(); + await app.workbench.layouts.enterLayout('stacked'); + await app.workbench.dataExplorer.closeDataExplorer(); }); test('Python - Open Data Explorer for the second time brings focus back [C1078833]', async function ({ app, python }) { @@ -181,40 +181,40 @@ df2 = pd.DataFrame(data)`; const script = `import pandas as pd from pydataset import data Data_Frame = data('mtcars')`; - await app.workbench.positronConsole.executeCode('Python', script, '>>>'); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.console.executeCode('Python', script, '>>>'); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('Data_Frame'); + await app.workbench.variables.doubleClickVariableRow('Data_Frame'); await app.code.driver.page.locator('.label-name:has-text("Data: Data_Frame")').innerText(); }).toPass(); // Now move focus out of the the data explorer pane - await app.workbench.positronEditors.newUntitledFile(); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); - await app.workbench.positronVariables.doubleClickVariableRow('Data_Frame'); + await app.workbench.editors.newUntitledFile(); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.variables.doubleClickVariableRow('Data_Frame'); await expect(async () => { await app.code.driver.page.locator('.label-name:has-text("Data: Data_Frame")').innerText(); }).toPass(); - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); }); test('Python - Check blank spaces in data explorer [C1078835]', async function ({ app, python }) { const script = `import pandas as pd df = pd.DataFrame({'x': ["a ", "a", " ", ""]})`; - await app.workbench.positronConsole.executeCode('Python', script, '>>>'); + await app.workbench.console.executeCode('Python', script, '>>>'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]).toStrictEqual({ 'x': 'a·' }); expect(tableData[1]).toStrictEqual({ 'x': 'a' }); @@ -223,6 +223,6 @@ df = pd.DataFrame({'x': ["a ", "a", " ", ""]})`; expect(tableData.length).toBe(4); }).toPass({ timeout: 60000 }); - await app.workbench.positronDataExplorer.closeDataExplorer(); + await app.workbench.dataExplorer.closeDataExplorer(); }); }); diff --git a/test/e2e/areas/data-explorer/data-explorer-python-polars.test.ts b/test/e2e/areas/data-explorer/data-explorer-python-polars.test.ts index bdd8ccf60f8..d948ac8cf03 100644 --- a/test/e2e/areas/data-explorer/data-explorer-python-polars.test.ts +++ b/test/e2e/areas/data-explorer/data-explorer-python-polars.test.ts @@ -14,19 +14,19 @@ test.describe('Data Explorer - Python Polars', { tag: [tags.WIN, tags.WEB, tags.CRITICAL, tags.DATA_EXPLORER] }, () => { test('Python Polars - Verifies basic data explorer functionality [C644538]', async function ({ app, python, logger }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'polars-dataframe-py', 'polars_basic.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'polars-dataframe-py', 'polars_basic.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); - await app.workbench.positronDataExplorer.maximizeDataExplorer(true); + await app.workbench.dataExplorer.maximizeDataExplorer(true); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]['foo']).toBe('1'); expect(tableData[1]['foo']).toBe('2'); @@ -44,46 +44,46 @@ test.describe('Data Explorer - Python Polars', { // Cannot be run by itself, relies on the previous test test('Python Polars - Verifies basic data explorer column info functionality [C734264]', async function ({ app, python }) { - await app.workbench.positronDataExplorer.expandSummary(); + await app.workbench.dataExplorer.expandSummary(); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(1)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(2)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(3)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(4)).toBe('33%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(5)).toBe('33%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(6)).toBe('33%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(1)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(2)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(3)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(4)).toBe('33%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(5)).toBe('33%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(6)).toBe('33%'); - const col1ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(1); + const col1ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(1); expect(col1ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '1.00', 'Median': '2.00', 'Mean': '2.00', 'Max': '3.00', 'SD': '1.00' }); - const col2ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(2); + const col2ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(2); expect(col2ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '6.00', 'Median': '7.00', 'Mean': '7.00', 'Max': '8.00', 'SD': '1.00' }); - const col3ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(3); + const col3ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(3); expect(col3ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '2020-01-02', 'Median': '2021-03-04', 'Max': '2022-05-06' }); - const col4ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(4); + const col4ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(4); expect(col4ProfileInfo.profileData).toStrictEqual({ 'Missing': '1', 'Min': '2.00', 'Median': '2.50', 'Mean': '2.50', 'Max': '3.00', 'SD': '0.7071' }); - const col5ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(5); + const col5ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(5); expect(col5ProfileInfo.profileData).toStrictEqual({ 'Missing': '1', 'Min': '0.5000', 'Median': '1.50', 'Mean': '1.50', 'Max': '2.50', 'SD': '1.41' }); - const col6ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(6); + const col6ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(6); expect(col6ProfileInfo.profileData).toStrictEqual({ 'Missing': '1', 'True': '1', 'False': '1' }); - await app.workbench.positronDataExplorer.collapseSummary(); + await app.workbench.dataExplorer.collapseSummary(); }); test('Python Polars - Add Simple Column filter [C557557]', async function ({ app, python }) { const FILTER_PARAMS = ['foo', 'is not equal to', '1']; - await app.workbench.positronDataExplorer.addFilter(...FILTER_PARAMS as [string, string, string]); + await app.workbench.dataExplorer.addFilter(...FILTER_PARAMS as [string, string, string]); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]['foo']).toBe('2'); expect(tableData[1]['foo']).toBe('3'); @@ -97,11 +97,11 @@ test.describe('Data Explorer - Python Polars', { }); test('Python Polars - Add Simple Column Sort [C557561]', async function ({ app, python }) { - await app.workbench.positronDataExplorer.selectColumnMenuItem(1, 'Sort Descending'); + await app.workbench.dataExplorer.selectColumnMenuItem(1, 'Sort Descending'); let tableData; await expect(async () => { - tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]['foo']).toBe('3'); expect(tableData[1]['foo']).toBe('2'); @@ -112,10 +112,10 @@ test.describe('Data Explorer - Python Polars', { expect(tableData.length).toBe(2); }).toPass({ timeout: 60000 }); - await app.workbench.positronDataExplorer.clearSortingButton.click(); + await app.workbench.dataExplorer.clearSortingButton.click(); await expect(async () => { - tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]['foo']).toBe('2'); expect(tableData[1]['foo']).toBe('3'); diff --git a/test/e2e/areas/data-explorer/data-explorer-r.test.ts b/test/e2e/areas/data-explorer/data-explorer-r.test.ts index ee838ce8903..93abe3bc3a0 100644 --- a/test/e2e/areas/data-explorer/data-explorer-r.test.ts +++ b/test/e2e/areas/data-explorer/data-explorer-r.test.ts @@ -22,18 +22,18 @@ test.describe('Data Explorer - R ', { )`; logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('R', script, '>'); + await app.workbench.console.executeCode('R', script, '>'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('Data_Frame'); + await app.workbench.variables.doubleClickVariableRow('Data_Frame'); await app.code.driver.page.locator('.label-name:has-text("Data: Data_Frame")').innerText(); }).toPass(); - await app.workbench.positronDataExplorer.maximizeDataExplorer(true); + await app.workbench.dataExplorer.maximizeDataExplorer(true); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]).toStrictEqual({ 'Training': 'Strength', 'Pulse': '100.00', 'Duration': '60.00', 'Note': 'NA' }); expect(tableData[1]).toStrictEqual({ 'Training': 'Stamina', 'Pulse': 'NA', 'Duration': '30.00', 'Note': 'NA' }); @@ -47,32 +47,32 @@ test.describe('Data Explorer - R ', { test('R - Verifies basic data explorer column info functionality [C734265]', { tag: [tags.CRITICAL] }, async function ({ app, r }) { - await app.workbench.positronDataExplorer.expandSummary(); + await app.workbench.dataExplorer.expandSummary(); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(1)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(2)).toBe('33%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(3)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(4)).toBe('66%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(1)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(2)).toBe('33%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(3)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(4)).toBe('66%'); - await app.workbench.positronLayouts.enterLayout('notebook'); + await app.workbench.layouts.enterLayout('notebook'); - const col1ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(1); + const col1ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(1); expect(col1ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Empty': '0', 'Unique': '3' }); - const col2ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(2); + const col2ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(2); expect(col2ProfileInfo.profileData).toStrictEqual({ 'Missing': '1', 'Min': '100.00', 'Median': '110.00', 'Mean': '110.00', 'Max': '120.00', 'SD': '14.14' }); - const col3ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(3); + const col3ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(3); expect(col3ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '30.00', 'Median': '45.00', 'Mean': '45.00', 'Max': '60.00', 'SD': '15.00' }); - const col4ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(4); + const col4ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(4); expect(col4ProfileInfo.profileData).toStrictEqual({ 'Missing': '2', 'Empty': '0', 'Unique': '2' }); - await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.layouts.enterLayout('stacked'); + await app.workbench.sideBar.closeSecondarySideBar(); - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); }); @@ -82,38 +82,38 @@ test.describe('Data Explorer - R ', { // Regression test for https://github.com/posit-dev/positron/issues/4197 // and https://github.com/posit-dev/positron/issues/5714 const script = `Data_Frame <- mtcars`; - await app.workbench.positronConsole.executeCode('R', script, '>'); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.console.executeCode('R', script, '>'); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('Data_Frame'); + await app.workbench.variables.doubleClickVariableRow('Data_Frame'); await app.code.driver.page.locator('.label-name:has-text("Data: Data_Frame")').innerText(); }).toPass(); // Now move focus out of the the data explorer pane - await app.workbench.positronEditors.newUntitledFile(); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); - await app.workbench.positronVariables.doubleClickVariableRow('Data_Frame'); + await app.workbench.editors.newUntitledFile(); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.variables.doubleClickVariableRow('Data_Frame'); await expect(async () => { await app.code.driver.page.locator('.label-name:has-text("Data: Data_Frame")').innerText(); }).toPass(); - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronQuickaccess.runCommand('workbench.panel.positronVariables.focus'); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.quickaccess.runCommand('workbench.panel.positronVariables.focus'); }); test('R - Check blank spaces in data explorer [C1078834]', async function ({ app, r }) { const script = `df = data.frame(x = c("a ", "a", " ", ""))`; - await app.workbench.positronConsole.executeCode('R', script, '>'); + await app.workbench.console.executeCode('R', script, '>'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); await expect(async () => { - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); expect(tableData[0]).toStrictEqual({ 'x': 'a·' }); expect(tableData[1]).toStrictEqual({ 'x': 'a' }); diff --git a/test/e2e/areas/data-explorer/duckdb-sparklines.test.ts b/test/e2e/areas/data-explorer/duckdb-sparklines.test.ts index cddfe766dad..b08d5bd39ed 100644 --- a/test/e2e/areas/data-explorer/duckdb-sparklines.test.ts +++ b/test/e2e/areas/data-explorer/duckdb-sparklines.test.ts @@ -15,20 +15,20 @@ test.describe('Data Explorer - DuckDB Column Summary', { }, () => { test('Verifies basic duckdb column summary functionality [C1053635]', async function ({ app }) { - await app.workbench.positronQuickaccess.openDataFile(join(app.workspacePathOrFolder, 'data-files', '100x100', '100x100.parquet')); + await app.workbench.quickaccess.openDataFile(join(app.workspacePathOrFolder, 'data-files', '100x100', '100x100.parquet')); - await app.workbench.positronLayouts.enterLayout('notebook'); + await app.workbench.layouts.enterLayout('notebook'); await test.step('Verify some column missing percentages', async () => { - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(1)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(2)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(3)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(4)).toBe('0%'); - expect(await app.workbench.positronDataExplorer.getColumnMissingPercent(5)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(1)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(2)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(3)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(4)).toBe('0%'); + expect(await app.workbench.dataExplorer.getColumnMissingPercent(5)).toBe('0%'); }); await test.step('Verify some column profile info', async () => { - const col1ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(1); + const col1ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(1); expect(col1ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '0', @@ -39,7 +39,7 @@ test.describe('Data Explorer - DuckDB Column Summary', { }); expect(col1ProfileInfo.profileSparklineHeights).toStrictEqual(['50.0']); - const col2ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(2); + const col2ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(2); expect(col2ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Empty': '0', @@ -65,7 +65,7 @@ test.describe('Data Explorer - DuckDB Column Summary', { '50.0', ]); - const col3ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(3); + const col3ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(3); expect(col3ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'True': '46', @@ -73,7 +73,7 @@ test.describe('Data Explorer - DuckDB Column Summary', { }); expect(col3ProfileInfo.profileSparklineHeights).toStrictEqual(['50.0', '42.6']); - const col4ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(4); + const col4ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(4); expect(col4ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '-125', @@ -90,7 +90,7 @@ test.describe('Data Explorer - DuckDB Column Summary', { '0.0', ]); - const col5ProfileInfo = await app.workbench.positronDataExplorer.getColumnProfileInfo(5); + const col5ProfileInfo = await app.workbench.dataExplorer.getColumnProfileInfo(5); expect(col5ProfileInfo.profileData).toStrictEqual({ 'Missing': '0', 'Min': '-32403', @@ -108,11 +108,11 @@ test.describe('Data Explorer - DuckDB Column Summary', { ]); }); - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); await app.workbench.positronSideBar.closeSecondarySideBar(); - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronVariables.toggleVariablesView(); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.variables.toggleVariablesView(); }); }); diff --git a/test/e2e/areas/data-explorer/helpers/100x100.ts b/test/e2e/areas/data-explorer/helpers/100x100.ts index f50fa40292b..ad8f77b3028 100644 --- a/test/e2e/areas/data-explorer/helpers/100x100.ts +++ b/test/e2e/areas/data-explorer/helpers/100x100.ts @@ -18,7 +18,7 @@ export const testDataExplorer = async ( ): Promise => { // Execute commands. for (let i = 0; i < commands.length; i++) { - await app.workbench.positronConsole.executeCode( + await app.workbench.console.executeCode( language, commands[i], prompt @@ -27,15 +27,15 @@ export const testDataExplorer = async ( // Open the data frame. await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow(dataFrameName); + await app.workbench.variables.doubleClickVariableRow(dataFrameName); await app.code.driver.page.locator(`.label-name:has-text("Data: ${dataFrameName}")`).innerText(); }).toPass(); // Maximize the data explorer. - await app.workbench.positronDataExplorer.maximizeDataExplorer(); + await app.workbench.dataExplorer.maximizeDataExplorer(); // Drive focus into the data explorer. - await app.workbench.positronDataExplorer.clickUpperLeftCorner(); + await app.workbench.dataExplorer.clickUpperLeftCorner(); // Load the TSV file that is used to verify the data and split it into lines. const tsvFile = fs.readFileSync(tsvFilePath, { encoding: 'utf8' }); @@ -58,11 +58,11 @@ export const testDataExplorer = async ( */ const testRow = async (rowIndex: number) => { // Scroll to home and put the cursor there. - await app.workbench.positronDataExplorer.cmdCtrlHome(); + await app.workbench.dataExplorer.cmdCtrlHome(); // Navigate to the row under test. for (let i = 0; i < rowIndex; i++) { - await app.workbench.positronDataExplorer.arrowDown(); + await app.workbench.dataExplorer.arrowDown(); } // Test each cell in the row under test. @@ -88,7 +88,7 @@ export const testDataExplorer = async ( } // Move to the next cell. - await app.workbench.positronDataExplorer.arrowRight(); + await app.workbench.dataExplorer.arrowRight(); } }; @@ -99,7 +99,7 @@ export const testDataExplorer = async ( await testRow(tsvValues.length - 1); // Return to Stacked layout - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }; export const parquetFilePath = (app: Application) => { diff --git a/test/e2e/areas/data-explorer/large-data-frame.test.ts b/test/e2e/areas/data-explorer/large-data-frame.test.ts index 1e9e5e569f3..72a840438a8 100644 --- a/test/e2e/areas/data-explorer/large-data-frame.test.ts +++ b/test/e2e/areas/data-explorer/large-data-frame.test.ts @@ -18,20 +18,20 @@ test.describe('Data Explorer - Large Data Frame', { tag: [tags.CRITICAL, tags.WEB, tags.WIN, tags.DATA_EXPLORER] }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test.afterEach(async function ({ app }) { - await app.workbench.positronDataExplorer.closeDataExplorer(); + await app.workbench.dataExplorer.closeDataExplorer(); }); test('Python - Verifies data explorer functionality with large data frame [C557555]', async function ({ app, python, logger }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-py', 'flights-data-frame.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-py', 'flights-data-frame.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); expect(await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText() === 'Data: df'); }).toPass(); @@ -39,8 +39,8 @@ test.describe('Data Explorer - Large Data Frame', { await expect(async () => { // Validate full grid by checking bottom right corner data - await app.workbench.positronDataExplorer.clickLowerRightCorner(); - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.clickLowerRightCorner(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const lastRow = tableData.at(-1); const lastHour = lastRow!['time_hour']; expect(lastHour).toBe(LAST_CELL_CONTENTS); @@ -48,10 +48,10 @@ test.describe('Data Explorer - Large Data Frame', { await expect(async () => { // Filter data set - await app.workbench.positronDataExplorer.clickUpperLeftCorner(); - await app.workbench.positronDataExplorer.addFilter(...FILTER_PARAMS as [string, string, string]); + await app.workbench.dataExplorer.clickUpperLeftCorner(); + await app.workbench.dataExplorer.addFilter(...FILTER_PARAMS as [string, string, string]); - const statusBarText = await app.workbench.positronDataExplorer.getDataExplorerStatusBarText(); + const statusBarText = await app.workbench.dataExplorer.getDataExplorerStatusBarText(); expect(statusBarText).toBe(POST_FILTER_DATA_SUMMARY); }).toPass(); @@ -60,12 +60,12 @@ test.describe('Data Explorer - Large Data Frame', { test('R - Verifies data explorer functionality with large data frame [C557554]', { tag: [tags.WEB, tags.CRITICAL] }, async function ({ app, logger, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-r', 'flights-data-frame.r')); - await app.workbench.positronQuickaccess.runCommand('r.sourceCurrentFile'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-r', 'flights-data-frame.r')); + await app.workbench.quickaccess.runCommand('r.sourceCurrentFile'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df2'); + await app.workbench.variables.doubleClickVariableRow('df2'); expect(await app.code.driver.page.locator('.label-name:has-text("Data: df2")').innerText() === 'Data: df2'); }).toPass(); @@ -73,8 +73,8 @@ test.describe('Data Explorer - Large Data Frame', { await expect(async () => { // Validate full grid by checking bottom right corner data - await app.workbench.positronDataExplorer.clickLowerRightCorner(); - const tableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.clickLowerRightCorner(); + const tableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const lastRow = tableData.at(-1); const lastHour = lastRow!['time_hour']; expect(lastHour).toBe(LAST_CELL_CONTENTS); @@ -82,9 +82,9 @@ test.describe('Data Explorer - Large Data Frame', { await expect(async () => { // Filter data set - await app.workbench.positronDataExplorer.clickUpperLeftCorner(); - await app.workbench.positronDataExplorer.addFilter(...FILTER_PARAMS as [string, string, string]); - const statusBarText = await app.workbench.positronDataExplorer.getDataExplorerStatusBarText(); + await app.workbench.dataExplorer.clickUpperLeftCorner(); + await app.workbench.dataExplorer.addFilter(...FILTER_PARAMS as [string, string, string]); + const statusBarText = await app.workbench.dataExplorer.getDataExplorerStatusBarText(); expect(statusBarText).toBe(POST_FILTER_DATA_SUMMARY); }).toPass(); diff --git a/test/e2e/areas/data-explorer/sparklines.test.ts b/test/e2e/areas/data-explorer/sparklines.test.ts index 2eb9157a3bc..ea8b4478cca 100644 --- a/test/e2e/areas/data-explorer/sparklines.test.ts +++ b/test/e2e/areas/data-explorer/sparklines.test.ts @@ -15,22 +15,22 @@ test.describe('Data Explorer - Sparklines', { }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test.afterEach(async ({ app }) => { - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); }); test('Python Pandas - Verifies downward trending graph [C830552]', async ({ app, python }) => { - await app.workbench.positronConsole.executeCode('Python', pythonScript, '>>>'); + await app.workbench.console.executeCode('Python', pythonScript, '>>>'); await openDataExplorerColumnProfile(app, 'pythonData'); await verifyGraphBarHeights(app); }); test('R - Verifies downward trending graph [C830553]', async ({ app, r }) => { - await app.workbench.positronConsole.executeCode('R', rScript, '>'); + await app.workbench.console.executeCode('R', rScript, '>'); await openDataExplorerColumnProfile(app, 'rData'); await verifyGraphBarHeights(app); }); @@ -39,14 +39,14 @@ test.describe('Data Explorer - Sparklines', { async function openDataExplorerColumnProfile(app: Application, variableName: string) { await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow(variableName); + await app.workbench.variables.doubleClickVariableRow(variableName); await app.code.driver.page.locator(`.label-name:has-text("Data: ${variableName}")`).innerText(); }).toPass(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); await app.workbench.positronSideBar.closeSecondarySideBar(); - await app.workbench.positronDataExplorer.getDataExplorerTableData(); - await app.workbench.positronDataExplorer.expandColumnProfile(0); + await app.workbench.dataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.expandColumnProfile(0); } async function verifyGraphBarHeights(app: Application) { diff --git a/test/e2e/areas/data-explorer/very-large-data-frame.test.ts b/test/e2e/areas/data-explorer/very-large-data-frame.test.ts index 29829113038..d3ed5761b8c 100644 --- a/test/e2e/areas/data-explorer/very-large-data-frame.test.ts +++ b/test/e2e/areas/data-explorer/very-large-data-frame.test.ts @@ -34,27 +34,27 @@ test.describe('Data Explorer - Very Large Data Frame', { tag: [tags.WIN, tags.DA }); test.afterEach(async function ({ app }) { - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronVariables.toggleVariablesView(); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.variables.toggleVariablesView(); }); test.describe('Python Data Explorer (Very Large Data Frame)', () => { if (githubActions) { test('Python - Verifies data explorer functionality with very large unique data dataframe [C804823]', async function ({ app, logger, python }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'loadBigParquet.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'loadBigParquet.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); const startTime = performance.now(); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); // awaits table load completion - await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.getDataExplorerTableData(); const endTime = performance.now(); const timeTaken = endTime - startTime; @@ -67,20 +67,20 @@ test.describe('Data Explorer - Very Large Data Frame', { tag: [tags.WIN, tags.DA } else { test('Python - Verifies data explorer functionality with very large duplicated data dataframe [C807824]', async function ({ app, logger, python }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'multiplyParquet.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'multiplyParquet.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); const startTime = performance.now(); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df_large'); + await app.workbench.variables.doubleClickVariableRow('df_large'); await app.code.driver.page.locator('.label-name:has-text("Data: df_large")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); // awaits table load completion - await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.getDataExplorerTableData(); const endTime = performance.now(); const timeTaken = endTime - startTime; @@ -96,20 +96,20 @@ test.describe('Data Explorer - Very Large Data Frame', { tag: [tags.WIN, tags.DA test.describe('R Data Explorer (Very Large Data Frame)', () => { if (githubActions) { test('R - Verifies data explorer functionality with very large unique data dataframe [C804824]', async function ({ app, logger, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'loadBigParquet.r')); - await app.workbench.positronQuickaccess.runCommand('r.sourceCurrentFile'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'loadBigParquet.r')); + await app.workbench.quickaccess.runCommand('r.sourceCurrentFile'); const startTime = performance.now(); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df2'); + await app.workbench.variables.doubleClickVariableRow('df2'); await app.code.driver.page.locator('.label-name:has-text("Data: df2")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); // awaits table load completion - await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.getDataExplorerTableData(); const endTime = performance.now(); const timeTaken = endTime - startTime; @@ -122,20 +122,20 @@ test.describe('Data Explorer - Very Large Data Frame', { tag: [tags.WIN, tags.DA } else { test('R - Verifies data explorer functionality with very large duplicated data dataframe [C807825]', async function ({ app, logger, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'multiplyParquet.r')); - await app.workbench.positronQuickaccess.runCommand('r.sourceCurrentFile'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'performance', 'multiplyParquet.r')); + await app.workbench.quickaccess.runCommand('r.sourceCurrentFile'); const startTime = performance.now(); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df3_large'); + await app.workbench.variables.doubleClickVariableRow('df3_large'); await app.code.driver.page.locator('.label-name:has-text("Data: df3_large")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); // awaits table load completion - await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.getDataExplorerTableData(); const endTime = performance.now(); const timeTaken = endTime - startTime; diff --git a/test/e2e/areas/data-explorer/xlsx-data-frame.test.ts b/test/e2e/areas/data-explorer/xlsx-data-frame.test.ts index b0dcd92bd5f..f916e646a77 100644 --- a/test/e2e/areas/data-explorer/xlsx-data-frame.test.ts +++ b/test/e2e/areas/data-explorer/xlsx-data-frame.test.ts @@ -15,40 +15,40 @@ test.describe('Data Explorer - XLSX', { }, () => { test.afterEach(async function ({ app }) { - await app.workbench.positronDataExplorer.closeDataExplorer(); - await app.workbench.positronVariables.toggleVariablesView(); + await app.workbench.dataExplorer.closeDataExplorer(); + await app.workbench.variables.toggleVariablesView(); }); test('Python - Verifies data explorer functionality with XLSX input [C632940]', async function ({ app, python, logger }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'read-xlsx-py', 'supermarket-sales.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'read-xlsx-py', 'supermarket-sales.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df'); + await app.workbench.variables.doubleClickVariableRow('df'); await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); await app.workbench.positronSideBar.closeSecondarySideBar(); - await app.workbench.positronDataExplorer.selectColumnMenuItem(1, 'Sort Descending'); - const visibleTableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.selectColumnMenuItem(1, 'Sort Descending'); + const visibleTableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const firstRow = visibleTableData.at(0); expect(firstRow!['Invoice ID']).toBe('898-04-2717'); }); test('R - Verifies data explorer functionality with XLSX input [C632941]', async function ({ app, r, logger }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'read-xlsx-r', 'supermarket-sales.r')); - await app.workbench.positronQuickaccess.runCommand('r.sourceCurrentFile'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'read-xlsx-r', 'supermarket-sales.r')); + await app.workbench.quickaccess.runCommand('r.sourceCurrentFile'); logger.log('Opening data grid'); await expect(async () => { - await app.workbench.positronVariables.doubleClickVariableRow('df2'); + await app.workbench.variables.doubleClickVariableRow('df2'); await app.code.driver.page.locator('.label-name:has-text("Data: df2")').innerText(); }).toPass(); await app.workbench.positronSideBar.closeSecondarySideBar(); - await app.workbench.positronDataExplorer.selectColumnMenuItem(1, 'Sort Descending'); - const visibleTableData = await app.workbench.positronDataExplorer.getDataExplorerTableData(); + await app.workbench.dataExplorer.selectColumnMenuItem(1, 'Sort Descending'); + const visibleTableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const firstRow = visibleTableData.at(0); expect(firstRow!['Invoice ID']).toBe('898-04-2717'); }); diff --git a/test/e2e/areas/editor/fast-execution.test.ts b/test/e2e/areas/editor/fast-execution.test.ts index 8ddedbb7352..5da516a6f5a 100644 --- a/test/e2e/areas/editor/fast-execution.test.ts +++ b/test/e2e/areas/editor/fast-execution.test.ts @@ -14,7 +14,7 @@ const FILENAME = 'fast-execution.r'; test.describe('R Fast Execution', { tag: [tags.WEB, tags.EDITOR, tags.WIN] }, () => { test('Verify fast execution is not out of order [C712539]', async function ({ app, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'fast-statement-execution', FILENAME)); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'fast-statement-execution', FILENAME)); let previousTop = -1; @@ -22,7 +22,7 @@ test.describe('R Fast Execution', { tag: [tags.WEB, tags.EDITOR, tags.WIN] }, () // file fast-execution.r is 10 lines. We want to be sure to send a Control+Enter // for every line of the file for (let i = 0; i < 10; i++) { - let currentTop = await app.workbench.positronEditor.getCurrentLineTop(); + let currentTop = await app.workbench.editor.getCurrentLineTop(); let retries = 20; // Note that top is a measurement of the distance from the top of the editor @@ -31,7 +31,7 @@ test.describe('R Fast Execution', { tag: [tags.WEB, tags.EDITOR, tags.WIN] }, () // would send Control+Enter many times to the first line of the file and not // perform the desired test. while (currentTop === previousTop && retries > 0) { - currentTop = await app.workbench.positronEditor.getCurrentLineTop(); + currentTop = await app.workbench.editor.getCurrentLineTop(); retries--; } @@ -40,9 +40,9 @@ test.describe('R Fast Execution', { tag: [tags.WEB, tags.EDITOR, tags.WIN] }, () await app.code.driver.getKeyboard().press('Control+Enter'); } - await app.workbench.positronVariables.waitForVariableRow('c'); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - const variablesMap = await app.workbench.positronVariables.getFlatVariables(); + await app.workbench.variables.waitForVariableRow('c'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + const variablesMap = await app.workbench.variables.getFlatVariables(); expect(variablesMap.get('x')).toStrictEqual({ value: '1', type: 'dbl' }); expect(variablesMap.get('y')).toStrictEqual({ value: '1', type: 'dbl' }); diff --git a/test/e2e/areas/help/f1.test.ts b/test/e2e/areas/help/f1.test.ts index 26d747be2f9..7a823e762db 100644 --- a/test/e2e/areas/help/f1.test.ts +++ b/test/e2e/areas/help/f1.test.ts @@ -16,51 +16,51 @@ test.describe('F1 Help', { }, () => { test.afterEach(async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); }); test('R - Verifies basic F1 console help functionality [C1018854]', async function ({ app, page, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-r', 'flights-data-frame.r')); - await app.workbench.positronQuickaccess.runCommand('r.sourceCurrentFile'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-r', 'flights-data-frame.r')); + await app.workbench.quickaccess.runCommand('r.sourceCurrentFile'); - await app.workbench.positronConsole.pasteCodeToConsole('colnames(df2)'); - await app.workbench.positronConsole.doubleClickConsoleText('colnames'); + await app.workbench.console.pasteCodeToConsole('colnames(df2)'); + await app.workbench.console.doubleClickConsoleText('colnames'); await page.keyboard.press('F1'); await expect(async () => { - const helpFrame = await app.workbench.positronHelp.getHelpFrame(0); + const helpFrame = await app.workbench.help.getHelpFrame(0); await expect(helpFrame.locator('body')).toContainText('Row and Column Names', { timeout: 30000 }); }).toPass({ timeout: 30000 }); }); test('R - Verifies basic F1 editor help functionality [C1062994]', async function ({ app, page, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'generate-data-frames-r', 'generate-data-frames.r')); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'generate-data-frames-r', 'generate-data-frames.r')); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); await app.code.driver.page.locator('span').filter({ hasText: 'colnames(df) <- paste0(\'col\', 1:num_cols)' }).locator('span').first().dblclick(); await page.keyboard.press('F1'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); await expect(async () => { - const helpFrame = await app.workbench.positronHelp.getHelpFrame(0); + const helpFrame = await app.workbench.help.getHelpFrame(0); await expect(helpFrame.locator('h2').first()).toContainText('Row and Column Names', { timeout: 30000 }); }).toPass({ timeout: 30000 }); }); test('R - Verifies basic F1 notebook help functionality [C1062996]', async function ({ app, page, r }) { - await app.workbench.positronQuickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'large_r_notebook', 'spotify.ipynb')); + await app.workbench.quickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'large_r_notebook', 'spotify.ipynb')); // workaround - await app.workbench.positronNotebooks.selectInterpreter('R Environments', process.env.POSITRON_R_VER_SEL!); + await app.workbench.notebooks.selectInterpreter('R Environments', process.env.POSITRON_R_VER_SEL!); await app.code.driver.page.locator('span').filter({ hasText: 'options(digits = 2)' }).locator('span').first().dblclick(); @@ -68,7 +68,7 @@ test.describe('F1 Help', { await page.keyboard.press('F1'); // Note that we are getting help frame 1 instead of 0 because the notebook structure matches the same locators as help - const helpFrame = await app.workbench.positronHelp.getHelpFrame(1); + const helpFrame = await app.workbench.help.getHelpFrame(1); await expect(helpFrame.locator('h2').first()).toContainText('Options Settings', { timeout: 2000 }); }).toPass({ timeout: 30000 }); @@ -76,46 +76,46 @@ test.describe('F1 Help', { }); test('Python - Verifies basic F1 console help functionality [C1062993]', async function ({ app, page, python }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-py', 'flights-data-frame.py')); - await app.workbench.positronQuickaccess.runCommand('python.execInConsole'); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'nyc-flights-data-py', 'flights-data-frame.py')); + await app.workbench.quickaccess.runCommand('python.execInConsole'); - await app.workbench.positronConsole.pasteCodeToConsole('list(df.columns)'); - await app.workbench.positronConsole.doubleClickConsoleText('list'); + await app.workbench.console.pasteCodeToConsole('list(df.columns)'); + await app.workbench.console.doubleClickConsoleText('list'); await page.keyboard.press('F1'); await expect(async () => { - const helpFrame = await app.workbench.positronHelp.getHelpFrame(0); + const helpFrame = await app.workbench.help.getHelpFrame(0); await expect(helpFrame.locator('p').first()).toContainText('Built-in mutable sequence.', { timeout: 30000 }); }).toPass({ timeout: 30000 }); }); test('Python - Verifies basic F1 editor help functionality [C1062995]', async function ({ app, page, python }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'generate-data-frames-py', 'generate-data-frames.py')); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'generate-data-frames-py', 'generate-data-frames.py')); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); await app.code.driver.page.locator('span').filter({ hasText: 'df = pd.DataFrame(data)' }).locator('span').first().dblclick(); await page.keyboard.press('F1'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); await expect(async () => { - const helpFrame = await app.workbench.positronHelp.getHelpFrame(0); + const helpFrame = await app.workbench.help.getHelpFrame(0); await expect(helpFrame.locator('h1').first()).toContainText('pandas.DataFrame', { timeout: 30000 }); }).toPass({ timeout: 30000 }); }); test('Python - Verifies basic F1 notebook help functionality [C1062997]', async function ({ app, page, python }) { - await app.workbench.positronQuickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'large_py_notebook', 'spotify.ipynb')); + await app.workbench.quickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'large_py_notebook', 'spotify.ipynb')); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); await app.code.driver.page.locator('span').filter({ hasText: 'warnings.filterwarnings(\'ignore\')' }).locator('span').first().dblclick(); // need to wait for notebook to be ready and cannot put this in retry loop as we are also @@ -124,13 +124,13 @@ test.describe('F1 Help', { await page.keyboard.press('F1'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); await expect(async () => { // Note that we are getting help frame 1 instead of 0 because the notbook structure matches the same locators as help - const helpFrame = await app.workbench.positronHelp.getHelpFrame(1); + const helpFrame = await app.workbench.help.getHelpFrame(1); await expect(helpFrame.locator('body').first()).toContainText('warnings.filterwarnings', { timeout: 2000 }); }).toPass({ timeout: 30000 }); diff --git a/test/e2e/areas/help/help.test.ts b/test/e2e/areas/help/help.test.ts index 0958a8d1fb0..ccb92abe91c 100644 --- a/test/e2e/areas/help/help.test.ts +++ b/test/e2e/areas/help/help.test.ts @@ -18,20 +18,20 @@ test.describe('Help', { tag: [tags.HELP] }, () => { }); test('Python - Verifies basic help functionality [C633814]', { tag: [tags.WIN] }, async function ({ app, python }) { - await app.workbench.positronConsole.executeCode('Python', `?load`, '>>>'); + await app.workbench.console.executeCode('Python', `?load`, '>>>'); await expect(async () => { - const helpFrame = await app.workbench.positronHelp.getHelpFrame(0); + const helpFrame = await app.workbench.help.getHelpFrame(0); await expect(helpFrame.locator('body')).toContainText('Load code into the current frontend.'); }).toPass(); }); test('R - Verifies basic help functionality [C633813]', { tag: [tags.WIN] }, async function ({ app, r }) { - await app.workbench.positronConsole.executeCode('R', `?load()`, '>'); + await app.workbench.console.executeCode('R', `?load()`, '>'); await expect(async () => { - const helpFrame = await app.workbench.positronHelp.getHelpFrame(1); + const helpFrame = await app.workbench.help.getHelpFrame(1); await expect(helpFrame.locator('body')).toContainText('Reload Saved Datasets'); }).toPass(); @@ -39,9 +39,9 @@ test.describe('Help', { tag: [tags.HELP] }, () => { test('Verifies help panel can be opened when empty and also can be resized smaller and remember resize height [C640934]', async function ({ app, logger }) { // Not running on windows as the size calculation is off for the resolution in CI - const positronHelp = app.workbench.positronHelp; - const helpContainerLocator = positronHelp.getHelpContainer(); - const helpPanelHeaderLocator = positronHelp.getHelpHeader(); + const help = app.workbench.help; + const helpContainerLocator = help.getHelpContainer(); + const helpPanelHeaderLocator = help.getHelpHeader(); const getHelpHeight = async () => (await helpContainerLocator.boundingBox())?.height ?? -1; // How close should our heights be? It's not totally clear why this isn't always @@ -50,7 +50,7 @@ test.describe('Help', { tag: [tags.HELP] }, () => { const sizePrecision = 5; // Enter layout with help pane docked in session panel - await app.workbench.positronLayouts.enterLayout('dockedHelp'); + await app.workbench.layouts.enterLayout('dockedHelp'); // Help panel starts collapsed thanks to the above command await expect(helpContainerLocator).not.toBeVisible(); @@ -69,7 +69,7 @@ test.describe('Help', { tag: [tags.HELP] }, () => { // We'll make it roughly two thirds the size of the original height const resize_delta = helpPanelHeight / 3; const expectedHeightAfterResize = helpPanelHeight - resize_delta; - await positronHelp.resizeHelpPanel({ y: resize_delta }); + await help.resizeHelpPanel({ y: resize_delta }); // Verify that the height has changed by the expected amount const helpPanelHeightAfter = await getHelpHeight(); diff --git a/test/e2e/areas/layouts/layouts.test.ts b/test/e2e/areas/layouts/layouts.test.ts index 9cb25bb6fc0..577fb5cc4b8 100644 --- a/test/e2e/areas/layouts/layouts.test.ts +++ b/test/e2e/areas/layouts/layouts.test.ts @@ -14,7 +14,7 @@ test.describe('Layouts', { tag: [tags.WEB, tags.LAYOUTS, tags.WIN] }, () => { test.describe('Stacked Layout', () => { test('Verify stacked layout puts stuff in appropriate places [C656294]', async function ({ app }) { - const layouts = app.workbench.positronLayouts; + const layouts = app.workbench.layouts; await app.code.driver.setViewportSize({ width: 1400, height: 1000 }); @@ -60,7 +60,7 @@ test.describe('Layouts', { tag: [tags.WEB, tags.LAYOUTS, tags.WIN] }, () => { test('Verify Side-by-side layout puts stuff in appropriate places [C656295]', async function ({ app }) { - const layouts = app.workbench.positronLayouts; + const layouts = app.workbench.layouts; // Enter layout with help pane docked in session panel await layouts.enterLayout('side_by_side'); @@ -102,7 +102,7 @@ test.describe('Layouts', { tag: [tags.WEB, tags.LAYOUTS, tags.WIN] }, () => { test('Verify notebook layout puts stuff in appropriate places [C656296]', async function ({ app }) { - const layouts = app.workbench.positronLayouts; + const layouts = app.workbench.layouts; // Enter layout with help pane docked in session panel await layouts.enterLayout('notebook'); diff --git a/test/e2e/areas/new-project-wizard/new-project-python.test.ts b/test/e2e/areas/new-project-wizard/new-project-python.test.ts index 2c35d30bdd8..a9890c7990e 100644 --- a/test/e2e/areas/new-project-wizard/new-project-python.test.ts +++ b/test/e2e/areas/new-project-wizard/new-project-python.test.ts @@ -11,7 +11,7 @@ test.use({ }); test.beforeEach(async function ({ app }) { - await app.workbench.positronConsole.waitForReadyOrNoInterpreter(); + await app.workbench.console.waitForReadyOrNoInterpreter(); }); // Not running conda test on windows becuase conda reeks havoc on selecting the correct python interpreter @@ -38,10 +38,10 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, expect(projectFiles).toContain('.conda'); }).toPass({ timeout: 50000 }); // The console should initialize without any prompts to install ipykernel - await expect(app.workbench.positronConsole.activeConsole.getByText('>>>')).toBeVisible({ timeout: 45000 }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await expect(app.workbench.console.activeConsole.getByText('>>>')).toBeVisible({ timeout: 45000 }); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); }); test('Create a new Venv environment [C627912]', { tag: [tags.CRITICAL, tags.WIN] }, async function ({ app, page }) { @@ -55,10 +55,10 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, await pw.navigate(ProjectWizardNavigateAction.CREATE); await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); await expect(page.getByRole('button', { name: `Explorer Section: ${defaultProjectName + projSuffix}` })).toBeVisible({ timeout: 20000 }); - await expect(app.workbench.positronConsole.activeConsole.getByText('>>>')).toBeVisible({ timeout: 100000 }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await expect(app.workbench.console.activeConsole.getByText('>>>')).toBeVisible({ timeout: 100000 }); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); }); test.skip('With ipykernel already installed [C609619]', { @@ -96,7 +96,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, await pw.navigate(ProjectWizardNavigateAction.CREATE); await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); await expect(page.getByRole('button', { name: `Explorer Section: ${defaultProjectName + projSuffix}` })).toBeVisible({ timeout: 20000 }); - await expect(app.workbench.positronConsole.activeConsole.getByText('>>>')).toBeVisible({ timeout: 90000 }); + await expect(app.workbench.console.activeConsole.getByText('>>>')).toBeVisible({ timeout: 90000 }); }); test('With ipykernel not already installed [C609617]', { @@ -112,9 +112,9 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, await app.workbench.positronInterpreterDropdown.getSelectedInterpreterInfo(); expect(interpreterInfo?.path).toBeDefined(); await app.workbench.positronInterpreterDropdown.closeInterpreterDropdown(); - await app.workbench.positronConsole.typeToConsole('pip uninstall -y ipykernel'); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('Successfully uninstalled ipykernel'); + await app.workbench.console.typeToConsole('pip uninstall -y ipykernel'); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('Successfully uninstalled ipykernel'); // Create a new Python project and use the selected python interpreter await pw.startNewProject(ProjectType.PYTHON_PROJECT); @@ -144,10 +144,10 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, // If ipykernel was successfully installed during the new project initialization, // the console should be ready without any prompts to install ipykernel - await expect(app.workbench.positronConsole.activeConsole.getByText('>>>')).toBeVisible({ timeout: 90000 }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await expect(app.workbench.console.activeConsole.getByText('>>>')).toBeVisible({ timeout: 90000 }); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); }); test('Default Python Project with git init [C674522]', { tag: [tags.CRITICAL, tags.WIN] }, async function ({ app, page }) { @@ -166,7 +166,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, // Open the new project in the current window and wait for the console to be ready await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); await expect(page.getByRole('button', { name: `Explorer Section: ${defaultProjectName + projSuffix}` })).toBeVisible({ timeout: 20000 }); - await expect(app.workbench.positronConsole.activeConsole.getByText('>>>')).toBeVisible({ timeout: 90000 }); + await expect(app.workbench.console.activeConsole.getByText('>>>')).toBeVisible({ timeout: 90000 }); // Verify git-related files are present await expect(async () => { @@ -178,9 +178,9 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, }).toPass({ timeout: 50000 }); // Git status should show that we're on the main branch - await app.workbench.positronTerminal.createTerminal(); - await app.workbench.positronTerminal.runCommandInTerminal('git status'); - await app.workbench.positronTerminal.waitForTerminalText('On branch main'); + await app.workbench.terminal.createTerminal(); + await app.workbench.terminal.runCommandInTerminal('git status'); + await app.workbench.terminal.waitForTerminalText('On branch main'); }); }); diff --git a/test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts b/test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts index 71f1bac33d5..099af805d05 100644 --- a/test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts +++ b/test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts @@ -11,8 +11,8 @@ test.use({ }); test.beforeEach(async function ({ app }) { - await app.workbench.positronConsole.waitForReadyOrNoInterpreter(); - await app.workbench.positronLayouts.enterLayout("stacked"); + await app.workbench.console.waitForReadyOrNoInterpreter(); + await app.workbench.layouts.enterLayout("stacked"); }); test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () => { @@ -29,9 +29,9 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.navigate(ProjectWizardNavigateAction.CREATE); await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); - await app.workbench.positronLayouts.enterLayout("fullSizedSidebar"); + await app.workbench.layouts.enterLayout("fullSizedSidebar"); await expect(app.code.driver.page.getByRole('button', { name: `Explorer Section: ${defaultProjectName + projSuffix}` })).toBeVisible({ timeout: 15000 }); - // NOTE: For completeness, we probably want to await app.workbench.positronConsole.waitForReady('>', 10000); + // NOTE: For completeness, we probably want to await app.workbench.console.waitForReady('>', 10000); // here, but it's timing out in CI, so it is not included for now. }); @@ -49,7 +49,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); // Interact with the modal to install renv - await app.workbench.positronPopups.installRenv(); + await app.workbench.popups.installRenv(); // If this test is running on a machine that is using Renv for the first time, we // may need to interact with the Console to allow the renv installation to complete @@ -57,11 +57,11 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = // You should either manually interact with the Console to proceed with the Renv // install or temporarily uncomment the code below to automate the interaction. - // await app.workbench.positronConsole.waitForConsoleContents('Do you want to proceed?') - // await app.workbench.positronConsole.typeToConsole('y'); - // await app.workbench.positronConsole.sendEnterKey(); + // await app.workbench.console.waitForConsoleContents('Do you want to proceed?') + // await app.workbench.console.typeToConsole('y'); + // await app.workbench.console.sendEnterKey(); - await app.workbench.positronLayouts.enterLayout("fullSizedSidebar"); + await app.workbench.layouts.enterLayout("fullSizedSidebar"); await expect(app.code.driver.page.getByRole('button', { name: 'Explorer Section: my-r-' })).toHaveText(defaultProjectName + projSuffix, { timeout: 15000 }); // Verify renv files are present await expect(async () => { @@ -71,7 +71,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = expect(projectFiles).toContain('renv.lock'); }).toPass({ timeout: 50000 }); // Verify that renv output in the console confirms no issues occurred - await app.workbench.positronConsole.waitForConsoleContents('renv activated'); + await app.workbench.console.waitForConsoleContents('renv activated'); }); test('R - Renv already installed [C656251]', { tag: [tags.WIN] }, async function ({ app }) { @@ -95,15 +95,15 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = expect(projectFiles).toContain('renv.lock'); }).toPass({ timeout: 100000 }); // Verify that renv output in the console confirms no issues occurred - await app.workbench.positronConsole.waitForConsoleContents('renv activated'); + await app.workbench.console.waitForConsoleContents('renv activated'); }); test('R - Cancel Renv install [C656252]', { tag: [tags.WIN] }, async function ({ app }) { const projSuffix = addRandomNumSuffix('_cancelRenvInstall'); const pw = app.workbench.positronNewProjectWizard; // Remove renv package so we are prompted to install it again - await app.workbench.positronConsole.executeCode('R', 'remove.packages("renv")', '>'); - await app.workbench.positronConsole.waitForConsoleContents(`Removing package`); + await app.workbench.console.executeCode('R', 'remove.packages("renv")', '>'); + await app.workbench.console.waitForConsoleContents(`Removing package`); // Create a new R project - select Renv but opt out of installing await pw.startNewProject(ProjectType.R_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); @@ -115,7 +115,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); await expect(app.code.driver.page.getByRole('button', { name: 'Explorer Section: my-r-' })).toHaveText(defaultProjectName + projSuffix, { timeout: 15000 }); // Interact with the modal to skip installing renv - await app.workbench.positronPopups.installRenv(false); + await app.workbench.popups.installRenv(false); // Verify renv files are **not** present await expect(async () => { const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); @@ -143,9 +143,9 @@ test.describe('Jupyter - New Project Wizard', () => { await pw.navigate(ProjectWizardNavigateAction.CREATE); await pw.currentOrNewWindowSelectionModal.currentWindowButton.click(); await app.code.driver.wait(10000); - await app.workbench.positronLayouts.enterLayout("fullSizedSidebar"); + await app.workbench.layouts.enterLayout("fullSizedSidebar"); await expect(app.code.driver.page.getByRole('button', { name: `Explorer Section: ${defaultProjectName + projSuffix}` })).toBeVisible({ timeout: 15000 }); - // NOTE: For completeness, we probably want to await app.workbench.positronConsole.waitForReady('>>>', 10000); + // NOTE: For completeness, we probably want to await app.workbench.console.waitForReady('>>>', 10000); // here, but it's timing out in CI, so it is not included for now. }); }); diff --git a/test/e2e/areas/notebook/notebook-create.test.ts b/test/e2e/areas/notebook/notebook-create.test.ts index 67e08566742..41381f6cfc7 100644 --- a/test/e2e/areas/notebook/notebook-create.test.ts +++ b/test/e2e/areas/notebook/notebook-create.test.ts @@ -14,55 +14,55 @@ test.describe('Notebooks', { }, () => { test.describe('Python Notebooks', () => { test.beforeEach(async function ({ app, python }) { - await app.workbench.positronLayouts.enterLayout('notebook'); - await app.workbench.positronNotebooks.createNewNotebook(); - await app.workbench.positronNotebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); + await app.workbench.layouts.enterLayout('notebook'); + await app.workbench.notebooks.createNewNotebook(); + await app.workbench.notebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); }); test.afterEach(async function ({ app }) { - await app.workbench.positronNotebooks.closeNotebookWithoutSaving(); + await app.workbench.notebooks.closeNotebookWithoutSaving(); }); test('Python - Basic notebook creation and execution (code) [C628631]', async function ({ app }) { - await app.workbench.positronNotebooks.addCodeToFirstCell('eval("8**2")'); - await app.workbench.positronNotebooks.executeCodeInCell(); - await app.workbench.positronNotebooks.assertCellOutput('64'); + await app.workbench.notebooks.addCodeToFirstCell('eval("8**2")'); + await app.workbench.notebooks.executeCodeInCell(); + await app.workbench.notebooks.assertCellOutput('64'); }); test('Python - Basic notebook creation and execution (markdown) [C628632]', async function ({ app }) { const randomText = Math.random().toString(36).substring(7); - await app.workbench.positronNotebooks.insertNotebookCell('markdown'); - await app.workbench.positronNotebooks.waitForTypeInEditor(`## ${randomText} `); - await app.workbench.positronNotebooks.stopEditingCell(); - await app.workbench.positronNotebooks.assertMarkdownText('h2', randomText); + await app.workbench.notebooks.insertNotebookCell('markdown'); + await app.workbench.notebooks.waitForTypeInEditor(`## ${randomText} `); + await app.workbench.notebooks.stopEditingCell(); + await app.workbench.notebooks.assertMarkdownText('h2', randomText); }); }); test.describe('R Notebooks', () => { test.beforeEach(async function ({ app, r }) { - await app.workbench.positronLayouts.enterLayout('notebook'); - await app.workbench.positronNotebooks.createNewNotebook(); - await app.workbench.positronNotebooks.selectInterpreter('R Environments', process.env.POSITRON_R_VER_SEL!); + await app.workbench.layouts.enterLayout('notebook'); + await app.workbench.notebooks.createNewNotebook(); + await app.workbench.notebooks.selectInterpreter('R Environments', process.env.POSITRON_R_VER_SEL!); }); test.afterEach(async function ({ app }) { - await app.workbench.positronNotebooks.closeNotebookWithoutSaving(); + await app.workbench.notebooks.closeNotebookWithoutSaving(); }); test('R - Basic notebook creation and execution (code) [C628629]', async function ({ app }) { - await app.workbench.positronNotebooks.addCodeToFirstCell('eval(parse(text="8**2"))'); - await app.workbench.positronNotebooks.executeCodeInCell(); - await app.workbench.positronNotebooks.assertCellOutput('[1] 64'); + await app.workbench.notebooks.addCodeToFirstCell('eval(parse(text="8**2"))'); + await app.workbench.notebooks.executeCodeInCell(); + await app.workbench.notebooks.assertCellOutput('[1] 64'); }); test('R - Basic notebook creation and execution (markdown) [C628630]', async function ({ app }) { const randomText = Math.random().toString(36).substring(7); - await app.workbench.positronNotebooks.insertNotebookCell('markdown'); - await app.workbench.positronNotebooks.waitForTypeInEditor(`## ${randomText} `); - await app.workbench.positronNotebooks.stopEditingCell(); - await app.workbench.positronNotebooks.assertMarkdownText('h2', randomText); + await app.workbench.notebooks.insertNotebookCell('markdown'); + await app.workbench.notebooks.waitForTypeInEditor(`## ${randomText} `); + await app.workbench.notebooks.stopEditingCell(); + await app.workbench.notebooks.assertMarkdownText('h2', randomText); }); }); }); diff --git a/test/e2e/areas/notebook/notebook-large-python.test.ts b/test/e2e/areas/notebook/notebook-large-python.test.ts index 34d0e45c252..3e977a0d615 100644 --- a/test/e2e/areas/notebook/notebook-large-python.test.ts +++ b/test/e2e/areas/notebook/notebook-large-python.test.ts @@ -18,15 +18,15 @@ test.describe('Large Python Notebook', { test('Python - Large notebook execution [C983592]', async function ({ app, python }) { test.setTimeout(480_000); // huge timeout because this is a heavy test - const notebooks = app.workbench.positronNotebooks; + const notebooks = app.workbench.notebooks; - await app.workbench.positronQuickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'large_py_notebook', 'spotify.ipynb')); + await app.workbench.quickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'large_py_notebook', 'spotify.ipynb')); await notebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); await notebooks.runAllCells(120000); - await app.workbench.positronQuickaccess.runCommand('notebook.focusTop'); + await app.workbench.quickaccess.runCommand('notebook.focusTop'); await app.code.driver.page.locator('span').filter({ hasText: 'import pandas as pd' }).locator('span').first().click(); const allFigures: any[] = []; @@ -41,7 +41,7 @@ test.describe('Large Python Notebook', { await app.code.driver.page.waitForTimeout(100); } - const figureLocator = app.workbench.positronNotebooks.frameLocator.locator('.plot-container'); + const figureLocator = app.workbench.notebooks.frameLocator.locator('.plot-container'); const figures = await figureLocator.all(); if (figures!.length > 0) { diff --git a/test/e2e/areas/outline/outline.test.ts b/test/e2e/areas/outline/outline.test.ts index 32551d3c1be..0f30ddcc898 100644 --- a/test/e2e/areas/outline/outline.test.ts +++ b/test/e2e/areas/outline/outline.test.ts @@ -15,7 +15,7 @@ test.describe('Outline #web #win', { }, () => { test('Python - Verify Outline Contents [C956870]', async function ({ app, python }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-py', 'chinook-sqlite.py')); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-py', 'chinook-sqlite.py')); const outlineData = await app.workbench.positronOutline.getOutlineData(); const expected = [ 'data_file_pathdata_file_path = os.path.join(os.getcwd(), \'data-files\', \'chinook\', \'chinook.db\')', @@ -33,7 +33,7 @@ test.describe('Outline #web #win', { }); test('R - Verify Outline Contents [C956871]', async function ({ app, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-r', 'chinook-sqlite.r')); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-r', 'chinook-sqlite.r')); const outlineData = await app.workbench.positronOutline.getOutlineData(); const expected = [ 'con', diff --git a/test/e2e/areas/output/console-ouput-log.test.ts b/test/e2e/areas/output/console-ouput-log.test.ts index ed682287f18..7bb6c604491 100644 --- a/test/e2e/areas/output/console-ouput-log.test.ts +++ b/test/e2e/areas/output/console-ouput-log.test.ts @@ -11,30 +11,30 @@ test.use({ test.describe('Console Output Log', { tag: [tags.WEB, tags.OUTPUT, tags.CONSOLE] }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test('Python - Verify Console Output Log Contents [C667518]', async function ({ app, python }) { - const activeConsole = app.workbench.positronConsole.activeConsole; + const activeConsole = app.workbench.console.activeConsole; await activeConsole.click(); - await app.workbench.positronConsole.typeToConsole('a = b'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.typeToConsole('a = b'); + await app.workbench.console.sendEnterKey(); await app.workbench.positronOutput.clickOutputTab(); - await app.workbench.positronLayouts.enterLayout('fullSizedPanel'); + await app.workbench.layouts.enterLayout('fullSizedPanel'); await app.workbench.positronOutput.waitForOutContaining("name 'b' is not defined"); }); test('R - Verify Console Output Log Contents [C667519]', async function ({ app, r }) { - const activeConsole = app.workbench.positronConsole.activeConsole; + const activeConsole = app.workbench.console.activeConsole; await activeConsole.click(); - await app.workbench.positronConsole.typeToConsole('a = b'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.typeToConsole('a = b'); + await app.workbench.console.sendEnterKey(); await app.workbench.positronOutput.clickOutputTab(); - await app.workbench.positronLayouts.enterLayout('fullSizedPanel'); + await app.workbench.layouts.enterLayout('fullSizedPanel'); await app.workbench.positronOutput.waitForOutContaining("object 'b' not found"); }); }); diff --git a/test/e2e/areas/plots/matplotlib-interact.test.ts b/test/e2e/areas/plots/matplotlib-interact.test.ts index c07c7fa78e4..5b32c77de55 100644 --- a/test/e2e/areas/plots/matplotlib-interact.test.ts +++ b/test/e2e/areas/plots/matplotlib-interact.test.ts @@ -17,23 +17,23 @@ test.describe('Matplotlib Interact', { tag: [tags.PLOTS, tags.NOTEBOOK] }, () => tag: [tags.CRITICAL, tags.WEB, tags.WIN], }, async function ({ app, python }) { - const notebooks = app.workbench.positronNotebooks; + const notebooks = app.workbench.notebooks; - await app.workbench.positronQuickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'matplotlib', 'interact.ipynb')); + await app.workbench.quickaccess.openDataFile(join(app.workspacePathOrFolder, 'workspaces', 'matplotlib', 'interact.ipynb')); await notebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); await notebooks.runAllCells(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.togglePanel'); + await app.workbench.quickaccess.runCommand('workbench.action.togglePanel'); - const plotLocator = app.workbench.positronNotebooks.frameLocator.locator('.widget-output'); + const plotLocator = app.workbench.notebooks.frameLocator.locator('.widget-output'); const plotImageLocator = plotLocator.locator('img'); const imgSrcBefore = await plotImageLocator.getAttribute('src'); - const sliders = await app.workbench.positronNotebooks.frameLocator.locator('.slider-container .slider').all(); + const sliders = await app.workbench.notebooks.frameLocator.locator('.slider-container .slider').all(); for (const slider of sliders) { await slider.hover(); diff --git a/test/e2e/areas/plots/plots.test.ts b/test/e2e/areas/plots/plots.test.ts index e65f158b0ff..9b73bba29a2 100644 --- a/test/e2e/areas/plots/plots.test.ts +++ b/test/e2e/areas/plots/plots.test.ts @@ -30,13 +30,13 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { } await interpreter.set('Python'); - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test.afterEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronPlots.clearPlots(); - await app.workbench.positronPlots.waitForNoPlots(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + await app.workbench.plots.clearPlots(); + await app.workbench.plots.waitForNoPlots(); }); test('Python - Verifies basic plot functionality - Dynamic Plot [C608114]', { @@ -44,10 +44,10 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { }, async function ({ app, logger, headless, logsPath }, testInfo) { // modified snippet from https://www.geeksforgeeks.org/python-pandas-dataframe/ logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('Python', pythonDynamicPlot, '>>>'); - await app.workbench.positronPlots.waitForCurrentPlot(); + await app.workbench.console.executeCode('Python', pythonDynamicPlot, '>>>'); + await app.workbench.plots.waitForCurrentPlot(); - const buffer = await app.workbench.positronPlots.getCurrentPlotAsBuffer(); + const buffer = await app.workbench.plots.getCurrentPlotAsBuffer(); await compareImages({ app, buffer, @@ -57,36 +57,36 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { }); if (!headless) { - await app.workbench.positronPlots.copyCurrentPlotToClipboard(); + await app.workbench.plots.copyCurrentPlotToClipboard(); - let clipboardImageBuffer = await app.workbench.positronClipboard.getClipboardImage(); + let clipboardImageBuffer = await app.workbench.clipboard.getClipboardImage(); expect(clipboardImageBuffer).not.toBeNull(); - await app.workbench.positronClipboard.clearClipboard(); - clipboardImageBuffer = await app.workbench.positronClipboard.getClipboardImage(); + await app.workbench.clipboard.clearClipboard(); + clipboardImageBuffer = await app.workbench.clipboard.getClipboardImage(); expect(clipboardImageBuffer).toBeNull(); } await test.step('Verify plot can be opened in editor', async () => { - await app.workbench.positronPlots.openPlotInEditor(); - await app.workbench.positronPlots.waitForPlotInEditor(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors'); + await app.workbench.plots.openPlotInEditor(); + await app.workbench.plots.waitForPlotInEditor(); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors'); }); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronPlots.clearPlots(); - await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronPlots.waitForNoPlots(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + await app.workbench.plots.clearPlots(); + await app.workbench.layouts.enterLayout('stacked'); + await app.workbench.plots.waitForNoPlots(); }); test('Python - Verifies basic plot functionality - Static Plot [C654401]', { tag: [tags.CRITICAL, tags.WEB, tags.WIN] }, async function ({ app, logger, logsPath }, testInfo) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('Python', pythonStaticPlot, '>>>'); - await app.workbench.positronPlots.waitForCurrentStaticPlot(); + await app.workbench.console.executeCode('Python', pythonStaticPlot, '>>>'); + await app.workbench.plots.waitForCurrentStaticPlot(); - const buffer = await app.workbench.positronPlots.getCurrentStaticPlotAsBuffer(); + const buffer = await app.workbench.plots.getCurrentStaticPlotAsBuffer(); await compareImages({ app, buffer, @@ -96,15 +96,15 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { }); await test.step('Verify plot can be opened in editor', async () => { - await app.workbench.positronPlots.openPlotInEditor(); - await app.workbench.positronPlots.waitForPlotInEditor(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors'); + await app.workbench.plots.openPlotInEditor(); + await app.workbench.plots.waitForPlotInEditor(); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors'); }); }); test('Python - Verifies the plots pane action bar - Plot actions [C656297]', { tag: [tags.WEB, tags.WIN] }, async function ({ app }) { - const plots = app.workbench.positronPlots; + const plots = app.workbench.plots; // default plot pane state for action bar await expect(plots.plotSizeButton).not.toBeVisible(); @@ -113,13 +113,13 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { await expect(plots.zoomPlotButton).not.toBeVisible(); // create plots separately so that the order is known - await app.workbench.positronConsole.executeCode('Python', pythonPlotActions1, '>>>'); + await app.workbench.console.executeCode('Python', pythonPlotActions1, '>>>'); await plots.waitForCurrentStaticPlot(); - await app.workbench.positronConsole.executeCode('Python', pythonPlotActions2, '>>>'); + await app.workbench.console.executeCode('Python', pythonPlotActions2, '>>>'); await plots.waitForCurrentPlot(); // expand the plot pane to show the action bar - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); await expect(plots.clearPlotsButton).not.toBeDisabled(); await expect(plots.nextPlotButton).toBeDisabled(); await expect(plots.previousPlotButton).not.toBeDisabled(); @@ -152,13 +152,13 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { test('Python - Verifies saving a Python plot [C557005]', { tag: [tags.WIN] }, async function ({ app, logger }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('Python', savePlot, '>>>'); - await app.workbench.positronPlots.waitForCurrentPlot(); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.console.executeCode('Python', savePlot, '>>>'); + await app.workbench.plots.waitForCurrentPlot(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronPlots.savePlot({ name: 'Python-scatter', format: 'JPEG' }); - await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronExplorer.waitForProjectFileToAppear('Python-scatter.jpeg'); + await app.workbench.plots.savePlot({ name: 'Python-scatter', format: 'JPEG' }); + await app.workbench.layouts.enterLayout('stacked'); + await app.workbench.explorer.waitForProjectFileToAppear('Python-scatter.jpeg'); }); test('Python - Verifies bqplot Python widget [C720869]', { tag: [tags.WEB, tags.WIN] }, async function ({ app }) { @@ -181,10 +181,10 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { await runScriptAndValidatePlot(app, ipytree, '.jstree-container-ul'); // fullauxbar layout needed for some smaller windows - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); // tree should be expanded by default - const treeNodes = app.workbench.positronPlots.getWebviewPlotLocator('.jstree-container-ul .jstree-node'); + const treeNodes = app.workbench.plots.getWebviewPlotLocator('.jstree-container-ul .jstree-node'); await expect(treeNodes).toHaveCount(9); // collapse the tree, only parent nodes should be visible @@ -193,34 +193,34 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { }); test('Python - Verifies ipywidget.Output Python widget', { tag: [tags.WEB, tags.WIN] }, async function ({ app }) { - await app.workbench.positronConsole.pasteCodeToConsole(ipywidgetOutput); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronPlots.waitForWebviewPlot('.widget-output', 'attached'); + await app.workbench.console.pasteCodeToConsole(ipywidgetOutput); + await app.workbench.console.sendEnterKey(); + await app.workbench.plots.waitForWebviewPlot('.widget-output', 'attached'); // Redirect a print statement to the Output widget. - await app.workbench.positronConsole.pasteCodeToConsole(`with output: + await app.workbench.console.pasteCodeToConsole(`with output: print('Hello, world!') `); // Empty line needed for the statement to be considered complete. - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronPlots.waitForWebviewPlot('.widget-output .jp-OutputArea-child'); + await app.workbench.console.sendEnterKey(); + await app.workbench.plots.waitForWebviewPlot('.widget-output .jp-OutputArea-child'); // The printed statement should not be shown in the console. - await app.workbench.positronConsole.waitForConsoleContents('Hello World', { expectedCount: 0 }); + await app.workbench.console.waitForConsoleContents('Hello World', { expectedCount: 0 }); }); test('Python - Verifies bokeh Python widget [C730343]', { tag: [tags.WEB, tags.WIN] }, async function ({ app }) { - await app.workbench.positronConsole.pasteCodeToConsole(bokeh); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole(bokeh); + await app.workbench.console.sendEnterKey(); // selector not factored out as it is unique to bokeh const bokehCanvas = '.bk-Canvas'; - await app.workbench.positronPlots.waitForWebviewPlot(bokehCanvas); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.plots.waitForWebviewPlot(bokehCanvas); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); // selector not factored out as it is unique to bokeh - await app.workbench.positronPlots.getWebviewPlotLocator('.bk-tool-icon-box-zoom').click(); - const canvasLocator = app.workbench.positronPlots.getWebviewPlotLocator(bokehCanvas); + await app.workbench.plots.getWebviewPlotLocator('.bk-tool-icon-box-zoom').click(); + const canvasLocator = app.workbench.plots.getWebviewPlotLocator(bokehCanvas); const boundingBox = await canvasLocator.boundingBox(); // plot capture before zoom @@ -257,24 +257,24 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { }); test.beforeEach(async function ({ app, interpreter }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); await interpreter.set('R'); }); test.afterEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronPlots.clearPlots(); - await app.workbench.positronPlots.waitForNoPlots(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + await app.workbench.plots.clearPlots(); + await app.workbench.plots.waitForNoPlots(); }); test('R - Verifies basic plot functionality [C628633]', { tag: [tags.CRITICAL, tags.WEB, tags.WIN] }, async function ({ app, logger, headless, logsPath }, testInfo) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('R', rBasicPlot, '>'); - await app.workbench.positronPlots.waitForCurrentPlot(); + await app.workbench.console.executeCode('R', rBasicPlot, '>'); + await app.workbench.plots.waitForCurrentPlot(); - const buffer = await app.workbench.positronPlots.getCurrentPlotAsBuffer(); + const buffer = await app.workbench.plots.getCurrentPlotAsBuffer(); await compareImages({ app, buffer, @@ -284,45 +284,45 @@ test.describe('Plots', { tag: [tags.PLOTS, tags.EDITOR] }, () => { }); if (!headless) { - await app.workbench.positronPlots.copyCurrentPlotToClipboard(); + await app.workbench.plots.copyCurrentPlotToClipboard(); - let clipboardImageBuffer = await app.workbench.positronClipboard.getClipboardImage(); + let clipboardImageBuffer = await app.workbench.clipboard.getClipboardImage(); expect(clipboardImageBuffer).not.toBeNull(); - await app.workbench.positronClipboard.clearClipboard(); - clipboardImageBuffer = await app.workbench.positronClipboard.getClipboardImage(); + await app.workbench.clipboard.clearClipboard(); + clipboardImageBuffer = await app.workbench.clipboard.getClipboardImage(); expect(clipboardImageBuffer).toBeNull(); } await test.step('Verify plot can be opened in editor', async () => { - await app.workbench.positronPlots.openPlotInEditor(); - await app.workbench.positronPlots.waitForPlotInEditor(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors'); + await app.workbench.plots.openPlotInEditor(); + await app.workbench.plots.waitForPlotInEditor(); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors'); }); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronPlots.clearPlots(); - await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronPlots.waitForNoPlots(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + await app.workbench.plots.clearPlots(); + await app.workbench.layouts.enterLayout('stacked'); + await app.workbench.plots.waitForNoPlots(); }); test('R - Verifies saving an R plot [C557006]', { tag: [tags.WIN] }, async function ({ app, logger }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('R', rSavePlot, '>'); - await app.workbench.positronPlots.waitForCurrentPlot(); + await app.workbench.console.executeCode('R', rSavePlot, '>'); + await app.workbench.plots.waitForCurrentPlot(); - await app.workbench.positronPlots.savePlot({ name: 'plot', format: 'PNG' }); - await app.workbench.positronExplorer.waitForProjectFileToAppear('plot.png'); + await app.workbench.plots.savePlot({ name: 'plot', format: 'PNG' }); + await app.workbench.explorer.waitForProjectFileToAppear('plot.png'); - await app.workbench.positronPlots.savePlot({ name: 'R-cars', format: 'SVG' }); - await app.workbench.positronExplorer.waitForProjectFileToAppear('R-cars.svg'); + await app.workbench.plots.savePlot({ name: 'R-cars', format: 'SVG' }); + await app.workbench.explorer.waitForProjectFileToAppear('R-cars.svg'); }); test('R - Verifies rplot plot [C720873]', { tag: [tags.WEB, tags.WIN] }, async function ({ app }) { - await app.workbench.positronConsole.pasteCodeToConsole(rplot); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronPlots.waitForCurrentPlot(); + await app.workbench.console.pasteCodeToConsole(rplot); + await app.workbench.console.sendEnterKey(); + await app.workbench.plots.waitForCurrentPlot(); }); test('R - Verifies highcharter plot [C720874]', { tag: [tags.WEB, tags.WIN] }, async function ({ app }) { @@ -356,10 +356,10 @@ const options: ComparisonOptions = { }; async function runScriptAndValidatePlot(app: Application, script: string, locator: string, RWeb = false) { - await app.workbench.positronConsole.pasteCodeToConsole(script); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - await app.workbench.positronPlots.waitForWebviewPlot(locator, 'visible', RWeb); + await app.workbench.console.pasteCodeToConsole(script); + await app.workbench.console.sendEnterKey(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + await app.workbench.plots.waitForWebviewPlot(locator, 'visible', RWeb); } async function compareImages({ @@ -385,7 +385,7 @@ async function compareImages({ } // Capture a new master image in CI - const newMaster = await app.workbench.positronPlots.currentPlot.screenshot(); + const newMaster = await app.workbench.plots.currentPlot.screenshot(); await testInfo.attach(masterScreenshotName, { body: newMaster, contentType: 'image/png' }); // Fail the test with mismatch details diff --git a/test/e2e/areas/quarto/quarto.test.ts b/test/e2e/areas/quarto/quarto.test.ts index eaf7f989535..679a8ec76f6 100644 --- a/test/e2e/areas/quarto/quarto.test.ts +++ b/test/e2e/areas/quarto/quarto.test.ts @@ -16,7 +16,7 @@ test.use({ test.describe('Quarto', { tag: [tags.WEB, tags.QUARTO] }, () => { test.beforeAll(async function ({ app, browserName }) { - await app.workbench.positronQuickaccess.openFile(path.join(app.workspacePathOrFolder, 'workspaces', 'quarto_basic', 'quarto_basic.qmd')); + await app.workbench.quickaccess.openFile(path.join(app.workspacePathOrFolder, 'workspaces', 'quarto_basic', 'quarto_basic.qmd')); isWeb = browserName === 'chromium'; }); @@ -45,8 +45,8 @@ test.describe('Quarto', { tag: [tags.WEB, tags.QUARTO] }, () => { }); test('should be able to generate preview [C842891]', async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('quarto.preview', { keepOpen: true }); - const viewerFrame = app.workbench.positronViewer.getViewerFrame().frameLocator('iframe'); + await app.workbench.quickaccess.runCommand('quarto.preview', { keepOpen: true }); + const viewerFrame = app.workbench.viewer.getViewerFrame().frameLocator('iframe'); // verify preview displays await expect(viewerFrame.locator('h1')).toHaveText('Diamond sizes', { timeout: 30000 }); @@ -56,8 +56,8 @@ test.describe('Quarto', { tag: [tags.WEB, tags.QUARTO] }, () => { const renderQuartoDocument = async (app: Application, fileExtension: string) => { await test.step(`render quarto document`, async () => { - await app.workbench.positronQuickaccess.runCommand('quarto.render.document', { keepOpen: true }); - await app.workbench.positronQuickInput.selectQuickInputElementContaining(fileExtension); + await app.workbench.quickaccess.runCommand('quarto.render.document', { keepOpen: true }); + await app.workbench.quickInput.selectQuickInputElementContaining(fileExtension); }); }; diff --git a/test/e2e/areas/r-markdown/r-markdown.test.ts b/test/e2e/areas/r-markdown/r-markdown.test.ts index 3966f94a7b2..833d3705e56 100644 --- a/test/e2e/areas/r-markdown/r-markdown.test.ts +++ b/test/e2e/areas/r-markdown/r-markdown.test.ts @@ -12,13 +12,13 @@ test.use({ test.describe('R Markdown', { tag: [tags.WEB, tags.R_MARKDOWN] }, () => { test('Render R Markdown [C680618]', async function ({ app, r }) { - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'basic-rmd-file', 'basicRmd.rmd')); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'basic-rmd-file', 'basicRmd.rmd')); // Sometimes running render too quickly fails, saying pandoc is not installed. // Using expect.toPass allows it to retry. await expect(async () => { - await app.workbench.positronQuickaccess.runCommand('r.rmarkdownRender'); - await app.workbench.positronTerminal.waitForTerminalText('Output created: basicRmd.html'); + await app.workbench.quickaccess.runCommand('r.rmarkdownRender'); + await app.workbench.terminal.waitForTerminalText('Output created: basicRmd.html'); }).toPass({ timeout: 80000 }); // Wrapped in expect.toPass to allow UI to update/render @@ -36,7 +36,7 @@ test.describe('R Markdown', { tag: [tags.WEB, tags.R_MARKDOWN] }, () => { // inner most frame has no useful identifying features // not factoring this locator because its not part of positron - const gettingStarted = app.workbench.positronViewer.getViewerFrame().frameLocator('iframe').locator('h2[data-anchor-id="getting-started"]'); + const gettingStarted = app.workbench.viewer.getViewerFrame().frameLocator('iframe').locator('h2[data-anchor-id="getting-started"]'); await expect(gettingStarted).toBeVisible({ timeout: 60000 }); await expect(gettingStarted).toHaveText('Getting started'); diff --git a/test/e2e/areas/r-pkg-development/r-pkg-development.test.ts b/test/e2e/areas/r-pkg-development/r-pkg-development.test.ts index 1c90977f33a..222fa9417f5 100644 --- a/test/e2e/areas/r-pkg-development/r-pkg-development.test.ts +++ b/test/e2e/areas/r-pkg-development/r-pkg-development.test.ts @@ -15,9 +15,9 @@ test.describe('R Package Development', { tag: [tags.WEB, tags.R_PKG_DEVELOPMENT] try { // don't use native file picker await userSettings.set([['files.simpleDialog.enable', 'true']]); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); } catch (e) { await app.code.driver.takeScreenshot('rPackageSetup'); throw e; @@ -30,46 +30,46 @@ test.describe('R Package Development', { tag: [tags.WEB, tags.R_PKG_DEVELOPMENT] await test.step('Open R Package', async () => { // Navigate to https://github.com/posit-dev/qa-example-content/tree/main/workspaces/r_testing // This is an R package embedded in qa-example-content - await app.workbench.positronQuickaccess.runCommand('workbench.action.files.openFolder', { keepOpen: true }); - await app.workbench.positronQuickInput.waitForQuickInputOpened(); - await app.workbench.positronQuickInput.type(path.join(app.workspacePathOrFolder, 'workspaces', 'r_testing')); - await app.workbench.positronQuickInput.clickOkOnQuickInput(); + await app.workbench.quickaccess.runCommand('workbench.action.files.openFolder', { keepOpen: true }); + await app.workbench.quickInput.waitForQuickInputOpened(); + await app.workbench.quickInput.type(path.join(app.workspacePathOrFolder, 'workspaces', 'r_testing')); + await app.workbench.quickInput.clickOkOnQuickInput(); // Wait for the console to be ready - await app.workbench.positronConsole.waitForReady('>', 45000); + await app.workbench.console.waitForReady('>', 45000); }); await test.step('Test R Package', async () => { logger.log('Test R Package'); - await app.workbench.positronQuickaccess.runCommand('r.packageTest'); + await app.workbench.quickaccess.runCommand('r.packageTest'); await expect(async () => { - await app.workbench.positronTerminal.waitForTerminalText('[ FAIL 1 | WARN 0 | SKIP 0 | PASS 16 ]'); - await app.workbench.positronTerminal.waitForTerminalText('Terminal will be reused by tasks'); + await app.workbench.terminal.waitForTerminalText('[ FAIL 1 | WARN 0 | SKIP 0 | PASS 16 ]'); + await app.workbench.terminal.waitForTerminalText('Terminal will be reused by tasks'); }).toPass({ timeout: 70000 }); }); await test.step('Check R Package', async () => { logger.log('Check R Package'); - await app.workbench.positronQuickaccess.runCommand('workbench.action.terminal.clear'); - await app.workbench.positronQuickaccess.runCommand('r.packageCheck'); + await app.workbench.quickaccess.runCommand('workbench.action.terminal.clear'); + await app.workbench.quickaccess.runCommand('r.packageCheck'); await expect(async () => { - await app.workbench.positronTerminal.waitForTerminalText('Error: R CMD check found ERRORs'); - await app.workbench.positronTerminal.waitForTerminalText('Terminal will be reused by tasks'); + await app.workbench.terminal.waitForTerminalText('Error: R CMD check found ERRORs'); + await app.workbench.terminal.waitForTerminalText('Terminal will be reused by tasks'); }).toPass({ timeout: 70000 }); }); await test.step('Install R Package and Restart R', async () => { logger.log('Install R Package and Restart R'); - await app.workbench.positronQuickaccess.runCommand('r.packageInstall'); + await app.workbench.quickaccess.runCommand('r.packageInstall'); // Appears very briefly and test misses it: - // await app.workbench.positronTerminal.waitForTerminalText('✔ Installed testfun 0.0.0.9000'); + // await app.workbench.terminal.waitForTerminalText('✔ Installed testfun 0.0.0.9000'); - await app.workbench.positronConsole.waitForConsoleContents('restarted', { timeout: 30000 }); - await app.workbench.positronConsole.waitForConsoleContents('library(testfun)'); + await app.workbench.console.waitForConsoleContents('restarted', { timeout: 30000 }); + await app.workbench.console.waitForConsoleContents('library(testfun)'); - await app.workbench.positronConsole.pasteCodeToConsole('(.packages())'); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronConsole.waitForConsoleContents('"testfun"'); + await app.workbench.console.pasteCodeToConsole('(.packages())'); + await app.workbench.console.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('"testfun"'); }); }); }); diff --git a/test/e2e/areas/reticulate/reticulate.test.ts b/test/e2e/areas/reticulate/reticulate.test.ts index 8b875f5934a..9cee32559a5 100644 --- a/test/e2e/areas/reticulate/reticulate.test.ts +++ b/test/e2e/areas/reticulate/reticulate.test.ts @@ -34,29 +34,29 @@ test.describe('Reticulate', { test('R - Verify Basic Reticulate Functionality [C...]', async function ({ app, r, interpreter }) { - await app.workbench.positronConsole.pasteCodeToConsole('reticulate::repl_python()'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole('reticulate::repl_python()'); + await app.workbench.console.sendEnterKey(); try { - await app.workbench.positronConsole.waitForConsoleContents('Yes/no/cancel'); - await app.workbench.positronConsole.typeToConsole('no'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.waitForConsoleContents('Yes/no/cancel'); + await app.workbench.console.typeToConsole('no'); + await app.workbench.console.sendEnterKey(); } catch { // Prompt did not appear } - await app.workbench.positronConsole.waitForReady('>>>'); - await app.workbench.positronConsole.pasteCodeToConsole('x=100'); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.waitForReady('>>>'); + await app.workbench.console.pasteCodeToConsole('x=100'); + await app.workbench.console.sendEnterKey(); await interpreter.set('R'); - await app.workbench.positronConsole.pasteCodeToConsole('y<-reticulate::py$x'); - await app.workbench.positronConsole.sendEnterKey(); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.console.pasteCodeToConsole('y<-reticulate::py$x'); + await app.workbench.console.sendEnterKey(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); await expect(async () => { - const variablesMap = await app.workbench.positronVariables.getFlatVariables(); + const variablesMap = await app.workbench.variables.getFlatVariables(); expect(variablesMap.get('y')).toStrictEqual({ value: '100', type: 'int' }); }).toPass({ timeout: 60000 }); diff --git a/test/e2e/areas/test-explorer/test-explorer.test.ts b/test/e2e/areas/test-explorer/test-explorer.test.ts index 2da569dc2df..764b6609e08 100644 --- a/test/e2e/areas/test-explorer/test-explorer.test.ts +++ b/test/e2e/areas/test-explorer/test-explorer.test.ts @@ -19,9 +19,9 @@ test.describe('Test Explorer', { tag: [tags.TEST_EXPLORER] }, () => { 'true', ]]); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); - await app.workbench.positronConsole.barClearButton.click(); - await app.workbench.positronQuickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); + await app.workbench.console.barClearButton.click(); + await app.workbench.quickaccess.runCommand('workbench.action.toggleAuxiliaryBar'); } catch (e) { await app.code.driver.takeScreenshot('testExplorerSetup'); throw e; @@ -32,29 +32,29 @@ test.describe('Test Explorer', { tag: [tags.TEST_EXPLORER] }, () => { await expect(async () => { // Navigate to https://github.com/posit-dev/qa-example-content/tree/main/workspaces/r_testing // This is an R package embedded in qa-example-content - await app.workbench.positronQuickaccess.runCommand('workbench.action.files.openFolder', { keepOpen: true }); - await app.workbench.positronQuickInput.waitForQuickInputOpened(); - await app.workbench.positronQuickInput.type(path.join(app.workspacePathOrFolder, 'workspaces', 'r_testing')); + await app.workbench.quickaccess.runCommand('workbench.action.files.openFolder', { keepOpen: true }); + await app.workbench.quickInput.waitForQuickInputOpened(); + await app.workbench.quickInput.type(path.join(app.workspacePathOrFolder, 'workspaces', 'r_testing')); // Had to add a positron class, because Microsoft did not have this: - await app.workbench.positronQuickInput.clickOkOnQuickInput(); + await app.workbench.quickInput.clickOkOnQuickInput(); // Wait for the console to be ready - await app.workbench.positronConsole.waitForReady('>', 10000); + await app.workbench.console.waitForReady('>', 10000); }).toPass({ timeout: 50000 }); await expect(async () => { - await app.workbench.positronTestExplorer.clickTestExplorerIcon(); + await app.workbench.testExplorer.clickTestExplorerIcon(); - const projectFiles = await app.workbench.positronTestExplorer.getTestExplorerFiles(); + const projectFiles = await app.workbench.testExplorer.getTestExplorerFiles(); // test-mathstuff.R is the last section of tests in https://github.com/posit-dev/qa-example-content/tree/main/workspaces/r_testing expect(projectFiles).toContain('test-mathstuff.R'); }).toPass({ timeout: 50000 }); - await app.workbench.positronTestExplorer.runAllTests(); + await app.workbench.testExplorer.runAllTests(); await expect(async () => { - const testResults = await app.workbench.positronTestExplorer.getTestResults(); + const testResults = await app.workbench.testExplorer.getTestResults(); expect(testResults[0].caseText).toBe('nothing really'); expect(testResults[0].status).toBe('fail'); diff --git a/test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts b/test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts index 5d84f4f0bc2..a3f8d8b6ae7 100644 --- a/test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts +++ b/test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts @@ -3,11 +3,8 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { - PositronConsole, - PositronInterpreterDropdown, -} from '../../../automation'; +import { InterpreterDropdown, Console } from '../../../automation'; import { test, expect, tags } from '../_test.setup'; test.use({ @@ -15,12 +12,12 @@ test.use({ }); test.describe.skip('Interpreter Dropdown in Top Action Bar', { tag: [tags.WEB, tags.TOP_ACTION_BAR] }, () => { - let interpreterDropdown: PositronInterpreterDropdown; - let positronConsole: PositronConsole; + let interpreterDropdown: InterpreterDropdown; + let console: Console; test.beforeAll(async function ({ app }) { - interpreterDropdown = app.workbench.positronInterpreterDropdown; - positronConsole = app.workbench.positronConsole; + interpreterDropdown = app.workbench.interpreterDropdown; + console = app.workbench.console; }); test('Python interpreter starts and shows running [C707212]', async function ({ app }) { @@ -34,12 +31,12 @@ test.describe.skip('Interpreter Dropdown in Top Action Bar', { tag: [tags.WEB, t ).toPass({ timeout: 30_000 }); // Install ipykernel if prompted - if (await app.workbench.positronPopups.popupCurrentlyOpen()) { - await app.workbench.positronPopups.installIPyKernel(); + if (await app.workbench.popups.popupCurrentlyOpen()) { + await app.workbench.popups.installIPyKernel(); } // Wait for the console to be ready - await positronConsole.waitForReady('>>>', 10_000); + await console.waitForReady('>>>', 10_000); // The interpreter selected in the dropdown matches the desired interpreter const interpreterInfo = @@ -69,11 +66,11 @@ test.describe.skip('Interpreter Dropdown in Top Action Bar', { tag: [tags.WEB, t await interpreterDropdown.closeInterpreterDropdown(); // The console should indicate that the interpreter is restarting - await positronConsole.waitForConsoleContents('preparing for restart'); - await positronConsole.waitForConsoleContents('restarted'); + await console.waitForConsoleContents('preparing for restart'); + await console.waitForConsoleContents('restarted'); // Wait for the console to be ready - await positronConsole.waitForReady('>>>', 10_000); + await console.waitForReady('>>>', 10_000); // The interpreter dropdown should show the expected running indicators await expect(async () => { @@ -98,7 +95,7 @@ test.describe.skip('Interpreter Dropdown in Top Action Bar', { tag: [tags.WEB, t await interpreterDropdown.closeInterpreterDropdown(); // Wait for the console to be ready - await positronConsole.waitForReady('>', 10_000); + await console.waitForReady('>', 10_000); // The interpreter selected in the dropdown matches the desired interpreter const interpreterInfo = @@ -133,7 +130,7 @@ test.describe.skip('Interpreter Dropdown in Top Action Bar', { tag: [tags.WEB, t await interpreterDropdown.closeInterpreterDropdown(); // The console should indicate that the interpreter is shutting down - await positronConsole.waitForInterpreterShutdown(); + await console.waitForInterpreterShutdown(); // The interpreter dropdown should no longer show the running indicators expect( diff --git a/test/e2e/areas/top-action-bar/top-action-bar-save.test.ts b/test/e2e/areas/top-action-bar/top-action-bar-save.test.ts index 0b6036a3abc..4f833485120 100644 --- a/test/e2e/areas/top-action-bar/top-action-bar-save.test.ts +++ b/test/e2e/areas/top-action-bar/top-action-bar-save.test.ts @@ -21,34 +21,34 @@ test.describe('Top Action Bar - Save Actions', { }); test('Save and Save All both disabled when no unsaved editors are open [C656253]', async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); await expect(async () => { - expect(await app.workbench.positronTopActionBar.saveButton.isDisabled()).toBeTruthy(); - expect(await app.workbench.positronTopActionBar.saveAllButton.isDisabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveButton.isDisabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveAllButton.isDisabled()).toBeTruthy(); }).toPass({ timeout: 20000 }); }); test('Save enabled and Save All disabled when a single unsaved file is open [C656254]', async function ({ app }) { const fileName = 'README.md'; - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, fileName)); - await app.workbench.positronQuickaccess.runCommand('workbench.action.keepEditor', { keepOpen: false }); - await app.workbench.positronEditors.selectTab(fileName); - await app.workbench.positronEditor.waitForTypeInEditor(fileName, 'Puppies frolicking in a meadow of wildflowers'); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, fileName)); + await app.workbench.quickaccess.runCommand('workbench.action.keepEditor', { keepOpen: false }); + await app.workbench.editors.selectTab(fileName); + await app.workbench.editor.waitForTypeInEditor(fileName, 'Puppies frolicking in a meadow of wildflowers'); // The file is now "dirty" and the save buttons should be enabled - await app.workbench.positronEditors.waitForTab(fileName, true); + await app.workbench.editors.waitForTab(fileName, true); await expect(async () => { - expect(await app.workbench.positronTopActionBar.saveButton.isEnabled()).toBeTruthy(); - expect(await app.workbench.positronTopActionBar.saveAllButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveAllButton.isEnabled()).toBeTruthy(); }).toPass({ timeout: 10000 }); - await app.workbench.positronTopActionBar.saveButton.click(); + await app.workbench.topActionBar.saveButton.click(); // The file is now saved, so the file should no longer be "dirty" - await app.workbench.positronEditors.waitForTab(fileName, false); + await app.workbench.editors.waitForTab(fileName, false); await expect(async () => { // The Save button stays enabled even when the active file is not "dirty" - expect(await app.workbench.positronTopActionBar.saveButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveButton.isEnabled()).toBeTruthy(); // The Save All button is disabled when less than 2 files are "dirty" - expect(await app.workbench.positronTopActionBar.saveAllButton.isDisabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveAllButton.isDisabled()).toBeTruthy(); }).toPass({ timeout: 10000 }); }); @@ -57,31 +57,31 @@ test.describe('Top Action Bar - Save Actions', { const fileName2 = 'DESCRIPTION'; const text = 'Kittens playing with yarn'; // Open two files and type in some text - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, fileName1)); - await app.workbench.positronQuickaccess.runCommand('workbench.action.keepEditor', { keepOpen: false }); - await app.workbench.positronQuickaccess.openFile(join(app.workspacePathOrFolder, fileName2)); - await app.workbench.positronQuickaccess.runCommand('workbench.action.keepEditor', { keepOpen: false }); - await app.workbench.positronEditors.selectTab(fileName1); - await app.workbench.positronEditor.waitForTypeInEditor(fileName1, text); - await app.workbench.positronEditors.selectTab(fileName2); - await app.workbench.positronEditor.waitForTypeInEditor(fileName2, text); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, fileName1)); + await app.workbench.quickaccess.runCommand('workbench.action.keepEditor', { keepOpen: false }); + await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, fileName2)); + await app.workbench.quickaccess.runCommand('workbench.action.keepEditor', { keepOpen: false }); + await app.workbench.editors.selectTab(fileName1); + await app.workbench.editor.waitForTypeInEditor(fileName1, text); + await app.workbench.editors.selectTab(fileName2); + await app.workbench.editor.waitForTypeInEditor(fileName2, text); // The files are now "dirty" and the save buttons should be enabled - await app.workbench.positronEditors.waitForTab(fileName1, true); - await app.workbench.positronEditors.waitForTab(fileName2, true); + await app.workbench.editors.waitForTab(fileName1, true); + await app.workbench.editors.waitForTab(fileName2, true); await expect(async () => { - expect(await app.workbench.positronTopActionBar.saveButton.isEnabled()).toBeTruthy(); - expect(await app.workbench.positronTopActionBar.saveAllButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveAllButton.isEnabled()).toBeTruthy(); }).toPass({ timeout: 10000 }); - await app.workbench.positronTopActionBar.saveAllButton.click(); + await app.workbench.topActionBar.saveAllButton.click(); // The files are now saved, so the files should no longer be "dirty" - await app.workbench.positronEditors.waitForTab(fileName1, false); - await app.workbench.positronEditors.waitForTab(fileName2, false); + await app.workbench.editors.waitForTab(fileName1, false); + await app.workbench.editors.waitForTab(fileName2, false); await expect(async () => { // The Save button stays enabled even when the active file is not "dirty" - expect(await app.workbench.positronTopActionBar.saveButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveButton.isEnabled()).toBeTruthy(); // The Save All button is disabled when less than 2 files are "dirty" - expect(await app.workbench.positronTopActionBar.saveAllButton.isDisabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveAllButton.isDisabled()).toBeTruthy(); }).toPass({ timeout: 10000 }); }); @@ -89,15 +89,15 @@ test.describe('Top Action Bar - Save Actions', { const fileName = 'Untitled-1'; const text = 'Bunnies hopping through a field of clover'; // Open a new file and type in some text - await app.workbench.positronQuickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); - await app.workbench.positronQuickaccess.runCommand('workbench.action.files.newUntitledFile', { keepOpen: false }); - await app.workbench.positronEditors.selectTab(fileName); - await app.workbench.positronEditor.waitForTypeInEditor(fileName, text); + await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors', { keepOpen: false }); + await app.workbench.quickaccess.runCommand('workbench.action.files.newUntitledFile', { keepOpen: false }); + await app.workbench.editors.selectTab(fileName); + await app.workbench.editor.waitForTypeInEditor(fileName, text); // The file is now "dirty" and the save buttons should be enabled - await app.workbench.positronEditors.waitForTab(fileName, true); + await app.workbench.editors.waitForTab(fileName, true); await expect(async () => { - expect(await app.workbench.positronTopActionBar.saveButton.isEnabled()).toBeTruthy(); - expect(await app.workbench.positronTopActionBar.saveAllButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveButton.isEnabled()).toBeTruthy(); + expect(await app.workbench.topActionBar.saveAllButton.isEnabled()).toBeTruthy(); }).toPass({ timeout: 10000 }); // We won't try to click the Save buttons because a system dialog will pop up and we // can't automate interactions with the native file dialog diff --git a/test/e2e/areas/variables/variables-expanded.test.ts b/test/e2e/areas/variables/variables-expanded.test.ts index a5b9548665e..b2fab9f1494 100644 --- a/test/e2e/areas/variables/variables-expanded.test.ts +++ b/test/e2e/areas/variables/variables-expanded.test.ts @@ -12,14 +12,14 @@ test.use({ test.describe('Variables - Expanded View', { tag: [tags.WEB, tags.VARIABLES] }, () => { test.afterEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test('Python - should display children values and types when variable is expanded [C1078836]', async function ({ app, python }) { - const variables = app.workbench.positronVariables; + const variables = app.workbench.variables; - await app.workbench.positronConsole.executeCode('Python', script, '>>>'); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.console.executeCode('Python', script, '>>>'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); await variables.expandVariable('df'); for (const variable of Object.keys(expectedData)) { @@ -29,18 +29,18 @@ test.describe('Variables - Expanded View', { tag: [tags.WEB, tags.VARIABLES] }, }); test('R - getting large dataframe children should not cause problems [C1078837]', async function ({ app, r }) { - const variables = app.workbench.positronVariables; + const variables = app.workbench.variables; // workaround for https://github.com/posit-dev/positron/issues/5718 - await app.workbench.positronPopups.closeAllToasts(); + await app.workbench.popups.closeAllToasts(); - await app.workbench.positronConsole.executeCode('R', 'df2 <- data.frame(b=rep(1:1000000))', '>'); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.console.executeCode('R', 'df2 <- data.frame(b=rep(1:1000000))', '>'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); await variables.expandVariable('df2'); const children = await variables.getVariableChildren('b', false); - await app.workbench.positronPopups.verifyToastDoesNotAppear(); + await app.workbench.popups.verifyToastDoesNotAppear(); const childrenArray = Object.values(children); diff --git a/test/e2e/areas/variables/variables-notebook.test.ts b/test/e2e/areas/variables/variables-notebook.test.ts index 5442e9ec4cd..6050455663d 100644 --- a/test/e2e/areas/variables/variables-notebook.test.ts +++ b/test/e2e/areas/variables/variables-notebook.test.ts @@ -10,49 +10,49 @@ test.use({ }); test.afterEach(async function ({ app }) { - await app.workbench.positronNotebooks.closeNotebookWithoutSaving(); - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.notebooks.closeNotebookWithoutSaving(); + await app.workbench.layouts.enterLayout('stacked'); }); test.describe('Variables Pane - Notebook', { tag: [tags.CRITICAL, tags.WEB, tags.VARIABLES, tags.NOTEBOOK] }, () => { test('Python - Verifies Variables pane basic function for notebook [C669188]', async function ({ app, python }) { - await app.workbench.positronNotebooks.createNewNotebook(); + await app.workbench.notebooks.createNewNotebook(); // workaround issue where starting multiple interpreters in quick succession can cause startup failure await app.code.wait(1000); - await app.workbench.positronNotebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); - await app.workbench.positronNotebooks.addCodeToFirstCell('y = [2, 3, 4, 5]'); - await app.workbench.positronNotebooks.executeCodeInCell(); + await app.workbench.notebooks.selectInterpreter('Python Environments', process.env.POSITRON_PY_VER_SEL!); + await app.workbench.notebooks.addCodeToFirstCell('y = [2, 3, 4, 5]'); + await app.workbench.notebooks.executeCodeInCell(); const filename = 'Untitled-1.ipynb'; - const interpreter = app.workbench.positronVariables.interpreterLocator; + const interpreter = app.workbench.variables.interpreterLocator; await expect(interpreter).toBeVisible(); await expect(interpreter).toHaveText(filename); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - const variablesMap = await app.workbench.positronVariables.getFlatVariables(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + const variablesMap = await app.workbench.variables.getFlatVariables(); expect(variablesMap.get('y')).toStrictEqual({ value: '[2, 3, 4, 5]', type: 'list [4]' }); }); test('R - Verifies Variables pane basic function for notebook [C669189]', async function ({ app, r }) { - await app.workbench.positronNotebooks.createNewNotebook(); + await app.workbench.notebooks.createNewNotebook(); - await app.workbench.positronNotebooks.selectInterpreter('R Environments', process.env.POSITRON_R_VER_SEL!); - await app.workbench.positronNotebooks.addCodeToFirstCell('y <- c(2, 3, 4, 5)'); - await app.workbench.positronNotebooks.executeCodeInCell(); + await app.workbench.notebooks.selectInterpreter('R Environments', process.env.POSITRON_R_VER_SEL!); + await app.workbench.notebooks.addCodeToFirstCell('y <- c(2, 3, 4, 5)'); + await app.workbench.notebooks.executeCodeInCell(); - const interpreter = app.workbench.positronVariables.interpreterLocator; + const interpreter = app.workbench.variables.interpreterLocator; await expect(interpreter).toBeVisible(); await expect(interpreter).toHaveText('Untitled-1.ipynb'); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); await expect(async () => { - const variablesMap = await app.workbench.positronVariables.getFlatVariables(); + const variablesMap = await app.workbench.variables.getFlatVariables(); expect(variablesMap.get('y')).toStrictEqual({ value: '2 3 4 5', type: 'dbl [4]' }); }).toPass({ timeout: 60000 }); }); diff --git a/test/e2e/areas/variables/variables-pane.test.ts b/test/e2e/areas/variables/variables-pane.test.ts index f988a771ac2..fc5a3d68b2f 100644 --- a/test/e2e/areas/variables/variables-pane.test.ts +++ b/test/e2e/areas/variables/variables-pane.test.ts @@ -13,12 +13,12 @@ test.describe('Variables Pane', { tag: [tags.WEB, tags.WIN, tags.CRITICAL, tags.VARIABLES] }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronLayouts.enterLayout('stacked'); + await app.workbench.layouts.enterLayout('stacked'); }); test('Python - Verifies Variables pane basic function [C628634]', async function ({ app, logger, python }) { const executeCode = async (code: string) => { - await app.workbench.positronConsole.executeCode('Python', code, '>>>'); + await app.workbench.console.executeCode('Python', code, '>>>'); }; await executeCode('x=1'); @@ -26,9 +26,9 @@ test.describe('Variables Pane', { await executeCode('z=100'); logger.log('Entered lines in console defining variables'); - await app.workbench.positronConsole.logConsoleContents(); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - const variablesMap = await app.workbench.positronVariables.getFlatVariables(); + await app.workbench.console.logConsoleContents(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + const variablesMap = await app.workbench.variables.getFlatVariables(); expect(variablesMap.get('x')).toStrictEqual({ value: '1', type: 'int' }); expect(variablesMap.get('y')).toStrictEqual({ value: '10', type: 'int' }); @@ -38,7 +38,7 @@ test.describe('Variables Pane', { test('R - Verifies Variables pane basic function [C628635]', async function ({ app, logger, r }) { const executeCode = async (code: string) => { - await app.workbench.positronConsole.executeCode('R', code, '>'); + await app.workbench.console.executeCode('R', code, '>'); }; await executeCode('x=1'); @@ -46,9 +46,9 @@ test.describe('Variables Pane', { await executeCode('z=100'); logger.log('Entered lines in console defining variables'); - await app.workbench.positronConsole.logConsoleContents(); - await app.workbench.positronLayouts.enterLayout('fullSizedAuxBar'); - const variablesMap = await app.workbench.positronVariables.getFlatVariables(); + await app.workbench.console.logConsoleContents(); + await app.workbench.layouts.enterLayout('fullSizedAuxBar'); + const variablesMap = await app.workbench.variables.getFlatVariables(); expect(variablesMap.get('x')).toStrictEqual({ value: '1', type: 'dbl' }); expect(variablesMap.get('y')).toStrictEqual({ value: '10', type: 'dbl' }); diff --git a/test/e2e/areas/viewer/viewer.test.ts b/test/e2e/areas/viewer/viewer.test.ts index c57863af404..76347c448fd 100644 --- a/test/e2e/areas/viewer/viewer.test.ts +++ b/test/e2e/areas/viewer/viewer.test.ts @@ -12,24 +12,24 @@ test.use({ test.describe('Viewer', { tag: [tags.VIEWER] }, () => { test.afterEach(async function ({ app }) { - await app.workbench.positronViewer.clearViewer(); + await app.workbench.viewer.clearViewer(); }); test.skip('Python - Verify Viewer functionality with vetiver [C784887]', { annotation: [{ type: 'issue', description: 'https://github.com/posit-dev/positron/issues/5569' }] }, async function ({ app, page, logger, python }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.pasteCodeToConsole(pythonScript); - await app.workbench.positronConsole.sendEnterKey(); - const theDoc = app.workbench.positronViewer.getViewerLocator('#thedoc'); + await app.workbench.console.pasteCodeToConsole(pythonScript); + await app.workbench.console.sendEnterKey(); + const theDoc = app.workbench.viewer.getViewerLocator('#thedoc'); await theDoc.waitFor({ state: 'attached', timeout: 60000 }); // This is bad because it can end up clicking a link inside the console: - //await app.workbench.positronConsole.activeConsole.click(); + //await app.workbench.console.activeConsole.click(); - await app.workbench.positronConsole.clickConsoleTab(); + await app.workbench.console.clickConsoleTab(); await page.keyboard.press('Control+C'); - await app.workbench.positronConsole.waitForConsoleContents('Application shutdown complete.'); + await app.workbench.console.waitForConsoleContents('Application shutdown complete.'); }); // This randomly fails only in CI @@ -38,13 +38,13 @@ test.describe('Viewer', { tag: [tags.VIEWER] }, () => { // extra clean up - https://github.com/posit-dev/positron/issues/4604 // without this, on ubuntu, the Enter key send to the console // won't work because the pasted code is out of view - await app.workbench.positronConsole.barClearButton.click(); + await app.workbench.console.barClearButton.click(); logger.log('Sending code to console'); - await app.workbench.positronConsole.pasteCodeToConsole(pythonGreatTablesScript); - await app.workbench.positronConsole.sendEnterKey(); + await app.workbench.console.pasteCodeToConsole(pythonGreatTablesScript); + await app.workbench.console.sendEnterKey(); - const apricot = app.workbench.positronViewer.getViewerLocator('td').filter({ hasText: 'apricot' }); + const apricot = app.workbench.viewer.getViewerLocator('td').filter({ hasText: 'apricot' }); await apricot.waitFor({ state: 'attached', timeout: 60000 }); // Note that there is not a control to clear the viewer at this point @@ -53,8 +53,8 @@ test.describe('Viewer', { tag: [tags.VIEWER] }, () => { test('R - Verify Viewer functionality with modelsummary [C784889]', async function ({ app, logger, r }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('R', rModelSummaryScript, '>'); - const billDepthLocator = app.workbench.positronViewer.getViewerLocator('tr').filter({ hasText: 'bill_depth_mm' }); + await app.workbench.console.executeCode('R', rModelSummaryScript, '>'); + const billDepthLocator = app.workbench.viewer.getViewerLocator('tr').filter({ hasText: 'bill_depth_mm' }); await billDepthLocator.waitFor({ state: 'attached' }); }); @@ -62,9 +62,9 @@ test.describe('Viewer', { tag: [tags.VIEWER] }, () => { test('R - Verify Viewer functionality with reactable [C784930]', async function ({ app, logger, r }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('R', rReactableScript, '>'); + await app.workbench.console.executeCode('R', rReactableScript, '>'); - const datsun710 = app.workbench.positronViewer.getViewerLocator('div.rt-td-inner').filter({ hasText: 'Datsun 710' }); + const datsun710 = app.workbench.viewer.getViewerLocator('div.rt-td-inner').filter({ hasText: 'Datsun 710' }); await datsun710.waitFor({ state: 'attached' }); @@ -73,9 +73,9 @@ test.describe('Viewer', { tag: [tags.VIEWER] }, () => { test('R - Verify Viewer functionality with reprex [C784931]', async function ({ app, logger, r }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.executeCode('R', rReprexScript, '>'); + await app.workbench.console.executeCode('R', rReprexScript, '>'); - const rnorm = app.workbench.positronViewer.getViewerLocator('code.sourceCode').filter({ hasText: 'x <- rnorm(100)' }); + const rnorm = app.workbench.viewer.getViewerLocator('code.sourceCode').filter({ hasText: 'x <- rnorm(100)' }); await rnorm.waitFor({ state: 'attached' }); diff --git a/test/e2e/areas/welcome/welcome.test.ts b/test/e2e/areas/welcome/welcome.test.ts index 64796d5a39b..da22089949b 100644 --- a/test/e2e/areas/welcome/welcome.test.ts +++ b/test/e2e/areas/welcome/welcome.test.ts @@ -11,22 +11,22 @@ test.use({ test.describe('Welcome Page', { tag: [tags.WELCOME] }, () => { test.beforeEach(async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('Help: Welcome'); + await app.workbench.quickaccess.runCommand('Help: Welcome'); }); test.afterEach(async function ({ app }) { - await app.workbench.positronQuickaccess.runCommand('View: Close All Editors'); + await app.workbench.quickaccess.runCommand('View: Close All Editors'); }); test.describe('General', () => { test('Verify Welcome page header and footer [C684750]', async function ({ app }) { - await expect(app.workbench.positronWelcome.logo).toBeVisible(); + await expect(app.workbench.welcome.logo).toBeVisible(); // product name in release is 'Positron' and in dev is 'Positron Dev' - await expect(app.workbench.positronWelcome.title).toHaveText([/(Positron)|(Positron Dev)/, 'an IDE for data science']); + await expect(app.workbench.welcome.title).toHaveText([/(Positron)|(Positron Dev)/, 'an IDE for data science']); - await expect(app.workbench.positronWelcome.footer).toHaveText('Show welcome page on startup'); + await expect(app.workbench.welcome.footer).toHaveText('Show welcome page on startup'); }); test('Verify Welcome page content [C610960]', async function ({ app }) { @@ -34,111 +34,111 @@ test.describe('Welcome Page', { tag: [tags.WELCOME] }, () => { ['Open...', 'New Folder...', 'New Folder from Git...'] : ['Open File...', 'Open Folder...', 'New Folder...', 'New Folder from Git...']; - await expect(app.workbench.positronWelcome.startTitle).toHaveText('Start'); + await expect(app.workbench.welcome.startTitle).toHaveText('Start'); - await expect(app.workbench.positronWelcome.startButtons).toHaveText(['New Notebook', 'New File', 'New Console', 'New Project']); + await expect(app.workbench.welcome.startButtons).toHaveText(['New Notebook', 'New File', 'New Console', 'New Project']); - await expect(app.workbench.positronWelcome.helpTitle).toHaveText('Help'); + await expect(app.workbench.welcome.helpTitle).toHaveText('Help'); - await expect(app.workbench.positronWelcome.helpLinks).toHaveText(['Positron Documentation', 'Positron Community', 'Report a bug']); + await expect(app.workbench.welcome.helpLinks).toHaveText(['Positron Documentation', 'Positron Community', 'Report a bug']); - await expect(app.workbench.positronWelcome.openTitle).toHaveText('Open'); + await expect(app.workbench.welcome.openTitle).toHaveText('Open'); - await expect(app.workbench.positronWelcome.openButtons).toHaveText(OPEN_BUTTONS_LABELS); + await expect(app.workbench.welcome.openButtons).toHaveText(OPEN_BUTTONS_LABELS); - await app.workbench.positronQuickaccess.runCommand('File: Clear Recently Opened...'); + await app.workbench.quickaccess.runCommand('File: Clear Recently Opened...'); - await expect(app.workbench.positronWelcome.recentTitle).toHaveText('Recent'); + await expect(app.workbench.welcome.recentTitle).toHaveText('Recent'); // 'open a folder' is a button so there is no character space because of its padding - await expect(app.workbench.positronWelcome.recentSection.locator('.empty-recent')).toHaveText('You have no recent folders,open a folderto start.'); + await expect(app.workbench.welcome.recentSection.locator('.empty-recent')).toHaveText('You have no recent folders,open a folderto start.'); }); test('Click on new project from the Welcome page [C684751]', async function ({ app }) { - await app.workbench.positronWelcome.newProjectButton.click(); - await app.workbench.positronPopups.popupCurrentlyOpen(); + await app.workbench.welcome.newProjectButton.click(); + await app.workbench.popups.popupCurrentlyOpen(); - await app.workbench.positronPopups.waitForModalDialogBox(); + await app.workbench.popups.waitForModalDialogBox(); // confirm New Project dialog box is open - await app.workbench.positronPopups.waitForModalDialogTitle('Create New Project'); + await app.workbench.popups.waitForModalDialogTitle('Create New Project'); - await app.workbench.positronPopups.clickCancelOnModalDialogBox(); + await app.workbench.popups.clickCancelOnModalDialogBox(); }); }); test.describe('Python', () => { test('Create a new Python file from the Welcome page [C684752]', async function ({ app, python }) { - await app.workbench.positronWelcome.newFileButton.click(); + await app.workbench.welcome.newFileButton.click(); - await app.workbench.positronQuickInput.selectQuickInputElementContaining('Python File'); + await app.workbench.quickInput.selectQuickInputElementContaining('Python File'); - await expect(app.workbench.positronEditors.activeEditor.locator(app.workbench.positronEditors.editorIcon)).toHaveClass(/python-lang-file-icon/); + await expect(app.workbench.editors.activeEditor.locator(app.workbench.editors.editorIcon)).toHaveClass(/python-lang-file-icon/); - await app.workbench.positronQuickaccess.runCommand('View: Close Editor'); + await app.workbench.quickaccess.runCommand('View: Close Editor'); }); test('Create a new Python notebook from the Welcome page [C684753]', async function ({ app, python }) { - await app.workbench.positronWelcome.newNotebookButton.click(); + await app.workbench.welcome.newNotebookButton.click(); - await app.workbench.positronPopups.clickOnModalDialogPopupOption('Python Notebook'); + await app.workbench.popups.clickOnModalDialogPopupOption('Python Notebook'); - await expect(app.workbench.positronEditors.activeEditor.locator(app.workbench.positronEditors.editorIcon)).toHaveClass(/ipynb-ext-file-icon/); + await expect(app.workbench.editors.activeEditor.locator(app.workbench.editors.editorIcon)).toHaveClass(/ipynb-ext-file-icon/); const expectedInterpreterVersion = new RegExp(`Python ${process.env.POSITRON_PY_VER_SEL}`, 'i'); - await expect(app.workbench.positronNotebooks.kernelLabel).toHaveText(expectedInterpreterVersion); + await expect(app.workbench.notebooks.kernelLabel).toHaveText(expectedInterpreterVersion); }); test('Click on Python console from the Welcome page [C684754]', async function ({ app, python }) { - await app.workbench.positronWelcome.newConsoleButton.click(); - await app.workbench.positronPopups.popupCurrentlyOpen(); + await app.workbench.welcome.newConsoleButton.click(); + await app.workbench.popups.popupCurrentlyOpen(); const expectedInterpreterVersion = new RegExp(`Python ${process.env.POSITRON_PY_VER_SEL}`, 'i'); - await app.workbench.positronPopups.clickOnModalDialogPopupOption(expectedInterpreterVersion); + await app.workbench.popups.clickOnModalDialogPopupOption(expectedInterpreterVersion); // editor is hidden because bottom panel is maximized - await expect(app.workbench.positronEditors.editorPart).not.toBeVisible(); + await expect(app.workbench.editors.editorPart).not.toBeVisible(); // console is the active view in the bottom panel - await expect(app.workbench.positronLayouts.panelViewsTab.and(app.code.driver.page.locator('.checked'))).toHaveText('Console'); + await expect(app.workbench.layouts.panelViewsTab.and(app.code.driver.page.locator('.checked'))).toHaveText('Console'); }); }); test.describe('R', () => { test('Create a new R file from the Welcome page [C684755]', async function ({ app, r }) { - await app.workbench.positronWelcome.newFileButton.click(); + await app.workbench.welcome.newFileButton.click(); - await app.workbench.positronQuickInput.selectQuickInputElementContaining('R File'); + await app.workbench.quickInput.selectQuickInputElementContaining('R File'); - await expect(app.workbench.positronEditors.activeEditor.locator(app.workbench.positronEditors.editorIcon)).toHaveClass(/r-lang-file-icon/); + await expect(app.workbench.editors.activeEditor.locator(app.workbench.editors.editorIcon)).toHaveClass(/r-lang-file-icon/); }); test('Click on R console from the Welcome page [C684756]', async function ({ app, r }) { - await app.workbench.positronWelcome.newConsoleButton.click(); - await app.workbench.positronPopups.popupCurrentlyOpen(); + await app.workbench.welcome.newConsoleButton.click(); + await app.workbench.popups.popupCurrentlyOpen(); const expectedInterpreterVersion = new RegExp(`R ${process.env.POSITRON_R_VER_SEL}`, 'i'); - await app.workbench.positronPopups.clickOnModalDialogPopupOption(expectedInterpreterVersion); + await app.workbench.popups.clickOnModalDialogPopupOption(expectedInterpreterVersion); // editor is hidden because bottom panel is maximized - await expect(app.workbench.positronEditors.editorPart).not.toBeVisible(); + await expect(app.workbench.editors.editorPart).not.toBeVisible(); // console is the active view in the bottom panel - await expect(app.workbench.positronLayouts.panelViewsTab.and(app.code.driver.page.locator('.checked'))).toHaveText('Console'); + await expect(app.workbench.layouts.panelViewsTab.and(app.code.driver.page.locator('.checked'))).toHaveText('Console'); }); test('Create a new R notebook from the Welcome page [C684757]', async function ({ app, r }) { - await app.workbench.positronWelcome.newNotebookButton.click(); + await app.workbench.welcome.newNotebookButton.click(); - await app.workbench.positronPopups.clickOnModalDialogPopupOption('R Notebook'); + await app.workbench.popups.clickOnModalDialogPopupOption('R Notebook'); - await expect(app.workbench.positronEditors.activeEditor.locator(app.workbench.positronEditors.editorIcon)).toHaveClass(/ipynb-ext-file-icon/); + await expect(app.workbench.editors.activeEditor.locator(app.workbench.editors.editorIcon)).toHaveClass(/ipynb-ext-file-icon/); const expectedInterpreterVersion = new RegExp(`R ${process.env.POSITRON_R_VER_SEL}`, 'i'); - await expect(app.workbench.positronNotebooks.kernelLabel).toHaveText(expectedInterpreterVersion); + await expect(app.workbench.notebooks.kernelLabel).toHaveText(expectedInterpreterVersion); }); }); }); From 22bc8ef359ca2ebdccb998b7d747a00114957bae Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 11:03:44 -0600 Subject: [PATCH 02/18] remove automation dir --- playwright.config.ts | 4 +- scripts/slack-skipped-tests.js | 2 +- test/automation/.gitignore | 8 - test/automation/.npmignore | 6 - test/automation/README.md | 3 - test/automation/package-lock.json | 2701 ----------------- test/automation/package.json | 35 - test/automation/src/index.ts | 55 - .../tools/copy-driver-definition.js | 34 - test/automation/tools/copy-package-version.js | 22 - test/automation/tsconfig.json | 22 - test/e2e/.yarnrc | 5 - test/e2e/README.md | 6 +- .../src => e2e/automation}/application.ts | 0 .../src => e2e/automation}/code.ts | 0 test/e2e/automation/driver.d.ts | 45 + .../src => e2e/automation}/electron.ts | 0 .../automation/fixtures/python.ts} | 8 +- .../automation/fixtures/r.ts} | 8 +- .../automation/fixtures/userSettings.ts} | 4 +- test/e2e/automation/index.ts | 45 + .../src => e2e/automation}/logger.ts | 0 .../automation}/playwrightBrowser.ts | 0 .../automation}/playwrightDriver.ts | 2 + .../automation}/playwrightElectron.ts | 0 .../src => e2e/automation}/processes.ts | 0 .../src => e2e/automation}/profiler.ts | 0 .../src => e2e/automation}/workbench.ts | 54 +- test/e2e/helpers/create-app.ts | 2 +- test/e2e/helpers/logger.ts | 2 +- test/e2e/helpers/test-setup.ts | 2 +- test/e2e/package-lock.json | 1554 ++++++++++ test/e2e/package.json | 4 +- .../src/positron => e2e/pages}/clipboard.ts | 2 +- .../src/positron => e2e/pages}/connections.ts | 2 +- .../src/positron => e2e/pages}/console.ts | 2 +- .../positron => e2e/pages}/dataExplorer.ts | 4 +- .../src/positron => e2e/pages}/editor.ts | 2 +- .../src/positron => e2e/pages}/editors.ts | 2 +- .../src/positron => e2e/pages}/explorer.ts | 2 +- .../src/positron => e2e/pages}/extensions.ts | 2 +- .../src/positron => e2e/pages}/help.ts | 2 +- .../pages}/interpreterDropdown.ts | 2 +- .../src/positron => e2e/pages}/layouts.ts | 4 +- .../pages}/newProjectWizard.ts | 2 +- .../src/positron => e2e/pages}/notebooks.ts | 2 +- .../src/positron => e2e/pages}/outline.ts | 2 +- .../src/positron => e2e/pages}/output.ts | 2 +- .../src/positron => e2e/pages}/plots.ts | 2 +- .../src/positron => e2e/pages}/popups.ts | 2 +- .../src/positron => e2e/pages}/quickInput.ts | 2 +- .../src/positron => e2e/pages}/quickaccess.ts | 2 +- .../src/positron => e2e/pages}/settings.ts | 2 +- .../src/positron => e2e/pages}/sideBar.ts | 2 +- .../src/positron => e2e/pages}/terminal.ts | 2 +- .../positron => e2e/pages}/testExplorer.ts | 0 .../positron => e2e/pages}/topActionBar.ts | 2 +- .../src/positron => e2e/pages}/utils/aws.ts | 0 .../pages}/utils/interpreterInfo.ts | 0 .../src/positron => e2e/pages}/variables.ts | 2 +- .../src/positron => e2e/pages}/viewer.ts | 2 +- .../src/positron => e2e/pages}/welcome.ts | 2 +- test/e2e/{areas => tests}/_global.setup.ts | 0 test/e2e/{areas => tests}/_test.setup.ts | 8 +- .../action-bar/editor-action-bar.test.ts | 2 +- .../{areas => tests}/apps/python-apps.test.ts | 0 test/e2e/{areas => tests}/apps/shiny.test.ts | 4 +- .../connections/connections-db.test.ts | 0 .../console/console-ansi.test.ts | 0 .../console/console-autocomplete.test.ts | 0 .../console/console-clipboard.test.ts | 2 +- .../console/console-history.test.ts | 2 +- .../console/console-input.test.ts | 0 .../console/console-output.test.ts | 0 .../console/console-python.test.ts | 0 .../console/console-r.test.ts | 0 .../data-explorer/100x100-pandas.test.ts | 0 .../data-explorer/100x100-polars.test.ts | 0 .../data-explorer/100x100-r.test.ts | 0 .../data-explorer-headless.test.ts | 2 +- .../data-explorer-python-pandas.test.ts | 0 .../data-explorer-python-polars.test.ts | 0 .../data-explorer/data-explorer-r.test.ts | 0 .../data-explorer/duckdb-sparklines.test.ts | 2 +- .../data-explorer/helpers/100x100.ts | 2 +- .../data-explorer/large-data-frame.test.ts | 4 +- .../data-explorer/sparklines.test.ts | 5 +- .../very-large-data-frame.test.ts | 2 +- .../data-explorer/xlsx-data-frame.test.ts | 4 +- .../editor/fast-execution.test.ts | 0 test/e2e/{areas => tests}/example.test.ts | 0 test/e2e/{areas => tests}/help/f1.test.ts | 0 test/e2e/{areas => tests}/help/help.test.ts | 0 .../{areas => tests}/layouts/layouts.test.ts | 0 .../new-project-python.test.ts | 28 +- .../new-project-r-jupyter.test.ts | 18 +- .../notebook/notebook-create.test.ts | 0 .../notebook/notebook-large-python.test.ts | 0 .../{areas => tests}/outline/outline.test.ts | 4 +- .../output/console-ouput-log.test.ts | 8 +- .../{areas => tests}/plots/autos-linux.png | Bin .../{areas => tests}/plots/autos-win32.png | Bin .../{areas => tests}/plots/graphviz-linux.png | Bin .../{areas => tests}/plots/graphviz-win32.png | Bin .../plots/matplotlib-interact.test.ts | 0 test/e2e/{areas => tests}/plots/plots.test.ts | 2 +- .../plots/pythonScatterplot-linux.png | Bin .../plots/pythonScatterplot-win32.png | Bin .../{areas => tests}/quarto/quarto.test.ts | 2 +- .../r-markdown/r-markdown.test.ts | 2 +- .../r-pkg-development.test.ts | 0 .../reticulate/reticulate.test.ts | 0 .../test-explorer/test-explorer.test.ts | 0 .../interpreter-dropdown.test.ts | 2 +- .../top-action-bar-save.test.ts | 0 .../variables/variables-expanded.test.ts | 0 .../variables/variables-notebook.test.ts | 0 .../variables/variables-pane.test.ts | 0 .../{areas => tests}/viewer/viewer.test.ts | 0 .../{areas => tests}/welcome/welcome.test.ts | 0 test/e2e/yarn.lock | 1968 ------------ 121 files changed, 1775 insertions(+), 4987 deletions(-) delete mode 100644 test/automation/.gitignore delete mode 100644 test/automation/.npmignore delete mode 100644 test/automation/README.md delete mode 100644 test/automation/package-lock.json delete mode 100644 test/automation/package.json delete mode 100644 test/automation/src/index.ts delete mode 100644 test/automation/tools/copy-driver-definition.js delete mode 100644 test/automation/tools/copy-package-version.js delete mode 100644 test/automation/tsconfig.json delete mode 100644 test/e2e/.yarnrc rename test/{automation/src => e2e/automation}/application.ts (100%) rename test/{automation/src => e2e/automation}/code.ts (100%) create mode 100644 test/e2e/automation/driver.d.ts rename test/{automation/src => e2e/automation}/electron.ts (100%) rename test/{automation/src/positron/fixtures/pythonFixtures.ts => e2e/automation/fixtures/python.ts} (91%) rename test/{automation/src/positron/fixtures/rFixtures.ts => e2e/automation/fixtures/r.ts} (87%) rename test/{automation/src/positron/fixtures/userSettingsFixtures.ts => e2e/automation/fixtures/userSettings.ts} (95%) create mode 100644 test/e2e/automation/index.ts rename test/{automation/src => e2e/automation}/logger.ts (100%) rename test/{automation/src => e2e/automation}/playwrightBrowser.ts (100%) rename test/{automation/src => e2e/automation}/playwrightDriver.ts (98%) rename test/{automation/src => e2e/automation}/playwrightElectron.ts (100%) rename test/{automation/src => e2e/automation}/processes.ts (100%) rename test/{automation/src => e2e/automation}/profiler.ts (100%) rename test/{automation/src => e2e/automation}/workbench.ts (68%) rename test/{automation/src/positron => e2e/pages}/clipboard.ts (97%) rename test/{automation/src/positron => e2e/pages}/connections.ts (98%) rename test/{automation/src/positron => e2e/pages}/console.ts (99%) rename test/{automation/src/positron => e2e/pages}/dataExplorer.ts (99%) rename test/{automation/src/positron => e2e/pages}/editor.ts (99%) rename test/{automation/src/positron => e2e/pages}/editors.ts (98%) rename test/{automation/src/positron => e2e/pages}/explorer.ts (97%) rename test/{automation/src/positron => e2e/pages}/extensions.ts (98%) rename test/{automation/src/positron => e2e/pages}/help.ts (97%) rename test/{automation/src/positron => e2e/pages}/interpreterDropdown.ts (99%) rename test/{automation/src/positron => e2e/pages}/layouts.ts (97%) rename test/{automation/src/positron => e2e/pages}/newProjectWizard.ts (99%) rename test/{automation/src/positron => e2e/pages}/notebooks.ts (99%) rename test/{automation/src/positron => e2e/pages}/outline.ts (97%) rename test/{automation/src/positron => e2e/pages}/output.ts (96%) rename test/{automation/src/positron => e2e/pages}/plots.ts (99%) rename test/{automation/src/positron => e2e/pages}/popups.ts (99%) rename test/{automation/src/positron => e2e/pages}/quickInput.ts (98%) rename test/{automation/src/positron => e2e/pages}/quickaccess.ts (99%) rename test/{automation/src/positron => e2e/pages}/settings.ts (97%) rename test/{automation/src/positron => e2e/pages}/sideBar.ts (94%) rename test/{automation/src/positron => e2e/pages}/terminal.ts (98%) rename test/{automation/src/positron => e2e/pages}/testExplorer.ts (100%) rename test/{automation/src/positron => e2e/pages}/topActionBar.ts (96%) rename test/{automation/src/positron => e2e/pages}/utils/aws.ts (100%) rename test/{automation/src/positron => e2e/pages}/utils/interpreterInfo.ts (100%) rename test/{automation/src/positron => e2e/pages}/variables.ts (99%) rename test/{automation/src/positron => e2e/pages}/viewer.ts (97%) rename test/{automation/src/positron => e2e/pages}/welcome.ts (97%) rename test/e2e/{areas => tests}/_global.setup.ts (100%) rename test/e2e/{areas => tests}/_test.setup.ts (97%) rename test/e2e/{areas => tests}/action-bar/editor-action-bar.test.ts (99%) rename test/e2e/{areas => tests}/apps/python-apps.test.ts (100%) rename test/e2e/{areas => tests}/apps/shiny.test.ts (93%) rename test/e2e/{areas => tests}/connections/connections-db.test.ts (100%) rename test/e2e/{areas => tests}/console/console-ansi.test.ts (100%) rename test/e2e/{areas => tests}/console/console-autocomplete.test.ts (100%) rename test/e2e/{areas => tests}/console/console-clipboard.test.ts (97%) rename test/e2e/{areas => tests}/console/console-history.test.ts (98%) rename test/e2e/{areas => tests}/console/console-input.test.ts (100%) rename test/e2e/{areas => tests}/console/console-output.test.ts (100%) rename test/e2e/{areas => tests}/console/console-python.test.ts (100%) rename test/e2e/{areas => tests}/console/console-r.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/100x100-pandas.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/100x100-polars.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/100x100-r.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/data-explorer-headless.test.ts (97%) rename test/e2e/{areas => tests}/data-explorer/data-explorer-python-pandas.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/data-explorer-python-polars.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/data-explorer-r.test.ts (100%) rename test/e2e/{areas => tests}/data-explorer/duckdb-sparklines.test.ts (98%) rename test/e2e/{areas => tests}/data-explorer/helpers/100x100.ts (98%) rename test/e2e/{areas => tests}/data-explorer/large-data-frame.test.ts (96%) rename test/e2e/{areas => tests}/data-explorer/sparklines.test.ts (96%) rename test/e2e/{areas => tests}/data-explorer/very-large-data-frame.test.ts (99%) rename test/e2e/{areas => tests}/data-explorer/xlsx-data-frame.test.ts (94%) rename test/e2e/{areas => tests}/editor/fast-execution.test.ts (100%) rename test/e2e/{areas => tests}/example.test.ts (100%) rename test/e2e/{areas => tests}/help/f1.test.ts (100%) rename test/e2e/{areas => tests}/help/help.test.ts (100%) rename test/e2e/{areas => tests}/layouts/layouts.test.ts (100%) rename test/e2e/{areas => tests}/new-project-wizard/new-project-python.test.ts (90%) rename test/e2e/{areas => tests}/new-project-wizard/new-project-r-jupyter.test.ts (93%) rename test/e2e/{areas => tests}/notebook/notebook-create.test.ts (100%) rename test/e2e/{areas => tests}/notebook/notebook-large-python.test.ts (100%) rename test/e2e/{areas => tests}/outline/outline.test.ts (91%) rename test/e2e/{areas => tests}/output/console-ouput-log.test.ts (82%) rename test/e2e/{areas => tests}/plots/autos-linux.png (100%) rename test/e2e/{areas => tests}/plots/autos-win32.png (100%) rename test/e2e/{areas => tests}/plots/graphviz-linux.png (100%) rename test/e2e/{areas => tests}/plots/graphviz-win32.png (100%) rename test/e2e/{areas => tests}/plots/matplotlib-interact.test.ts (100%) rename test/e2e/{areas => tests}/plots/plots.test.ts (99%) rename test/e2e/{areas => tests}/plots/pythonScatterplot-linux.png (100%) rename test/e2e/{areas => tests}/plots/pythonScatterplot-win32.png (100%) rename test/e2e/{areas => tests}/quarto/quarto.test.ts (98%) rename test/e2e/{areas => tests}/r-markdown/r-markdown.test.ts (95%) rename test/e2e/{areas => tests}/r-pkg-development/r-pkg-development.test.ts (100%) rename test/e2e/{areas => tests}/reticulate/reticulate.test.ts (100%) rename test/e2e/{areas => tests}/test-explorer/test-explorer.test.ts (100%) rename test/e2e/{areas => tests}/top-action-bar/interpreter-dropdown.test.ts (98%) rename test/e2e/{areas => tests}/top-action-bar/top-action-bar-save.test.ts (100%) rename test/e2e/{areas => tests}/variables/variables-expanded.test.ts (100%) rename test/e2e/{areas => tests}/variables/variables-notebook.test.ts (100%) rename test/e2e/{areas => tests}/variables/variables-pane.test.ts (100%) rename test/e2e/{areas => tests}/viewer/viewer.test.ts (100%) rename test/e2e/{areas => tests}/welcome/welcome.test.ts (100%) delete mode 100644 test/e2e/yarn.lock diff --git a/playwright.config.ts b/playwright.config.ts index 1d7b6bcf7e0..5fe53254bca 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { defineConfig } from '@playwright/test'; -import { CustomTestOptions } from './test/e2e/areas/_test.setup'; +import { CustomTestOptions } from './test/e2e/tests/_test.setup'; import type { GitHubActionOptions } from '@midleman/github-actions-reporter'; import { currentsReporter } from '@currents/playwright'; @@ -12,7 +12,7 @@ import { currentsReporter } from '@currents/playwright'; * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - globalSetup: './test/e2e/areas/_global.setup.ts', + globalSetup: './test/e2e/tests/_global.setup.ts', testDir: './test/e2e', testIgnore: '**/example.test.ts', testMatch: '*.test.ts', diff --git a/scripts/slack-skipped-tests.js b/scripts/slack-skipped-tests.js index 1dc2412d07a..b78bf00ee19 100644 --- a/scripts/slack-skipped-tests.js +++ b/scripts/slack-skipped-tests.js @@ -8,7 +8,7 @@ const { execSync } = require('child_process'); const slackSkippedTests = (slackWebhookUrl) => { try { const skippedTests = execSync( - `grep -r --include \\*.test.ts -E "describe\\.skip|test\\.skip" test/e2e/areas | sed 's/\\.test\\.ts.*$/.test.ts/'` + `grep -r --include \\*.test.ts -E "describe\\.skip|test\\.skip" test/e2e/tests | sed 's/\\.test\\.ts.*$/.test.ts/'` ).toString(); const slackMessage = { diff --git a/test/automation/.gitignore b/test/automation/.gitignore deleted file mode 100644 index dcb27225297..00000000000 --- a/test/automation/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.DS_Store -npm-debug.log -Thumbs.db -node_modules/ -out/ -keybindings.*.json -src/driver.d.ts -*.tgz diff --git a/test/automation/.npmignore b/test/automation/.npmignore deleted file mode 100644 index 356ab4ded89..00000000000 --- a/test/automation/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -!/out -/src -/tools -.gitignore -tsconfig.json -*.tgz diff --git a/test/automation/README.md b/test/automation/README.md deleted file mode 100644 index f33989f3412..00000000000 --- a/test/automation/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# VS Code Automation Package - -This package contains functionality for automating various components of the VS Code UI, via an automation "driver" that connects from a separate process. It is used by the `smoke` tests. diff --git a/test/automation/package-lock.json b/test/automation/package-lock.json deleted file mode 100644 index cd348d50974..00000000000 --- a/test/automation/package-lock.json +++ /dev/null @@ -1,2701 +0,0 @@ -{ - "name": "vscode-automation", - "version": "1.71.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "vscode-automation", - "version": "1.71.0", - "license": "MIT", - "dependencies": { - "@aws-sdk/client-s3": "^3.29.0", - "ncp": "^2.0.0", - "tmp": "0.2.1", - "tree-kill": "1.2.2", - "vscode-uri": "3.0.2" - }, - "devDependencies": { - "@types/ncp": "2.0.1", - "@types/node": "20.x", - "@types/tmp": "0.2.2", - "cpx2": "3.0.0", - "npm-run-all": "^4.1.5", - "watch": "^1.0.2" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/crc32c": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.705.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.705.0.tgz", - "integrity": "sha512-Fm0Cbc4zr0yG0DnNycz7ywlL5tQFdLSb7xCIPfzrxJb3YQiTXWxH5eu61SSsP/Z6RBNRolmRPvst/iNgX0fWvA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.699.0", - "@aws-sdk/client-sts": "3.699.0", - "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.699.0", - "@aws-sdk/middleware-bucket-endpoint": "3.696.0", - "@aws-sdk/middleware-expect-continue": "3.696.0", - "@aws-sdk/middleware-flexible-checksums": "3.701.0", - "@aws-sdk/middleware-host-header": "3.696.0", - "@aws-sdk/middleware-location-constraint": "3.696.0", - "@aws-sdk/middleware-logger": "3.696.0", - "@aws-sdk/middleware-recursion-detection": "3.696.0", - "@aws-sdk/middleware-sdk-s3": "3.696.0", - "@aws-sdk/middleware-ssec": "3.696.0", - "@aws-sdk/middleware-user-agent": "3.696.0", - "@aws-sdk/region-config-resolver": "3.696.0", - "@aws-sdk/signature-v4-multi-region": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-endpoints": "3.696.0", - "@aws-sdk/util-user-agent-browser": "3.696.0", - "@aws-sdk/util-user-agent-node": "3.696.0", - "@aws-sdk/xml-builder": "3.696.0", - "@smithy/config-resolver": "^3.0.12", - "@smithy/core": "^2.5.3", - "@smithy/eventstream-serde-browser": "^3.0.13", - "@smithy/eventstream-serde-config-resolver": "^3.0.10", - "@smithy/eventstream-serde-node": "^3.0.12", - "@smithy/fetch-http-handler": "^4.1.1", - "@smithy/hash-blob-browser": "^3.1.9", - "@smithy/hash-node": "^3.0.10", - "@smithy/hash-stream-node": "^3.1.9", - "@smithy/invalid-dependency": "^3.0.10", - "@smithy/md5-js": "^3.0.10", - "@smithy/middleware-content-length": "^3.0.12", - "@smithy/middleware-endpoint": "^3.2.3", - "@smithy/middleware-retry": "^3.0.27", - "@smithy/middleware-serde": "^3.0.10", - "@smithy/middleware-stack": "^3.0.10", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/node-http-handler": "^3.3.1", - "@smithy/protocol-http": "^4.1.7", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/url-parser": "^3.0.10", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.27", - "@smithy/util-defaults-mode-node": "^3.0.27", - "@smithy/util-endpoints": "^2.1.6", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-retry": "^3.0.10", - "@smithy/util-stream": "^3.3.1", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.9", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz", - "integrity": "sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.696.0", - "@aws-sdk/middleware-host-header": "3.696.0", - "@aws-sdk/middleware-logger": "3.696.0", - "@aws-sdk/middleware-recursion-detection": "3.696.0", - "@aws-sdk/middleware-user-agent": "3.696.0", - "@aws-sdk/region-config-resolver": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-endpoints": "3.696.0", - "@aws-sdk/util-user-agent-browser": "3.696.0", - "@aws-sdk/util-user-agent-node": "3.696.0", - "@smithy/config-resolver": "^3.0.12", - "@smithy/core": "^2.5.3", - "@smithy/fetch-http-handler": "^4.1.1", - "@smithy/hash-node": "^3.0.10", - "@smithy/invalid-dependency": "^3.0.10", - "@smithy/middleware-content-length": "^3.0.12", - "@smithy/middleware-endpoint": "^3.2.3", - "@smithy/middleware-retry": "^3.0.27", - "@smithy/middleware-serde": "^3.0.10", - "@smithy/middleware-stack": "^3.0.10", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/node-http-handler": "^3.3.1", - "@smithy/protocol-http": "^4.1.7", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/url-parser": "^3.0.10", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.27", - "@smithy/util-defaults-mode-node": "^3.0.27", - "@smithy/util-endpoints": "^2.1.6", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-retry": "^3.0.10", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.699.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.699.0.tgz", - "integrity": "sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.699.0", - "@aws-sdk/middleware-host-header": "3.696.0", - "@aws-sdk/middleware-logger": "3.696.0", - "@aws-sdk/middleware-recursion-detection": "3.696.0", - "@aws-sdk/middleware-user-agent": "3.696.0", - "@aws-sdk/region-config-resolver": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-endpoints": "3.696.0", - "@aws-sdk/util-user-agent-browser": "3.696.0", - "@aws-sdk/util-user-agent-node": "3.696.0", - "@smithy/config-resolver": "^3.0.12", - "@smithy/core": "^2.5.3", - "@smithy/fetch-http-handler": "^4.1.1", - "@smithy/hash-node": "^3.0.10", - "@smithy/invalid-dependency": "^3.0.10", - "@smithy/middleware-content-length": "^3.0.12", - "@smithy/middleware-endpoint": "^3.2.3", - "@smithy/middleware-retry": "^3.0.27", - "@smithy/middleware-serde": "^3.0.10", - "@smithy/middleware-stack": "^3.0.10", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/node-http-handler": "^3.3.1", - "@smithy/protocol-http": "^4.1.7", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/url-parser": "^3.0.10", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.27", - "@smithy/util-defaults-mode-node": "^3.0.27", - "@smithy/util-endpoints": "^2.1.6", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-retry": "^3.0.10", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.699.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.699.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.699.0.tgz", - "integrity": "sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.699.0", - "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.699.0", - "@aws-sdk/middleware-host-header": "3.696.0", - "@aws-sdk/middleware-logger": "3.696.0", - "@aws-sdk/middleware-recursion-detection": "3.696.0", - "@aws-sdk/middleware-user-agent": "3.696.0", - "@aws-sdk/region-config-resolver": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-endpoints": "3.696.0", - "@aws-sdk/util-user-agent-browser": "3.696.0", - "@aws-sdk/util-user-agent-node": "3.696.0", - "@smithy/config-resolver": "^3.0.12", - "@smithy/core": "^2.5.3", - "@smithy/fetch-http-handler": "^4.1.1", - "@smithy/hash-node": "^3.0.10", - "@smithy/invalid-dependency": "^3.0.10", - "@smithy/middleware-content-length": "^3.0.12", - "@smithy/middleware-endpoint": "^3.2.3", - "@smithy/middleware-retry": "^3.0.27", - "@smithy/middleware-serde": "^3.0.10", - "@smithy/middleware-stack": "^3.0.10", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/node-http-handler": "^3.3.1", - "@smithy/protocol-http": "^4.1.7", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/url-parser": "^3.0.10", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.27", - "@smithy/util-defaults-mode-node": "^3.0.27", - "@smithy/util-endpoints": "^2.1.6", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-retry": "^3.0.10", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.696.0.tgz", - "integrity": "sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/core": "^2.5.3", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.7", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/util-middleware": "^3.0.10", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz", - "integrity": "sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz", - "integrity": "sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/fetch-http-handler": "^4.1.1", - "@smithy/node-http-handler": "^3.3.1", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.7", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/util-stream": "^3.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.699.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.699.0.tgz", - "integrity": "sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-env": "3.696.0", - "@aws-sdk/credential-provider-http": "3.696.0", - "@aws-sdk/credential-provider-process": "3.696.0", - "@aws-sdk/credential-provider-sso": "3.699.0", - "@aws-sdk/credential-provider-web-identity": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.699.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.699.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.699.0.tgz", - "integrity": "sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.696.0", - "@aws-sdk/credential-provider-http": "3.696.0", - "@aws-sdk/credential-provider-ini": "3.699.0", - "@aws-sdk/credential-provider-process": "3.696.0", - "@aws-sdk/credential-provider-sso": "3.699.0", - "@aws-sdk/credential-provider-web-identity": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz", - "integrity": "sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.699.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.699.0.tgz", - "integrity": "sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.696.0", - "@aws-sdk/core": "3.696.0", - "@aws-sdk/token-providers": "3.699.0", - "@aws-sdk/types": "3.696.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz", - "integrity": "sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.696.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.696.0.tgz", - "integrity": "sha512-V07jishKHUS5heRNGFpCWCSTjRJyQLynS/ncUeE8ZYtG66StOOQWftTwDfFOSoXlIqrXgb4oT9atryzXq7Z4LQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.696.0.tgz", - "integrity": "sha512-vpVukqY3U2pb+ULeX0shs6L0aadNep6kKzjme/MyulPjtUDJpD3AekHsXRrCCGLmOqSKqRgQn5zhV9pQhHsb6Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.701.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.701.0.tgz", - "integrity": "sha512-adNaPCyTT+CiVM0ufDiO1Fe7nlRmJdI9Hcgj0M9S6zR7Dw70Ra5z8Lslkd7syAccYvZaqxLklGjPQH/7GNxwTA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-stream": "^3.3.1", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz", - "integrity": "sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.696.0.tgz", - "integrity": "sha512-FgH12OB0q+DtTrP2aiDBddDKwL4BPOrm7w3VV9BJrSdkqQCNBPz8S1lb0y5eVH4tBG+2j7gKPlOv1wde4jF/iw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz", - "integrity": "sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz", - "integrity": "sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.696.0.tgz", - "integrity": "sha512-M7fEiAiN7DBMHflzOFzh1I2MNSlLpbiH2ubs87bdRc2wZsDPSbs4l3v6h3WLhxoQK0bq6vcfroudrLBgvCuX3Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/core": "^2.5.3", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.7", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.4", - "@smithy/types": "^3.7.1", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-stream": "^3.3.1", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.696.0.tgz", - "integrity": "sha512-w/d6O7AOZ7Pg3w2d3BxnX5RmGNWb5X4RNxF19rJqcgu/xqxxE/QwZTNd5a7eTsqLXAUIfbbR8hh0czVfC1pJLA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz", - "integrity": "sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@aws-sdk/util-endpoints": "3.696.0", - "@smithy/core": "^2.5.3", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz", - "integrity": "sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/types": "^3.7.1", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.696.0.tgz", - "integrity": "sha512-ijPkoLjXuPtgxAYlDoYls8UaG/VKigROn9ebbvPL/orEY5umedd3iZTcS9T+uAf4Ur3GELLxMQiERZpfDKaz3g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/protocol-http": "^4.1.7", - "@smithy/signature-v4": "^4.2.2", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.699.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.699.0.tgz", - "integrity": "sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.699.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz", - "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz", - "integrity": "sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz", - "integrity": "sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/types": "^3.7.1", - "@smithy/util-endpoints": "^2.1.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", - "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz", - "integrity": "sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.696.0", - "@smithy/types": "^3.7.1", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz", - "integrity": "sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.696.0", - "@aws-sdk/types": "3.696.0", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.696.0.tgz", - "integrity": "sha512-dn1mX+EeqivoLYnY7p2qLrir0waPnCgS/0YdRCAVU2x14FgfUYCH6Im3w3oi2dMwhxfKY5lYVB5NKvZu7uI9lQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/abort-controller": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz", - "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", - "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", - "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.12.tgz", - "integrity": "sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.11", - "@smithy/types": "^3.7.1", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.4.tgz", - "integrity": "sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-serde": "^3.0.10", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-stream": "^3.3.1", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz", - "integrity": "sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.11", - "@smithy/property-provider": "^3.1.10", - "@smithy/types": "^3.7.1", - "@smithy/url-parser": "^3.0.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.9.tgz", - "integrity": "sha512-F574nX0hhlNOjBnP+noLtsPFqXnWh2L0+nZKCwcu7P7J8k+k+rdIDs+RMnrMwrzhUE4mwMgyN0cYnEn0G8yrnQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.7.1", - "@smithy/util-hex-encoding": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.13.tgz", - "integrity": "sha512-Nee9m+97o9Qj6/XeLz2g2vANS2SZgAxV4rDBMKGHvFJHU/xz88x2RwCkwsvEwYjSX4BV1NG1JXmxEaDUzZTAtw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.12", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.10.tgz", - "integrity": "sha512-K1M0x7P7qbBUKB0UWIL5KOcyi6zqV5mPJoL0/o01HPJr0CSq3A9FYuJC6e11EX6hR8QTIR++DBiGrYveOu6trw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.12.tgz", - "integrity": "sha512-kiZymxXvZ4tnuYsPSMUHe+MMfc4FTeFWJIc0Q5wygJoUQM4rVHNghvd48y7ppuulNMbuYt95ah71pYc2+o4JOA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.12", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.12.tgz", - "integrity": "sha512-1i8ifhLJrOZ+pEifTlF0EfZzMLUGQggYQ6WmZ4d5g77zEKf7oZ0kvh1yKWHPjofvOwqrkwRDVuxuYC8wVd662A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-codec": "^3.1.9", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz", - "integrity": "sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^4.1.7", - "@smithy/querystring-builder": "^3.0.10", - "@smithy/types": "^3.7.1", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.9.tgz", - "integrity": "sha512-wOu78omaUuW5DE+PVWXiRKWRZLecARyP3xcq5SmkXUw9+utgN8HnSnBfrjL2B/4ZxgqPjaAJQkC/+JHf1ITVaQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/chunked-blob-reader": "^4.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.1", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-node": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.10.tgz", - "integrity": "sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.9.tgz", - "integrity": "sha512-3XfHBjSP3oDWxLmlxnt+F+FqXpL3WlXs+XXaB6bV9Wo8BBu87fK1dSEsyH7Z4ZHRmwZ4g9lFMdf08m9hoX1iRA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz", - "integrity": "sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.10.tgz", - "integrity": "sha512-m3bv6dApflt3fS2Y1PyWPUtRP7iuBlvikEOGwu0HsCZ0vE7zcIX+dBoh3e+31/rddagw8nj92j0kJg2TfV+SJA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz", - "integrity": "sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.4.tgz", - "integrity": "sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^2.5.4", - "@smithy/middleware-serde": "^3.0.10", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/shared-ini-file-loader": "^3.1.11", - "@smithy/types": "^3.7.1", - "@smithy/url-parser": "^3.0.10", - "@smithy/util-middleware": "^3.0.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "3.0.28", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.28.tgz", - "integrity": "sha512-vK2eDfvIXG1U64FEUhYxoZ1JSj4XFbYWkK36iz02i3pFwWiDz1Q7jKhGTBCwx/7KqJNk4VS7d7cDLXFOvP7M+g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.11", - "@smithy/protocol-http": "^4.1.7", - "@smithy/service-error-classification": "^3.0.10", - "@smithy/smithy-client": "^3.4.5", - "@smithy/types": "^3.7.1", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-retry": "^3.0.10", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz", - "integrity": "sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz", - "integrity": "sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz", - "integrity": "sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^3.1.10", - "@smithy/shared-ini-file-loader": "^3.1.11", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz", - "integrity": "sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^3.1.8", - "@smithy/protocol-http": "^4.1.7", - "@smithy/querystring-builder": "^3.0.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.10.tgz", - "integrity": "sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.7.tgz", - "integrity": "sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz", - "integrity": "sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz", - "integrity": "sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz", - "integrity": "sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz", - "integrity": "sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.3.tgz", - "integrity": "sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.10", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.5.tgz", - "integrity": "sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^2.5.4", - "@smithy/middleware-endpoint": "^3.2.4", - "@smithy/middleware-stack": "^3.0.10", - "@smithy/protocol-http": "^4.1.7", - "@smithy/types": "^3.7.1", - "@smithy/util-stream": "^3.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", - "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.10.tgz", - "integrity": "sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^3.0.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.28", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.28.tgz", - "integrity": "sha512-6bzwAbZpHRFVJsOztmov5PGDmJYsbNSoIEfHSJJyFLzfBGCCChiO3od9k7E/TLgrCsIifdAbB9nqbVbyE7wRUw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^3.1.10", - "@smithy/smithy-client": "^3.4.5", - "@smithy/types": "^3.7.1", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.28", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.28.tgz", - "integrity": "sha512-78ENJDorV1CjOQselGmm3+z7Yqjj5HWCbjzh0Ixuq736dh1oEnD9sAttSBNSLlpZsX8VQnmERqA2fEFlmqWn8w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^3.0.12", - "@smithy/credential-provider-imds": "^3.2.7", - "@smithy/node-config-provider": "^3.1.11", - "@smithy/property-provider": "^3.1.10", - "@smithy/smithy-client": "^3.4.5", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz", - "integrity": "sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.11", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.10.tgz", - "integrity": "sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.10.tgz", - "integrity": "sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^3.0.10", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.1.tgz", - "integrity": "sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^4.1.1", - "@smithy/node-http-handler": "^3.3.1", - "@smithy/types": "^3.7.1", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.9.tgz", - "integrity": "sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^3.1.8", - "@smithy/types": "^3.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@types/ncp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/ncp/-/ncp-2.0.1.tgz", - "integrity": "sha512-TeiJ7uvv/92ugSqZ0v9l0eNXzutlki0aK+R1K5bfA5SYUil46ITlxLW4iNTCf55P4L5weCmaOdtxGeGWvudwPg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/tmp": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.2.tgz", - "integrity": "sha512-MhSa0yylXtVMsyT8qFpHA1DLHj4DvQGH5ntxrhHSh8PxUVNi35Wk+P5hVgqbO2qZqOotqr9jaoPRL+iRjWYm/A==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/cpx2": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cpx2/-/cpx2-3.0.0.tgz", - "integrity": "sha512-WVI69l0qqlDboGngiggQitRyto20og3YNNZp6ySva9dRMYpy9OQd5ep7mQvkvuBeUkIluOKR6jBOek7FRS7X0w==", - "dev": true, - "dependencies": { - "co": "^4.6.0", - "debounce": "^1.2.0", - "debug": "^4.1.1", - "duplexer": "^0.1.1", - "fs-extra": "^9.0.1", - "glob": "^7.1.4", - "glob2base": "0.0.12", - "minimatch": "^3.0.4", - "resolve": "^1.12.0", - "safe-buffer": "^5.2.0", - "shell-quote": "^1.7.1", - "subarg": "^1.0.0" - }, - "bin": { - "cpx": "bin/index.js" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, - "dependencies": { - "merge": "^1.2.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY= sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==", - "dev": true, - "dependencies": { - "find-index": "^0.1.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs= sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI= sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "node_modules/string.prototype.padend": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", - "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "license": "MIT" - }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI= sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", - "dev": true, - "dependencies": { - "minimist": "^1.1.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vscode-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", - "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==" - }, - "node_modules/watch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", - "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww= sha512-1u+Z5n9Jc1E2c7qDO8SinPoZuHj7FgbgU1olSFoyaklduDvvtX7GMMtlE6OC9FTXq4KvNAOfj6Zu4vI1e9bAKA==", - "dev": true, - "dependencies": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - } -} diff --git a/test/automation/package.json b/test/automation/package.json deleted file mode 100644 index daf3b491384..00000000000 --- a/test/automation/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "vscode-automation", - "version": "1.71.0", - "description": "VS Code UI automation driver", - "author": { - "name": "Microsoft Corporation" - }, - "license": "MIT", - "main": "./out/index.js", - "private": true, - "scripts": { - "compile": "npm run copy-driver-definition && node ../../node_modules/typescript/bin/tsc", - "watch": "npm-run-all -lp watch-driver-definition watch-tsc", - "watch-tsc": "node ../../node_modules/typescript/bin/tsc --watch --preserveWatchOutput", - "copy-driver-definition": "node tools/copy-driver-definition.js", - "watch-driver-definition": "watch \"node tools/copy-driver-definition.js\"", - "copy-package-version": "node tools/copy-package-version.js", - "prepublishOnly": "npm run copy-package-version" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.29.0", - "ncp": "^2.0.0", - "tmp": "0.2.1", - "tree-kill": "1.2.2", - "vscode-uri": "3.0.2" - }, - "devDependencies": { - "@types/ncp": "2.0.1", - "@types/node": "20.x", - "@types/tmp": "0.2.2", - "cpx2": "3.0.0", - "npm-run-all": "^4.1.5", - "watch": "^1.0.2" - } -} diff --git a/test/automation/src/index.ts b/test/automation/src/index.ts deleted file mode 100644 index deca2c42da5..00000000000 --- a/test/automation/src/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -// --- Start Positron --- -// Removed existing exports -// --- End Positron --- -export * from './application'; -export * from './code'; -// --- Start Positron --- -// Removed existing exports -// --- End Positron --- -export * from './logger'; -// --- Start Positron --- -// Removed existing exports -// --- End Positron --- -export * from './workbench'; -// --- Start Positron --- -// Removed existing exports -// --- End Positron --- - -// --- Start Positron --- -export * from './positron/console'; -export * from './positron/popups'; -export * from './positron/interpreterDropdown'; -export * from './positron/variables'; -export * from './positron/dataExplorer'; -export * from './positron/sideBar'; -export * from './positron/plots'; -export * from './positron/fixtures/pythonFixtures'; -export * from './positron/fixtures/rFixtures'; -export * from './positron/fixtures/userSettingsFixtures'; -export * from './positron/notebooks'; -export * from './positron/newProjectWizard'; -export * from './positron/connections'; -export * from './positron/help'; -export * from './positron/output'; -export * from './positron/welcome'; -export * from './positron/topActionBar'; -export * from './positron/layouts'; -export * from './positron/terminal'; -export * from './positron/viewer'; -export * from './positron/editor'; -export * from './positron/testExplorer'; -export * from './positron/explorer'; -export * from './positron/utils/aws'; -export * from './positron/quickaccess'; -export * from './positron/outline'; -export * from './positron/clipboard'; -export * from './positron/extensions'; -export * from './positron/editors'; -export * from './positron/settings'; -// --- End Positron --- -export { getDevElectronPath, getBuildElectronPath, getBuildVersion } from './electron'; diff --git a/test/automation/tools/copy-driver-definition.js b/test/automation/tools/copy-driver-definition.js deleted file mode 100644 index 9dde8cbc999..00000000000 --- a/test/automation/tools/copy-driver-definition.js +++ /dev/null @@ -1,34 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check -'use strict'; - -const fs = require('fs'); -const path = require('path'); - -const root = path.dirname(path.dirname(path.dirname(__dirname))); -const driverPath = path.join(root, 'src/vs/workbench/services/driver/common/driver.ts'); - -let contents = fs.readFileSync(driverPath, 'utf8'); -contents = /\/\/\*START([\s\S]*)\/\/\*END/mi.exec(contents)[1].trim(); -contents = contents.replace(/\bTPromise\b/g, 'Promise'); - -contents = `/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -${contents} -`; - -const srcPath = path.join(path.dirname(__dirname), 'src'); -const outPath = path.join(path.dirname(__dirname), 'out'); - -if (!fs.existsSync(outPath)) { - fs.mkdirSync(outPath); -} -fs.writeFileSync(path.join(srcPath, 'driver.d.ts'), contents); -fs.writeFileSync(path.join(outPath, 'driver.d.ts'), contents); diff --git a/test/automation/tools/copy-package-version.js b/test/automation/tools/copy-package-version.js deleted file mode 100644 index b9d1560c406..00000000000 --- a/test/automation/tools/copy-package-version.js +++ /dev/null @@ -1,22 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check -'use strict'; - -const fs = require('fs'); -const path = require('path'); - -const packageDir = path.dirname(__dirname); -const root = path.dirname(path.dirname(path.dirname(__dirname))); - -const rootPackageJsonFile = path.join(root, 'package.json'); -const thisPackageJsonFile = path.join(packageDir, 'package.json'); -const rootPackageJson = JSON.parse(fs.readFileSync(rootPackageJsonFile, 'utf8')); -const thisPackageJson = JSON.parse(fs.readFileSync(thisPackageJsonFile, 'utf8')); - -thisPackageJson.version = rootPackageJson.version; - -fs.writeFileSync(thisPackageJsonFile, JSON.stringify(thisPackageJson, null, ' ')); diff --git a/test/automation/tsconfig.json b/test/automation/tsconfig.json deleted file mode 100644 index 3e1fd8d8541..00000000000 --- a/test/automation/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2020", - "strict": true, - "noUnusedParameters": false, - "noUnusedLocals": true, - "outDir": "out", - "sourceMap": true, - "declaration": true, - "skipLibCheck": true, - "lib": [ - "esnext", // for #201187 - "dom" - ] - }, - "exclude": [ - "node_modules", - "out", - "tools" - ] -} diff --git a/test/e2e/.yarnrc b/test/e2e/.yarnrc deleted file mode 100644 index f7076df9502..00000000000 --- a/test/e2e/.yarnrc +++ /dev/null @@ -1,5 +0,0 @@ -disturl "" -target "" -ms_build_id "" -runtime "node" -build_from_source "" diff --git a/test/e2e/README.md b/test/e2e/README.md index 5eac8c429af..383e1626c8e 100644 --- a/test/e2e/README.md +++ b/test/e2e/README.md @@ -20,16 +20,16 @@ This document provides guidelines and setup instructions for effectively running ### Test Code Location -- `test/e2e/areas` +- `test/e2e/tests` -For instance, the e2e tests for the help pane are at `test/e2e/areas/help/help.test.ts` +For instance, the e2e tests for the help pane are at `test/e2e/tests/help/help.test.ts` ### Test Helpers Location - General helpers dir: `test/automation/src` - Positron helpers dir: `test/automation/src/positron` -For each area under test, there is typically a companion class that assists with locating and interacting with elements (similar to POM pattern). For instance, the e2e tests for the help pane are at `test/e2e/areas/help/help.test.ts` +For each area under test, there is typically a companion class that assists with locating and interacting with elements (similar to POM pattern). For instance, the e2e tests for the help pane are at `test/e2e/tests/help/help.test.ts` ### Test Template diff --git a/test/automation/src/application.ts b/test/e2e/automation/application.ts similarity index 100% rename from test/automation/src/application.ts rename to test/e2e/automation/application.ts diff --git a/test/automation/src/code.ts b/test/e2e/automation/code.ts similarity index 100% rename from test/automation/src/code.ts rename to test/e2e/automation/code.ts diff --git a/test/e2e/automation/driver.d.ts b/test/e2e/automation/driver.d.ts new file mode 100644 index 00000000000..6f2a532c710 --- /dev/null +++ b/test/e2e/automation/driver.d.ts @@ -0,0 +1,45 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export interface IElement { + readonly tagName: string; + readonly className: string; + readonly textContent: string; + readonly attributes: { [name: string]: string }; + readonly children: IElement[]; + readonly top: number; + readonly left: number; +} + +export interface ILocaleInfo { + readonly language: string; + readonly locale?: string; +} + +export interface ILocalizedStrings { + readonly open: string; + readonly close: string; + readonly find: string; +} + +export interface ILogFile { + readonly relativePath: string; + readonly contents: string; +} + +export interface IWindowDriver { + setValue(selector: string, text: string): Promise; + isActiveElement(selector: string): Promise; + getElements(selector: string, recursive: boolean): Promise; + getElementXY(selector: string, xoffset?: number, yoffset?: number): Promise<{ x: number; y: number }>; + typeInEditor(selector: string, text: string): Promise; + getTerminalBuffer(selector: string): Promise; + writeInTerminal(selector: string, text: string): Promise; + getLocaleInfo(): Promise; + getLocalizedStrings(): Promise; + getLogs(): Promise; + whenWorkbenchRestored(): Promise; + exitApplication(): Promise; +} diff --git a/test/automation/src/electron.ts b/test/e2e/automation/electron.ts similarity index 100% rename from test/automation/src/electron.ts rename to test/e2e/automation/electron.ts diff --git a/test/automation/src/positron/fixtures/pythonFixtures.ts b/test/e2e/automation/fixtures/python.ts similarity index 91% rename from test/automation/src/positron/fixtures/pythonFixtures.ts rename to test/e2e/automation/fixtures/python.ts index 1dec6b79f21..bfc9b3b4c1b 100644 --- a/test/automation/src/positron/fixtures/pythonFixtures.ts +++ b/test/e2e/automation/fixtures/python.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import { fail } from 'assert'; -import { Application } from '../../application'; -import { InterpreterType } from '../utils/interpreterInfo'; +import { Application } from '..'; +import { InterpreterType } from '../../pages/utils/interpreterInfo'; import { expect } from '@playwright/test'; /* * Reuseable Positron Python fixture tests can leverage to get a Python interpreter selected. */ -export class PositronPythonFixtures { +export class PythonFixtures { constructor(private app: Application) { } static async SetupFixtures(app: Application, skipReadinessCheck: boolean = false) { - const fixtures = new PositronPythonFixtures(app); + const fixtures = new PythonFixtures(app); await fixtures.startPythonInterpreter(skipReadinessCheck); } diff --git a/test/automation/src/positron/fixtures/rFixtures.ts b/test/e2e/automation/fixtures/r.ts similarity index 87% rename from test/automation/src/positron/fixtures/rFixtures.ts rename to test/e2e/automation/fixtures/r.ts index 935d7deffb0..a7db9fb86a8 100644 --- a/test/automation/src/positron/fixtures/rFixtures.ts +++ b/test/e2e/automation/fixtures/r.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import { fail } from 'assert'; -import { Application } from '../../application'; -import { InterpreterType } from '../utils/interpreterInfo'; +import { Application } from '..'; +import { InterpreterType } from '../../pages/utils/interpreterInfo'; /* * Reuseable Positron R fixture tests can leverage to get an R interpreter selected. */ -export class PositronRFixtures { +export class RFixtures { constructor(private app: Application) { } static async SetupFixtures(app: Application, skipReadinessCheck: boolean = false) { - const fixtures = new PositronRFixtures(app); + const fixtures = new RFixtures(app); await fixtures.startRInterpreter(skipReadinessCheck); } diff --git a/test/automation/src/positron/fixtures/userSettingsFixtures.ts b/test/e2e/automation/fixtures/userSettings.ts similarity index 95% rename from test/automation/src/positron/fixtures/userSettingsFixtures.ts rename to test/e2e/automation/fixtures/userSettings.ts index 72160c2e0b5..dd468181e1d 100644 --- a/test/automation/src/positron/fixtures/userSettingsFixtures.ts +++ b/test/e2e/automation/fixtures/userSettings.ts @@ -3,11 +3,11 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../application'; +import { Application } from '..'; export type UserSetting = [key: string, value: string]; -export class PositronUserSettingsFixtures { +export class UserSettingsFixtures { constructor(private app: Application) { } diff --git a/test/e2e/automation/index.ts b/test/e2e/automation/index.ts new file mode 100644 index 00000000000..27b8de74cbc --- /dev/null +++ b/test/e2e/automation/index.ts @@ -0,0 +1,45 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + *--------------------------------------------------------------------------------------------*/ + +export * from './application'; +export * from './code'; +export * from './logger'; +export * from './workbench'; + +// pages +export * from '../pages/console'; +export * from '../pages/popups'; +export * from '../pages/interpreterDropdown'; +export * from '../pages/variables'; +export * from '../pages/dataExplorer'; +export * from '../pages/sideBar'; +export * from '../pages/plots'; +export * from '../pages/notebooks'; +export * from '../pages/newProjectWizard'; +export * from '../pages/connections'; +export * from '../pages/help'; +export * from '../pages/output'; +export * from '../pages/welcome'; +export * from '../pages/topActionBar'; +export * from '../pages/layouts'; +export * from '../pages/terminal'; +export * from '../pages/viewer'; +export * from '../pages/editor'; +export * from '../pages/testExplorer'; +export * from '../pages/explorer'; +export * from '../pages/utils/aws'; +export * from '../pages/quickaccess'; +export * from '../pages/outline'; +export * from '../pages/clipboard'; +export * from '../pages/extensions'; +export * from '../pages/editors'; +export * from '../pages/settings'; + +// fixtures +export * from './fixtures/python'; +export * from './fixtures/r'; +export * from './fixtures/userSettings'; + +export { getDevElectronPath, getBuildElectronPath, getBuildVersion } from './electron'; diff --git a/test/automation/src/logger.ts b/test/e2e/automation/logger.ts similarity index 100% rename from test/automation/src/logger.ts rename to test/e2e/automation/logger.ts diff --git a/test/automation/src/playwrightBrowser.ts b/test/e2e/automation/playwrightBrowser.ts similarity index 100% rename from test/automation/src/playwrightBrowser.ts rename to test/e2e/automation/playwrightBrowser.ts diff --git a/test/automation/src/playwrightDriver.ts b/test/e2e/automation/playwrightDriver.ts similarity index 98% rename from test/automation/src/playwrightDriver.ts rename to test/e2e/automation/playwrightDriver.ts index dbd9e46ea3d..d3d70321fae 100644 --- a/test/automation/src/playwrightDriver.ts +++ b/test/e2e/automation/playwrightDriver.ts @@ -4,10 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; +// eslint-disable-next-line local/code-import-patterns import type { Protocol } from 'playwright-core/types/protocol'; import { dirname, join } from 'path'; import { promises } from 'fs'; import { IWindowDriver } from './driver'; +// eslint-disable-next-line local/code-import-patterns import { PageFunction } from 'playwright-core/types/structs'; import { measureAndLog } from './logger'; import { LaunchOptions } from './code'; diff --git a/test/automation/src/playwrightElectron.ts b/test/e2e/automation/playwrightElectron.ts similarity index 100% rename from test/automation/src/playwrightElectron.ts rename to test/e2e/automation/playwrightElectron.ts diff --git a/test/automation/src/processes.ts b/test/e2e/automation/processes.ts similarity index 100% rename from test/automation/src/processes.ts rename to test/e2e/automation/processes.ts diff --git a/test/automation/src/profiler.ts b/test/e2e/automation/profiler.ts similarity index 100% rename from test/automation/src/profiler.ts rename to test/e2e/automation/profiler.ts diff --git a/test/automation/src/workbench.ts b/test/e2e/automation/workbench.ts similarity index 68% rename from test/automation/src/workbench.ts rename to test/e2e/automation/workbench.ts index ff94f093713..b2875b554ae 100644 --- a/test/automation/src/workbench.ts +++ b/test/e2e/automation/workbench.ts @@ -8,33 +8,33 @@ // Everything has been replaced with Positron code: .positron/ import { Code } from './code'; -import { InterpreterDropdown } from './positron/interpreterDropdown'; -import { Popups } from './positron/popups'; -import { Console } from './positron/console'; -import { Variables } from './positron/variables'; -import { DataExplorer } from './positron/dataExplorer'; -import { SideBar } from './positron/sideBar'; -import { Plots } from './positron/plots'; -import { Notebooks } from './positron/notebooks'; -import { NewProjectWizard } from './positron/newProjectWizard'; -import { Explorer } from './positron/explorer'; -import { Connections } from './positron/connections'; -import { Help } from './positron/help'; -import { TopActionBar } from './positron/topActionBar'; -import { Layouts } from './positron/layouts'; -import { Output } from './positron/output'; -import { Welcome } from './positron/welcome'; -import { Terminal } from './positron/terminal'; -import { Viewer } from './positron/viewer'; -import { Editor } from './positron/editor'; -import { Editors } from './positron/editors'; -import { TestExplorer } from './positron/testExplorer'; -import { QuickAccess } from './positron/quickaccess'; -import { Outline } from './positron/outline'; -import { Clipboard } from './positron/clipboard'; -import { QuickInput } from './positron/quickInput'; -import { Extensions } from './positron/extensions'; -import { Settings } from './positron/settings'; +import { InterpreterDropdown } from '../pages/interpreterDropdown'; +import { Popups } from '../pages/popups'; +import { Console } from '../pages/console'; +import { Variables } from '../pages/variables'; +import { DataExplorer } from '../pages/dataExplorer'; +import { SideBar } from '../pages/sideBar'; +import { Plots } from '../pages/plots'; +import { Notebooks } from '../pages/notebooks'; +import { NewProjectWizard } from '../pages/newProjectWizard'; +import { Explorer } from '../pages/explorer'; +import { Connections } from '../pages/connections'; +import { Help } from '../pages/help'; +import { TopActionBar } from '../pages/topActionBar'; +import { Layouts } from '../pages/layouts'; +import { Output } from '../pages/output'; +import { Welcome } from '../pages/welcome'; +import { Terminal } from '../pages/terminal'; +import { Viewer } from '../pages/viewer'; +import { Editor } from '../pages/editor'; +import { Editors } from '../pages/editors'; +import { TestExplorer } from '../pages/testExplorer'; +import { QuickAccess } from '../pages/quickaccess'; +import { Outline } from '../pages/outline'; +import { Clipboard } from '../pages/clipboard'; +import { QuickInput } from '../pages/quickInput'; +import { Extensions } from '../pages/extensions'; +import { Settings } from '../pages/settings'; export interface Commands { runCommand(command: string, options?: { exactLabelMatch?: boolean }): Promise; diff --git a/test/e2e/helpers/create-app.ts b/test/e2e/helpers/create-app.ts index a6f40aa39b6..a807830df3a 100644 --- a/test/e2e/helpers/create-app.ts +++ b/test/e2e/helpers/create-app.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application, ApplicationOptions } from '../../automation'; +import { Application, ApplicationOptions } from '../automation'; export function createApp(options: ApplicationOptions, optionsTransform?: (opts: ApplicationOptions) => ApplicationOptions): Application { if (optionsTransform) { diff --git a/test/e2e/helpers/logger.ts b/test/e2e/helpers/logger.ts index 9eac2ae16ae..d90b9f7484a 100644 --- a/test/e2e/helpers/logger.ts +++ b/test/e2e/helpers/logger.ts @@ -6,7 +6,7 @@ import * as path from 'path'; import * as fs from 'fs'; import mkdirp = require('mkdirp'); -import { ConsoleLogger, FileLogger, Logger, MultiLogger } from '../../automation'; +import { ConsoleLogger, FileLogger, Logger, MultiLogger } from '../automation'; const VERBOSE = process.env.VERBOSE === 'true'; diff --git a/test/e2e/helpers/test-setup.ts b/test/e2e/helpers/test-setup.ts index cb612a0c473..14ebdcc3a5e 100644 --- a/test/e2e/helpers/test-setup.ts +++ b/test/e2e/helpers/test-setup.ts @@ -7,7 +7,7 @@ import * as fs from 'fs'; import { join } from 'path'; const rimraf = require('rimraf'); const mkdirp = require('mkdirp'); -import { getBuildElectronPath, getDevElectronPath, Logger } from '../../automation'; +import { getBuildElectronPath, getDevElectronPath, Logger } from '../automation'; import { createLogger } from './logger'; import * as os from 'os'; diff --git a/test/e2e/package-lock.json b/test/e2e/package-lock.json index 31f7af44e8f..6541e9fc211 100644 --- a/test/e2e/package-lock.json +++ b/test/e2e/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "license": "MIT", "dependencies": { + "@aws-sdk/client-s3": "^3.722.0", "canvas": "^2.11.2", "mkdirp": "^1.0.4", "ncp": "^2.0.0", @@ -28,6 +29,871 @@ "watch": "^1.0.2" } }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.722.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.722.0.tgz", + "integrity": "sha512-FttdkB39TKjqEITfZJcs6Ihh6alICsNEne0ouLvh8re+gAuTK96zWcfX22mP5ap1QEsATaOGRNsMnyfsDSM0zw==", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.721.0", + "@aws-sdk/client-sts": "3.721.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.721.0", + "@aws-sdk/middleware-bucket-endpoint": "3.721.0", + "@aws-sdk/middleware-expect-continue": "3.714.0", + "@aws-sdk/middleware-flexible-checksums": "3.717.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-location-constraint": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-sdk-s3": "3.716.0", + "@aws-sdk/middleware-ssec": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.721.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/signature-v4-multi-region": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.721.0", + "@aws-sdk/xml-builder": "3.709.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/eventstream-serde-browser": "^3.0.14", + "@smithy/eventstream-serde-config-resolver": "^3.0.11", + "@smithy/eventstream-serde-node": "^3.0.13", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-blob-browser": "^3.1.10", + "@smithy/hash-node": "^3.0.11", + "@smithy/hash-stream-node": "^3.1.10", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/md5-js": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.721.0.tgz", + "integrity": "sha512-UrYAF4ilpO2cZBFddQmbETfo0xKP3CEcantcMQTc0xPY3quHLZhYuBiRae+McWi6yZpH4ErnFZIWeKSJ2OQgqQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.721.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.721.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-node": "^3.0.11", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.721.0.tgz", + "integrity": "sha512-jwsgdUEbNJqs1O0AQtf9M6SI7hFIjxH+IKeKCMca0xVt+Tr1UqLr/qMK/6W8LoMtRFnE0lpBSHW6hvmLp2OCoQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.721.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.721.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.721.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-node": "^3.0.11", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.721.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.721.0.tgz", + "integrity": "sha512-1Pv8F02hQFmPZs7WtGfQNlnInbG1lLzyngJc/MlZ3Ld2fIoWjaWp7bJWgYAjnzHNEuDtCabWJvIfePdRqsbYoA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.721.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-node": "3.721.0", + "@aws-sdk/middleware-host-header": "3.714.0", + "@aws-sdk/middleware-logger": "3.714.0", + "@aws-sdk/middleware-recursion-detection": "3.714.0", + "@aws-sdk/middleware-user-agent": "3.721.0", + "@aws-sdk/region-config-resolver": "3.714.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@aws-sdk/util-user-agent-browser": "3.714.0", + "@aws-sdk/util-user-agent-node": "3.721.0", + "@smithy/config-resolver": "^3.0.13", + "@smithy/core": "^2.5.5", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/hash-node": "^3.0.11", + "@smithy/invalid-dependency": "^3.0.11", + "@smithy/middleware-content-length": "^3.0.13", + "@smithy/middleware-endpoint": "^3.2.6", + "@smithy/middleware-retry": "^3.0.31", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.31", + "@smithy/util-defaults-mode-node": "^3.0.31", + "@smithy/util-endpoints": "^2.1.7", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.716.0.tgz", + "integrity": "sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/core": "^2.5.5", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/signature-v4": "^4.2.4", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.716.0.tgz", + "integrity": "sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.716.0.tgz", + "integrity": "sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/fetch-http-handler": "^4.1.2", + "@smithy/node-http-handler": "^3.3.2", + "@smithy/property-provider": "^3.1.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/util-stream": "^3.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.721.0.tgz", + "integrity": "sha512-8J/c2rI+4ZoduBCnPurfdblqs2DyRvL9ztqzzOWWEhLccoYZzYeAMwBapEAsiVsD1iNrIGY7LRDC4TsVmJBf6Q==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/credential-provider-env": "3.716.0", + "@aws-sdk/credential-provider-http": "3.716.0", + "@aws-sdk/credential-provider-process": "3.716.0", + "@aws-sdk/credential-provider-sso": "3.721.0", + "@aws-sdk/credential-provider-web-identity": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.721.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.721.0.tgz", + "integrity": "sha512-D6xodzdMjVhF9xRhy9gNf0gqP0Dek9fQ6BDZzqO/i54d7CjWHVZTADcVcxjLQq6nyUNf0QPf8UXLaqi+w25GGQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.716.0", + "@aws-sdk/credential-provider-http": "3.716.0", + "@aws-sdk/credential-provider-ini": "3.721.0", + "@aws-sdk/credential-provider-process": "3.716.0", + "@aws-sdk/credential-provider-sso": "3.721.0", + "@aws-sdk/credential-provider-web-identity": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.716.0.tgz", + "integrity": "sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.721.0.tgz", + "integrity": "sha512-v7npnYqfuY1vdcb0/F4Mcz+mcFyZaYry9qXhSRCPIbLPe2PRV4E4HXIaPKmir8PhuRLEGs0QJWhvIWr7u6holQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.721.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/token-providers": "3.721.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.716.0.tgz", + "integrity": "sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.716.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.721.0.tgz", + "integrity": "sha512-5UyoDoX3z3UhmetoqqqZulq2uF55Jyj9lUKAJWgTxVhDEG5TijTQS40LP9DqwRl0hJkoUUZKAwE0hwnUsiGXAg==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz", + "integrity": "sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.717.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.717.0.tgz", + "integrity": "sha512-a5kY5r7/7bDZZlOQQGWOR1ulQewdtNexdW1Ex5DD0FLKlFY7RD0va24hxQ6BP7mWHol+Dx4pj6UQ8ahk0ap1tw==", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz", + "integrity": "sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz", + "integrity": "sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz", + "integrity": "sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz", + "integrity": "sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.716.0.tgz", + "integrity": "sha512-Qzz5OfRA/5brqfvq+JHTInwS1EuJ1+tC6qMtwKWJN3czMnVJVdnnsPTf+G5IM/1yYaGEIjY8rC1ExQLcc8ApFQ==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/core": "^2.5.5", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/signature-v4": "^4.2.4", + "@smithy/smithy-client": "^3.5.1", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz", + "integrity": "sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.721.0.tgz", + "integrity": "sha512-Z3Vksb970ArsfLlARW4KVpqO+pQ1cvvGTrTQPxWDsmOzg1kU92t9oWXGW+1M/x6bHbMQlI/EulQ/D8ZE/Pu46Q==", + "dependencies": { + "@aws-sdk/core": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@aws-sdk/util-endpoints": "3.714.0", + "@smithy/core": "^2.5.5", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz", + "integrity": "sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.716.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.716.0.tgz", + "integrity": "sha512-k0goWotZKKz+kV6Ln0qeAMSeSVi4NipuIIz5R8A0uCF2zBK4CXWdZR7KeaIoLBhJwQnHj1UU7E+2MK74KIUBzA==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.716.0", + "@aws-sdk/types": "3.714.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/signature-v4": "^4.2.4", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.721.0.tgz", + "integrity": "sha512-cIZmKdLeEWUzPR+2lA+JcZHPvaFf/Ih+s3LXBa/uQwRFdK+o7WfGRf7Oqe6yLRekO2jJJl4LBJXxDOH++M9+ag==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.721.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.714.0.tgz", + "integrity": "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz", + "integrity": "sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz", + "integrity": "sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "@smithy/util-endpoints": "^2.1.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", + "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.714.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz", + "integrity": "sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==", + "dependencies": { + "@aws-sdk/types": "3.714.0", + "@smithy/types": "^3.7.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.721.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.721.0.tgz", + "integrity": "sha512-5VsNdC3zQnjrt7KNEeFHWJl3FIamgIS0puG18BMvPsdzcKWEbWDih+yd1kMWrcpAu1Riez9co/gB9y99pBghDA==", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.721.0", + "@aws-sdk/types": "3.714.0", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.709.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.709.0.tgz", + "integrity": "sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -77,6 +943,646 @@ "node": ">=14" } }, + "node_modules/@smithy/abort-controller": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.9.tgz", + "integrity": "sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", + "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", + "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", + "dependencies": { + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.13.tgz", + "integrity": "sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.7.tgz", + "integrity": "sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz", + "integrity": "sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz", + "integrity": "sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz", + "integrity": "sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz", + "integrity": "sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz", + "integrity": "sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz", + "integrity": "sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==", + "dependencies": { + "@smithy/eventstream-codec": "^3.1.10", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz", + "integrity": "sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA==", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz", + "integrity": "sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==", + "dependencies": { + "@smithy/chunked-blob-reader": "^4.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.1", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.11.tgz", + "integrity": "sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz", + "integrity": "sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz", + "integrity": "sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.11.tgz", + "integrity": "sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz", + "integrity": "sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz", + "integrity": "sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ==", + "dependencies": { + "@smithy/core": "^2.5.7", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.34", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz", + "integrity": "sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/service-error-classification": "^3.0.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz", + "integrity": "sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz", + "integrity": "sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz", + "integrity": "sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", + "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", + "dependencies": { + "@smithy/abort-controller": "^3.1.9", + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.11.tgz", + "integrity": "sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", + "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz", + "integrity": "sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz", + "integrity": "sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", + "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", + "dependencies": { + "@smithy/types": "^3.7.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", + "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.4.tgz", + "integrity": "sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.7.0.tgz", + "integrity": "sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA==", + "dependencies": { + "@smithy/core": "^2.5.7", + "@smithy/middleware-endpoint": "^3.2.8", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-stream": "^3.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.11.tgz", + "integrity": "sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.34", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz", + "integrity": "sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA==", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.34", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz", + "integrity": "sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw==", + "dependencies": { + "@smithy/config-resolver": "^3.0.13", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz", + "integrity": "sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.11.tgz", + "integrity": "sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", + "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", + "dependencies": { + "@smithy/service-error-classification": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.4.tgz", + "integrity": "sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ==", + "dependencies": { + "@smithy/fetch-http-handler": "^4.1.3", + "@smithy/node-http-handler": "^3.3.3", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.2.0.tgz", + "integrity": "sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.9", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", @@ -395,6 +1901,11 @@ ], "license": "MIT" }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -961,6 +2472,27 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -3108,6 +4640,11 @@ "node": ">=4" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3185,6 +4722,11 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, "node_modules/typed-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", @@ -3292,6 +4834,18 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", diff --git a/test/e2e/package.json b/test/e2e/package.json index 6b03063374b..b29a73e25b7 100644 --- a/test/e2e/package.json +++ b/test/e2e/package.json @@ -4,11 +4,11 @@ "license": "MIT", "scripts": { "compile": "npm run --prefix ../automation compile && node ../../node_modules/typescript/bin/tsc", - "watch-automation": "npm run --prefix ../automation watch", "watch-e2e": "node ../../node_modules/typescript/bin/tsc --watch --preserveWatchOutput", - "watch": "npm-run-all -lp watch-automation watch-e2e" + "watch": "npm-run-all -lp watch-e2e" }, "dependencies": { + "@aws-sdk/client-s3": "^3.722.0", "canvas": "^2.11.2", "mkdirp": "^1.0.4", "ncp": "^2.0.0", diff --git a/test/automation/src/positron/clipboard.ts b/test/e2e/pages/clipboard.ts similarity index 97% rename from test/automation/src/positron/clipboard.ts rename to test/e2e/pages/clipboard.ts index dcba1e83eb8..b04841b019a 100644 --- a/test/automation/src/positron/clipboard.ts +++ b/test/e2e/pages/clipboard.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; export class Clipboard { diff --git a/test/automation/src/positron/connections.ts b/test/e2e/pages/connections.ts similarity index 98% rename from test/automation/src/positron/connections.ts rename to test/e2e/pages/connections.ts index 12cacb32a8e..d608d1594f8 100644 --- a/test/automation/src/positron/connections.ts +++ b/test/e2e/pages/connections.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; const CONNECTIONS_CONTAINER = '.connections-items-container'; diff --git a/test/automation/src/positron/console.ts b/test/e2e/pages/console.ts similarity index 99% rename from test/automation/src/positron/console.ts rename to test/e2e/pages/console.ts index 2a57e66df08..7d0177f27d9 100644 --- a/test/automation/src/positron/console.ts +++ b/test/e2e/pages/console.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; import { QuickInput } from './quickInput'; import { InterpreterType } from './utils/interpreterInfo'; diff --git a/test/automation/src/positron/dataExplorer.ts b/test/e2e/pages/dataExplorer.ts similarity index 99% rename from test/automation/src/positron/dataExplorer.ts rename to test/e2e/pages/dataExplorer.ts index ac9cac014eb..c92b14ab601 100644 --- a/test/automation/src/positron/dataExplorer.ts +++ b/test/e2e/pages/dataExplorer.ts @@ -5,8 +5,8 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; -import { Workbench } from '../workbench'; +import { Code } from '../automation/code'; +import { Workbench } from '../automation/workbench'; const COLUMN_HEADERS = '.data-explorer-panel .right-column .data-grid-column-headers'; const HEADER_TITLES = '.data-grid-column-header .title-description .title'; diff --git a/test/automation/src/positron/editor.ts b/test/e2e/pages/editor.ts similarity index 99% rename from test/automation/src/positron/editor.ts rename to test/e2e/pages/editor.ts index cdc490d65db..252417811a9 100644 --- a/test/automation/src/positron/editor.ts +++ b/test/e2e/pages/editor.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, FrameLocator, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; // currently a dupe of declaration in ../editor.ts but trying not to modifiy that file const EDITOR = (filename: string) => `.monaco-editor[data-uri$="${filename}"]`; diff --git a/test/automation/src/positron/editors.ts b/test/e2e/pages/editors.ts similarity index 98% rename from test/automation/src/positron/editors.ts rename to test/e2e/pages/editors.ts index 3d271937757..ee30e06bdce 100644 --- a/test/automation/src/positron/editors.ts +++ b/test/e2e/pages/editors.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; export class Editors { diff --git a/test/automation/src/positron/explorer.ts b/test/e2e/pages/explorer.ts similarity index 97% rename from test/automation/src/positron/explorer.ts rename to test/e2e/pages/explorer.ts index 042c98fd2ca..a7c6b67e09d 100644 --- a/test/automation/src/positron/explorer.ts +++ b/test/e2e/pages/explorer.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; const POSITRON_EXPLORER_PROJECT_TITLE = 'div[id="workbench.view.explorer"] h3.title'; const POSITRON_EXPLORER_PROJECT_FILES = 'div[id="workbench.view.explorer"] span[class="monaco-highlighted-label"]'; diff --git a/test/automation/src/positron/extensions.ts b/test/e2e/pages/extensions.ts similarity index 98% rename from test/automation/src/positron/extensions.ts rename to test/e2e/pages/extensions.ts index 1c74a6b510f..0bfc0da1c6b 100644 --- a/test/automation/src/positron/extensions.ts +++ b/test/e2e/pages/extensions.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; export class Extensions { diff --git a/test/automation/src/positron/help.ts b/test/e2e/pages/help.ts similarity index 97% rename from test/automation/src/positron/help.ts rename to test/e2e/pages/help.ts index beaa570d632..58410ce5e5b 100644 --- a/test/automation/src/positron/help.ts +++ b/test/e2e/pages/help.ts @@ -5,7 +5,7 @@ import { FrameLocator, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; const OUTER_FRAME = '.webview'; const MIDDLE_FRAME = '#active-frame'; diff --git a/test/automation/src/positron/interpreterDropdown.ts b/test/e2e/pages/interpreterDropdown.ts similarity index 99% rename from test/automation/src/positron/interpreterDropdown.ts rename to test/e2e/pages/interpreterDropdown.ts index 630bd4e55c8..4fc89473220 100644 --- a/test/automation/src/positron/interpreterDropdown.ts +++ b/test/e2e/pages/interpreterDropdown.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { getInterpreterType, InterpreterInfo, InterpreterType } from './utils/interpreterInfo'; const INTERPRETER_INFO_LINE = '.info .container .line'; diff --git a/test/automation/src/positron/layouts.ts b/test/e2e/pages/layouts.ts similarity index 97% rename from test/automation/src/positron/layouts.ts rename to test/e2e/pages/layouts.ts index 77d95b7cbfa..be55abaebe0 100644 --- a/test/automation/src/positron/layouts.ts +++ b/test/e2e/pages/layouts.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { Locator } from '@playwright/test'; -import { Code } from '../code'; -import { Workbench } from '../workbench'; +import { Code } from '../automation/code'; +import { Workbench } from '../automation/workbench'; const FULL_APP = 'body'; const AUX_BAR = '.part.auxiliarybar'; diff --git a/test/automation/src/positron/newProjectWizard.ts b/test/e2e/pages/newProjectWizard.ts similarity index 99% rename from test/automation/src/positron/newProjectWizard.ts rename to test/e2e/pages/newProjectWizard.ts index 58870c539b1..82fca215500 100644 --- a/test/automation/src/positron/newProjectWizard.ts +++ b/test/e2e/pages/newProjectWizard.ts @@ -5,7 +5,7 @@ import { fail } from 'assert'; import { expect } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; // Selector for the pre-selected dropdown item in the project wizard diff --git a/test/automation/src/positron/notebooks.ts b/test/e2e/pages/notebooks.ts similarity index 99% rename from test/automation/src/positron/notebooks.ts rename to test/e2e/pages/notebooks.ts index f75ee71cf88..e5f7ad7eca9 100644 --- a/test/automation/src/positron/notebooks.ts +++ b/test/e2e/pages/notebooks.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickInput } from './quickInput'; import { QuickAccess } from './quickaccess'; import { basename } from 'path'; diff --git a/test/automation/src/positron/outline.ts b/test/e2e/pages/outline.ts similarity index 97% rename from test/automation/src/positron/outline.ts rename to test/e2e/pages/outline.ts index 65c01d27859..2df71723ddd 100644 --- a/test/automation/src/positron/outline.ts +++ b/test/e2e/pages/outline.ts @@ -5,7 +5,7 @@ import { fail } from 'assert'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; const HORIZONTAL_SASH = '.explorer-viewlet .monaco-sash.horizontal'; diff --git a/test/automation/src/positron/output.ts b/test/e2e/pages/output.ts similarity index 96% rename from test/automation/src/positron/output.ts rename to test/e2e/pages/output.ts index 33abf48774f..0ac0c8cb3cf 100644 --- a/test/automation/src/positron/output.ts +++ b/test/e2e/pages/output.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; import { QuickInput } from './quickInput'; diff --git a/test/automation/src/positron/plots.ts b/test/e2e/pages/plots.ts similarity index 99% rename from test/automation/src/positron/plots.ts rename to test/e2e/pages/plots.ts index c3be1c106b1..448273e497e 100644 --- a/test/automation/src/positron/plots.ts +++ b/test/e2e/pages/plots.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; const CURRENT_PLOT = '.plot-instance img'; const CURRENT_STATIC_PLOT = '.plot-instance.static-plot-instance img'; diff --git a/test/automation/src/positron/popups.ts b/test/e2e/pages/popups.ts similarity index 99% rename from test/automation/src/positron/popups.ts rename to test/e2e/pages/popups.ts index ee7620b6fb2..4921a8566b0 100644 --- a/test/automation/src/positron/popups.ts +++ b/test/e2e/pages/popups.ts @@ -5,7 +5,7 @@ import { expect } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; const POSITRON_MODAL_DIALOG_BOX = '.positron-modal-dialog-box'; const POSITRON_MODAL_DIALOG_BOX_OK = '.positron-modal-dialog-box .ok-cancel-action-bar .positron-button.action-bar-button.default'; diff --git a/test/automation/src/positron/quickInput.ts b/test/e2e/pages/quickInput.ts similarity index 98% rename from test/automation/src/positron/quickInput.ts rename to test/e2e/pages/quickInput.ts index 9796b318667..0fdeaef9301 100644 --- a/test/automation/src/positron/quickInput.ts +++ b/test/e2e/pages/quickInput.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; export class QuickInput { diff --git a/test/automation/src/positron/quickaccess.ts b/test/e2e/pages/quickaccess.ts similarity index 99% rename from test/automation/src/positron/quickaccess.ts rename to test/e2e/pages/quickaccess.ts index 8da02090228..48f57ddb437 100644 --- a/test/automation/src/positron/quickaccess.ts +++ b/test/e2e/pages/quickaccess.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; import { basename, isAbsolute } from 'path'; import { QuickInput } from './quickInput'; import { expect } from '@playwright/test'; diff --git a/test/automation/src/positron/settings.ts b/test/e2e/pages/settings.ts similarity index 97% rename from test/automation/src/positron/settings.ts rename to test/e2e/pages/settings.ts index 5c960ea5a25..c4ad3fdc4ab 100644 --- a/test/automation/src/positron/settings.ts +++ b/test/e2e/pages/settings.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; import { Editor } from './editor'; import { Editors } from './editors'; import { QuickAccess } from './quickaccess'; diff --git a/test/automation/src/positron/sideBar.ts b/test/e2e/pages/sideBar.ts similarity index 94% rename from test/automation/src/positron/sideBar.ts rename to test/e2e/pages/sideBar.ts index cf2aef0de45..b9e20760cec 100644 --- a/test/automation/src/positron/sideBar.ts +++ b/test/e2e/pages/sideBar.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; const HIDE_SECONDARY_SIDE_BAR = '[aria-label="Hide Secondary Side Bar"]'; diff --git a/test/automation/src/positron/terminal.ts b/test/e2e/pages/terminal.ts similarity index 98% rename from test/automation/src/positron/terminal.ts rename to test/e2e/pages/terminal.ts index 88cc6d7f7d7..1a5d47b648c 100644 --- a/test/automation/src/positron/terminal.ts +++ b/test/e2e/pages/terminal.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; import { QuickAccess } from './quickaccess'; const TERMINAL_WRAPPER = '#terminal .terminal-wrapper'; diff --git a/test/automation/src/positron/testExplorer.ts b/test/e2e/pages/testExplorer.ts similarity index 100% rename from test/automation/src/positron/testExplorer.ts rename to test/e2e/pages/testExplorer.ts diff --git a/test/automation/src/positron/topActionBar.ts b/test/e2e/pages/topActionBar.ts similarity index 96% rename from test/automation/src/positron/topActionBar.ts rename to test/e2e/pages/topActionBar.ts index 8396d3f8b3a..a141814e139 100644 --- a/test/automation/src/positron/topActionBar.ts +++ b/test/e2e/pages/topActionBar.ts @@ -5,7 +5,7 @@ import { Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; const POSITRON_TOP_ACTION_BAR = 'div[id="workbench.parts.positron-top-action-bar"]'; const POSITRON_TOP_ACTION_SAVE_BUTTON = 'div[id="workbench.parts.positron-top-action-bar"] .action-bar-region-left .action-bar-button[aria-label="Save"]'; diff --git a/test/automation/src/positron/utils/aws.ts b/test/e2e/pages/utils/aws.ts similarity index 100% rename from test/automation/src/positron/utils/aws.ts rename to test/e2e/pages/utils/aws.ts diff --git a/test/automation/src/positron/utils/interpreterInfo.ts b/test/e2e/pages/utils/interpreterInfo.ts similarity index 100% rename from test/automation/src/positron/utils/interpreterInfo.ts rename to test/e2e/pages/utils/interpreterInfo.ts diff --git a/test/automation/src/positron/variables.ts b/test/e2e/pages/variables.ts similarity index 99% rename from test/automation/src/positron/variables.ts rename to test/e2e/pages/variables.ts index d08675f6d82..8bbe2c13f81 100644 --- a/test/automation/src/positron/variables.ts +++ b/test/e2e/pages/variables.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; import * as os from 'os'; import { expect, Locator } from '@playwright/test'; diff --git a/test/automation/src/positron/viewer.ts b/test/e2e/pages/viewer.ts similarity index 97% rename from test/automation/src/positron/viewer.ts rename to test/e2e/pages/viewer.ts index fb341615677..8b9346cf1ab 100644 --- a/test/automation/src/positron/viewer.ts +++ b/test/e2e/pages/viewer.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { FrameLocator, Locator } from '@playwright/test'; -import { Code } from '../code'; +import { Code } from '../automation/code'; const OUTER_FRAME = '.webview'; const INNER_FRAME = '#active-frame'; diff --git a/test/automation/src/positron/welcome.ts b/test/e2e/pages/welcome.ts similarity index 97% rename from test/automation/src/positron/welcome.ts rename to test/e2e/pages/welcome.ts index 805edd64ecf..973e8c38097 100644 --- a/test/automation/src/positron/welcome.ts +++ b/test/e2e/pages/welcome.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../code'; +import { Code } from '../automation/code'; const LOGO = '.product-logo'; const TITLE = '.gettingStartedCategoriesContainer div.header div .positron'; diff --git a/test/e2e/areas/_global.setup.ts b/test/e2e/tests/_global.setup.ts similarity index 100% rename from test/e2e/areas/_global.setup.ts rename to test/e2e/tests/_global.setup.ts diff --git a/test/e2e/areas/_test.setup.ts b/test/e2e/tests/_test.setup.ts similarity index 97% rename from test/e2e/areas/_test.setup.ts rename to test/e2e/tests/_test.setup.ts index e0927bbdac0..041f40dc313 100644 --- a/test/e2e/areas/_test.setup.ts +++ b/test/e2e/tests/_test.setup.ts @@ -22,7 +22,7 @@ import archiver from 'archiver'; // Local imports import { createLogger, createApp, TestTags } from '../helpers'; -import { Application, Logger, PositronPythonFixtures, PositronRFixtures, PositronUserSettingsFixtures, UserSetting } from '../../automation'; +import { Application, Logger, PythonFixtures, RFixtures, UserSetting, UserSettingsFixtures } from '../automation'; // Constants const TEMP_DIR = `temp-${randomUUID()}`; @@ -114,9 +114,9 @@ export const test = base.extend({ if (!currentInterpreter.includes(interpreterName)) { if (interpreterName === 'Python') { - await PositronPythonFixtures.SetupFixtures(app, false); + await PythonFixtures.SetupFixtures(app, false); } else if (interpreterName === 'R') { - await PositronRFixtures.SetupFixtures(app, false); + await RFixtures.SetupFixtures(app, false); } } }; @@ -147,7 +147,7 @@ export const test = base.extend({ { scope: 'test' }], userSettings: [async ({ app }, use) => { - const userSettings = new PositronUserSettingsFixtures(app); + const userSettings = new UserSettingsFixtures(app); const setUserSetting = async ( settings: [string, string][], diff --git a/test/e2e/areas/action-bar/editor-action-bar.test.ts b/test/e2e/tests/action-bar/editor-action-bar.test.ts similarity index 99% rename from test/e2e/areas/action-bar/editor-action-bar.test.ts rename to test/e2e/tests/action-bar/editor-action-bar.test.ts index 4a2c7514a15..4319badf361 100644 --- a/test/e2e/areas/action-bar/editor-action-bar.test.ts +++ b/test/e2e/tests/action-bar/editor-action-bar.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { test, expect, tags } from '../_test.setup'; -import { Application } from '../../../automation'; +import { Application } from '../../automation'; import { Page } from '@playwright/test'; import path = require('path'); diff --git a/test/e2e/areas/apps/python-apps.test.ts b/test/e2e/tests/apps/python-apps.test.ts similarity index 100% rename from test/e2e/areas/apps/python-apps.test.ts rename to test/e2e/tests/apps/python-apps.test.ts diff --git a/test/e2e/areas/apps/shiny.test.ts b/test/e2e/tests/apps/shiny.test.ts similarity index 93% rename from test/e2e/areas/apps/shiny.test.ts rename to test/e2e/tests/apps/shiny.test.ts index 39c23508d4f..7fcaa63b6b3 100644 --- a/test/e2e/areas/apps/shiny.test.ts +++ b/test/e2e/tests/apps/shiny.test.ts @@ -13,8 +13,8 @@ test.use({ test.describe('Shiny Application', { tag: [tags.APPS, tags.VIEWER, tags.WIN, tags.WEB] }, () => { test.beforeAll(async function ({ app }) { try { - await app.workbench.positronExtensions.installExtension('posit.shiny', true); - await app.workbench.positronExtensions.closeExtension('Shiny'); + await app.workbench.extensions.installExtension('posit.shiny', true); + await app.workbench.extensions.closeExtension('Shiny'); } catch (e) { await app.code.driver.takeScreenshot('shinySetup'); throw e; diff --git a/test/e2e/areas/connections/connections-db.test.ts b/test/e2e/tests/connections/connections-db.test.ts similarity index 100% rename from test/e2e/areas/connections/connections-db.test.ts rename to test/e2e/tests/connections/connections-db.test.ts diff --git a/test/e2e/areas/console/console-ansi.test.ts b/test/e2e/tests/console/console-ansi.test.ts similarity index 100% rename from test/e2e/areas/console/console-ansi.test.ts rename to test/e2e/tests/console/console-ansi.test.ts diff --git a/test/e2e/areas/console/console-autocomplete.test.ts b/test/e2e/tests/console/console-autocomplete.test.ts similarity index 100% rename from test/e2e/areas/console/console-autocomplete.test.ts rename to test/e2e/tests/console/console-autocomplete.test.ts diff --git a/test/e2e/areas/console/console-clipboard.test.ts b/test/e2e/tests/console/console-clipboard.test.ts similarity index 97% rename from test/e2e/areas/console/console-clipboard.test.ts rename to test/e2e/tests/console/console-clipboard.test.ts index b5aec80415b..cf69db87b06 100644 --- a/test/e2e/areas/console/console-clipboard.test.ts +++ b/test/e2e/tests/console/console-clipboard.test.ts @@ -5,7 +5,7 @@ import * as os from 'os'; import { test, tags } from '../_test.setup'; -import { Application, Console } from '../../../automation'; +import { Application, Console } from '../../automation'; test.use({ suiteId: __filename diff --git a/test/e2e/areas/console/console-history.test.ts b/test/e2e/tests/console/console-history.test.ts similarity index 98% rename from test/e2e/areas/console/console-history.test.ts rename to test/e2e/tests/console/console-history.test.ts index 00bbaa01b90..a61cd8158de 100644 --- a/test/e2e/areas/console/console-history.test.ts +++ b/test/e2e/tests/console/console-history.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../../automation'; +import { Application } from '../../automation'; import { test, tags } from '../_test.setup'; test.use({ diff --git a/test/e2e/areas/console/console-input.test.ts b/test/e2e/tests/console/console-input.test.ts similarity index 100% rename from test/e2e/areas/console/console-input.test.ts rename to test/e2e/tests/console/console-input.test.ts diff --git a/test/e2e/areas/console/console-output.test.ts b/test/e2e/tests/console/console-output.test.ts similarity index 100% rename from test/e2e/areas/console/console-output.test.ts rename to test/e2e/tests/console/console-output.test.ts diff --git a/test/e2e/areas/console/console-python.test.ts b/test/e2e/tests/console/console-python.test.ts similarity index 100% rename from test/e2e/areas/console/console-python.test.ts rename to test/e2e/tests/console/console-python.test.ts diff --git a/test/e2e/areas/console/console-r.test.ts b/test/e2e/tests/console/console-r.test.ts similarity index 100% rename from test/e2e/areas/console/console-r.test.ts rename to test/e2e/tests/console/console-r.test.ts diff --git a/test/e2e/areas/data-explorer/100x100-pandas.test.ts b/test/e2e/tests/data-explorer/100x100-pandas.test.ts similarity index 100% rename from test/e2e/areas/data-explorer/100x100-pandas.test.ts rename to test/e2e/tests/data-explorer/100x100-pandas.test.ts diff --git a/test/e2e/areas/data-explorer/100x100-polars.test.ts b/test/e2e/tests/data-explorer/100x100-polars.test.ts similarity index 100% rename from test/e2e/areas/data-explorer/100x100-polars.test.ts rename to test/e2e/tests/data-explorer/100x100-polars.test.ts diff --git a/test/e2e/areas/data-explorer/100x100-r.test.ts b/test/e2e/tests/data-explorer/100x100-r.test.ts similarity index 100% rename from test/e2e/areas/data-explorer/100x100-r.test.ts rename to test/e2e/tests/data-explorer/100x100-r.test.ts diff --git a/test/e2e/areas/data-explorer/data-explorer-headless.test.ts b/test/e2e/tests/data-explorer/data-explorer-headless.test.ts similarity index 97% rename from test/e2e/areas/data-explorer/data-explorer-headless.test.ts rename to test/e2e/tests/data-explorer/data-explorer-headless.test.ts index ddb727b406a..03cc792a136 100644 --- a/test/e2e/areas/data-explorer/data-explorer-headless.test.ts +++ b/test/e2e/tests/data-explorer/data-explorer-headless.test.ts @@ -5,7 +5,7 @@ import { join } from 'path'; import { test, expect, tags } from '../_test.setup'; -import { Application, Logger } from '../../../automation'; +import { Application, Logger } from '../../automation'; test.use({ suiteId: __filename diff --git a/test/e2e/areas/data-explorer/data-explorer-python-pandas.test.ts b/test/e2e/tests/data-explorer/data-explorer-python-pandas.test.ts similarity index 100% rename from test/e2e/areas/data-explorer/data-explorer-python-pandas.test.ts rename to test/e2e/tests/data-explorer/data-explorer-python-pandas.test.ts diff --git a/test/e2e/areas/data-explorer/data-explorer-python-polars.test.ts b/test/e2e/tests/data-explorer/data-explorer-python-polars.test.ts similarity index 100% rename from test/e2e/areas/data-explorer/data-explorer-python-polars.test.ts rename to test/e2e/tests/data-explorer/data-explorer-python-polars.test.ts diff --git a/test/e2e/areas/data-explorer/data-explorer-r.test.ts b/test/e2e/tests/data-explorer/data-explorer-r.test.ts similarity index 100% rename from test/e2e/areas/data-explorer/data-explorer-r.test.ts rename to test/e2e/tests/data-explorer/data-explorer-r.test.ts diff --git a/test/e2e/areas/data-explorer/duckdb-sparklines.test.ts b/test/e2e/tests/data-explorer/duckdb-sparklines.test.ts similarity index 98% rename from test/e2e/areas/data-explorer/duckdb-sparklines.test.ts rename to test/e2e/tests/data-explorer/duckdb-sparklines.test.ts index b08d5bd39ed..f1b94a85f38 100644 --- a/test/e2e/areas/data-explorer/duckdb-sparklines.test.ts +++ b/test/e2e/tests/data-explorer/duckdb-sparklines.test.ts @@ -109,7 +109,7 @@ test.describe('Data Explorer - DuckDB Column Summary', { }); await app.workbench.layouts.enterLayout('stacked'); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await app.workbench.dataExplorer.closeDataExplorer(); await app.workbench.variables.toggleVariablesView(); diff --git a/test/e2e/areas/data-explorer/helpers/100x100.ts b/test/e2e/tests/data-explorer/helpers/100x100.ts similarity index 98% rename from test/e2e/areas/data-explorer/helpers/100x100.ts rename to test/e2e/tests/data-explorer/helpers/100x100.ts index ad8f77b3028..904ae800599 100644 --- a/test/e2e/areas/data-explorer/helpers/100x100.ts +++ b/test/e2e/tests/data-explorer/helpers/100x100.ts @@ -5,8 +5,8 @@ import { join } from 'path'; import * as fs from 'fs'; -import { Application } from '../../../../automation'; import { expect } from '@playwright/test'; +import { Application } from '../../../automation'; export const testDataExplorer = async ( app: Application, diff --git a/test/e2e/areas/data-explorer/large-data-frame.test.ts b/test/e2e/tests/data-explorer/large-data-frame.test.ts similarity index 96% rename from test/e2e/areas/data-explorer/large-data-frame.test.ts rename to test/e2e/tests/data-explorer/large-data-frame.test.ts index 72a840438a8..4bc4c82a744 100644 --- a/test/e2e/areas/data-explorer/large-data-frame.test.ts +++ b/test/e2e/tests/data-explorer/large-data-frame.test.ts @@ -35,7 +35,7 @@ test.describe('Data Explorer - Large Data Frame', { expect(await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText() === 'Data: df'); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await expect(async () => { // Validate full grid by checking bottom right corner data @@ -69,7 +69,7 @@ test.describe('Data Explorer - Large Data Frame', { expect(await app.code.driver.page.locator('.label-name:has-text("Data: df2")').innerText() === 'Data: df2'); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await expect(async () => { // Validate full grid by checking bottom right corner data diff --git a/test/e2e/areas/data-explorer/sparklines.test.ts b/test/e2e/tests/data-explorer/sparklines.test.ts similarity index 96% rename from test/e2e/areas/data-explorer/sparklines.test.ts rename to test/e2e/tests/data-explorer/sparklines.test.ts index ea8b4478cca..ca5a3f0958d 100644 --- a/test/e2e/areas/data-explorer/sparklines.test.ts +++ b/test/e2e/tests/data-explorer/sparklines.test.ts @@ -3,7 +3,8 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../../automation'; + +import { Application } from '../../automation'; import { test, expect, tags } from '../_test.setup'; test.use({ @@ -44,7 +45,7 @@ async function openDataExplorerColumnProfile(app: Application, variableName: str }).toPass(); await app.workbench.quickaccess.runCommand('workbench.action.toggleSidebarVisibility'); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await app.workbench.dataExplorer.getDataExplorerTableData(); await app.workbench.dataExplorer.expandColumnProfile(0); } diff --git a/test/e2e/areas/data-explorer/very-large-data-frame.test.ts b/test/e2e/tests/data-explorer/very-large-data-frame.test.ts similarity index 99% rename from test/e2e/areas/data-explorer/very-large-data-frame.test.ts rename to test/e2e/tests/data-explorer/very-large-data-frame.test.ts index d3ed5761b8c..e43e88bc39f 100644 --- a/test/e2e/areas/data-explorer/very-large-data-frame.test.ts +++ b/test/e2e/tests/data-explorer/very-large-data-frame.test.ts @@ -5,8 +5,8 @@ import { fail } from 'assert'; import { join } from 'path'; -import { downloadFileFromS3, S3FileDownloadOptions } from '../../../automation'; import { test, expect, tags } from '../_test.setup'; +import { downloadFileFromS3, S3FileDownloadOptions } from '../../automation'; test.use({ suiteId: __filename diff --git a/test/e2e/areas/data-explorer/xlsx-data-frame.test.ts b/test/e2e/tests/data-explorer/xlsx-data-frame.test.ts similarity index 94% rename from test/e2e/areas/data-explorer/xlsx-data-frame.test.ts rename to test/e2e/tests/data-explorer/xlsx-data-frame.test.ts index f916e646a77..a64734a248a 100644 --- a/test/e2e/areas/data-explorer/xlsx-data-frame.test.ts +++ b/test/e2e/tests/data-explorer/xlsx-data-frame.test.ts @@ -29,7 +29,7 @@ test.describe('Data Explorer - XLSX', { await app.code.driver.page.locator('.label-name:has-text("Data: df")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await app.workbench.dataExplorer.selectColumnMenuItem(1, 'Sort Descending'); const visibleTableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const firstRow = visibleTableData.at(0); @@ -46,7 +46,7 @@ test.describe('Data Explorer - XLSX', { await app.code.driver.page.locator('.label-name:has-text("Data: df2")').innerText(); }).toPass(); - await app.workbench.positronSideBar.closeSecondarySideBar(); + await app.workbench.sideBar.closeSecondarySideBar(); await app.workbench.dataExplorer.selectColumnMenuItem(1, 'Sort Descending'); const visibleTableData = await app.workbench.dataExplorer.getDataExplorerTableData(); const firstRow = visibleTableData.at(0); diff --git a/test/e2e/areas/editor/fast-execution.test.ts b/test/e2e/tests/editor/fast-execution.test.ts similarity index 100% rename from test/e2e/areas/editor/fast-execution.test.ts rename to test/e2e/tests/editor/fast-execution.test.ts diff --git a/test/e2e/areas/example.test.ts b/test/e2e/tests/example.test.ts similarity index 100% rename from test/e2e/areas/example.test.ts rename to test/e2e/tests/example.test.ts diff --git a/test/e2e/areas/help/f1.test.ts b/test/e2e/tests/help/f1.test.ts similarity index 100% rename from test/e2e/areas/help/f1.test.ts rename to test/e2e/tests/help/f1.test.ts diff --git a/test/e2e/areas/help/help.test.ts b/test/e2e/tests/help/help.test.ts similarity index 100% rename from test/e2e/areas/help/help.test.ts rename to test/e2e/tests/help/help.test.ts diff --git a/test/e2e/areas/layouts/layouts.test.ts b/test/e2e/tests/layouts/layouts.test.ts similarity index 100% rename from test/e2e/areas/layouts/layouts.test.ts rename to test/e2e/tests/layouts/layouts.test.ts diff --git a/test/e2e/areas/new-project-wizard/new-project-python.test.ts b/test/e2e/tests/new-project-wizard/new-project-python.test.ts similarity index 90% rename from test/e2e/areas/new-project-wizard/new-project-python.test.ts rename to test/e2e/tests/new-project-wizard/new-project-python.test.ts index a9890c7990e..59d957e55c8 100644 --- a/test/e2e/areas/new-project-wizard/new-project-python.test.ts +++ b/test/e2e/tests/new-project-wizard/new-project-python.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { PositronPythonFixtures, ProjectType, ProjectWizardNavigateAction } from '../../../automation'; +import { PythonFixtures, ProjectType, ProjectWizardNavigateAction } from '../../automation'; import { test, expect, tags } from '../_test.setup'; test.use({ @@ -22,7 +22,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, // This test relies on Conda already being installed on the machine test.slow(); const projSuffix = addRandomNumSuffix('_condaInstalled'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; await pw.startNewProject(ProjectType.PYTHON_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.projectNameLocationStep.appendToProjectName(projSuffix); @@ -34,7 +34,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, await expect(page.getByRole('button', { name: `Explorer Section: ${defaultProjectName + projSuffix}` })).toBeVisible({ timeout: 20000 }); // Check that the `.conda` folder gets created in the project await expect(async () => { - const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); + const projectFiles = await app.workbench.explorer.getExplorerProjectFiles(); expect(projectFiles).toContain('.conda'); }).toPass({ timeout: 50000 }); // The console should initialize without any prompts to install ipykernel @@ -47,7 +47,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, test('Create a new Venv environment [C627912]', { tag: [tags.CRITICAL, tags.WIN] }, async function ({ app, page }) { // This is the default behavior for a new Python Project in the Project Wizard const projSuffix = addRandomNumSuffix('_new_venv'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; await pw.startNewProject(ProjectType.PYTHON_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.projectNameLocationStep.appendToProjectName(projSuffix); @@ -66,15 +66,15 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, annotation: [{ type: 'issue', description: 'https://github.com/posit-dev/positron/issues/5730' }], }, async function ({ app, page, python }) { const projSuffix = addRandomNumSuffix('_ipykernelInstalled'); - const pw = app.workbench.positronNewProjectWizard; - const pythonFixtures = new PositronPythonFixtures(app); + const pw = app.workbench.newProjectWizard; + const pythonFixtures = new PythonFixtures(app); // Start the Python interpreter and ensure ipykernel is installed await pythonFixtures.startAndGetPythonInterpreter(true); const interpreterInfo = - await app.workbench.positronInterpreterDropdown.getSelectedInterpreterInfo(); + await app.workbench.interpreterDropdown.getSelectedInterpreterInfo(); expect(interpreterInfo?.path).toBeDefined(); - await app.workbench.positronInterpreterDropdown.closeInterpreterDropdown(); + await app.workbench.interpreterDropdown.closeInterpreterDropdown(); // Create a new Python project and use the selected python interpreter await pw.startNewProject(ProjectType.PYTHON_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); @@ -103,15 +103,15 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, tag: [tags.WIN], }, async function ({ app, page }) { const projSuffix = addRandomNumSuffix('_noIpykernel'); - const pw = app.workbench.positronNewProjectWizard; - const pythonFixtures = new PositronPythonFixtures(app); + const pw = app.workbench.newProjectWizard; + const pythonFixtures = new PythonFixtures(app); // Start the Python interpreter and uninstall ipykernel await pythonFixtures.startAndGetPythonInterpreter(true); const interpreterInfo = - await app.workbench.positronInterpreterDropdown.getSelectedInterpreterInfo(); + await app.workbench.interpreterDropdown.getSelectedInterpreterInfo(); expect(interpreterInfo?.path).toBeDefined(); - await app.workbench.positronInterpreterDropdown.closeInterpreterDropdown(); + await app.workbench.interpreterDropdown.closeInterpreterDropdown(); await app.workbench.console.typeToConsole('pip uninstall -y ipykernel'); await app.workbench.console.sendEnterKey(); await app.workbench.console.waitForConsoleContents('Successfully uninstalled ipykernel'); @@ -152,7 +152,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, test('Default Python Project with git init [C674522]', { tag: [tags.CRITICAL, tags.WIN] }, async function ({ app, page }) { const projSuffix = addRandomNumSuffix('_gitInit'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; await pw.startNewProject(ProjectType.PYTHON_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.projectNameLocationStep.appendToProjectName(projSuffix); @@ -170,7 +170,7 @@ test.describe('Python - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, // Verify git-related files are present await expect(async () => { - const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); + const projectFiles = await app.workbench.explorer.getExplorerProjectFiles(); expect(projectFiles).toContain('.gitignore'); expect(projectFiles).toContain('README.md'); // Ideally, we'd check for the .git folder, but it's not visible in the Explorer diff --git a/test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts b/test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts similarity index 93% rename from test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts rename to test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts index 099af805d05..fbb9cf7cef8 100644 --- a/test/e2e/areas/new-project-wizard/new-project-r-jupyter.test.ts +++ b/test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { ProjectType, ProjectWizardNavigateAction } from '../../../automation'; +import { ProjectType, ProjectWizardNavigateAction } from '../../automation'; import { test, expect, tags } from '../_test.setup'; test.use({ @@ -22,7 +22,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = test('R - Project Defaults [C627913]', { tag: [tags.CRITICAL, tags.WIN] }, async function ({ app }) { const projSuffix = addRandomNumSuffix('_defaults'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; await pw.startNewProject(ProjectType.R_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.projectNameLocationStep.appendToProjectName(projSuffix); @@ -37,7 +37,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = test('R - Accept Renv install [C633084]', { tag: [tags.WIN] }, async function ({ app, r }) { const projSuffix = addRandomNumSuffix('_installRenv'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; // Create a new R project - select Renv and install await pw.startNewProject(ProjectType.R_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); @@ -65,7 +65,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = await expect(app.code.driver.page.getByRole('button', { name: 'Explorer Section: my-r-' })).toHaveText(defaultProjectName + projSuffix, { timeout: 15000 }); // Verify renv files are present await expect(async () => { - const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); + const projectFiles = await app.workbench.explorer.getExplorerProjectFiles(); expect(projectFiles).toContain('renv'); expect(projectFiles).toContain('.Rprofile'); expect(projectFiles).toContain('renv.lock'); @@ -77,7 +77,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = test('R - Renv already installed [C656251]', { tag: [tags.WIN] }, async function ({ app }) { // Renv will already be installed from the previous test - which is why tests are marked as "serial" const projSuffix = addRandomNumSuffix('_renvAlreadyInstalled'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; await pw.startNewProject(ProjectType.R_PROJECT); await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.projectNameLocationStep.appendToProjectName(projSuffix); @@ -89,7 +89,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = await expect(app.code.driver.page.getByRole('button', { name: 'Explorer Section: my-r-' })).toHaveText(defaultProjectName + projSuffix, { timeout: 15000 }); // Verify renv files are present await expect(async () => { - const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); + const projectFiles = await app.workbench.explorer.getExplorerProjectFiles(); expect(projectFiles).toContain('renv'); expect(projectFiles).toContain('.Rprofile'); expect(projectFiles).toContain('renv.lock'); @@ -100,7 +100,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = test('R - Cancel Renv install [C656252]', { tag: [tags.WIN] }, async function ({ app }) { const projSuffix = addRandomNumSuffix('_cancelRenvInstall'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; // Remove renv package so we are prompted to install it again await app.workbench.console.executeCode('R', 'remove.packages("renv")', '>'); await app.workbench.console.waitForConsoleContents(`Removing package`); @@ -118,7 +118,7 @@ test.describe('R - New Project Wizard', { tag: [tags.NEW_PROJECT_WIZARD] }, () = await app.workbench.popups.installRenv(false); // Verify renv files are **not** present await expect(async () => { - const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); + const projectFiles = await app.workbench.explorer.getExplorerProjectFiles(); expect(projectFiles).not.toContain('renv'); expect(projectFiles).not.toContain('.Rprofile'); expect(projectFiles).not.toContain('renv.lock'); @@ -135,7 +135,7 @@ test.describe('Jupyter - New Project Wizard', () => { annotation: [{ type: 'issue', description: 'https://github.com/posit-dev/positron/issues/5730' }], }, async function ({ app }) { const projSuffix = addRandomNumSuffix('_defaults'); - const pw = app.workbench.positronNewProjectWizard; + const pw = app.workbench.newProjectWizard; await pw.startNewProject(ProjectType.JUPYTER_NOTEBOOK); await pw.navigate(ProjectWizardNavigateAction.NEXT); await pw.projectNameLocationStep.appendToProjectName(projSuffix); diff --git a/test/e2e/areas/notebook/notebook-create.test.ts b/test/e2e/tests/notebook/notebook-create.test.ts similarity index 100% rename from test/e2e/areas/notebook/notebook-create.test.ts rename to test/e2e/tests/notebook/notebook-create.test.ts diff --git a/test/e2e/areas/notebook/notebook-large-python.test.ts b/test/e2e/tests/notebook/notebook-large-python.test.ts similarity index 100% rename from test/e2e/areas/notebook/notebook-large-python.test.ts rename to test/e2e/tests/notebook/notebook-large-python.test.ts diff --git a/test/e2e/areas/outline/outline.test.ts b/test/e2e/tests/outline/outline.test.ts similarity index 91% rename from test/e2e/areas/outline/outline.test.ts rename to test/e2e/tests/outline/outline.test.ts index 0f30ddcc898..089aaf6874a 100644 --- a/test/e2e/areas/outline/outline.test.ts +++ b/test/e2e/tests/outline/outline.test.ts @@ -16,7 +16,7 @@ test.describe('Outline #web #win', { test('Python - Verify Outline Contents [C956870]', async function ({ app, python }) { await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-py', 'chinook-sqlite.py')); - const outlineData = await app.workbench.positronOutline.getOutlineData(); + const outlineData = await app.workbench.outline.getOutlineData(); const expected = [ 'data_file_pathdata_file_path = os.path.join(os.getcwd(), \'data-files\', \'chinook\', \'chinook.db\')', 'connconn = sqlite3.connect(data_file_path)', @@ -34,7 +34,7 @@ test.describe('Outline #web #win', { test('R - Verify Outline Contents [C956871]', async function ({ app, r }) { await app.workbench.quickaccess.openFile(join(app.workspacePathOrFolder, 'workspaces', 'chinook-db-r', 'chinook-sqlite.r')); - const outlineData = await app.workbench.positronOutline.getOutlineData(); + const outlineData = await app.workbench.outline.getOutlineData(); const expected = [ 'con', 'albums', diff --git a/test/e2e/areas/output/console-ouput-log.test.ts b/test/e2e/tests/output/console-ouput-log.test.ts similarity index 82% rename from test/e2e/areas/output/console-ouput-log.test.ts rename to test/e2e/tests/output/console-ouput-log.test.ts index 7bb6c604491..5f3de2b1403 100644 --- a/test/e2e/areas/output/console-ouput-log.test.ts +++ b/test/e2e/tests/output/console-ouput-log.test.ts @@ -21,9 +21,9 @@ test.describe('Console Output Log', { tag: [tags.WEB, tags.OUTPUT, tags.CONSOLE] await app.workbench.console.typeToConsole('a = b'); await app.workbench.console.sendEnterKey(); - await app.workbench.positronOutput.clickOutputTab(); + await app.workbench.output.clickOutputTab(); await app.workbench.layouts.enterLayout('fullSizedPanel'); - await app.workbench.positronOutput.waitForOutContaining("name 'b' is not defined"); + await app.workbench.output.waitForOutContaining("name 'b' is not defined"); }); test('R - Verify Console Output Log Contents [C667519]', async function ({ app, r }) { @@ -33,8 +33,8 @@ test.describe('Console Output Log', { tag: [tags.WEB, tags.OUTPUT, tags.CONSOLE] await app.workbench.console.typeToConsole('a = b'); await app.workbench.console.sendEnterKey(); - await app.workbench.positronOutput.clickOutputTab(); + await app.workbench.output.clickOutputTab(); await app.workbench.layouts.enterLayout('fullSizedPanel'); - await app.workbench.positronOutput.waitForOutContaining("object 'b' not found"); + await app.workbench.output.waitForOutContaining("object 'b' not found"); }); }); diff --git a/test/e2e/areas/plots/autos-linux.png b/test/e2e/tests/plots/autos-linux.png similarity index 100% rename from test/e2e/areas/plots/autos-linux.png rename to test/e2e/tests/plots/autos-linux.png diff --git a/test/e2e/areas/plots/autos-win32.png b/test/e2e/tests/plots/autos-win32.png similarity index 100% rename from test/e2e/areas/plots/autos-win32.png rename to test/e2e/tests/plots/autos-win32.png diff --git a/test/e2e/areas/plots/graphviz-linux.png b/test/e2e/tests/plots/graphviz-linux.png similarity index 100% rename from test/e2e/areas/plots/graphviz-linux.png rename to test/e2e/tests/plots/graphviz-linux.png diff --git a/test/e2e/areas/plots/graphviz-win32.png b/test/e2e/tests/plots/graphviz-win32.png similarity index 100% rename from test/e2e/areas/plots/graphviz-win32.png rename to test/e2e/tests/plots/graphviz-win32.png diff --git a/test/e2e/areas/plots/matplotlib-interact.test.ts b/test/e2e/tests/plots/matplotlib-interact.test.ts similarity index 100% rename from test/e2e/areas/plots/matplotlib-interact.test.ts rename to test/e2e/tests/plots/matplotlib-interact.test.ts diff --git a/test/e2e/areas/plots/plots.test.ts b/test/e2e/tests/plots/plots.test.ts similarity index 99% rename from test/e2e/areas/plots/plots.test.ts rename to test/e2e/tests/plots/plots.test.ts index 9b73bba29a2..2886b4f6b73 100644 --- a/test/e2e/areas/plots/plots.test.ts +++ b/test/e2e/tests/plots/plots.test.ts @@ -9,7 +9,7 @@ const resembleCompareImages = require('resemblejs/compareImages'); import { ComparisonOptions } from 'resemblejs'; import * as fs from 'fs'; import { fail } from 'assert'; -import { Application } from '../../../automation'; +import { Application } from '../../automation'; test.use({ suiteId: __filename diff --git a/test/e2e/areas/plots/pythonScatterplot-linux.png b/test/e2e/tests/plots/pythonScatterplot-linux.png similarity index 100% rename from test/e2e/areas/plots/pythonScatterplot-linux.png rename to test/e2e/tests/plots/pythonScatterplot-linux.png diff --git a/test/e2e/areas/plots/pythonScatterplot-win32.png b/test/e2e/tests/plots/pythonScatterplot-win32.png similarity index 100% rename from test/e2e/areas/plots/pythonScatterplot-win32.png rename to test/e2e/tests/plots/pythonScatterplot-win32.png diff --git a/test/e2e/areas/quarto/quarto.test.ts b/test/e2e/tests/quarto/quarto.test.ts similarity index 98% rename from test/e2e/areas/quarto/quarto.test.ts rename to test/e2e/tests/quarto/quarto.test.ts index 679a8ec76f6..7904b156eac 100644 --- a/test/e2e/areas/quarto/quarto.test.ts +++ b/test/e2e/tests/quarto/quarto.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../../automation'; +import { Application } from '../../automation'; import { test, expect, tags } from '../_test.setup'; const path = require('path'); const fs = require('fs-extra'); diff --git a/test/e2e/areas/r-markdown/r-markdown.test.ts b/test/e2e/tests/r-markdown/r-markdown.test.ts similarity index 95% rename from test/e2e/areas/r-markdown/r-markdown.test.ts rename to test/e2e/tests/r-markdown/r-markdown.test.ts index 833d3705e56..5ffb113aaab 100644 --- a/test/e2e/areas/r-markdown/r-markdown.test.ts +++ b/test/e2e/tests/r-markdown/r-markdown.test.ts @@ -23,7 +23,7 @@ test.describe('R Markdown', { tag: [tags.WEB, tags.R_MARKDOWN] }, () => { // Wrapped in expect.toPass to allow UI to update/render await expect(async () => { - const projectFiles = await app.workbench.positronExplorer.getExplorerProjectFiles(); + const projectFiles = await app.workbench.explorer.getExplorerProjectFiles(); expect(projectFiles).toContain('basicRmd.html'); }).toPass({ timeout: 80000 }); diff --git a/test/e2e/areas/r-pkg-development/r-pkg-development.test.ts b/test/e2e/tests/r-pkg-development/r-pkg-development.test.ts similarity index 100% rename from test/e2e/areas/r-pkg-development/r-pkg-development.test.ts rename to test/e2e/tests/r-pkg-development/r-pkg-development.test.ts diff --git a/test/e2e/areas/reticulate/reticulate.test.ts b/test/e2e/tests/reticulate/reticulate.test.ts similarity index 100% rename from test/e2e/areas/reticulate/reticulate.test.ts rename to test/e2e/tests/reticulate/reticulate.test.ts diff --git a/test/e2e/areas/test-explorer/test-explorer.test.ts b/test/e2e/tests/test-explorer/test-explorer.test.ts similarity index 100% rename from test/e2e/areas/test-explorer/test-explorer.test.ts rename to test/e2e/tests/test-explorer/test-explorer.test.ts diff --git a/test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts b/test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts similarity index 98% rename from test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts rename to test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts index a3f8d8b6ae7..e177d0f2700 100644 --- a/test/e2e/areas/top-action-bar/interpreter-dropdown.test.ts +++ b/test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { InterpreterDropdown, Console } from '../../../automation'; +import { InterpreterDropdown, Console } from '../../automation'; import { test, expect, tags } from '../_test.setup'; test.use({ diff --git a/test/e2e/areas/top-action-bar/top-action-bar-save.test.ts b/test/e2e/tests/top-action-bar/top-action-bar-save.test.ts similarity index 100% rename from test/e2e/areas/top-action-bar/top-action-bar-save.test.ts rename to test/e2e/tests/top-action-bar/top-action-bar-save.test.ts diff --git a/test/e2e/areas/variables/variables-expanded.test.ts b/test/e2e/tests/variables/variables-expanded.test.ts similarity index 100% rename from test/e2e/areas/variables/variables-expanded.test.ts rename to test/e2e/tests/variables/variables-expanded.test.ts diff --git a/test/e2e/areas/variables/variables-notebook.test.ts b/test/e2e/tests/variables/variables-notebook.test.ts similarity index 100% rename from test/e2e/areas/variables/variables-notebook.test.ts rename to test/e2e/tests/variables/variables-notebook.test.ts diff --git a/test/e2e/areas/variables/variables-pane.test.ts b/test/e2e/tests/variables/variables-pane.test.ts similarity index 100% rename from test/e2e/areas/variables/variables-pane.test.ts rename to test/e2e/tests/variables/variables-pane.test.ts diff --git a/test/e2e/areas/viewer/viewer.test.ts b/test/e2e/tests/viewer/viewer.test.ts similarity index 100% rename from test/e2e/areas/viewer/viewer.test.ts rename to test/e2e/tests/viewer/viewer.test.ts diff --git a/test/e2e/areas/welcome/welcome.test.ts b/test/e2e/tests/welcome/welcome.test.ts similarity index 100% rename from test/e2e/areas/welcome/welcome.test.ts rename to test/e2e/tests/welcome/welcome.test.ts diff --git a/test/e2e/yarn.lock b/test/e2e/yarn.lock deleted file mode 100644 index 2f0b49b089d..00000000000 --- a/test/e2e/yarn.lock +++ /dev/null @@ -1,1968 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@mapbox/node-pre-gyp@^1.0.0": - version "1.0.11" - resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@types/glob@*": - version "8.1.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz" - integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== - dependencies: - "@types/minimatch" "^5.1.2" - "@types/node" "*" - -"@types/minimatch@^5.1.2": - version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/mkdirp@^1.0.1": - version "1.0.2" - resolved "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-1.0.2.tgz" - integrity sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ== - dependencies: - "@types/node" "*" - -"@types/ncp@2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/ncp/-/ncp-2.0.1.tgz" - integrity sha512-TeiJ7uvv/92ugSqZ0v9l0eNXzutlki0aK+R1K5bfA5SYUil46ITlxLW4iNTCf55P4L5weCmaOdtxGeGWvudwPg== - dependencies: - "@types/node" "*" - -"@types/node-fetch@^2.5.10": - version "2.6.12" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz" - integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*": - version "22.10.1" - resolved "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz" - integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== - dependencies: - undici-types "~6.20.0" - -"@types/node@20.x": - version "20.17.9" - resolved "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz" - integrity sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw== - dependencies: - undici-types "~6.19.2" - -"@types/resemblejs@4.1.3": - version "4.1.3" - resolved "https://registry.npmjs.org/@types/resemblejs/-/resemblejs-4.1.3.tgz" - integrity sha512-p0NA5aACdWCK+I4NJbwUvFoixwYxvfLu+UqaiZt/J3+3PJavMYOxRrdbeXbbiKiMGdKdDFjoxlFWkkaMU7SDxA== - -"@types/rimraf@3.0.2": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== - dependencies: - "@types/glob" "*" - "@types/node" "*" - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archiver-utils@^5.0.0, archiver-utils@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz" - integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== - dependencies: - glob "^10.0.0" - graceful-fs "^4.2.0" - is-stream "^2.0.1" - lazystream "^1.0.0" - lodash "^4.17.15" - normalize-path "^3.0.0" - readable-stream "^4.0.0" - -archiver@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz" - integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== - dependencies: - archiver-utils "^5.0.2" - async "^3.2.4" - buffer-crc32 "^1.0.0" - readable-stream "^4.0.0" - readdir-glob "^1.1.2" - tar-stream "^3.0.0" - zip-stream "^6.0.1" - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -async@^3.2.4: - version "3.2.6" - resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -b4a@^1.6.4: - version "1.6.7" - resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz" - integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -bare-events@^2.2.0: - version "2.5.0" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz" - integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -buffer-crc32@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz" - integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -canvas@^2.11.2, canvas@2.11.2: - version "2.11.2" - resolved "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz" - integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.0" - nan "^2.17.0" - simple-get "^3.0.3" - -chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -compress-commons@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz" - integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== - dependencies: - crc-32 "^1.2.0" - crc32-stream "^6.0.0" - is-stream "^2.0.1" - normalize-path "^3.0.0" - readable-stream "^4.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz" - integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== - dependencies: - crc-32 "^1.2.0" - readable-stream "^4.0.0" - -cross-spawn@^6.0.5: - version "6.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz" - integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -debug@4: - version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.5: - version "1.23.5" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz" - integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.3" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.3" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-to-primitive@^1.2.1: - version "1.3.0" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz" - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== - dependencies: - merge "^1.2.0" - -fast-fifo@^1.2.0, fast-fifo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -glob@^10.0.0: - version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -gopd@^1.0.1, gopd@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -graceful-fs@^4.1.2, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.1.0" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz" - integrity sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q== - dependencies: - call-bind "^1.0.7" - -has-symbols@^1.0.3: - version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.3, inherits@~2.0.3, inherits@2: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-boolean-object@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.0.tgz" - integrity sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw== - dependencies: - call-bind "^1.0.7" - has-tostringtag "^1.0.2" - -is-callable@^1.1.3, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-finalizationregistry@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz" - integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== - dependencies: - call-bind "^1.0.7" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz" - integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw== - dependencies: - call-bind "^1.0.7" - has-tostringtag "^1.0.2" - -is-regex@^1.1.4: - version "1.2.0" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz" - integrity sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA== - dependencies: - call-bind "^1.0.7" - gopd "^1.1.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-stream@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.7, is-string@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz" - integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g== - dependencies: - call-bind "^1.0.7" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.4, is-symbol@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.0.tgz" - integrity sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A== - dependencies: - call-bind "^1.0.7" - has-symbols "^1.0.3" - safe-regex-test "^1.0.3" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.1.0: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nan@^2.17.0: - version "2.22.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz" - integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== - -ncp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1, object-inspect@^1.13.3: - version "1.13.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -once@^1.3.0, once@^1.3.1: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -readable-stream@^2.0.5: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readdir-glob@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz" - integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== - dependencies: - minimatch "^5.1.0" - -reflect.getprototypeof@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz" - integrity sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - which-builtin-type "^1.1.4" - -regexp.prototype.flags@^1.5.3: - version "1.5.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz" - integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.2" - -resemblejs@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resemblejs/-/resemblejs-5.0.0.tgz" - integrity sha512-+B0eP9k9VDP/YhBbH+ZdYmHiotdtuc6blVI+h8wwkY2cOow+uiIpSmgkBBBtrEAL0D31/gR/AJPwDeX5TcwmIA== - optionalDependencies: - canvas "2.11.2" - -resolve@^1.10.0: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -rimraf@^3.0.2, rimraf@3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -semver@^5.5.0, "semver@2 || 3 || 4 || 5": - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.5: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.8.2" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz" - integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.0: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^3.0.3: - version "3.1.1" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" - integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.20" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz" - integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== - -streamx@^2.15.0: - version "2.21.0" - resolved "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz" - integrity sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg== - dependencies: - fast-fifo "^1.3.2" - queue-tick "^1.0.1" - text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.padend@^3.0.0: - version "3.1.6" - resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz" - integrity sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tar-stream@^3.0.0: - version "3.1.7" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -tar@^6.1.11: - version "6.2.1" - resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -text-decoder@^1.1.0: - version "1.2.1" - resolved "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz" - integrity sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz" - integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - reflect.getprototypeof "^1.0.6" - -typed-array-length@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -watch@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz" - integrity sha512-1u+Z5n9Jc1E2c7qDO8SinPoZuHj7FgbgU1olSFoyaklduDvvtX7GMMtlE6OC9FTXq4KvNAOfj6Zu4vI1e9bAKA== - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.1.0" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz" - integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.0" - is-number-object "^1.1.0" - is-string "^1.1.0" - is-symbol "^1.1.0" - -which-builtin-type@^1.1.4: - version "1.2.0" - resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz" - integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== - dependencies: - call-bind "^1.0.7" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.2" - which-typed-array "^1.1.15" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.16" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz" - integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -zip-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz" - integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== - dependencies: - archiver-utils "^5.0.0" - compress-commons "^6.0.2" - readable-stream "^4.0.0" From 236667dd583c6afa431ea24304723ae42630af59 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 11:12:59 -0600 Subject: [PATCH 03/18] rename to infra --- test/e2e/helpers/create-app.ts | 2 +- test/e2e/helpers/logger.ts | 2 +- test/e2e/helpers/test-setup.ts | 2 +- test/e2e/{automation => infra}/application.ts | 0 test/e2e/{automation => infra}/code.ts | 0 test/e2e/{automation => infra}/driver.d.ts | 0 test/e2e/{automation => infra}/electron.ts | 0 test/e2e/{automation => infra}/fixtures/python.ts | 0 test/e2e/{automation => infra}/fixtures/r.ts | 0 test/e2e/{automation => infra}/fixtures/userSettings.ts | 0 test/e2e/{automation => infra}/index.ts | 0 test/e2e/{automation => infra}/logger.ts | 0 test/e2e/{automation => infra}/playwrightBrowser.ts | 0 test/e2e/{automation => infra}/playwrightDriver.ts | 0 test/e2e/{automation => infra}/playwrightElectron.ts | 0 test/e2e/{automation => infra}/processes.ts | 0 test/e2e/{automation => infra}/profiler.ts | 0 test/e2e/{automation => infra}/workbench.ts | 0 test/e2e/pages/clipboard.ts | 2 +- test/e2e/pages/connections.ts | 2 +- test/e2e/pages/console.ts | 2 +- test/e2e/pages/dataExplorer.ts | 4 ++-- test/e2e/pages/editor.ts | 2 +- test/e2e/pages/editors.ts | 2 +- test/e2e/pages/explorer.ts | 2 +- test/e2e/pages/extensions.ts | 2 +- test/e2e/pages/help.ts | 2 +- test/e2e/pages/interpreterDropdown.ts | 2 +- test/e2e/pages/layouts.ts | 4 ++-- test/e2e/pages/newProjectWizard.ts | 2 +- test/e2e/pages/notebooks.ts | 2 +- test/e2e/pages/outline.ts | 2 +- test/e2e/pages/output.ts | 2 +- test/e2e/pages/plots.ts | 2 +- test/e2e/pages/popups.ts | 2 +- test/e2e/pages/quickInput.ts | 2 +- test/e2e/pages/quickaccess.ts | 2 +- test/e2e/pages/settings.ts | 2 +- test/e2e/pages/sideBar.ts | 2 +- test/e2e/pages/terminal.ts | 2 +- test/e2e/pages/topActionBar.ts | 2 +- test/e2e/pages/variables.ts | 2 +- test/e2e/pages/viewer.ts | 2 +- test/e2e/pages/welcome.ts | 2 +- test/e2e/tests/_test.setup.ts | 2 +- test/e2e/tests/action-bar/editor-action-bar.test.ts | 2 +- test/e2e/tests/console/console-clipboard.test.ts | 2 +- test/e2e/tests/console/console-history.test.ts | 2 +- test/e2e/tests/data-explorer/data-explorer-headless.test.ts | 2 +- test/e2e/tests/data-explorer/helpers/100x100.ts | 2 +- test/e2e/tests/data-explorer/sparklines.test.ts | 2 +- test/e2e/tests/data-explorer/very-large-data-frame.test.ts | 2 +- test/e2e/tests/new-project-wizard/new-project-python.test.ts | 2 +- .../tests/new-project-wizard/new-project-r-jupyter.test.ts | 2 +- test/e2e/tests/plots/plots.test.ts | 2 +- test/e2e/tests/quarto/quarto.test.ts | 2 +- test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts | 2 +- 57 files changed, 44 insertions(+), 44 deletions(-) rename test/e2e/{automation => infra}/application.ts (100%) rename test/e2e/{automation => infra}/code.ts (100%) rename test/e2e/{automation => infra}/driver.d.ts (100%) rename test/e2e/{automation => infra}/electron.ts (100%) rename test/e2e/{automation => infra}/fixtures/python.ts (100%) rename test/e2e/{automation => infra}/fixtures/r.ts (100%) rename test/e2e/{automation => infra}/fixtures/userSettings.ts (100%) rename test/e2e/{automation => infra}/index.ts (100%) rename test/e2e/{automation => infra}/logger.ts (100%) rename test/e2e/{automation => infra}/playwrightBrowser.ts (100%) rename test/e2e/{automation => infra}/playwrightDriver.ts (100%) rename test/e2e/{automation => infra}/playwrightElectron.ts (100%) rename test/e2e/{automation => infra}/processes.ts (100%) rename test/e2e/{automation => infra}/profiler.ts (100%) rename test/e2e/{automation => infra}/workbench.ts (100%) diff --git a/test/e2e/helpers/create-app.ts b/test/e2e/helpers/create-app.ts index a807830df3a..4acd7f8a7fe 100644 --- a/test/e2e/helpers/create-app.ts +++ b/test/e2e/helpers/create-app.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application, ApplicationOptions } from '../automation'; +import { Application, ApplicationOptions } from '../infra'; export function createApp(options: ApplicationOptions, optionsTransform?: (opts: ApplicationOptions) => ApplicationOptions): Application { if (optionsTransform) { diff --git a/test/e2e/helpers/logger.ts b/test/e2e/helpers/logger.ts index d90b9f7484a..2e462f8d868 100644 --- a/test/e2e/helpers/logger.ts +++ b/test/e2e/helpers/logger.ts @@ -6,7 +6,7 @@ import * as path from 'path'; import * as fs from 'fs'; import mkdirp = require('mkdirp'); -import { ConsoleLogger, FileLogger, Logger, MultiLogger } from '../automation'; +import { ConsoleLogger, FileLogger, Logger, MultiLogger } from '../infra'; const VERBOSE = process.env.VERBOSE === 'true'; diff --git a/test/e2e/helpers/test-setup.ts b/test/e2e/helpers/test-setup.ts index 14ebdcc3a5e..28200081473 100644 --- a/test/e2e/helpers/test-setup.ts +++ b/test/e2e/helpers/test-setup.ts @@ -7,7 +7,7 @@ import * as fs from 'fs'; import { join } from 'path'; const rimraf = require('rimraf'); const mkdirp = require('mkdirp'); -import { getBuildElectronPath, getDevElectronPath, Logger } from '../automation'; +import { getBuildElectronPath, getDevElectronPath, Logger } from '../infra'; import { createLogger } from './logger'; import * as os from 'os'; diff --git a/test/e2e/automation/application.ts b/test/e2e/infra/application.ts similarity index 100% rename from test/e2e/automation/application.ts rename to test/e2e/infra/application.ts diff --git a/test/e2e/automation/code.ts b/test/e2e/infra/code.ts similarity index 100% rename from test/e2e/automation/code.ts rename to test/e2e/infra/code.ts diff --git a/test/e2e/automation/driver.d.ts b/test/e2e/infra/driver.d.ts similarity index 100% rename from test/e2e/automation/driver.d.ts rename to test/e2e/infra/driver.d.ts diff --git a/test/e2e/automation/electron.ts b/test/e2e/infra/electron.ts similarity index 100% rename from test/e2e/automation/electron.ts rename to test/e2e/infra/electron.ts diff --git a/test/e2e/automation/fixtures/python.ts b/test/e2e/infra/fixtures/python.ts similarity index 100% rename from test/e2e/automation/fixtures/python.ts rename to test/e2e/infra/fixtures/python.ts diff --git a/test/e2e/automation/fixtures/r.ts b/test/e2e/infra/fixtures/r.ts similarity index 100% rename from test/e2e/automation/fixtures/r.ts rename to test/e2e/infra/fixtures/r.ts diff --git a/test/e2e/automation/fixtures/userSettings.ts b/test/e2e/infra/fixtures/userSettings.ts similarity index 100% rename from test/e2e/automation/fixtures/userSettings.ts rename to test/e2e/infra/fixtures/userSettings.ts diff --git a/test/e2e/automation/index.ts b/test/e2e/infra/index.ts similarity index 100% rename from test/e2e/automation/index.ts rename to test/e2e/infra/index.ts diff --git a/test/e2e/automation/logger.ts b/test/e2e/infra/logger.ts similarity index 100% rename from test/e2e/automation/logger.ts rename to test/e2e/infra/logger.ts diff --git a/test/e2e/automation/playwrightBrowser.ts b/test/e2e/infra/playwrightBrowser.ts similarity index 100% rename from test/e2e/automation/playwrightBrowser.ts rename to test/e2e/infra/playwrightBrowser.ts diff --git a/test/e2e/automation/playwrightDriver.ts b/test/e2e/infra/playwrightDriver.ts similarity index 100% rename from test/e2e/automation/playwrightDriver.ts rename to test/e2e/infra/playwrightDriver.ts diff --git a/test/e2e/automation/playwrightElectron.ts b/test/e2e/infra/playwrightElectron.ts similarity index 100% rename from test/e2e/automation/playwrightElectron.ts rename to test/e2e/infra/playwrightElectron.ts diff --git a/test/e2e/automation/processes.ts b/test/e2e/infra/processes.ts similarity index 100% rename from test/e2e/automation/processes.ts rename to test/e2e/infra/processes.ts diff --git a/test/e2e/automation/profiler.ts b/test/e2e/infra/profiler.ts similarity index 100% rename from test/e2e/automation/profiler.ts rename to test/e2e/infra/profiler.ts diff --git a/test/e2e/automation/workbench.ts b/test/e2e/infra/workbench.ts similarity index 100% rename from test/e2e/automation/workbench.ts rename to test/e2e/infra/workbench.ts diff --git a/test/e2e/pages/clipboard.ts b/test/e2e/pages/clipboard.ts index b04841b019a..85cdd86c80b 100644 --- a/test/e2e/pages/clipboard.ts +++ b/test/e2e/pages/clipboard.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; export class Clipboard { diff --git a/test/e2e/pages/connections.ts b/test/e2e/pages/connections.ts index d608d1594f8..1429bfcfce6 100644 --- a/test/e2e/pages/connections.ts +++ b/test/e2e/pages/connections.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; const CONNECTIONS_CONTAINER = '.connections-items-container'; diff --git a/test/e2e/pages/console.ts b/test/e2e/pages/console.ts index 7d0177f27d9..68fd3070cc2 100644 --- a/test/e2e/pages/console.ts +++ b/test/e2e/pages/console.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; import { QuickInput } from './quickInput'; import { InterpreterType } from './utils/interpreterInfo'; diff --git a/test/e2e/pages/dataExplorer.ts b/test/e2e/pages/dataExplorer.ts index c92b14ab601..97228fab15c 100644 --- a/test/e2e/pages/dataExplorer.ts +++ b/test/e2e/pages/dataExplorer.ts @@ -5,8 +5,8 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; -import { Workbench } from '../automation/workbench'; +import { Code } from '../infra/code'; +import { Workbench } from '../infra/workbench'; const COLUMN_HEADERS = '.data-explorer-panel .right-column .data-grid-column-headers'; const HEADER_TITLES = '.data-grid-column-header .title-description .title'; diff --git a/test/e2e/pages/editor.ts b/test/e2e/pages/editor.ts index 252417811a9..b05a262b65b 100644 --- a/test/e2e/pages/editor.ts +++ b/test/e2e/pages/editor.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, FrameLocator, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; // currently a dupe of declaration in ../editor.ts but trying not to modifiy that file const EDITOR = (filename: string) => `.monaco-editor[data-uri$="${filename}"]`; diff --git a/test/e2e/pages/editors.ts b/test/e2e/pages/editors.ts index ee30e06bdce..d64591c7dbf 100644 --- a/test/e2e/pages/editors.ts +++ b/test/e2e/pages/editors.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; export class Editors { diff --git a/test/e2e/pages/explorer.ts b/test/e2e/pages/explorer.ts index a7c6b67e09d..b1c12e30397 100644 --- a/test/e2e/pages/explorer.ts +++ b/test/e2e/pages/explorer.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const POSITRON_EXPLORER_PROJECT_TITLE = 'div[id="workbench.view.explorer"] h3.title'; const POSITRON_EXPLORER_PROJECT_FILES = 'div[id="workbench.view.explorer"] span[class="monaco-highlighted-label"]'; diff --git a/test/e2e/pages/extensions.ts b/test/e2e/pages/extensions.ts index 0bfc0da1c6b..408cc9517d8 100644 --- a/test/e2e/pages/extensions.ts +++ b/test/e2e/pages/extensions.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; export class Extensions { diff --git a/test/e2e/pages/help.ts b/test/e2e/pages/help.ts index 58410ce5e5b..19b9e8f8204 100644 --- a/test/e2e/pages/help.ts +++ b/test/e2e/pages/help.ts @@ -5,7 +5,7 @@ import { FrameLocator, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const OUTER_FRAME = '.webview'; const MIDDLE_FRAME = '#active-frame'; diff --git a/test/e2e/pages/interpreterDropdown.ts b/test/e2e/pages/interpreterDropdown.ts index 4fc89473220..5a1af4cbd52 100644 --- a/test/e2e/pages/interpreterDropdown.ts +++ b/test/e2e/pages/interpreterDropdown.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { getInterpreterType, InterpreterInfo, InterpreterType } from './utils/interpreterInfo'; const INTERPRETER_INFO_LINE = '.info .container .line'; diff --git a/test/e2e/pages/layouts.ts b/test/e2e/pages/layouts.ts index be55abaebe0..4f56271712f 100644 --- a/test/e2e/pages/layouts.ts +++ b/test/e2e/pages/layouts.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { Locator } from '@playwright/test'; -import { Code } from '../automation/code'; -import { Workbench } from '../automation/workbench'; +import { Code } from '../infra/code'; +import { Workbench } from '../infra/workbench'; const FULL_APP = 'body'; const AUX_BAR = '.part.auxiliarybar'; diff --git a/test/e2e/pages/newProjectWizard.ts b/test/e2e/pages/newProjectWizard.ts index 82fca215500..555a78cc6e8 100644 --- a/test/e2e/pages/newProjectWizard.ts +++ b/test/e2e/pages/newProjectWizard.ts @@ -5,7 +5,7 @@ import { fail } from 'assert'; import { expect } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; // Selector for the pre-selected dropdown item in the project wizard diff --git a/test/e2e/pages/notebooks.ts b/test/e2e/pages/notebooks.ts index e5f7ad7eca9..d5a83a9bc1b 100644 --- a/test/e2e/pages/notebooks.ts +++ b/test/e2e/pages/notebooks.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickInput } from './quickInput'; import { QuickAccess } from './quickaccess'; import { basename } from 'path'; diff --git a/test/e2e/pages/outline.ts b/test/e2e/pages/outline.ts index 2df71723ddd..eecda648241 100644 --- a/test/e2e/pages/outline.ts +++ b/test/e2e/pages/outline.ts @@ -5,7 +5,7 @@ import { fail } from 'assert'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; const HORIZONTAL_SASH = '.explorer-viewlet .monaco-sash.horizontal'; diff --git a/test/e2e/pages/output.ts b/test/e2e/pages/output.ts index 0ac0c8cb3cf..28021378ecb 100644 --- a/test/e2e/pages/output.ts +++ b/test/e2e/pages/output.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; import { QuickInput } from './quickInput'; diff --git a/test/e2e/pages/plots.ts b/test/e2e/pages/plots.ts index 448273e497e..18458d37ccd 100644 --- a/test/e2e/pages/plots.ts +++ b/test/e2e/pages/plots.ts @@ -5,7 +5,7 @@ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const CURRENT_PLOT = '.plot-instance img'; const CURRENT_STATIC_PLOT = '.plot-instance.static-plot-instance img'; diff --git a/test/e2e/pages/popups.ts b/test/e2e/pages/popups.ts index 4921a8566b0..a4764d7217a 100644 --- a/test/e2e/pages/popups.ts +++ b/test/e2e/pages/popups.ts @@ -5,7 +5,7 @@ import { expect } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const POSITRON_MODAL_DIALOG_BOX = '.positron-modal-dialog-box'; const POSITRON_MODAL_DIALOG_BOX_OK = '.positron-modal-dialog-box .ok-cancel-action-bar .positron-button.action-bar-button.default'; diff --git a/test/e2e/pages/quickInput.ts b/test/e2e/pages/quickInput.ts index 0fdeaef9301..eaedd158159 100644 --- a/test/e2e/pages/quickInput.ts +++ b/test/e2e/pages/quickInput.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; export class QuickInput { diff --git a/test/e2e/pages/quickaccess.ts b/test/e2e/pages/quickaccess.ts index 48f57ddb437..d1b6dab9001 100644 --- a/test/e2e/pages/quickaccess.ts +++ b/test/e2e/pages/quickaccess.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { basename, isAbsolute } from 'path'; import { QuickInput } from './quickInput'; import { expect } from '@playwright/test'; diff --git a/test/e2e/pages/settings.ts b/test/e2e/pages/settings.ts index c4ad3fdc4ab..489e9b2bd6e 100644 --- a/test/e2e/pages/settings.ts +++ b/test/e2e/pages/settings.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { Editor } from './editor'; import { Editors } from './editors'; import { QuickAccess } from './quickaccess'; diff --git a/test/e2e/pages/sideBar.ts b/test/e2e/pages/sideBar.ts index b9e20760cec..229b6fce459 100644 --- a/test/e2e/pages/sideBar.ts +++ b/test/e2e/pages/sideBar.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const HIDE_SECONDARY_SIDE_BAR = '[aria-label="Hide Secondary Side Bar"]'; diff --git a/test/e2e/pages/terminal.ts b/test/e2e/pages/terminal.ts index 1a5d47b648c..414e9ea96f1 100644 --- a/test/e2e/pages/terminal.ts +++ b/test/e2e/pages/terminal.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import { QuickAccess } from './quickaccess'; const TERMINAL_WRAPPER = '#terminal .terminal-wrapper'; diff --git a/test/e2e/pages/topActionBar.ts b/test/e2e/pages/topActionBar.ts index a141814e139..2e777d9d63c 100644 --- a/test/e2e/pages/topActionBar.ts +++ b/test/e2e/pages/topActionBar.ts @@ -5,7 +5,7 @@ import { Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const POSITRON_TOP_ACTION_BAR = 'div[id="workbench.parts.positron-top-action-bar"]'; const POSITRON_TOP_ACTION_SAVE_BUTTON = 'div[id="workbench.parts.positron-top-action-bar"] .action-bar-region-left .action-bar-button[aria-label="Save"]'; diff --git a/test/e2e/pages/variables.ts b/test/e2e/pages/variables.ts index 8bbe2c13f81..b1047025639 100644 --- a/test/e2e/pages/variables.ts +++ b/test/e2e/pages/variables.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; import * as os from 'os'; import { expect, Locator } from '@playwright/test'; diff --git a/test/e2e/pages/viewer.ts b/test/e2e/pages/viewer.ts index 8b9346cf1ab..85766953140 100644 --- a/test/e2e/pages/viewer.ts +++ b/test/e2e/pages/viewer.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { FrameLocator, Locator } from '@playwright/test'; -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const OUTER_FRAME = '.webview'; const INNER_FRAME = '#active-frame'; diff --git a/test/e2e/pages/welcome.ts b/test/e2e/pages/welcome.ts index 973e8c38097..fc4a004acb9 100644 --- a/test/e2e/pages/welcome.ts +++ b/test/e2e/pages/welcome.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Code } from '../automation/code'; +import { Code } from '../infra/code'; const LOGO = '.product-logo'; const TITLE = '.gettingStartedCategoriesContainer div.header div .positron'; diff --git a/test/e2e/tests/_test.setup.ts b/test/e2e/tests/_test.setup.ts index 041f40dc313..48f5112703c 100644 --- a/test/e2e/tests/_test.setup.ts +++ b/test/e2e/tests/_test.setup.ts @@ -22,7 +22,7 @@ import archiver from 'archiver'; // Local imports import { createLogger, createApp, TestTags } from '../helpers'; -import { Application, Logger, PythonFixtures, RFixtures, UserSetting, UserSettingsFixtures } from '../automation'; +import { Application, Logger, PythonFixtures, RFixtures, UserSetting, UserSettingsFixtures } from '../infra'; // Constants const TEMP_DIR = `temp-${randomUUID()}`; diff --git a/test/e2e/tests/action-bar/editor-action-bar.test.ts b/test/e2e/tests/action-bar/editor-action-bar.test.ts index 4319badf361..07da9f6d3ee 100644 --- a/test/e2e/tests/action-bar/editor-action-bar.test.ts +++ b/test/e2e/tests/action-bar/editor-action-bar.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { test, expect, tags } from '../_test.setup'; -import { Application } from '../../automation'; +import { Application } from '../../infra'; import { Page } from '@playwright/test'; import path = require('path'); diff --git a/test/e2e/tests/console/console-clipboard.test.ts b/test/e2e/tests/console/console-clipboard.test.ts index cf69db87b06..ccff20febbf 100644 --- a/test/e2e/tests/console/console-clipboard.test.ts +++ b/test/e2e/tests/console/console-clipboard.test.ts @@ -5,7 +5,7 @@ import * as os from 'os'; import { test, tags } from '../_test.setup'; -import { Application, Console } from '../../automation'; +import { Application, Console } from '../../infra'; test.use({ suiteId: __filename diff --git a/test/e2e/tests/console/console-history.test.ts b/test/e2e/tests/console/console-history.test.ts index a61cd8158de..0e346cf3f5c 100644 --- a/test/e2e/tests/console/console-history.test.ts +++ b/test/e2e/tests/console/console-history.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../automation'; +import { Application } from '../../infra'; import { test, tags } from '../_test.setup'; test.use({ diff --git a/test/e2e/tests/data-explorer/data-explorer-headless.test.ts b/test/e2e/tests/data-explorer/data-explorer-headless.test.ts index 03cc792a136..a1d93b91c20 100644 --- a/test/e2e/tests/data-explorer/data-explorer-headless.test.ts +++ b/test/e2e/tests/data-explorer/data-explorer-headless.test.ts @@ -5,7 +5,7 @@ import { join } from 'path'; import { test, expect, tags } from '../_test.setup'; -import { Application, Logger } from '../../automation'; +import { Application, Logger } from '../../infra'; test.use({ suiteId: __filename diff --git a/test/e2e/tests/data-explorer/helpers/100x100.ts b/test/e2e/tests/data-explorer/helpers/100x100.ts index 904ae800599..681fc8e643d 100644 --- a/test/e2e/tests/data-explorer/helpers/100x100.ts +++ b/test/e2e/tests/data-explorer/helpers/100x100.ts @@ -6,7 +6,7 @@ import { join } from 'path'; import * as fs from 'fs'; import { expect } from '@playwright/test'; -import { Application } from '../../../automation'; +import { Application } from '../../../infra'; export const testDataExplorer = async ( app: Application, diff --git a/test/e2e/tests/data-explorer/sparklines.test.ts b/test/e2e/tests/data-explorer/sparklines.test.ts index ca5a3f0958d..59ce1860cdf 100644 --- a/test/e2e/tests/data-explorer/sparklines.test.ts +++ b/test/e2e/tests/data-explorer/sparklines.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../automation'; +import { Application } from '../../infra'; import { test, expect, tags } from '../_test.setup'; test.use({ diff --git a/test/e2e/tests/data-explorer/very-large-data-frame.test.ts b/test/e2e/tests/data-explorer/very-large-data-frame.test.ts index e43e88bc39f..5c8beb97dd6 100644 --- a/test/e2e/tests/data-explorer/very-large-data-frame.test.ts +++ b/test/e2e/tests/data-explorer/very-large-data-frame.test.ts @@ -6,7 +6,7 @@ import { fail } from 'assert'; import { join } from 'path'; import { test, expect, tags } from '../_test.setup'; -import { downloadFileFromS3, S3FileDownloadOptions } from '../../automation'; +import { downloadFileFromS3, S3FileDownloadOptions } from '../../infra'; test.use({ suiteId: __filename diff --git a/test/e2e/tests/new-project-wizard/new-project-python.test.ts b/test/e2e/tests/new-project-wizard/new-project-python.test.ts index 59d957e55c8..670b32c2aa6 100644 --- a/test/e2e/tests/new-project-wizard/new-project-python.test.ts +++ b/test/e2e/tests/new-project-wizard/new-project-python.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { PythonFixtures, ProjectType, ProjectWizardNavigateAction } from '../../automation'; +import { PythonFixtures, ProjectType, ProjectWizardNavigateAction } from '../../infra'; import { test, expect, tags } from '../_test.setup'; test.use({ diff --git a/test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts b/test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts index fbb9cf7cef8..31ea3989037 100644 --- a/test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts +++ b/test/e2e/tests/new-project-wizard/new-project-r-jupyter.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { ProjectType, ProjectWizardNavigateAction } from '../../automation'; +import { ProjectType, ProjectWizardNavigateAction } from '../../infra'; import { test, expect, tags } from '../_test.setup'; test.use({ diff --git a/test/e2e/tests/plots/plots.test.ts b/test/e2e/tests/plots/plots.test.ts index 2886b4f6b73..53616eb548b 100644 --- a/test/e2e/tests/plots/plots.test.ts +++ b/test/e2e/tests/plots/plots.test.ts @@ -9,7 +9,7 @@ const resembleCompareImages = require('resemblejs/compareImages'); import { ComparisonOptions } from 'resemblejs'; import * as fs from 'fs'; import { fail } from 'assert'; -import { Application } from '../../automation'; +import { Application } from '../../infra'; test.use({ suiteId: __filename diff --git a/test/e2e/tests/quarto/quarto.test.ts b/test/e2e/tests/quarto/quarto.test.ts index 7904b156eac..b86165aa218 100644 --- a/test/e2e/tests/quarto/quarto.test.ts +++ b/test/e2e/tests/quarto/quarto.test.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application } from '../../automation'; +import { Application } from '../../infra'; import { test, expect, tags } from '../_test.setup'; const path = require('path'); const fs = require('fs-extra'); diff --git a/test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts b/test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts index e177d0f2700..f6ca11b734f 100644 --- a/test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts +++ b/test/e2e/tests/top-action-bar/interpreter-dropdown.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { InterpreterDropdown, Console } from '../../automation'; +import { InterpreterDropdown, Console } from '../../infra'; import { test, expect, tags } from '../_test.setup'; test.use({ From 6aa263b3911cbaf9edc2d394eeb0fb214f094f42 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 11:22:54 -0600 Subject: [PATCH 04/18] update headers and positron comments --- test/e2e/README.md | 5 ----- test/e2e/infra/application.ts | 14 ++------------ test/e2e/infra/code.ts | 26 ++------------------------ test/e2e/infra/driver.d.ts | 4 ++-- test/e2e/infra/electron.ts | 11 ++--------- test/e2e/infra/logger.ts | 4 ++-- test/e2e/infra/playwrightBrowser.ts | 9 ++------- test/e2e/infra/playwrightDriver.ts | 25 ++----------------------- test/e2e/infra/playwrightElectron.ts | 6 ++---- test/e2e/infra/processes.ts | 4 ++-- test/e2e/infra/profiler.ts | 4 ++-- test/e2e/infra/workbench.ts | 10 +++------- 12 files changed, 23 insertions(+), 99 deletions(-) diff --git a/test/e2e/README.md b/test/e2e/README.md index 383e1626c8e..c128b15cab4 100644 --- a/test/e2e/README.md +++ b/test/e2e/README.md @@ -1,6 +1,3 @@ - - - # Positron E2E Test Guide This document provides guidelines and setup instructions for effectively running and managing end-to-end tests in the Positron project. @@ -226,5 +223,3 @@ In order to get the "golden screenshots" used for plot comparison is CI, you wil ## Tests run on PRs If you think your test should be run when PRs are created, [tag the test with @critical](https://playwright.dev/docs/test-annotations#tag-tests). The existing @critical cases were selected to give good overall coverage while keeping the overall execution time down to ten minutes or less. If your new test functionality covers a part of the application that no other tests cover, it is probably a good idea to include it in the @critical set. - - diff --git a/test/e2e/infra/application.ts b/test/e2e/infra/application.ts index 1ec434690c8..fcd2a026e97 100644 --- a/test/e2e/infra/application.ts +++ b/test/e2e/infra/application.ts @@ -1,15 +1,13 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import { Workbench } from './workbench'; import { Code, launch, LaunchOptions } from './code'; import { Logger, measureAndLog } from './logger'; import { Profiler } from './profiler'; -// --- Start Positron --- import { expect } from '@playwright/test'; -// --- End Positron --- export const enum Quality { Dev, @@ -73,9 +71,7 @@ export class Application { async start(): Promise { await this._start(); - // --- Start Positron --- await expect(this.code.driver.page.locator('.explorer-folders-view')).toBeVisible(); - // --- End Positron --- } async restart(options?: { workspaceOrFolder?: string; extraArgs?: string[] }): Promise { @@ -109,11 +105,9 @@ export class Application { await this._code?.startTracing(name); } - // --- Start Positron --- async stopTracing(name: string, persist: boolean, customPath?: string): Promise { await this._code?.stopTracing(name, persist, customPath); } - // --- End Positron --- private async startApplication(extraArgs: string[] = []): Promise { const code = this._code = await launch({ @@ -131,16 +125,12 @@ export class Application { // We need a rendered workbench await measureAndLog(() => code.didFinishLoad(), 'Application#checkWindowReady: wait for navigation to be committed', this.logger); - // --- Start Positron --- await measureAndLog(() => expect(code.driver.page.locator('.monaco-workbench')).toBeVisible(), 'Application#checkWindowReady: wait for .monaco-workbench element', this.logger); - // --- Start Positron --- await measureAndLog(() => code.whenWorkbenchRestored(), 'Application#checkWorkbenchRestored', this.logger); // Remote but not web: wait for a remote connection state change if (this.remote) { - // --- Start Positron --- await measureAndLog(() => expect(code.driver.page.locator('.monaco-workbench .statusbar-item[id="status.host"]')).not.toContainText('Opening Remote'), 'Application#checkWindowReady: wait for remote indicator', this.logger); - // --- End Positron --- } } } diff --git a/test/e2e/infra/code.ts b/test/e2e/infra/code.ts index 365cd5e60ff..c8b7139a20e 100644 --- a/test/e2e/infra/code.ts +++ b/test/e2e/infra/code.ts @@ -1,14 +1,12 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import * as cp from 'child_process'; import * as os from 'os'; import * as treekill from 'tree-kill'; -// --- Start Positron --- import { ILogFile } from './driver'; -// --- End Positron --- import { Logger, measureAndLog } from './logger'; import { launch as launchPlaywrightBrowser } from './playwrightBrowser'; import { PlaywrightDriver } from './playwrightDriver'; @@ -28,9 +26,7 @@ export interface LaunchOptions { readonly remote?: boolean; readonly web?: boolean; readonly tracing?: boolean; - // --- Start Positron --- readonly snapshots?: boolean; - // --- End Positron --- readonly headless?: boolean; readonly browser?: 'chromium' | 'webkit' | 'firefox'; } @@ -126,15 +122,9 @@ export class Code { return await this.driver.startTracing(name); } - // --- Start Positron --- async stopTracing(name: string, persist: boolean, customPath?: string): Promise { return await this.driver.stopTracing(name, persist, customPath); } - // --- End Positron --- - - // --- Start Positron --- - // Removed function - // --- End Positron --- async didFinishLoad(): Promise { return this.driver.didFinishLoad(); @@ -202,18 +192,10 @@ export class Code { }), 'Code#exit()', this.logger); } - // --- Start Positron --- - // Removed functions - // --- End Positron --- - async whenWorkbenchRestored(): Promise { await this.poll(() => this.driver.whenWorkbenchRestored(), () => true, `when workbench restored`); } - // --- Start Positron --- - // Removed functions - // --- End Positron --- - getLogs(): Promise { return this.driver.getLogs(); } @@ -258,7 +240,3 @@ export class Code { } } } - -// --- Start Positron --- -// Removed functions -// --- End Positron --- diff --git a/test/e2e/infra/driver.d.ts b/test/e2e/infra/driver.d.ts index 6f2a532c710..5243ad129f0 100644 --- a/test/e2e/infra/driver.d.ts +++ b/test/e2e/infra/driver.d.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ export interface IElement { diff --git a/test/e2e/infra/electron.ts b/test/e2e/infra/electron.ts index 4f19916c395..5603229e79b 100644 --- a/test/e2e/infra/electron.ts +++ b/test/e2e/infra/electron.ts @@ -1,21 +1,16 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import { join } from 'path'; import * as fs from 'fs'; -// -- Start Positron -- -// Removed import -// -- End Positron -- import { URI } from 'vscode-uri'; import { measureAndLog } from './logger'; import type { LaunchOptions } from './code'; -// -- Start Positron -- import path = require('path'); import { promisify } from 'util'; import { ncp } from 'ncp'; -// -- End Positron -- const root = join(__dirname, '..', '..', '..'); @@ -145,7 +140,6 @@ export function getBuildVersion(root: string): string { } } -// -- Start Positron -- export async function copyExtension(repoPath: string, extensionsPath: string, extId: string): Promise { const dest = path.join(extensionsPath, extId); if (!fs.existsSync(dest)) { @@ -154,4 +148,3 @@ export async function copyExtension(repoPath: string, extensionsPath: string, ex return promisify(ncp)(orig, dest); } } -// -- End Positron -- diff --git a/test/e2e/infra/logger.ts b/test/e2e/infra/logger.ts index 28dc9e32c41..e8955464967 100644 --- a/test/e2e/infra/logger.ts +++ b/test/e2e/infra/logger.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import { appendFileSync, writeFileSync } from 'fs'; diff --git a/test/e2e/infra/playwrightBrowser.ts b/test/e2e/infra/playwrightBrowser.ts index 78f8201097d..90e87ba1fb9 100644 --- a/test/e2e/infra/playwrightBrowser.ts +++ b/test/e2e/infra/playwrightBrowser.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; @@ -30,7 +30,6 @@ export async function launch(options: LaunchOptions): Promise<{ serverProcess: C }; } -// --- Start Positron --- // Modified `launchServer` function to add support for multiple ports to enable parallel test // execution of browser tests. Also added helper functions: `getServerArgs`, `resolveServerLocation`, // and `startServer` to make this code easier to read. @@ -136,8 +135,6 @@ async function startServer( logger.log(`Server started (pid: ${serverProcess.pid})`); return serverProcess; } -// --- End Positron --- - async function launchBrowser(options: LaunchOptions, endpoint: string) { const { logger, workspacePath, tracing, headless } = options; @@ -153,9 +150,7 @@ async function launchBrowser(options: LaunchOptions, endpoint: string) { if (tracing) { try { - // --- Start Positron --- await measureAndLog(() => context.tracing.start({ screenshots: true, snapshots: options.snapshots, /* remaining options are off for perf reasons */ }), 'context.tracing.start()', logger); - // --- End Positron --- } catch (error) { logger.log(`Playwright (Browser): Failed to start playwright tracing (${error})`); // do not fail the build when this fails } diff --git a/test/e2e/infra/playwrightDriver.ts b/test/e2e/infra/playwrightDriver.ts index d3d70321fae..6148cc847d8 100644 --- a/test/e2e/infra/playwrightDriver.ts +++ b/test/e2e/infra/playwrightDriver.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; @@ -21,17 +21,10 @@ export class PlaywrightDriver { private static traceCounter = 1; private static screenShotCounter = 1; - - // --- Start Positron --- - // Removed declaration - // --- End Positron --- - constructor( private readonly application: playwright.Browser | playwright.ElectronApplication, - // --- Start Positron -- readonly context: playwright.BrowserContext, readonly page: playwright.Page, - // --- End Positron --- private readonly serverProcess: ChildProcess | undefined, private readonly whenLoaded: Promise, private readonly options: LaunchOptions @@ -50,9 +43,7 @@ export class PlaywrightDriver { } } - // --- Start Positron --- async stopTracing(name: string, persist: boolean = true, customPath?: string): Promise { - // --- End Positron --- if (!this.options.tracing) { return; // tracing disabled } @@ -60,10 +51,8 @@ export class PlaywrightDriver { try { let persistPath: string | undefined = undefined; if (persist) { - // --- Start Positron --- // Positron: Windows has issues with long paths, shortened the name persistPath = customPath || join(this.options.logsPath, `trace-${PlaywrightDriver.traceCounter++}-${name.replace(/\s+/g, '-')}.zip`); - // --- End Positron --- } await measureAndLog(() => this.context.tracing.stopChunk({ path: persistPath }), `stopTracing for ${name}`, this.options.logger); } catch (error) { @@ -151,14 +140,11 @@ export class PlaywrightDriver { return await this._cdpSession.send('Runtime.getProperties', parameters); } - // --- Start Positron --- // Positron: make this method public for access from R/Python fixtures async takeScreenshot(name: string): Promise { try { // Positron: Windows has issues with long paths, shortened the name const persistPath = join(this.options.logsPath, `screenshot-${PlaywrightDriver.screenShotCounter++}-${name.replace(/\s+/g, '-')}.png`); - // --- End Positron --- - await measureAndLog(() => this.page.screenshot({ path: persistPath, type: 'png' }), 'takeScreenshot', this.options.logger); } catch (error) { // Ignore @@ -224,10 +210,6 @@ export class PlaywrightDriver { } } - // --- Start Positron --- - // Removed functions - // --- End Positron --- - async getLogs() { return this.page.evaluate(([driver]) => driver.getLogs(), [await this.getDriverHandle()] as const); } @@ -248,7 +230,6 @@ export class PlaywrightDriver { return this.page.evaluateHandle('window.driver'); } - // --- Start Positron --- async typeKeys(locator: string, text: string): Promise { return this.page.locator(locator).pressSequentially(text); } @@ -290,6 +271,4 @@ export class PlaywrightDriver { await this.page.mouse.move(to.x, to.y); await this.page.mouse.up(); } - - // --- End Positron --- } diff --git a/test/e2e/infra/playwrightElectron.ts b/test/e2e/infra/playwrightElectron.ts index f2d7c1e5a81..ff43ca22d6b 100644 --- a/test/e2e/infra/playwrightElectron.ts +++ b/test/e2e/infra/playwrightElectron.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; @@ -45,9 +45,7 @@ async function launchElectron(configuration: IElectronConfiguration, options: La if (tracing) { try { - // --- Start Positron --- await measureAndLog(() => context.tracing.start({ screenshots: true, snapshots: options.snapshots /* remaining options are off for perf reasons */ }), 'context.tracing.start()', logger); - // --- End Positron --- } catch (error) { logger.log(`Playwright (Electron): Failed to start playwright tracing (${error})`); // do not fail the build when this fails } diff --git a/test/e2e/infra/processes.ts b/test/e2e/infra/processes.ts index 17dcb79b32b..f111095f12b 100644 --- a/test/e2e/infra/processes.ts +++ b/test/e2e/infra/processes.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ import { ChildProcess } from 'child_process'; diff --git a/test/e2e/infra/profiler.ts b/test/e2e/infra/profiler.ts index 9b3a0107d5e..34dead9ac0d 100644 --- a/test/e2e/infra/profiler.ts +++ b/test/e2e/infra/profiler.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ const { decode_bytes } = require('@vscode/v8-heap-parser'); diff --git a/test/e2e/infra/workbench.ts b/test/e2e/infra/workbench.ts index b2875b554ae..15b039dff31 100644 --- a/test/e2e/infra/workbench.ts +++ b/test/e2e/infra/workbench.ts @@ -1,12 +1,8 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. + * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -// --- Start Positron --- -// This entire file has been updated to remove existing vscode imports, properties, POMs, etc -// Everything has been replaced with Positron code: .positron/ - import { Code } from './code'; import { InterpreterDropdown } from '../pages/interpreterDropdown'; import { Popups } from '../pages/popups'; @@ -101,4 +97,4 @@ export class Workbench { this.settings = new Settings(code, this.editors, this.editor, this.quickaccess); } } -// --- End Positron --- + From 477d948c1720eb2556b64b5150b65a31060ead87 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 11:35:32 -0600 Subject: [PATCH 05/18] update ci, etc --- .eslint-ignore | 2 +- .eslintrc.json | 23 ---------------------- .github/actions/setup-build-env/action.yml | 1 - .github/actions/setup-test-env/action.yml | 2 +- .github/workflows/test-e2e-release.yml | 2 -- .github/workflows/test-e2e-windows.yml | 2 -- .vscode/settings.json | 4 ---- build/filters.js | 2 -- build/npm/dirs.js | 5 ++--- eslint.config.js | 12 ----------- test/e2e/infra/fixtures/userSettings.ts | 2 +- 11 files changed, 5 insertions(+), 52 deletions(-) diff --git a/.eslint-ignore b/.eslint-ignore index ee4f64ddedf..afa2e3de92c 100644 --- a/.eslint-ignore +++ b/.eslint-ignore @@ -35,7 +35,7 @@ **/src/vs/base/test/common/filters.perf.data.js **/src/vs/loader.js **/test/unit/assert.js -**/test/automation/out/** +**/test/e2e/out/** **/typings/** **/src/react.js **/src/react-dom.js diff --git a/.eslintrc.json b/.eslintrc.json index c2173acc2b1..a7cad3900fb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1111,7 +1111,6 @@ { "target": "test/e2e/**", "restrictions": [ - "test/automation", "test/e2e/**", "@vscode/*", "@parcel/*", @@ -1119,28 +1118,6 @@ "*" // node modules ] }, - { - "target": "test/smoke/**", - "restrictions": [ - "test/automation", - "test/smoke/**", - "@vscode/*", - "@parcel/*", - "@playwright/*", - "*" // node modules - ] - }, - { - "target": "test/automation/**", - "restrictions": [ - "test/automation/**", - "@vscode/*", - "@parcel/*", - "playwright-core/**", - "@playwright/*", - "*" // node modules - ] - }, { "target": "test/integration/**", "restrictions": [ diff --git a/.github/actions/setup-build-env/action.yml b/.github/actions/setup-build-env/action.yml index 4523064966c..1d3f927cc65 100644 --- a/.github/actions/setup-build-env/action.yml +++ b/.github/actions/setup-build-env/action.yml @@ -39,7 +39,6 @@ runs: # Perform the main npm command; this installs all Node packages and # dependencies npm ci --fetch-timeout 120000 - npm --prefix test/automation ci npm --prefix test/e2e ci - name: Compile and Download diff --git a/.github/actions/setup-test-env/action.yml b/.github/actions/setup-test-env/action.yml index 950922fce48..6e0609b66d5 100644 --- a/.github/actions/setup-test-env/action.yml +++ b/.github/actions/setup-test-env/action.yml @@ -16,7 +16,7 @@ runs: steps: - name: Compile E2E Tests shell: bash - run: npm --prefix test/automation run compile && npm --prefix test/e2e run compile + run: npm --prefix test/e2e run compile - name: Setup AWS S3 Access uses: aws-actions/configure-aws-credentials@v4 diff --git a/.github/workflows/test-e2e-release.yml b/.github/workflows/test-e2e-release.yml index fc2ff3e772e..ad2b3c32289 100644 --- a/.github/workflows/test-e2e-release.yml +++ b/.github/workflows/test-e2e-release.yml @@ -45,9 +45,7 @@ jobs: - name: Compile tests run: | npm install - npm --prefix test/automation install npm --prefix test/e2e install - npm --prefix test/automation run compile npm --prefix test/e2e run compile - name: Get & install latest release diff --git a/.github/workflows/test-e2e-windows.yml b/.github/workflows/test-e2e-windows.yml index 51fe87eba1d..9c697c8ae06 100644 --- a/.github/workflows/test-e2e-windows.yml +++ b/.github/workflows/test-e2e-windows.yml @@ -94,7 +94,6 @@ jobs: run: | corepack enable .\scripts\run-with-retry.ps1 -maxAttempts 3 -command "npm install --fetch-timeout 120000" - npm --prefix test/automation ci npm --prefix test/e2e ci - name: Compile and Download @@ -102,7 +101,6 @@ jobs: - name: Compile E2E Tests run: | - npm --prefix test/automation run compile npm --prefix test/e2e run compile - name: Install python dependencies diff --git a/.vscode/settings.json b/.vscode/settings.json index 4c1bd8c0f5d..9d9e54d0499 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -28,8 +28,6 @@ "extensions/**/dist/**": true, "extensions/**/out/**": true, "test/e2e/out/**": true, - "test/smoke/out/**": true, - "test/automation/out/**": true, "test/integration/browser/out/**": true, "src/vs/base/test/common/filters.perf.data.js": true, "src/vs/base/test/node/uri.perf.data.txt": true, @@ -51,8 +49,6 @@ "extensions/**/dist/**": true, "extensions/**/out/**": true, "test/e2e/out/**": true, - "test/smoke/out/**": true, - "test/automation/out/**": true, "test/integration/browser/out/**": true }, "files.readonlyExclude": { diff --git a/build/filters.js b/build/filters.js index 6594024602c..b58816e24e5 100644 --- a/build/filters.js +++ b/build/filters.js @@ -106,9 +106,7 @@ module.exports.indentationFilter = [ '!product.overrides.json', // except specific folders - '!test/automation/out/**', '!test/monaco/out/**', - '!test/smoke/out/**', '!test/e2e/out/**', '!extensions/typescript-language-features/test-workspace/**', '!extensions/typescript-language-features/resources/walkthroughs/**', diff --git a/build/npm/dirs.js b/build/npm/dirs.js index 167b5e3c18b..3ddd82aa278 100644 --- a/build/npm/dirs.js +++ b/build/npm/dirs.js @@ -74,9 +74,8 @@ const dirs = [ 'remote/reh-web', 'test/integration/browser', 'test/monaco', - // no need to compile smoke tests during release builds - // 'test/automation', - // 'test/smoke', + // no need to compile e2e tests during release builds + // 'test/e2e', // --- End Positron --- '.vscode/extensions/vscode-selfhost-import-aid', '.vscode/extensions/vscode-selfhost-test-provider', diff --git a/eslint.config.js b/eslint.config.js index 1ea4944e40e..6387c24f45f 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1271,7 +1271,6 @@ export default tseslint.config( { 'target': 'test/e2e/**', 'restrictions': [ - 'test/automation', 'test/e2e/**', '@vscode/*', '@parcel/*', @@ -1279,17 +1278,6 @@ export default tseslint.config( '*' // node modules ] }, - { - 'target': 'test/automation/**', - 'restrictions': [ - 'test/automation/**', - '@vscode/*', - '@parcel/*', - 'playwright-core/**', - '@playwright/*', - '*' // node modules - ] - }, { 'target': 'test/integration/**', 'restrictions': [ diff --git a/test/e2e/infra/fixtures/userSettings.ts b/test/e2e/infra/fixtures/userSettings.ts index dd468181e1d..595ba55cdd2 100644 --- a/test/e2e/infra/fixtures/userSettings.ts +++ b/test/e2e/infra/fixtures/userSettings.ts @@ -37,7 +37,7 @@ export class UserSettingsFixtures { // Set the user settings await this.app.workbench.settings.addUserSettings([ // Set editor.wordWrap to "on" to avoid issues with long settings. - // See test/automation/src/settings.ts for more explanation. + // See test/e2e/pages/settings.ts for more explanation. ['editor.wordWrap', '"on"'], ...settings ]); From 7cf567ca9ccb31960ad68d2dfb849f0ac9a88f78 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 12:00:46 -0600 Subject: [PATCH 06/18] fix compile --- test/e2e/infra/playwrightDriver.ts | 44 ------------------------------ test/e2e/package.json | 4 +-- 2 files changed, 2 insertions(+), 46 deletions(-) diff --git a/test/e2e/infra/playwrightDriver.ts b/test/e2e/infra/playwrightDriver.ts index 93a5e2f95f9..322a259571d 100644 --- a/test/e2e/infra/playwrightDriver.ts +++ b/test/e2e/infra/playwrightDriver.ts @@ -230,7 +230,6 @@ export class PlaywrightDriver { return this.page.evaluateHandle('window.driver'); } - // --- Start Positron --- /** * Click and drag from one point to another. * @param opts.from The starting point of the drag as x-y coordinates @@ -248,46 +247,3 @@ export class PlaywrightDriver { await this.page.mouse.up(); } } - -// --- Start Positron --- -export interface IWindowDriver { - setValue(selector: string, text: string): Promise; - isActiveElement(selector: string): Promise; - getElements(selector: string, recursive: boolean): Promise; - getElementXY(selector: string, xoffset?: number, yoffset?: number): Promise<{ x: number; y: number }>; - typeInEditor(selector: string, text: string): Promise; - getTerminalBuffer(selector: string): Promise; - writeInTerminal(selector: string, text: string): Promise; - getLocaleInfo(): Promise; - getLocalizedStrings(): Promise; - getLogs(): Promise; - whenWorkbenchRestored(): Promise; - exitApplication(): Promise; -} - -export interface IElement { - readonly tagName: string; - readonly className: string; - readonly textContent: string; - readonly attributes: { [name: string]: string }; - readonly children: IElement[]; - readonly top: number; - readonly left: number; -} - -export interface ILocaleInfo { - readonly language: string; - readonly locale?: string; -} - -export interface ILocalizedStrings { - readonly open: string; - readonly close: string; - readonly find: string; -} - -export interface ILogFile { - readonly relativePath: string; - readonly contents: string; -} -// --- End Positron --- diff --git a/test/e2e/package.json b/test/e2e/package.json index b29a73e25b7..bd06ddd2863 100644 --- a/test/e2e/package.json +++ b/test/e2e/package.json @@ -3,8 +3,8 @@ "version": "0.0.1", "license": "MIT", "scripts": { - "compile": "npm run --prefix ../automation compile && node ../../node_modules/typescript/bin/tsc", - "watch-e2e": "node ../../node_modules/typescript/bin/tsc --watch --preserveWatchOutput", + "compile": "node ../../node_modules/typescript/bin/tsc", + "watch-e2e": "npm run compile -- --watch --preserveWatchOutput", "watch": "npm-run-all -lp watch-e2e" }, "dependencies": { From e863afb5f341ed47ec4e52e2b32bfe6dc079c269 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 12:26:42 -0600 Subject: [PATCH 07/18] nest test-runner helpers --- test/e2e/helpers/{ => test-runner}/create-app.ts | 2 +- test/e2e/helpers/{ => test-runner}/index.ts | 0 test/e2e/helpers/{ => test-runner}/logger.ts | 2 +- test/e2e/helpers/{ => test-runner}/test-setup.ts | 2 +- test/e2e/helpers/{ => test-runner}/test-tags.ts | 0 test/e2e/helpers/{ => test-runner}/utils.ts | 0 test/e2e/tests/_global.setup.ts | 2 +- test/e2e/tests/_test.setup.ts | 2 +- 8 files changed, 5 insertions(+), 5 deletions(-) rename test/e2e/helpers/{ => test-runner}/create-app.ts (94%) rename test/e2e/helpers/{ => test-runner}/index.ts (100%) rename test/e2e/helpers/{ => test-runner}/logger.ts (99%) rename test/e2e/helpers/{ => test-runner}/test-setup.ts (99%) rename test/e2e/helpers/{ => test-runner}/test-tags.ts (100%) rename test/e2e/helpers/{ => test-runner}/utils.ts (100%) diff --git a/test/e2e/helpers/create-app.ts b/test/e2e/helpers/test-runner/create-app.ts similarity index 94% rename from test/e2e/helpers/create-app.ts rename to test/e2e/helpers/test-runner/create-app.ts index 4acd7f8a7fe..c717153d2d6 100644 --- a/test/e2e/helpers/create-app.ts +++ b/test/e2e/helpers/test-runner/create-app.ts @@ -3,7 +3,7 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ -import { Application, ApplicationOptions } from '../infra'; +import { Application, ApplicationOptions } from '../../infra'; export function createApp(options: ApplicationOptions, optionsTransform?: (opts: ApplicationOptions) => ApplicationOptions): Application { if (optionsTransform) { diff --git a/test/e2e/helpers/index.ts b/test/e2e/helpers/test-runner/index.ts similarity index 100% rename from test/e2e/helpers/index.ts rename to test/e2e/helpers/test-runner/index.ts diff --git a/test/e2e/helpers/logger.ts b/test/e2e/helpers/test-runner/logger.ts similarity index 99% rename from test/e2e/helpers/logger.ts rename to test/e2e/helpers/test-runner/logger.ts index 2e462f8d868..e40de40c049 100644 --- a/test/e2e/helpers/logger.ts +++ b/test/e2e/helpers/test-runner/logger.ts @@ -6,7 +6,7 @@ import * as path from 'path'; import * as fs from 'fs'; import mkdirp = require('mkdirp'); -import { ConsoleLogger, FileLogger, Logger, MultiLogger } from '../infra'; +import { ConsoleLogger, FileLogger, Logger, MultiLogger } from '../../infra'; const VERBOSE = process.env.VERBOSE === 'true'; diff --git a/test/e2e/helpers/test-setup.ts b/test/e2e/helpers/test-runner/test-setup.ts similarity index 99% rename from test/e2e/helpers/test-setup.ts rename to test/e2e/helpers/test-runner/test-setup.ts index 28200081473..631ac8dac45 100644 --- a/test/e2e/helpers/test-setup.ts +++ b/test/e2e/helpers/test-runner/test-setup.ts @@ -7,7 +7,7 @@ import * as fs from 'fs'; import { join } from 'path'; const rimraf = require('rimraf'); const mkdirp = require('mkdirp'); -import { getBuildElectronPath, getDevElectronPath, Logger } from '../infra'; +import { getBuildElectronPath, getDevElectronPath, Logger } from '../../infra'; import { createLogger } from './logger'; import * as os from 'os'; diff --git a/test/e2e/helpers/test-tags.ts b/test/e2e/helpers/test-runner/test-tags.ts similarity index 100% rename from test/e2e/helpers/test-tags.ts rename to test/e2e/helpers/test-runner/test-tags.ts diff --git a/test/e2e/helpers/utils.ts b/test/e2e/helpers/test-runner/utils.ts similarity index 100% rename from test/e2e/helpers/utils.ts rename to test/e2e/helpers/test-runner/utils.ts diff --git a/test/e2e/tests/_global.setup.ts b/test/e2e/tests/_global.setup.ts index 9502cdf8ed1..38dab3f9a99 100644 --- a/test/e2e/tests/_global.setup.ts +++ b/test/e2e/tests/_global.setup.ts @@ -6,7 +6,7 @@ import { join } from 'path'; import * as os from 'os'; import * as fs from 'fs'; -import { cloneTestRepo, prepareTestEnv } from '../helpers'; +import { cloneTestRepo, prepareTestEnv } from '../helpers/test-runner'; const ROOT_PATH = process.cwd(); const LOGS_ROOT_PATH = join(ROOT_PATH, 'test-logs'); diff --git a/test/e2e/tests/_test.setup.ts b/test/e2e/tests/_test.setup.ts index 48f5112703c..058641e084e 100644 --- a/test/e2e/tests/_test.setup.ts +++ b/test/e2e/tests/_test.setup.ts @@ -21,7 +21,7 @@ import { randomUUID } from 'crypto'; import archiver from 'archiver'; // Local imports -import { createLogger, createApp, TestTags } from '../helpers'; +import { createLogger, createApp, TestTags } from '../helpers/test-runner'; import { Application, Logger, PythonFixtures, RFixtures, UserSetting, UserSettingsFixtures } from '../infra'; // Constants From 188c3e23018bbfd0607b3e5169585a9b0db45b26 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 13:18:25 -0600 Subject: [PATCH 08/18] release --- .github/workflows/test-e2e-release.yml | 28 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test-e2e-release.yml b/.github/workflows/test-e2e-release.yml index ad2b3c32289..74545279e3b 100644 --- a/.github/workflows/test-e2e-release.yml +++ b/.github/workflows/test-e2e-release.yml @@ -32,19 +32,27 @@ jobs: with: node-version-file: .nvmrc - - name: Install Build Dependencies - shell: bash - run: | - sudo apt-get update - sudo apt-get install -y \ - vim curl build-essential clang make cmake git \ - libsodium-dev libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb \ - libgtk-3-0 libgbm1 libnss3 libnspr4 libasound2 libkrb5-dev libcairo-dev \ - libsdl-pango-dev libjpeg-dev libgif-dev pandoc + # - name: Install Build Dependencies + # shell: bash + # run: | + # sudo apt-get update + # sudo apt-get install -y \ + # vim curl build-essential clang make cmake git \ + # libsodium-dev libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb \ + # libgtk-3-0 libgbm1 libnss3 libnspr4 libasound2 libkrb5-dev libcairo-dev \ + # libsdl-pango-dev libjpeg-dev libgif-dev pandoc - name: Compile tests run: | - npm install + mkdir -p node_modules/typescript/bin + npm install -g typescript + TSC_PATH=$(which tsc) + ln -s "$TSC_PATH" node_modules/typescript/bin/tsc + + cd test/e2e + npm install @playwright/test@latest + cd ../.. + npm --prefix test/e2e install npm --prefix test/e2e run compile From 57db7decb4235ead3d167c6e3c2b53f4f7cb9ba9 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 13:20:44 -0600 Subject: [PATCH 09/18] add tree-kill --- test/e2e/package-lock.json | 11 ++++++++++- test/e2e/package.json | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/test/e2e/package-lock.json b/test/e2e/package-lock.json index 6541e9fc211..5880e71e3f1 100644 --- a/test/e2e/package-lock.json +++ b/test/e2e/package-lock.json @@ -15,7 +15,8 @@ "ncp": "^2.0.0", "node-fetch": "^2.6.7", "resemblejs": "5.0.0", - "rimraf": "3.0.2" + "rimraf": "3.0.2", + "tree-kill": "^1.2.2" }, "devDependencies": { "@types/mkdirp": "^1.0.1", @@ -4722,6 +4723,14 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", diff --git a/test/e2e/package.json b/test/e2e/package.json index bd06ddd2863..726037fadd9 100644 --- a/test/e2e/package.json +++ b/test/e2e/package.json @@ -14,7 +14,8 @@ "ncp": "^2.0.0", "node-fetch": "^2.6.7", "resemblejs": "5.0.0", - "rimraf": "3.0.2" + "rimraf": "3.0.2", + "tree-kill": "^1.2.2" }, "devDependencies": { "@types/mkdirp": "^1.0.1", From 71f82c1198d0a74c18014b08a3586a0f3938e717 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 13:39:35 -0600 Subject: [PATCH 10/18] fix treeKill --- test/e2e/infra/code.ts | 5 +++-- test/e2e/infra/processes.ts | 4 ++-- test/e2e/tsconfig.json | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/test/e2e/infra/code.ts b/test/e2e/infra/code.ts index c8b7139a20e..2e08d5256c8 100644 --- a/test/e2e/infra/code.ts +++ b/test/e2e/infra/code.ts @@ -5,7 +5,7 @@ import * as cp from 'child_process'; import * as os from 'os'; -import * as treekill from 'tree-kill'; +import treeKill from 'tree-kill'; import { ILogFile } from './driver'; import { Logger, measureAndLog } from './logger'; import { launch as launchPlaywrightBrowser } from './playwrightBrowser'; @@ -13,6 +13,7 @@ import { PlaywrightDriver } from './playwrightDriver'; import { launch as launchPlaywrightElectron } from './playwrightElectron'; import { teardown } from './processes'; + export interface LaunchOptions { codePath?: string; readonly workspacePath: string; @@ -160,7 +161,7 @@ export class Code { this.logger.log('Smoke test exit call did not terminate process after 20s, forcefully exiting the application...'); // no need to await since we're polling for the process to die anyways - treekill(pid, err => { + treeKill(pid, err => { try { process.kill(pid, 0); // throws an exception if the process doesn't exist anymore this.logger.log('Failed to kill Electron process tree:', err?.message); diff --git a/test/e2e/infra/processes.ts b/test/e2e/infra/processes.ts index f111095f12b..d3eb6430f78 100644 --- a/test/e2e/infra/processes.ts +++ b/test/e2e/infra/processes.ts @@ -5,7 +5,7 @@ import { ChildProcess } from 'child_process'; import { promisify } from 'util'; -import * as treekill from 'tree-kill'; +import treeKill from 'tree-kill'; import { Logger } from './logger'; export async function teardown(p: ChildProcess, logger: Logger, retryCount = 3): Promise { @@ -19,7 +19,7 @@ export async function teardown(p: ChildProcess, logger: Logger, retryCount = 3): retries++; try { - return await promisify(treekill)(pid); + return await promisify(treeKill)(pid); } catch (error) { try { process.kill(pid, 0); // throws an exception if the process doesn't exist anymore diff --git a/test/e2e/tsconfig.json b/test/e2e/tsconfig.json index 02cd3a44d7c..51efdeec0c9 100644 --- a/test/e2e/tsconfig.json +++ b/test/e2e/tsconfig.json @@ -1,6 +1,8 @@ { "compilerOptions": { "module": "commonjs", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, "noImplicitAny": false, "removeComments": false, "preserveConstEnums": true, From d8aca4e179fbb5ee07ae462745f0c37e55fe2c4c Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 14:17:48 -0600 Subject: [PATCH 11/18] update slack notify --- .github/workflows/test-e2e-release.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-e2e-release.yml b/.github/workflows/test-e2e-release.yml index 74545279e3b..a0d03e72320 100644 --- a/.github/workflows/test-e2e-release.yml +++ b/.github/workflows/test-e2e-release.yml @@ -16,6 +16,7 @@ on: options: - failure - always + - never permissions: id-token: write @@ -117,10 +118,14 @@ jobs: needs: [e2e-electron] runs-on: ubuntu-latest if: always() + env: + notify_on: ${{ github.event_name == 'schedule' && 'always' || inputs.notify_on || 'failure' }} steps: + - run: | + echo "Will notify on: ${{ env.notify_on }}" - name: Notify Slack uses: midleman/slack-workflow-status@master with: repo_token: ${{ secrets.POSITRON_GITHUB_PAT }} slack_webhook_url: ${{ secrets.SLACK_TEST_RESULTS_WEBHOOK_URL }} - notify_on: ${{ inputs.notify_on }} + notify_on: ${{ env.notify_on }} From 408566d88cdb15cb1f9e1737360809284770a3c3 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 14:21:13 -0600 Subject: [PATCH 12/18] add vscode-uri --- test/e2e/package-lock.json | 12 ++++++++++-- test/e2e/package.json | 5 +++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/test/e2e/package-lock.json b/test/e2e/package-lock.json index 5880e71e3f1..3a564c551a8 100644 --- a/test/e2e/package-lock.json +++ b/test/e2e/package-lock.json @@ -15,8 +15,7 @@ "ncp": "^2.0.0", "node-fetch": "^2.6.7", "resemblejs": "5.0.0", - "rimraf": "3.0.2", - "tree-kill": "^1.2.2" + "rimraf": "3.0.2" }, "devDependencies": { "@types/mkdirp": "^1.0.1", @@ -27,6 +26,8 @@ "@types/rimraf": "3.0.2", "archiver": "^7.0.1", "npm-run-all": "^4.1.5", + "tree-kill": "^1.2.2", + "vscode-uri": "^3.0.2", "watch": "^1.0.2" } }, @@ -4727,6 +4728,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, "bin": { "tree-kill": "cli.js" } @@ -4866,6 +4868,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, "node_modules/watch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", diff --git a/test/e2e/package.json b/test/e2e/package.json index 726037fadd9..d0c622914f5 100644 --- a/test/e2e/package.json +++ b/test/e2e/package.json @@ -14,8 +14,7 @@ "ncp": "^2.0.0", "node-fetch": "^2.6.7", "resemblejs": "5.0.0", - "rimraf": "3.0.2", - "tree-kill": "^1.2.2" + "rimraf": "3.0.2" }, "devDependencies": { "@types/mkdirp": "^1.0.1", @@ -26,6 +25,8 @@ "@types/rimraf": "3.0.2", "archiver": "^7.0.1", "npm-run-all": "^4.1.5", + "tree-kill": "^1.2.2", + "vscode-uri": "^3.0.2", "watch": "^1.0.2" } } From 8042f4a887225718805f3a9daafdaee9c00f088d Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 14:38:13 -0600 Subject: [PATCH 13/18] add compile back to e2e-release --- .github/workflows/test-e2e-release.yml | 28 +++++++++----------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/.github/workflows/test-e2e-release.yml b/.github/workflows/test-e2e-release.yml index a0d03e72320..83a8b503705 100644 --- a/.github/workflows/test-e2e-release.yml +++ b/.github/workflows/test-e2e-release.yml @@ -33,27 +33,19 @@ jobs: with: node-version-file: .nvmrc - # - name: Install Build Dependencies - # shell: bash - # run: | - # sudo apt-get update - # sudo apt-get install -y \ - # vim curl build-essential clang make cmake git \ - # libsodium-dev libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb \ - # libgtk-3-0 libgbm1 libnss3 libnspr4 libasound2 libkrb5-dev libcairo-dev \ - # libsdl-pango-dev libjpeg-dev libgif-dev pandoc + - name: Install Build Dependencies + shell: bash + run: | + sudo apt-get update + sudo apt-get install -y \ + vim curl build-essential clang make cmake git \ + libsodium-dev libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb \ + libgtk-3-0 libgbm1 libnss3 libnspr4 libasound2 libkrb5-dev libcairo-dev \ + libsdl-pango-dev libjpeg-dev libgif-dev pandoc - name: Compile tests run: | - mkdir -p node_modules/typescript/bin - npm install -g typescript - TSC_PATH=$(which tsc) - ln -s "$TSC_PATH" node_modules/typescript/bin/tsc - - cd test/e2e - npm install @playwright/test@latest - cd ../.. - + npm install npm --prefix test/e2e install npm --prefix test/e2e run compile From ea78cbebb179558fcaf5bca4019782bdec55f8f6 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 15:50:53 -0600 Subject: [PATCH 14/18] add copy-driver-def back --- test/e2e/infra/driver.d.ts | 4 +-- .../e2e/infra/tools/copy-driver-definition.js | 36 +++++++++++++++++++ test/e2e/package.json | 4 ++- 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 test/e2e/infra/tools/copy-driver-definition.js diff --git a/test/e2e/infra/driver.d.ts b/test/e2e/infra/driver.d.ts index 5243ad129f0..6f2a532c710 100644 --- a/test/e2e/infra/driver.d.ts +++ b/test/e2e/infra/driver.d.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ export interface IElement { diff --git a/test/e2e/infra/tools/copy-driver-definition.js b/test/e2e/infra/tools/copy-driver-definition.js new file mode 100644 index 00000000000..235a39a192a --- /dev/null +++ b/test/e2e/infra/tools/copy-driver-definition.js @@ -0,0 +1,36 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +//@ts-check +'use strict'; + +const cp = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const root = cp.execSync('git rev-parse --show-toplevel').toString().trim(); +const driverPath = path.join(root, 'src/vs/workbench/services/driver/common/driver.ts'); + +let contents = fs.readFileSync(driverPath, 'utf8'); +// @ts-ignore +contents = /\/\/\*START([\s\S]*)\/\/\*END/mi.exec(contents)[1].trim(); +contents = contents.replace(/\bTPromise\b/g, 'Promise'); + +contents = `/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +${contents} +`; + +const srcPath = path.join(path.dirname(__dirname)); +const outPath = path.join(path.dirname(__dirname), 'out'); + +if (!fs.existsSync(outPath)) { + fs.mkdirSync(outPath); +} +fs.writeFileSync(path.join(srcPath, 'driver.d.ts'), contents); +fs.writeFileSync(path.join(outPath, 'driver.d.ts'), contents); diff --git a/test/e2e/package.json b/test/e2e/package.json index d0c622914f5..15121046f9b 100644 --- a/test/e2e/package.json +++ b/test/e2e/package.json @@ -3,7 +3,9 @@ "version": "0.0.1", "license": "MIT", "scripts": { - "compile": "node ../../node_modules/typescript/bin/tsc", + "copy-driver-definition": "node infra/tools/copy-driver-definition.js", + "watch-driver-definition": "watch \"node tools/copy-driver-definition.js\"", + "compile": "npm run copy-driver-definition && node ../../node_modules/typescript/bin/tsc", "watch-e2e": "npm run compile -- --watch --preserveWatchOutput", "watch": "npm-run-all -lp watch-e2e" }, From 1e58838dcf21bb857bddd0e899ab89fa27cf3100 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 16:11:42 -0600 Subject: [PATCH 15/18] src/infraPath --- test/e2e/infra/tools/copy-driver-definition.js | 9 +++++++-- test/e2e/tests/viewer/viewer.test.ts | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/test/e2e/infra/tools/copy-driver-definition.js b/test/e2e/infra/tools/copy-driver-definition.js index 235a39a192a..4e3954d50ae 100644 --- a/test/e2e/infra/tools/copy-driver-definition.js +++ b/test/e2e/infra/tools/copy-driver-definition.js @@ -27,10 +27,15 @@ ${contents} `; const srcPath = path.join(path.dirname(__dirname)); -const outPath = path.join(path.dirname(__dirname), 'out'); +const outPath = path.join(__dirname, '..', '..', 'out'); +const infraPath = path.join(outPath, 'infra'); if (!fs.existsSync(outPath)) { fs.mkdirSync(outPath); } + +if (!fs.existsSync(infraPath)) { + fs.mkdirSync(infraPath); +} fs.writeFileSync(path.join(srcPath, 'driver.d.ts'), contents); -fs.writeFileSync(path.join(outPath, 'driver.d.ts'), contents); +fs.writeFileSync(path.join(infraPath, 'driver.d.ts'), contents); diff --git a/test/e2e/tests/viewer/viewer.test.ts b/test/e2e/tests/viewer/viewer.test.ts index 0ffd4dbbd68..75bb99d2ee4 100644 --- a/test/e2e/tests/viewer/viewer.test.ts +++ b/test/e2e/tests/viewer/viewer.test.ts @@ -17,9 +17,9 @@ test.describe('Viewer', { tag: [tags.VIEWER] }, () => { test('Python - Verify Viewer functionality with webbrowser [C784887]', async function ({ app, page, logger, python }) { logger.log('Sending code to console'); - await app.workbench.positronConsole.pasteCodeToConsole(pythonScript); - await app.workbench.positronConsole.sendEnterKey(); - const theDoc = app.workbench.positronViewer.getViewerLocator('head'); + await app.workbench.console.pasteCodeToConsole(pythonScript); + await app.workbench.console.sendEnterKey(); + const theDoc = app.workbench.viewer.getViewerLocator('head'); await theDoc.waitFor({ state: 'attached' }); }); From 682ba554a58785a68edb84b642868c7587edb218 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Mon, 6 Jan 2025 16:44:51 -0600 Subject: [PATCH 16/18] move test-runner files --- test/e2e/README.md | 2 +- test/e2e/{helpers => infra}/test-runner/create-app.ts | 0 test/e2e/{helpers => infra}/test-runner/index.ts | 0 test/e2e/{helpers => infra}/test-runner/logger.ts | 0 test/e2e/{helpers => infra}/test-runner/test-setup.ts | 0 test/e2e/{helpers => infra}/test-runner/test-tags.ts | 0 test/e2e/{helpers => infra}/test-runner/utils.ts | 0 test/e2e/tests/_global.setup.ts | 2 +- test/e2e/tests/_test.setup.ts | 2 +- 9 files changed, 3 insertions(+), 3 deletions(-) rename test/e2e/{helpers => infra}/test-runner/create-app.ts (100%) rename test/e2e/{helpers => infra}/test-runner/index.ts (100%) rename test/e2e/{helpers => infra}/test-runner/logger.ts (100%) rename test/e2e/{helpers => infra}/test-runner/test-setup.ts (100%) rename test/e2e/{helpers => infra}/test-runner/test-tags.ts (100%) rename test/e2e/{helpers => infra}/test-runner/utils.ts (100%) diff --git a/test/e2e/README.md b/test/e2e/README.md index c128b15cab4..c4a8489a787 100644 --- a/test/e2e/README.md +++ b/test/e2e/README.md @@ -202,7 +202,7 @@ To add a test tag: 1. Use the format `@:tag` in your PR description (e.g., `@:help`, `@:console`). 2. Once added, a comment will appear on your PR confirming that the tag was found and parsed correctly. -From that point, all E2E tests linked to the specified tag(s) will run during the test job. For a full list of available tags, see this [file](https://github.com/posit-dev/positron/blob/main/test/e2e/helpers/test-tags.ts). +From that point, all E2E tests linked to the specified tag(s) will run during the test job. For a full list of available tags, see this [file](https://github.com/posit-dev/positron/blob/main/test/e2e/infra/test-runner/test-tags.ts). Note: You can update the tags in the PR description at any time. The PR comment will confirm the parsed tags, and the test job will use the tags present in the PR description at the time of execution. diff --git a/test/e2e/helpers/test-runner/create-app.ts b/test/e2e/infra/test-runner/create-app.ts similarity index 100% rename from test/e2e/helpers/test-runner/create-app.ts rename to test/e2e/infra/test-runner/create-app.ts diff --git a/test/e2e/helpers/test-runner/index.ts b/test/e2e/infra/test-runner/index.ts similarity index 100% rename from test/e2e/helpers/test-runner/index.ts rename to test/e2e/infra/test-runner/index.ts diff --git a/test/e2e/helpers/test-runner/logger.ts b/test/e2e/infra/test-runner/logger.ts similarity index 100% rename from test/e2e/helpers/test-runner/logger.ts rename to test/e2e/infra/test-runner/logger.ts diff --git a/test/e2e/helpers/test-runner/test-setup.ts b/test/e2e/infra/test-runner/test-setup.ts similarity index 100% rename from test/e2e/helpers/test-runner/test-setup.ts rename to test/e2e/infra/test-runner/test-setup.ts diff --git a/test/e2e/helpers/test-runner/test-tags.ts b/test/e2e/infra/test-runner/test-tags.ts similarity index 100% rename from test/e2e/helpers/test-runner/test-tags.ts rename to test/e2e/infra/test-runner/test-tags.ts diff --git a/test/e2e/helpers/test-runner/utils.ts b/test/e2e/infra/test-runner/utils.ts similarity index 100% rename from test/e2e/helpers/test-runner/utils.ts rename to test/e2e/infra/test-runner/utils.ts diff --git a/test/e2e/tests/_global.setup.ts b/test/e2e/tests/_global.setup.ts index 38dab3f9a99..48b73d94c67 100644 --- a/test/e2e/tests/_global.setup.ts +++ b/test/e2e/tests/_global.setup.ts @@ -6,7 +6,7 @@ import { join } from 'path'; import * as os from 'os'; import * as fs from 'fs'; -import { cloneTestRepo, prepareTestEnv } from '../helpers/test-runner'; +import { cloneTestRepo, prepareTestEnv } from '../infra/test-runner'; const ROOT_PATH = process.cwd(); const LOGS_ROOT_PATH = join(ROOT_PATH, 'test-logs'); diff --git a/test/e2e/tests/_test.setup.ts b/test/e2e/tests/_test.setup.ts index 058641e084e..b8b3019e8f2 100644 --- a/test/e2e/tests/_test.setup.ts +++ b/test/e2e/tests/_test.setup.ts @@ -21,7 +21,7 @@ import { randomUUID } from 'crypto'; import archiver from 'archiver'; // Local imports -import { createLogger, createApp, TestTags } from '../helpers/test-runner'; +import { createLogger, createApp, TestTags } from '../infra/test-runner'; import { Application, Logger, PythonFixtures, RFixtures, UserSetting, UserSettingsFixtures } from '../infra'; // Constants From 8f3058cc306e03ea2ff08e87165f604e71fa2162 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Tue, 7 Jan 2025 08:53:09 -0600 Subject: [PATCH 17/18] nit --- test/e2e/infra/code.ts | 1 - test/e2e/tests/data-explorer/sparklines.test.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/test/e2e/infra/code.ts b/test/e2e/infra/code.ts index 2e08d5256c8..39715b46f55 100644 --- a/test/e2e/infra/code.ts +++ b/test/e2e/infra/code.ts @@ -13,7 +13,6 @@ import { PlaywrightDriver } from './playwrightDriver'; import { launch as launchPlaywrightElectron } from './playwrightElectron'; import { teardown } from './processes'; - export interface LaunchOptions { codePath?: string; readonly workspacePath: string; diff --git a/test/e2e/tests/data-explorer/sparklines.test.ts b/test/e2e/tests/data-explorer/sparklines.test.ts index 59ce1860cdf..dcda21658ae 100644 --- a/test/e2e/tests/data-explorer/sparklines.test.ts +++ b/test/e2e/tests/data-explorer/sparklines.test.ts @@ -3,7 +3,6 @@ * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ - import { Application } from '../../infra'; import { test, expect, tags } from '../_test.setup'; From b48020aba4b7d88cca4862b9e3b4ee9b639255c8 Mon Sep 17 00:00:00 2001 From: Marie Idleman Date: Tue, 7 Jan 2025 09:46:36 -0600 Subject: [PATCH 18/18] revert licenses --- test/e2e/infra/application.ts | 4 ++-- test/e2e/infra/code.ts | 4 ++-- test/e2e/infra/electron.ts | 4 ++-- test/e2e/infra/index.ts | 4 ++-- test/e2e/infra/logger.ts | 4 ++-- test/e2e/infra/playwrightBrowser.ts | 4 ++-- test/e2e/infra/playwrightDriver.ts | 4 ++-- test/e2e/infra/playwrightElectron.ts | 4 ++-- test/e2e/infra/processes.ts | 4 ++-- test/e2e/infra/profiler.ts | 4 ++-- test/e2e/infra/workbench.ts | 4 ++-- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/test/e2e/infra/application.ts b/test/e2e/infra/application.ts index fcd2a026e97..04a878d322b 100644 --- a/test/e2e/infra/application.ts +++ b/test/e2e/infra/application.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Workbench } from './workbench'; diff --git a/test/e2e/infra/code.ts b/test/e2e/infra/code.ts index 39715b46f55..10d3f4294fb 100644 --- a/test/e2e/infra/code.ts +++ b/test/e2e/infra/code.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as cp from 'child_process'; diff --git a/test/e2e/infra/electron.ts b/test/e2e/infra/electron.ts index 5603229e79b..ac177d8f096 100644 --- a/test/e2e/infra/electron.ts +++ b/test/e2e/infra/electron.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { join } from 'path'; diff --git a/test/e2e/infra/index.ts b/test/e2e/infra/index.ts index 27b8de74cbc..0599909a620 100644 --- a/test/e2e/infra/index.ts +++ b/test/e2e/infra/index.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ export * from './application'; diff --git a/test/e2e/infra/logger.ts b/test/e2e/infra/logger.ts index e8955464967..28dc9e32c41 100644 --- a/test/e2e/infra/logger.ts +++ b/test/e2e/infra/logger.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { appendFileSync, writeFileSync } from 'fs'; diff --git a/test/e2e/infra/playwrightBrowser.ts b/test/e2e/infra/playwrightBrowser.ts index 90e87ba1fb9..fdcbce8db24 100644 --- a/test/e2e/infra/playwrightBrowser.ts +++ b/test/e2e/infra/playwrightBrowser.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; diff --git a/test/e2e/infra/playwrightDriver.ts b/test/e2e/infra/playwrightDriver.ts index 322a259571d..d386e3bd9b0 100644 --- a/test/e2e/infra/playwrightDriver.ts +++ b/test/e2e/infra/playwrightDriver.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; diff --git a/test/e2e/infra/playwrightElectron.ts b/test/e2e/infra/playwrightElectron.ts index ff43ca22d6b..9c9ea239ed9 100644 --- a/test/e2e/infra/playwrightElectron.ts +++ b/test/e2e/infra/playwrightElectron.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as playwright from '@playwright/test'; diff --git a/test/e2e/infra/processes.ts b/test/e2e/infra/processes.ts index d3eb6430f78..af3e2e21cf0 100644 --- a/test/e2e/infra/processes.ts +++ b/test/e2e/infra/processes.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { ChildProcess } from 'child_process'; diff --git a/test/e2e/infra/profiler.ts b/test/e2e/infra/profiler.ts index 34dead9ac0d..9b3a0107d5e 100644 --- a/test/e2e/infra/profiler.ts +++ b/test/e2e/infra/profiler.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ const { decode_bytes } = require('@vscode/v8-heap-parser'); diff --git a/test/e2e/infra/workbench.ts b/test/e2e/infra/workbench.ts index 15b039dff31..2ff99245567 100644 --- a/test/e2e/infra/workbench.ts +++ b/test/e2e/infra/workbench.ts @@ -1,6 +1,6 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Code } from './code';