diff --git a/package.json b/package.json index 3a7deeb52c..8de140d96c 100644 --- a/package.json +++ b/package.json @@ -17,44 +17,44 @@ }, "dependencies": { "@vscode/l10n": "^0.0.18", - "disposablestack": "^1.1.4" + "disposablestack": "^1.1.6" }, "devDependencies": { - "@types/jest": "^29.2.3", - "@types/mocha": "^10.0.1", - "@types/node": "^18.19.14", - "@types/vscode": "^1.73.0", - "@typescript-eslint/eslint-plugin": "^5.53.0", - "@typescript-eslint/parser": "^5.53.0", + "@types/jest": "^29.5.14", + "@types/mocha": "^10.0.9", + "@types/node": "^18.19.64", + "@types/vscode": "^1.95.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", "@vscode/l10n-dev": "^0.0.35", - "@vscode/test-electron": "^1.6.0", - "@vscode/vsce": "^3.1.0", + "@vscode/test-electron": "^1.6.2", + "@vscode/vsce": "^3.2.1", "concurrently": "^6.5.1", - "esbuild-loader": "^4.1.0", - "eslint": "^8.34.0", - "eslint-config-prettier": "^8.6.0", + "esbuild-loader": "^4.2.2", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.10.0", "eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-zowe-explorer": "workspace:./packages/eslint-plugin-zowe-explorer", "fork-ts-checker-webpack-plugin": "^9.0.2", "husky": "^6.0.0", - "jest": "^29.3.1", - "jest-html-reporter": "^3.7.0", + "jest": "^29.7.0", + "jest-html-reporter": "^3.10.2", "jest-junit": "^15.0.0", "jest-mock-vscode": "^3.0.5", - "jest-stare": "^2.4.1", + "jest-stare": "^2.5.2", "madge": "^7.0.0", - "mocha": "^10.2.0", - "mocha-junit-reporter": "^2.2.0", + "mocha": "^10.8.2", + "mocha-junit-reporter": "^2.2.1", "mocha-multi-reporters": "^1.5.1", "node-loader": "^2.0.0", - "prettier": "^2.6.0", + "prettier": "^2.8.8", "rimraf": "^3.0.2", "terser-webpack-plugin": "^5.3.10", - "ts-jest": "^29.0.3", - "tsx": "^4.9.3", - "typescript": "^5.3.3", - "webpack": "^5.94.0", + "ts-jest": "^29.2.5", + "tsx": "^4.19.2", + "typescript": "^5.6.3", + "webpack": "^5.96.1", "webpack-cli": "^5.1.4" }, "pnpm": { diff --git a/packages/zowe-explorer-api/CHANGELOG.md b/packages/zowe-explorer-api/CHANGELOG.md index 93ff4635c1..6aa416391f 100644 --- a/packages/zowe-explorer-api/CHANGELOG.md +++ b/packages/zowe-explorer-api/CHANGELOG.md @@ -7,11 +7,13 @@ All notable changes to the "zowe-explorer-api" extension will be documented in t ### New features and enhancements - Update Zowe SDKs to `8.2.0` to get the latest enhancements from Imperative. +- Added individual user settings for MVS, TSO, and Unix commands. [#3079](https://github.com/zowe/zowe-explorer-vscode/pull/3079) ### Bug fixes - Fixed an issue to review inconsistent capitalization across translation strings. [#2935](https://github.com/zowe/zowe-explorer-vscode/issues/2935) - Fixed an issue where the `responseTimeout` profile property was ignored for z/OSMF MVS and USS API calls. [#3225](https://github.com/zowe/zowe-explorer-vscode/issues/3225) +- Updated dependencies for technical currency. [#3786](https://github.com/zowe/zowe-explorer-vscode/issues/3786) ## `3.0.2` diff --git a/packages/zowe-explorer-api/__tests__/__unit__/fs/BaseProvider.unit.test.ts b/packages/zowe-explorer-api/__tests__/__unit__/fs/BaseProvider.unit.test.ts index cfe6930aee..36c9c85ef6 100644 --- a/packages/zowe-explorer-api/__tests__/__unit__/fs/BaseProvider.unit.test.ts +++ b/packages/zowe-explorer-api/__tests__/__unit__/fs/BaseProvider.unit.test.ts @@ -544,8 +544,8 @@ describe("_handleConflict", () => { }); }); describe("_handleError", () => { - it("calls ErrorCorrelator.displayError to display error to user - no options provided", async () => { - const displayErrorMock = jest.spyOn(ErrorCorrelator.prototype, "displayError").mockReturnValue(new Promise((res, rej) => {})); + it("calls ErrorCorrelator.displayError to display error to user - no options provided", () => { + const displayErrorMock = jest.spyOn(ErrorCorrelator.prototype, "displayError").mockReturnValue(new Promise((_res, _rej) => {})); const prov = new (BaseProvider as any)(); prov._handleError(new Error("example")); expect(displayErrorMock).toHaveBeenCalledWith(ZoweExplorerApiType.All, new Error("example"), { @@ -555,8 +555,8 @@ describe("_handleError", () => { templateArgs: undefined, }); }); - it("calls ErrorCorrelator.displayError to display error to user - options provided", async () => { - const displayErrorMock = jest.spyOn(ErrorCorrelator.prototype, "displayError").mockReturnValue(new Promise((res, rej) => {})); + it("calls ErrorCorrelator.displayError to display error to user - options provided", () => { + const displayErrorMock = jest.spyOn(ErrorCorrelator.prototype, "displayError").mockReturnValue(new Promise((_res, _rej) => {})); const prov = new (BaseProvider as any)(); prov._handleError(new Error("example"), { additionalContext: "Failed to list data sets", diff --git a/packages/zowe-explorer-api/__tests__/__unit__/profiles/ZoweExplorerZosmfApi.unit.test.ts b/packages/zowe-explorer-api/__tests__/__unit__/profiles/ZoweExplorerZosmfApi.unit.test.ts index 6882b75541..7a7b868d23 100644 --- a/packages/zowe-explorer-api/__tests__/__unit__/profiles/ZoweExplorerZosmfApi.unit.test.ts +++ b/packages/zowe-explorer-api/__tests__/__unit__/profiles/ZoweExplorerZosmfApi.unit.test.ts @@ -65,13 +65,17 @@ async function expectUnixCommandApiWithSshSession( sshobj: zosuss.SshSession ): Promise { spy.mockClear().mockResolvedValue(undefined); - spy.mockImplementation((sshobject: zosuss.SshSession, command: string, cwd: string, callback: (data: string) => void) => { - callback("test"); - }); + spy.mockImplementation( + (_sshobject: zosuss.SshSession, _command: string, _cwd: string, callback: (data: string) => void, _cleanStdout?: boolean) => { + callback("test"); + } + ); const spywhenpathnotspecified = jest.spyOn(zosuss.Shell, "executeSsh"); - spywhenpathnotspecified.mockImplementation((sshobject: zosuss.SshSession, command: string, callback: (data: string) => void) => { - callback("test"); - }); + spywhenpathnotspecified.mockImplementation( + (_sshobject: zosuss.SshSession, _command: string, callback: (data: string) => void, _cleanStdout?: boolean) => { + callback("test"); + } + ); await apiInstance[name as string](sshobj, ...args, true, () => {}); await apiInstance[name as string](sshobj, ...args, false, () => {}); expect(spy).toHaveBeenCalled(); @@ -648,6 +652,12 @@ describe("ZosmfCommandApi", () => { args: ["command", { account: "ACCT#" }], transform: (args) => [args[1].account, ...args], }, + { + name: "issueTsoCmdWithParms", + spy: jest.spyOn(zostso.IssueTso, "issueTsoCmd"), + args: ["command"], + transform: (args) => [...args, { addressSpaceOptions: undefined }], + }, { name: "issueMvsCommand", spy: jest.spyOn(zosconsole.IssueCommand, "issue"), diff --git a/packages/zowe-explorer-api/package.json b/packages/zowe-explorer-api/package.json index f8a713dfc2..f752880d12 100644 --- a/packages/zowe-explorer-api/package.json +++ b/packages/zowe-explorer-api/package.json @@ -28,15 +28,15 @@ }, "dependencies": { "@types/vscode": "^1.53.2", - "@zowe/core-for-zowe-sdk": "^8.2.0", - "@zowe/imperative": "^8.2.0", + "@zowe/core-for-zowe-sdk": "^8.7.0", + "@zowe/imperative": "^8.7.0", "@zowe/secrets-for-zowe-sdk": "^8.1.2", - "@zowe/zos-console-for-zowe-sdk": "^8.2.0", - "@zowe/zos-files-for-zowe-sdk": "^8.2.0", - "@zowe/zos-jobs-for-zowe-sdk": "^8.2.0", - "@zowe/zos-tso-for-zowe-sdk": "^8.2.0", - "@zowe/zos-uss-for-zowe-sdk": "^8.2.0", - "@zowe/zosmf-for-zowe-sdk": "^8.2.0", + "@zowe/zos-console-for-zowe-sdk": "^8.7.0", + "@zowe/zos-files-for-zowe-sdk": "^8.7.0", + "@zowe/zos-jobs-for-zowe-sdk": "^8.7.0", + "@zowe/zos-tso-for-zowe-sdk": "^8.7.0", + "@zowe/zos-uss-for-zowe-sdk": "^8.7.0", + "@zowe/zosmf-for-zowe-sdk": "^8.7.0", "deep-object-diff": "^1.1.9", "mustache": "^4.2.0", "semver": "^7.6.0" diff --git a/packages/zowe-explorer-api/src/extend/MainframeInteraction.ts b/packages/zowe-explorer-api/src/extend/MainframeInteraction.ts index 04adf18c19..a76216eb60 100644 --- a/packages/zowe-explorer-api/src/extend/MainframeInteraction.ts +++ b/packages/zowe-explorer-api/src/extend/MainframeInteraction.ts @@ -500,6 +500,16 @@ export namespace MainframeInteraction { */ issueTsoCommandWithParms?(command: string, parms?: zostso.IStartTsoParms): Promise; + /** + * Issues a TSO Command without the need for account information + * + * @param {string} command + * @param {zostso.IStartTsoParms} parms + * @returns {Promise} + * @memberof ICommand + */ + issueTsoCmdWithParms?(command: string, parms?: zostso.IStartTsoParms): Promise; + /** * Issues a MVS Command and returns a Console Command API response. * diff --git a/packages/zowe-explorer-api/src/profiles/UserSettings.ts b/packages/zowe-explorer-api/src/profiles/UserSettings.ts index 535f705302..b2b8aca033 100644 --- a/packages/zowe-explorer-api/src/profiles/UserSettings.ts +++ b/packages/zowe-explorer-api/src/profiles/UserSettings.ts @@ -16,5 +16,7 @@ export enum PersistenceSchemaEnum { Dataset = "zowe.ds.history", USS = "zowe.uss.history", Job = "zowe.jobs.history", - Commands = "zowe.commands.history", + MvsCommands = "zowe.commands.mvs.history", + TsoCommands = "zowe.commands.tso.history", + UssCommands = "zowe.commands.uss.history", } diff --git a/packages/zowe-explorer-api/src/profiles/ZoweExplorerZosmfApi.ts b/packages/zowe-explorer-api/src/profiles/ZoweExplorerZosmfApi.ts index 340da8f7b4..93bb53c244 100644 --- a/packages/zowe-explorer-api/src/profiles/ZoweExplorerZosmfApi.ts +++ b/packages/zowe-explorer-api/src/profiles/ZoweExplorerZosmfApi.ts @@ -443,6 +443,10 @@ export namespace ZoweExplorerZosmf { return zostso.IssueTso.issueTsoCommand(this.getSession(), parms.account, command, parms); } + public issueTsoCmdWithParms(command: string, parms: zostso.IStartTsoParms): Promise { + return zostso.IssueTso.issueTsoCmd(this.getSession(), command, { addressSpaceOptions: parms }); + } + public issueMvsCommand(command: string, consoleName?: string): Promise { return zosconsole.IssueCommand.issue(this.getSession(), { command, consoleName, processResponses: true }); } @@ -450,13 +454,24 @@ export namespace ZoweExplorerZosmf { public async issueUnixCommand(command: string, cwd: string, sshSession: zosuss.SshSession): Promise { let stdout = ""; if (cwd) { - await zosuss.Shell.executeSshCwd(sshSession, command, '"' + cwd + '"', (data: string) => { - stdout += data; - }); + await zosuss.Shell.executeSshCwd( + sshSession, + command, + '"' + cwd + '"', + (data: string) => { + stdout += data; + }, + true + ); } else { - await zosuss.Shell.executeSsh(sshSession, command, (data: string) => { - stdout += data; - }); + await zosuss.Shell.executeSsh( + sshSession, + command, + (data: string) => { + stdout += data; + }, + true + ); } return stdout; } diff --git a/packages/zowe-explorer-ftp-extension/CHANGELOG.md b/packages/zowe-explorer-ftp-extension/CHANGELOG.md index 05e045d4f3..cdb40ed2b7 100644 --- a/packages/zowe-explorer-ftp-extension/CHANGELOG.md +++ b/packages/zowe-explorer-ftp-extension/CHANGELOG.md @@ -6,6 +6,8 @@ All notable changes to the "zowe-explorer-ftp-extension" extension will be docum ### Bug fixes +- Updated dependencies for technical currency. [#3786](https://github.com/zowe/zowe-explorer-vscode/issues/3786) + ## `3.0.2` ## `3.0.1` diff --git a/packages/zowe-explorer-ftp-extension/package.json b/packages/zowe-explorer-ftp-extension/package.json index 3a30ffcd1f..a188443066 100644 --- a/packages/zowe-explorer-ftp-extension/package.json +++ b/packages/zowe-explorer-ftp-extension/package.json @@ -52,9 +52,9 @@ "vscode": "^1.79.0" }, "dependencies": { - "@zowe/zos-files-for-zowe-sdk": "^8.2.0", + "@zowe/zos-files-for-zowe-sdk": "^8.7.0", "@zowe/zos-ftp-for-zowe-cli": "^3.0.0", - "@zowe/zos-jobs-for-zowe-sdk": "^8.2.0", + "@zowe/zos-jobs-for-zowe-sdk": "^8.7.0", "@zowe/zowe-explorer-api": "3.1.0-SNAPSHOT", "tmp": "0.2.3" }, diff --git a/packages/zowe-explorer/CHANGELOG.md b/packages/zowe-explorer/CHANGELOG.md index 1cfe85d9a1..e22689b1a6 100644 --- a/packages/zowe-explorer/CHANGELOG.md +++ b/packages/zowe-explorer/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to the "vscode-extension-for-zowe" extension will be documen - Update Zowe SDKs to `8.2.0` to get the latest enhancements from Imperative. - Added expired JSON web token detection for profiles in each tree view (Data Sets, USS, Jobs). When a user performs a search on a profile, they are prompted to log in if their token expired. [#3175](https://github.com/zowe/zowe-explorer-vscode/issues/3175) +- Added integrated terminals for z/OS Unix, TSO, and MVS commands which can be enabled via the `Zowe › Commands: Use Integrated Terminals` setting. [#3079](https://github.com/zowe/zowe-explorer-vscode/pull/3079) - Add a data set or USS resource to a virtual workspace with the new "Add to Workspace" context menu option. [#3265](https://github.com/zowe/zowe-explorer-vscode/issues/3265) - Power users and developers can now build links to efficiently open mainframe resources in Zowe Explorer. Use the **Copy External Link** option in the context menu to get the URL for a data set or USS resource, or create a link in the format `vscode://Zowe.vscode-extension-for-zowe?`. For more information on building resource URIs, see the [FileSystemProvider wiki article](https://github.com/zowe/zowe-explorer-vscode/wiki/FileSystemProvider#file-paths-vs-uris). [#3271](https://github.com/zowe/zowe-explorer-vscode/pull/3271) - Implemented more user-friendly error messages for API or network errors within Zowe Explorer. [#3243](https://github.com/zowe/zowe-explorer-vscode/pull/3243) @@ -23,6 +24,7 @@ All notable changes to the "vscode-extension-for-zowe" extension will be documen - Fixed issue where Zowe Explorer would present the "No configs detected" notification when initialized in a workspace without a Zowe team configuration. [#3280](https://github.com/zowe/zowe-explorer-vscode/issues/3280) - Reduced the number of MVS API calls performed by `vscode.workspace.fs.readFile` when fetching the contents of a data set entry. [#3278](https://github.com/zowe/zowe-explorer-vscode/issues/3278) - Fixed an issue to review inconsistent capitalization across translation strings. [#2935](https://github.com/zowe/zowe-explorer-vscode/issues/2935) +- Updated dependencies for technical currency. [#3786](https://github.com/zowe/zowe-explorer-vscode/issues/3786) ## `3.0.2` diff --git a/packages/zowe-explorer/__tests__/__mocks__/@zowe/imperative.ts b/packages/zowe-explorer/__tests__/__mocks__/@zowe/imperative.ts index 3e3a844d4e..d0a62a6944 100644 --- a/packages/zowe-explorer/__tests__/__mocks__/@zowe/imperative.ts +++ b/packages/zowe-explorer/__tests__/__mocks__/@zowe/imperative.ts @@ -150,6 +150,7 @@ export interface ICommandArguments { export interface IImperativeError { msg: string; errorCode?: number; + causeErrors?: any; additionalDetails?: string; } @@ -297,13 +298,20 @@ export class ConfigUtils { } export class ImperativeError extends Error { private msg: string; - constructor(public mDetails: IImperativeError) { + public causeErrors: any; + public additionalDetails: any; + constructor(private mDetails: IImperativeError) { super(); this.msg = mDetails.msg; + this.causeErrors = this.mDetails.causeErrors; + this.additionalDetails = this.mDetails.additionalDetails; } public get message() { return this.msg; } + public get details() { + return this.mDetails; + } } export class ProfInfoErr extends ImperativeError { @@ -420,6 +428,7 @@ export class TextUtils { public static prettyJson(object: any, options?: any, color?: boolean, append?: string): string { return JSON.stringify(object); } + public static chalk = jest.requireActual("chalk"); } export namespace SessConstants { diff --git a/packages/zowe-explorer/__tests__/__unit__/commands/MvsCommandHandler.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/commands/MvsCommandHandler.unit.test.ts index c9f4909705..ede99262c7 100644 --- a/packages/zowe-explorer/__tests__/__unit__/commands/MvsCommandHandler.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/commands/MvsCommandHandler.unit.test.ts @@ -19,6 +19,7 @@ import { ProfileManagement } from "../../../src/management/ProfileManagement"; import { FilterDescriptor, FilterItem } from "../../../src/management/FilterManagement"; import { ZoweLogger } from "../../../src/tools/ZoweLogger"; import { MvsCommandHandler } from "../../../src/commands/MvsCommandHandler"; +import { SettingsConfig } from "../../../src/configuration/SettingsConfig"; jest.mock("Session"); @@ -28,6 +29,7 @@ describe("mvsCommandActions unit testing", () => { const showInformationMessage = jest.fn(); const showQuickPick = jest.fn(); const createQuickPick = jest.fn(); + const createTerminal = jest.fn(); const getConfiguration = jest.fn(); const createOutputChannel = jest.fn(); @@ -94,10 +96,7 @@ describe("mvsCommandActions unit testing", () => { }); const withProgress = jest.fn().mockImplementation((progLocation, callback) => { - return { - success: true, - commandResponse: callback(), - }; + return callback(); }); const session = new imperative.Session({ @@ -129,6 +128,7 @@ describe("mvsCommandActions unit testing", () => { Object.defineProperty(vscode.window, "showInformationMessage", { value: showInformationMessage }); Object.defineProperty(vscode.window, "showQuickPick", { value: showQuickPick }); Object.defineProperty(vscode.window, "createQuickPick", { value: createQuickPick }); + Object.defineProperty(vscode.window, "createTerminal", { value: createTerminal }); Object.defineProperty(vscode.window, "createOutputChannel", { value: createOutputChannel }); Object.defineProperty(vscode, "ProgressLocation", { value: ProgressLocation }); Object.defineProperty(vscode.window, "withProgress", { value: withProgress }); @@ -141,13 +141,20 @@ describe("mvsCommandActions unit testing", () => { }), }); + beforeEach(() => { + jest.spyOn(SettingsConfig, "getDirectValue").mockReturnValue(false); + }); + afterEach(() => { + (MvsCommandHandler as any).instance = undefined; jest.clearAllMocks(); }); const apiRegisterInstance = ZoweExplorerApiRegister.getInstance(); - const mvsActions = MvsCommandHandler.getInstance(); const profilesForValidation = { status: "active", name: "fake" }; + const getMvsActions = () => { + return MvsCommandHandler.getInstance(); + }; it("tests the issueMvsCommand function", async () => { Object.defineProperty(profileLoader.Profiles, "getInstance", { @@ -180,16 +187,16 @@ describe("mvsCommandActions unit testing", () => { showInputBox.mockReturnValueOnce("/d iplinfo1"); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValue("iplinfo1" as any); + jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValue({ commandResponse: "iplinfo1" } as any); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(1); expect(appendLine.mock.calls.length).toBe(2); @@ -223,16 +230,19 @@ describe("mvsCommandActions unit testing", () => { apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem2)); - jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValue("iplinfo0" as any); + jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValue({ commandResponse: "iplinfo0" } as any); + + const actions = getMvsActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; - await mvsActions.issueMvsCommand(); + await actions.issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(0); expect(appendLine.mock.calls.length).toBe(2); @@ -267,16 +277,16 @@ describe("mvsCommandActions unit testing", () => { getCommandApiMock.mockReturnValue(mockCommandApi); apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValue("iplinfo3" as any); + jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValue({ commandResponse: "iplinfo3" } as any); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(1); expect(showErrorMessage.mock.calls.length).toBe(1); @@ -309,7 +319,10 @@ describe("mvsCommandActions unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(undefined)); - await mvsActions.issueMvsCommand(); + const actions = getMvsActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showInputBox.mock.calls.length).toBe(0); @@ -317,13 +330,12 @@ describe("mvsCommandActions unit testing", () => { expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("No selection made. Operation cancelled."); + expect(showInformationMessage.mock.calls.length).toBe(0); }); - it("tests the issueMvsCommand function user escapes the command box", async () => { + it("tests the issueMvsCommand function user escapes the MVS command box", async () => { Object.defineProperty(profileLoader.Profiles, "getInstance", { value: jest.fn(() => { return { @@ -349,18 +361,17 @@ describe("mvsCommandActions unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("No command entered."); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueMvsCommand function user starts typing a value in quick pick", async () => { @@ -406,14 +417,17 @@ describe("mvsCommandActions unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - await mvsActions.issueMvsCommand(); + const actions = getMvsActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(0); }); @@ -450,14 +464,14 @@ describe("mvsCommandActions unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValueOnce({ commandResponse: "fake response" } as any); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(1); }); @@ -492,14 +506,14 @@ describe("mvsCommandActions unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValueOnce({ commandResponse: "fake response" } as any); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(1); }); @@ -523,7 +537,7 @@ describe("mvsCommandActions unit testing", () => { showQuickPick.mockReturnValueOnce("firstName"); showInputBox.mockReturnValueOnce("fake"); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showErrorMessage.mock.calls.length).toBe(1); }); @@ -544,10 +558,9 @@ describe("mvsCommandActions unit testing", () => { showQuickPick.mockReturnValueOnce(undefined); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueMvsCommand function from a session", async () => { @@ -564,7 +577,7 @@ describe("mvsCommandActions unit testing", () => { }), }); - jest.spyOn(mvsActions, "checkCurrentProfile").mockReturnValue(undefined as any); + jest.spyOn(getMvsActions(), "checkCurrentProfile").mockReturnValue(undefined as any); const mockCommandApi = await apiRegisterInstance.getCommandApi(profileOne); const getCommandApiMock = jest.fn(); @@ -574,7 +587,7 @@ describe("mvsCommandActions unit testing", () => { showInputBox.mockReturnValueOnce("/d iplinfo1"); jest.spyOn(mockCommandApi, "issueMvsCommand").mockReturnValueOnce({ commandResponse: "fake response" } as any); - await mvsActions.issueMvsCommand(session, null as any, testNode); + await getMvsActions().issueMvsCommand(session, null as any, testNode); expect(showInputBox.mock.calls.length).toBe(1); expect(showInformationMessage.mock.calls.length).toBe(0); @@ -608,14 +621,14 @@ describe("mvsCommandActions unit testing", () => { throw testError; }); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, - placeHolder: "Select the profile to use to submit the command", + placeHolder: "Select the profile to use to submit the MVS command", }); expect(showInputBox.mock.calls.length).toBe(0); expect(showErrorMessage.mock.calls.length).toBe(1); @@ -641,7 +654,7 @@ describe("mvsCommandActions unit testing", () => { value: jest.fn().mockReturnValue([]), configurable: true, }); - await mvsActions.issueMvsCommand(); + await getMvsActions().issueMvsCommand(); expect(showInformationMessage.mock.calls[0][0]).toEqual("No profiles available"); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/commands/TsoCommandHandler.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/commands/TsoCommandHandler.unit.test.ts index 43b0ea17a9..5e5b749d18 100644 --- a/packages/zowe-explorer/__tests__/__unit__/commands/TsoCommandHandler.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/commands/TsoCommandHandler.unit.test.ts @@ -18,6 +18,7 @@ import { ProfileManagement } from "../../../src/management/ProfileManagement"; import { ZoweLocalStorage } from "../../../src/tools/ZoweLocalStorage"; import { ZoweDatasetNode } from "../../../src/trees/dataset/ZoweDatasetNode"; import { TsoCommandHandler } from "../../../src/commands/TsoCommandHandler"; +import { SettingsConfig } from "../../../src/configuration/SettingsConfig"; jest.mock("Session"); @@ -27,6 +28,7 @@ describe("TsoCommandHandler unit testing", () => { const showInformationMessage = jest.fn(); const showQuickPick = jest.fn(); const createQuickPick = jest.fn(); + const createTerminal = jest.fn(); const getConfiguration = jest.fn(); const createOutputChannel = jest.fn(); @@ -87,10 +89,7 @@ describe("TsoCommandHandler unit testing", () => { }); const withProgress = jest.fn().mockImplementation((progLocation, callback) => { - return { - success: true, - commandResponse: callback(), - }; + return callback(); }); const session = new imperative.Session({ @@ -122,6 +121,7 @@ describe("TsoCommandHandler unit testing", () => { Object.defineProperty(vscode.window, "showInformationMessage", { value: showInformationMessage }); Object.defineProperty(vscode.window, "showQuickPick", { value: showQuickPick }); Object.defineProperty(vscode.window, "createQuickPick", { value: createQuickPick }); + Object.defineProperty(vscode.window, "createTerminal", { value: createTerminal }); Object.defineProperty(vscode.window, "createOutputChannel", { value: createOutputChannel }); Object.defineProperty(vscode, "ProgressLocation", { value: ProgressLocation }); Object.defineProperty(vscode.window, "withProgress", { value: withProgress }); @@ -138,19 +138,28 @@ describe("TsoCommandHandler unit testing", () => { }), }); + beforeEach(() => { + jest.spyOn(SettingsConfig, "getDirectValue").mockReturnValue(false); + }); + afterEach(() => { + (TsoCommandHandler as any).instance = undefined; jest.clearAllMocks(); }); const apiRegisterInstance = ZoweExplorerApiRegister.getInstance(); - const tsoActions = TsoCommandHandler.getInstance(); const profilesForValidation = { status: "active", name: "fake" }; - Object.defineProperty(tsoActions, "getTsoParams", { - value: jest.fn(() => { - return "acctNum"; - }), - }); + const getTsoActions = () => { + const tsoActions = TsoCommandHandler.getInstance(); + Object.defineProperty(tsoActions, "getTsoParams", { + value: jest.fn(() => { + return "acctNum"; + }), + configurable: true, + }); + return tsoActions; + }; it("tests the issueTsoCommand function", async () => { Object.defineProperty(profileLoader.Profiles, "getInstance", { @@ -180,9 +189,9 @@ describe("TsoCommandHandler unit testing", () => { getCommandApiMock.mockReturnValue(mockCommandApi); apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); showInputBox.mockReturnValueOnce("/d iplinfo1"); - jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue("iplinfo1" as any); + jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue({ commandResponse: "iplinfo1" } as any); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -222,9 +231,12 @@ describe("TsoCommandHandler unit testing", () => { getCommandApiMock.mockReturnValue(mockCommandApi); apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem2)); - jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue("iplinfo0" as any); + jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue({ commandResponse: "iplinfo0" } as any); + + const actions = getTsoActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; - await tsoActions.issueTsoCommand(); + await actions.issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -266,9 +278,9 @@ describe("TsoCommandHandler unit testing", () => { getCommandApiMock.mockReturnValue(mockCommandApi); apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue("iplinfo3" as any); + jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue({ commandResponse: "iplinfo3" } as any); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -308,7 +320,10 @@ describe("TsoCommandHandler unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(undefined)); - await tsoActions.issueTsoCommand(); + const actions = getTsoActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showInputBox.mock.calls.length).toBe(0); @@ -318,8 +333,6 @@ describe("TsoCommandHandler unit testing", () => { ignoreFocusOut: true, placeHolder: "Select the profile to use to submit the TSO command", }); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("No selection made. Operation cancelled."); }); it("tests the issueTsoCommand function user escapes the command box", async () => { @@ -348,7 +361,7 @@ describe("TsoCommandHandler unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -358,8 +371,7 @@ describe("TsoCommandHandler unit testing", () => { placeHolder: "Select the profile to use to submit the TSO command", }); expect(showInputBox.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("No command entered."); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueTsoCommand function user starts typing a value in quick pick", async () => { @@ -405,7 +417,10 @@ describe("TsoCommandHandler unit testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - await tsoActions.issueTsoCommand(); + const actions = getTsoActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -447,9 +462,9 @@ describe("TsoCommandHandler unit testing", () => { apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue("iplinfo" as any); + jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue({ commandResponse: "iplinfo" } as any); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -489,9 +504,9 @@ describe("TsoCommandHandler unit testing", () => { getCommandApiMock.mockReturnValue(mockCommandApi); apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue("iplinfo5" as any); + jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue({ commandResponse: "iplinfo5" } as any); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -522,7 +537,7 @@ describe("TsoCommandHandler unit testing", () => { showQuickPick.mockReturnValueOnce("firstName"); showInputBox.mockReturnValueOnce("fake"); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showErrorMessage.mock.calls.length).toBe(1); }); @@ -543,10 +558,9 @@ describe("TsoCommandHandler unit testing", () => { showQuickPick.mockReturnValueOnce(undefined); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueTsoCommand function from a session", async () => { @@ -563,7 +577,7 @@ describe("TsoCommandHandler unit testing", () => { }), }); - jest.spyOn(tsoActions, "checkCurrentProfile").mockReturnValue(undefined as any); + jest.spyOn(getTsoActions(), "checkCurrentProfile").mockReturnValue(undefined as any); const mockCommandApi = await apiRegisterInstance.getCommandApi(profileOne); const getCommandApiMock = jest.fn(); @@ -571,9 +585,9 @@ describe("TsoCommandHandler unit testing", () => { apiRegisterInstance.getCommandApi = getCommandApiMock.bind(apiRegisterInstance); showInputBox.mockReturnValueOnce("/d iplinfo1"); - jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue("iplinfo1" as any); + jest.spyOn(mockCommandApi, "issueTsoCommandWithParms").mockReturnValue({ commandResponse: "iplinfo1" } as any); - await tsoActions.issueTsoCommand(session, null as any, testNode); + await getTsoActions().issueTsoCommand(session, null as any, testNode); expect(showInputBox.mock.calls.length).toBe(1); expect(showInformationMessage.mock.calls.length).toBe(0); @@ -607,7 +621,7 @@ describe("TsoCommandHandler unit testing", () => { throw testError; }); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showQuickPick.mock.calls.length).toBe(1); expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); @@ -621,23 +635,6 @@ describe("TsoCommandHandler unit testing", () => { expect(showErrorMessage.mock.calls[0][0]).toContain(testError.message); }); - it("tests the selectTsoProfile function", async () => { - showQuickPick.mockReturnValueOnce("test1" as any); - - await expect( - (tsoActions as any).selectTsoProfile([ - { - name: "test1", - }, - { - name: "test2", - }, - ]) - ).resolves.toEqual({ - name: "test1", - }); - }); - it("tests the issueTsoCommand function no profiles error", async () => { Object.defineProperty(profileLoader.Profiles, "getInstance", { value: jest.fn(() => { @@ -657,7 +654,7 @@ describe("TsoCommandHandler unit testing", () => { value: jest.fn().mockReturnValue([]), configurable: true, }); - await tsoActions.issueTsoCommand(); + await getTsoActions().issueTsoCommand(); expect(showInformationMessage.mock.calls[0][0]).toEqual("No profiles available"); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/commands/UnixCommandHandler.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/commands/UnixCommandHandler.unit.test.ts index 1f0e43a500..62b0fc563f 100644 --- a/packages/zowe-explorer/__tests__/__unit__/commands/UnixCommandHandler.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/commands/UnixCommandHandler.unit.test.ts @@ -22,6 +22,8 @@ import { ZoweLogger } from "../../../src/tools/ZoweLogger"; import { ZoweDatasetNode } from "../../../src/trees/dataset/ZoweDatasetNode"; import { UnixCommandHandler } from "../../../src/commands/UnixCommandHandler"; import { Constants } from "../../../src/configuration/Constants"; +import { Definitions } from "../../../src/configuration/Definitions"; +import { SettingsConfig } from "../../../src/configuration/SettingsConfig"; jest.mock("Session"); @@ -31,6 +33,7 @@ describe("UnixCommand Actions Unit Testing", () => { const showInformationMessage = jest.fn(); const showQuickPick = jest.fn(); const createQuickPick = jest.fn(); + const createTerminal = jest.fn(); const getConfiguration = jest.fn(); const createOutputChannel = jest.fn(); @@ -53,8 +56,8 @@ describe("UnixCommand Actions Unit Testing", () => { Object.defineProperty(profileLoader.Profiles, "createInstance", { value: jest.fn(() => { return { - allProfiles: [{ name: "firstName" }, { name: "secondName" }], - defaultProfile: { name: "firstName" }, + allProfiles: [{ name: "firstProfile" }, { name: "secondProfile" }], + defaultProfile: { name: "firstProfile" }, }; }), }); @@ -129,14 +132,14 @@ describe("UnixCommand Actions Unit Testing", () => { profile: { host: "host.com", port: 123, - user: "testuser", + user: "testUser", }, message: "", failNotFound: false, } as imperative.IProfileLoaded, ]; - const profilefromConfig = { + const profileFromConfig = { isDefaultProfile: false, profLoc: { osLoc: ["/user/configpath"] }, }; @@ -146,11 +149,12 @@ describe("UnixCommand Actions Unit Testing", () => { Object.defineProperty(vscode.window, "showInformationMessage", { value: showInformationMessage }); Object.defineProperty(vscode.window, "showQuickPick", { value: showQuickPick }); Object.defineProperty(vscode.window, "createQuickPick", { value: createQuickPick }); + Object.defineProperty(vscode.window, "createTerminal", { value: createTerminal }); Object.defineProperty(vscode.window, "createOutputChannel", { value: createOutputChannel }); Object.defineProperty(vscode, "ProgressLocation", { value: ProgressLocation }); Object.defineProperty(vscode.window, "withProgress", { value: withProgress }); Object.defineProperty(ProfileManagement, "getRegisteredProfileNameList", { - value: jest.fn().mockReturnValue(["firstName", "secondName"]), + value: jest.fn().mockReturnValue(["firstProfile", "secondProfile"]), configurable: true, }); @@ -180,12 +184,13 @@ describe("UnixCommand Actions Unit Testing", () => { Object.defineProperty(profileLoader.Profiles, "getInstance", { value: jest.fn(() => { return { - allProfiles: [{ name: "firstName", profile: { user: "firstName", password: "pass" } }, { name: "secondName" }], - defaultProfile: { name: "firstName" }, + allProfiles: [{ name: "firstProfile", profile: { user: "testUser", password: "testPass" } }, { name: "secondProfile" }], + defaultProfile: { name: "firstProfile" }, zosmfProfile: mockLoadNamedProfile, checkCurrentProfile: jest.fn(() => { return profilesForValidation; }), + profileValidationHelper: jest.fn().mockReturnValue("active"), //.mockImplementation((prof, fun) => fun(prof)), validateProfiles: jest.fn(), getBaseProfile: jest.fn(), validProfile: Validation.ValidationType.VALID, @@ -196,14 +201,19 @@ describe("UnixCommand Actions Unit Testing", () => { return ["entered"]; }), getProfileFromConfig: jest.fn(() => { - return profilefromConfig; + return profileFromConfig; }), openConfigFile: jest.fn(), }; }), }); + beforeEach(() => { + jest.spyOn(SettingsConfig, "getDirectValue").mockReturnValue(false); + }); + afterEach(() => { + (UnixCommandHandler as any).instance = undefined; jest.clearAllMocks(); }); @@ -214,8 +224,10 @@ describe("UnixCommand Actions Unit Testing", () => { }); const apiRegisterInstance = ZoweExplorerApiRegister.getInstance(); - const unixActions = UnixCommandHandler.getInstance(); const profilesForValidation = { status: "active", name: "fake" }; + const getUnixActions = () => { + return UnixCommandHandler.getInstance(); + }; it("test the issueUnixCommand function", async () => { const mockUssApi = await apiRegisterInstance.getUssApi(profileOne); @@ -224,7 +236,7 @@ describe("UnixCommand Actions Unit Testing", () => { apiRegisterInstance.getUssApi = getUssApiMock.bind(apiRegisterInstance); jest.spyOn(mockUssApi, "getSession").mockReturnValue(session); - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); const mockCommandApi = await apiRegisterInstance.getCommandApi(profileOne); const getCommandApiMock = jest.fn(); @@ -242,10 +254,10 @@ describe("UnixCommand Actions Unit Testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); jest.spyOn(mockCommandApi, "issueUnixCommand").mockReturnValue("iplinfo1" as any); - await unixActions.issueUnixCommand(); + await getUnixActions().issueUnixCommand(); expect(showQuickPick.mock.calls.length).toBe(1); - expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); + expect(showQuickPick.mock.calls[0][0]).toEqual(["firstProfile", "secondProfile"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, @@ -254,22 +266,22 @@ describe("UnixCommand Actions Unit Testing", () => { expect(showInputBox.mock.calls.length).toBe(2); expect(appendLine.mock.calls.length).toBe(2); - expect(appendLine.mock.calls[0][0]).toBe("> firstName@ssh:/u/directorypath$ /d iplinfo1"); + expect(appendLine.mock.calls[0][0]).toBe("> testUser@firstProfile:/u/directorypath $ /d iplinfo1"); expect(appendLine.mock.calls[1][0]["commandResponse"]).toBe("iplinfo1"); expect(showInformationMessage.mock.calls.length).toBe(0); }); - it("tests the selectSshProfile function with quickpick", async () => { + it("tests the selectServiceProfile function with quickpick", async () => { showQuickPick.mockReturnValueOnce("test1" as any); await expect( - (unixActions as any).selectSshProfile([ + getUnixActions().selectServiceProfile([ { name: "test1", }, { name: "test2", }, - ]) + ] as any) ).resolves.toEqual({ name: "test1", }); @@ -282,7 +294,7 @@ describe("UnixCommand Actions Unit Testing", () => { apiRegisterInstance.getUssApi = getUssApiMock.bind(apiRegisterInstance); jest.spyOn(mockUssApi, "getSession").mockReturnValue(session); - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); const mockCommandApi = await apiRegisterInstance.getCommandApi(profileOne); const getCommandApiMock = jest.fn(); @@ -299,10 +311,13 @@ describe("UnixCommand Actions Unit Testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem2)); jest.spyOn(mockCommandApi, "issueUnixCommand").mockReturnValue("iplinfo0" as any); - await unixActions.issueUnixCommand(); + const actions = getUnixActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueUnixCommand(); expect(showQuickPick.mock.calls.length).toBe(1); - expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); + expect(showQuickPick.mock.calls[0][0]).toEqual(["firstProfile", "secondProfile"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, @@ -310,13 +325,13 @@ describe("UnixCommand Actions Unit Testing", () => { }); expect(showInputBox.mock.calls.length).toBe(1); expect(appendLine.mock.calls.length).toBe(2); - expect(appendLine.mock.calls[0][0]).toBe("> firstName@ssh:/u/directorypath$ /d iplinfo0"); + expect(appendLine.mock.calls[0][0]).toBe("> testUser@firstProfile:/u/directorypath $ /d iplinfo0"); expect(appendLine.mock.calls[1][0]["commandResponse"]).toBe("iplinfo0"); expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueUnixCommand function user escapes the quick pick box", async () => { - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); showInputBox.mockReturnValueOnce("/u/directorypath"); const mockCommandApi = await apiRegisterInstance.getCommandApi(profileOne); @@ -331,22 +346,24 @@ describe("UnixCommand Actions Unit Testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(undefined)); - await unixActions.issueUnixCommand(); + const actions = getUnixActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueUnixCommand(); expect(showQuickPick.mock.calls.length).toBe(1); - expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); + expect(showQuickPick.mock.calls[0][0]).toEqual(["firstProfile", "secondProfile"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, placeHolder: "Select the profile to use to submit the Unix command", }); expect(showInputBox.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueUnixCommand function user escapes the commandbox", async () => { - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); showInputBox.mockReturnValueOnce("/directorypath"); showInputBox.mockReturnValueOnce(undefined); @@ -362,22 +379,21 @@ describe("UnixCommand Actions Unit Testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - await unixActions.issueUnixCommand(); + await getUnixActions().issueUnixCommand(); expect(showQuickPick.mock.calls.length).toBe(1); - expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); + expect(showQuickPick.mock.calls[0][0]).toEqual(["firstProfile", "secondProfile"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, placeHolder: "Select the profile to use to submit the Unix command", }); expect(showInputBox.mock.calls.length).toBe(2); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueUnixCommand function - issueUnixCommand throws an error", async () => { - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); showInputBox.mockReturnValueOnce("/u/directorypath"); showInputBox.mockReturnValueOnce("/d iplinfo3"); withProgress.mockRejectedValueOnce(Error("fake testError")); @@ -395,10 +411,10 @@ describe("UnixCommand Actions Unit Testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); jest.spyOn(mockCommandApi, "issueUnixCommand").mockReturnValue("iplinfo3" as any); - await unixActions.issueUnixCommand(); + await getUnixActions().issueUnixCommand(); expect(showQuickPick.mock.calls.length).toBe(1); - expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); + expect(showQuickPick.mock.calls[0][0]).toEqual(["firstProfile", "secondProfile"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, @@ -414,12 +430,12 @@ describe("UnixCommand Actions Unit Testing", () => { value: jest.fn().mockReturnValueOnce({ profile: { user: "testuser", password: "testpassword" } } as any), configurable: true, }); - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); showInputBox.mockReturnValueOnce(""); showInputBox.mockReturnValue("/d iplinfo0"); - await unixActions.issueUnixCommand(); + await getUnixActions().issueUnixCommand(); expect(showInformationMessage.mock.calls[0][0]).toEqual("Redirecting to Home Directory"); }); @@ -429,13 +445,12 @@ describe("UnixCommand Actions Unit Testing", () => { value: jest.fn().mockReturnValueOnce({ profile: { user: "testuser", password: "testpassword" } } as any), configurable: true, }); - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); showInputBox.mockReturnValueOnce(undefined); - await unixActions.issueUnixCommand(); - - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + await getUnixActions().issueUnixCommand(); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueUnixCommand function user starts typing a value in quick pick", async () => { @@ -456,7 +471,7 @@ describe("UnixCommand Actions Unit Testing", () => { }), }); - showQuickPick.mockReturnValueOnce("firstName"); + showQuickPick.mockReturnValueOnce("firstProfile"); showInputBox.mockReturnValueOnce("/u/directorypath"); showInputBox.mockReturnValueOnce(undefined); @@ -472,10 +487,13 @@ describe("UnixCommand Actions Unit Testing", () => { jest.spyOn(Gui, "resolveQuickPick").mockImplementation(() => Promise.resolve(qpItem)); - await unixActions.issueUnixCommand(); + const actions = getUnixActions(); + (actions.history as any).mSearchHistory = [qpItem2.label]; + + await actions.issueUnixCommand(); expect(showQuickPick.mock.calls.length).toBe(1); - expect(showQuickPick.mock.calls[0][0]).toEqual(["firstName", "secondName"]); + expect(showQuickPick.mock.calls[0][0]).toEqual(["firstProfile", "secondProfile"]); expect(showQuickPick.mock.calls[0][1]).toEqual({ canPickMany: false, ignoreFocusOut: true, @@ -486,7 +504,7 @@ describe("UnixCommand Actions Unit Testing", () => { it("tests the issueUnixCommand function user does not select a profile", async () => { Object.defineProperty(ProfileManagement, "getRegisteredProfileNameList", { - value: jest.fn().mockReturnValue(["firstName"]), + value: jest.fn().mockReturnValue(["firstProfile"]), configurable: true, }); Object.defineProperty(profInstance, "getDefaultProfile", { @@ -495,10 +513,9 @@ describe("UnixCommand Actions Unit Testing", () => { }); showQuickPick.mockReturnValueOnce(undefined); - await unixActions.issueUnixCommand(); + await getUnixActions().issueUnixCommand(); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("tests the issueUnixCommand function no profiles error", async () => { @@ -510,13 +527,13 @@ describe("UnixCommand Actions Unit Testing", () => { value: jest.fn().mockReturnValueOnce({ profile: { user: "testuser", password: "testpassword" } } as any), configurable: true, }); - await unixActions.issueUnixCommand(); - expect(showInformationMessage.mock.calls[0][0]).toEqual("No profiles available."); + await getUnixActions().issueUnixCommand(); + expect(showInformationMessage.mock.calls[0][0]).toEqual("No profiles available"); }); it("ssh profile not found", async () => { fetchSshProfiles = []; - await (unixActions as any).getSshProfile(); + await (getUnixActions() as any).getSshProfile(); expect(showErrorMessage.mock.calls.length).toBe(1); expect(showErrorMessage.mock.calls[0][0]).toEqual("No SSH profile found. Please create an SSH profile."); }); @@ -541,55 +558,55 @@ describe("UnixCommand Actions Unit Testing", () => { value: jest.fn().mockReturnValueOnce({ profile: { user: "testuser", password: "testpassword" } } as any), configurable: true, }); - await (unixActions as any).getSshProfile(); + ((await getUnixActions()) as any).getSshProfile(); }); - it("the shh profile doesnot have port or host or both", async () => { + it("the shh profile does not have port or host or both", async () => { fetchSshProfiles = [ { name: "ssh", type: "ssh", profile: { host: "host.com", - user: "testuser", + user: "testUser", }, message: "", failNotFound: false, } as imperative.IProfileLoaded, ]; - await (unixActions as any).getSshProfile(); + await (getUnixActions() as any).getSshProfile(); expect(showErrorMessage.mock.calls[0][0]).toEqual("SSH profile missing connection details. Please update."); }); - it("tests the selectSshProfile function-1", async () => { + it("tests the selectServiceProfile function-1", async () => { await expect( - (unixActions as any).selectSshProfile([ + getUnixActions().selectServiceProfile([ { name: "test1", }, - ]) + ] as any) ).resolves.toEqual({ name: "test1", }); }); - it("tests the selectSshProfile function when user escapes", async () => { + it("tests the selectServiceProfile function when user escapes", async () => { showQuickPick.mockReturnValueOnce(undefined); await expect( - (unixActions as any).selectSshProfile([ + getUnixActions().selectServiceProfile([ { name: "test1", }, { name: "test2", }, - ]) + ] as any) ).resolves.toBe(undefined); Object.defineProperty(profInstance, "getDefaultProfile", { value: jest.fn().mockReturnValueOnce({ profile: { user: "testuser", password: "testpassword" } } as any), configurable: true, }); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); it("getCommand API is not implemented", async () => { @@ -600,8 +617,8 @@ describe("UnixCommand Actions Unit Testing", () => { }; }), }); - await unixActions.issueUnixCommand(testNode, null as any); - expect(showErrorMessage.mock.calls[0][0]).toEqual("Issuing commands is not supported for this profile type, undefined."); + await getUnixActions().issueUnixCommand(testNode, null as any); + expect(showErrorMessage.mock.calls[0][0]).toEqual("Issuing commands is not supported for this profile type, zosmf."); }); it("issueUnixCommand API is not yet implemented", async () => { @@ -616,13 +633,13 @@ describe("UnixCommand Actions Unit Testing", () => { }; }), }); - await unixActions.issueUnixCommand(testNode, null as any); + await getUnixActions().issueUnixCommand(testNode, null as any); expect(showErrorMessage.mock.calls[0][0]).toEqual("Issuing UNIX commands is not supported for this profile type, zosmf."); }); it("tests the issueUnixCommand function user does not select a profile - userSelectProfile", async () => { Object.defineProperty(ProfileManagement, "getRegisteredProfileNameList", { - value: jest.fn().mockReturnValue(["firstName"]), + value: jest.fn().mockReturnValue(["firstProfile"]), configurable: true, }); Object.defineProperty(profInstance, "getDefaultProfile", { @@ -631,9 +648,8 @@ describe("UnixCommand Actions Unit Testing", () => { }); showQuickPick.mockReturnValueOnce(undefined); - await (unixActions as any).userSelectProfile(); + await getUnixActions().selectNodeProfile(Definitions.Trees.USS); - expect(showInformationMessage.mock.calls.length).toBe(1); - expect(showInformationMessage.mock.calls[0][0]).toEqual("Operation cancelled"); + expect(showInformationMessage.mock.calls.length).toBe(0); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/commands/ZoweCommandProvider.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/commands/ZoweCommandProvider.unit.test.ts index 733d2a6013..a195f1ef65 100644 --- a/packages/zowe-explorer/__tests__/__unit__/commands/ZoweCommandProvider.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/commands/ZoweCommandProvider.unit.test.ts @@ -10,7 +10,7 @@ */ import * as vscode from "vscode"; -import { ProfilesCache, ZoweExplorerApiType, ZoweTreeNode } from "@zowe/zowe-explorer-api"; +import { Gui, imperative, ProfilesCache, ZoweTreeNode } from "@zowe/zowe-explorer-api"; import { createIProfile, createISession } from "../../__mocks__/mockCreators/shared"; import { ZoweCommandProvider } from "../../../src/commands/ZoweCommandProvider"; import { Profiles } from "../../../src/configuration/Profiles"; @@ -18,6 +18,7 @@ import { ZoweDatasetNode } from "../../../src/trees/dataset/ZoweDatasetNode"; import { SharedContext } from "../../../src/trees/shared/SharedContext"; import { createIJobFile } from "../../__mocks__/mockCreators/jobs"; import { AuthUtils } from "../../../src/utils/AuthUtils"; +import { ZoweLogger } from "../../../src/tools/ZoweLogger"; const globalMocks = { testSession: createISession(), @@ -25,7 +26,7 @@ const globalMocks = { mockIJobFile: createIJobFile(), }; describe("ZoweCommandProvider Unit Tests", () => { - describe("ZoweCommandProvider Unit Tests - function refreshElement", () => { + describe("function refreshElement", () => { it("should refresh the tree data", () => { const testNode = new (ZoweTreeNode as any)("test", vscode.TreeItemCollapsibleState.None, undefined); Object.defineProperty(ZoweCommandProvider.prototype, "mOnDidChangeTreeData", { @@ -37,56 +38,126 @@ describe("ZoweCommandProvider Unit Tests", () => { expect(ZoweCommandProvider.prototype.refreshElement(testNode)).toEqual(undefined); }); }); -}); + describe("function checkCurrentProfile", () => { + const testNode: any = new ZoweDatasetNode({ + label: "test", + collapsibleState: vscode.TreeItemCollapsibleState.None, + session: globalMocks.testSession, + }); + testNode.setProfileToChoice(globalMocks.testProfile); + testNode.contextValue = "session server"; -describe("ZoweCommandProvider Unit Tests - function checkCurrentProfile", () => { - const testNode: any = new ZoweDatasetNode({ - label: "test", - collapsibleState: vscode.TreeItemCollapsibleState.None, - session: globalMocks.testSession, - }); - testNode.setProfileToChoice(globalMocks.testProfile); - testNode.contextValue = "session server"; + beforeEach(async () => { + jest.spyOn(ProfilesCache.prototype, "refresh").mockImplementation(); + const profilesInstance = await Profiles.createInstance(undefined as any); + Object.defineProperty(profilesInstance, "log", { + value: { + error: jest.fn(), + }, + }); + jest.spyOn(ZoweCommandProvider.prototype, "refresh").mockImplementationOnce(() => {}); + jest.spyOn(SharedContext, "isSessionNotFav").mockReturnValue(true); + }); + it("should check current profile and perform the case when status is 'active'", async () => { + const profileStatus = { name: "test", status: "active" }; - beforeEach(async () => { - jest.spyOn(ProfilesCache.prototype, "refresh").mockImplementation(); - const profilesInstance = await Profiles.createInstance(undefined as any); - Object.defineProperty(profilesInstance, "log", { - value: { - error: jest.fn(), - }, + jest.spyOn(Profiles.getInstance(), "checkCurrentProfile").mockResolvedValue(profileStatus); + await expect(ZoweCommandProvider.prototype.checkCurrentProfile(testNode)).resolves.toEqual(profileStatus); }); - jest.spyOn(ZoweCommandProvider.prototype, "refresh").mockImplementationOnce(() => {}); - jest.spyOn(SharedContext, "isSessionNotFav").mockReturnValue(true); - }); - it("should check current profile and perform the case when status is 'active'", async () => { - const profileStatus = { name: "test", status: "active" }; + it("should check current profile and perform the case when status is 'unverified'", async () => { + const profileStatus = { name: "test", status: "unverified" }; - jest.spyOn(Profiles.getInstance(), "checkCurrentProfile").mockResolvedValue(profileStatus); - await expect(ZoweCommandProvider.prototype.checkCurrentProfile(testNode)).resolves.toEqual(profileStatus); + jest.spyOn(Profiles.getInstance(), "checkCurrentProfile").mockResolvedValue(profileStatus); + await expect(ZoweCommandProvider.prototype.checkCurrentProfile(testNode)).resolves.toEqual(profileStatus); + }); + it("should check current profile and perform the case when status is 'inactive'", async () => { + Object.defineProperty(ZoweCommandProvider, "mOnDidChangeTreeData", { + value: { + debug: jest.fn(), + }, + configurable: true, + }); + const profileStatus = { name: "test", status: "inactive" }; + jest.spyOn(Profiles.getInstance(), "checkCurrentProfile").mockResolvedValue(profileStatus); + const errorHandlingSpy = jest.spyOn(AuthUtils, "errorHandling").mockImplementation(); + await expect(ZoweCommandProvider.prototype.checkCurrentProfile(testNode)).resolves.toEqual(profileStatus); + expect(errorHandlingSpy).toHaveBeenCalledWith( + "Profile Name " + + globalMocks.testProfile.name + + " is inactive. Please check if your Zowe server is active or if the URL and port in your profile is correct.", + { apiType: "cmd", profile: globalMocks.testProfile } + ); + }); }); - it("should check current profile and perform the case when status is 'unverified'", async () => { - const profileStatus = { name: "test", status: "unverified" }; - jest.spyOn(Profiles.getInstance(), "checkCurrentProfile").mockResolvedValue(profileStatus); - await expect(ZoweCommandProvider.prototype.checkCurrentProfile(testNode)).resolves.toEqual(profileStatus); - }); - it("should check current profile and perform the case when status is 'inactive'", async () => { - Object.defineProperty(ZoweCommandProvider, "mOnDidChangeTreeData", { - value: { - debug: jest.fn(), - }, - configurable: true, + describe("integrated terminals", () => { + describe("function issueCommand", () => { + it("should create an integrated terminal", async () => { + const createTerminal = jest.fn().mockReturnValue({ show: jest.fn() }); + Object.defineProperty(vscode.window, "createTerminal", { value: createTerminal }); + const testError = new imperative.ImperativeError({ + msg: "test-msg", + causeErrors: "test-causeErrors", + additionalDetails: "test-additionalDetails", + }); + const mockCmdProvider: any = { + useIntegratedTerminals: true, + terminalName: "test-terminal", + pseudoTerminal: {}, + formatCommandLine: (cmd: string) => "test-" + cmd, + history: { getSearchHistory: () => ["old-cmd-01", "old-cmd-02"], addSearchHistory: jest.fn() }, + runCommand: jest.fn().mockRejectedValue(testError), + }; + const testProfile: any = { name: "test", profile: { user: "firstName", password: "12345" } }; + + await ZoweCommandProvider.prototype.issueCommand.call(mockCmdProvider, testProfile, "test"); + expect(createTerminal).toHaveBeenCalled(); + + // Test errorHandling on callback + const pty = createTerminal.mock.calls[0][0].pty; + const errorOutput = await pty.processCmd(); + + expect(errorOutput).toContain("Unable to perform this operation due to the following problem."); + expect(errorOutput).toContain("test-msg"); + expect(errorOutput).toContain("Response From Service"); + expect(errorOutput).toContain("test-causeErrors"); + expect(errorOutput).toContain("Diagnostic Information"); + expect(errorOutput).toContain("test-additionalDetails"); + }); + }); + + describe("function selectServiceProfile", () => { + it("should select the specified profile", async () => { + const mockCmdProvider: any = { + dialogs: { selectProfile: "select profile" }, + }; + + jest.spyOn(Gui, "showQuickPick").mockResolvedValue("prof02" as any); + const selected = await ZoweCommandProvider.prototype.selectServiceProfile.call( + mockCmdProvider, + [{ name: "prof01" }, { name: "prof02" }], + "test" + ); + + expect(selected).toEqual({ name: "prof02" }); + }); + it("should handle operation cancelled", async () => { + const mockCmdProvider: any = { + dialogs: { selectProfile: "select profile" }, + operationCancelled: "Operation cancelled", + }; + + jest.spyOn(Gui, "showQuickPick").mockResolvedValue(undefined); + const spyMessage = jest.spyOn(ZoweLogger, "info").mockImplementation(jest.fn()); + const selected = await ZoweCommandProvider.prototype.selectServiceProfile.call( + mockCmdProvider, + [{ name: "prof01" }, { name: "prof02" }], + "test" + ); + + expect(spyMessage).toHaveBeenCalledWith(mockCmdProvider.operationCancelled); + expect(selected).toBeUndefined(); + }); }); - const profileStatus = { name: "test", status: "inactive" }; - jest.spyOn(Profiles.getInstance(), "checkCurrentProfile").mockResolvedValue(profileStatus); - const errorHandlingSpy = jest.spyOn(AuthUtils, "errorHandling").mockImplementation(); - await expect(ZoweCommandProvider.prototype.checkCurrentProfile(testNode)).resolves.toEqual(profileStatus); - expect(errorHandlingSpy).toHaveBeenCalledWith( - "Profile Name " + - globalMocks.testProfile.name + - " is inactive. Please check if your Zowe server is active or if the URL and port in your profile is correct.", - { apiType: ZoweExplorerApiType.Command, profile: globalMocks.testProfile } - ); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/configuration/SettingsConfig.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/configuration/SettingsConfig.unit.test.ts index 55acf4ca17..4aabfd37bf 100644 --- a/packages/zowe-explorer/__tests__/__unit__/configuration/SettingsConfig.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/configuration/SettingsConfig.unit.test.ts @@ -48,7 +48,7 @@ describe("SettingsConfig Unit Tests", () => { const setValueSpy = jest.spyOn(ZoweLocalStorage, "setValue"); const promptReloadSpy = jest.spyOn(SettingsConfig as any, "promptReload"); await (SettingsConfig as any).migrateToLocalStorage(); - expect(setValueSpy).toHaveBeenCalledTimes(6); + expect(setValueSpy).toHaveBeenCalledTimes(8); expect(promptReloadSpy).toHaveBeenCalledTimes(1); }); it("should successfully migrate to local storage and update data set templates to new setting", async () => { @@ -83,7 +83,7 @@ describe("SettingsConfig Unit Tests", () => { const promptReloadSpy = jest.spyOn(SettingsConfig as any, "promptReload"); await (SettingsConfig as any).migrateToLocalStorage(); expect(templateSpy).toHaveBeenCalledTimes(1); - expect(setValueSpy).toHaveBeenCalledTimes(6); + expect(setValueSpy).toHaveBeenCalledTimes(8); expect(promptReloadSpy).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/tools/ZoweTerminal.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/tools/ZoweTerminal.unit.test.ts new file mode 100644 index 0000000000..082eee8b18 --- /dev/null +++ b/packages/zowe-explorer/__tests__/__unit__/tools/ZoweTerminal.unit.test.ts @@ -0,0 +1,59 @@ +/** + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + * + */ + +import { ZoweTerminal } from "../../../src/tools/ZoweTerminal"; + +describe("ZoweTerminal Unit Tests", () => { + it("should not change the keys", () => { + expect(ZoweTerminal.Keys).toMatchSnapshot(); + }); + + it("should send the entered command to the callback function", async () => { + const spyCb = jest.fn().mockImplementation(async (cmd: string) => Promise.resolve("test-output")); + const iTerm = new ZoweTerminal("test", spyCb, { history: ["old"] }); + iTerm.open(); + + await iTerm.handleInput("testABC"); + await iTerm.handleInput(ZoweTerminal.Keys.ENTER); + expect(spyCb).toHaveBeenCalledWith("testABC"); + spyCb.mockClear(); + + await iTerm.handleInput(ZoweTerminal.Keys.UP); // testABC| + await iTerm.handleInput(ZoweTerminal.Keys.UP); // old| + await iTerm.handleInput(ZoweTerminal.Keys.DOWN); // testABC| + await iTerm.handleInput(ZoweTerminal.Keys.LEFT); // testAB|C + await iTerm.handleInput(ZoweTerminal.Keys.LEFT); // testA|BC + await iTerm.handleInput(ZoweTerminal.Keys.BACKSPACE); // test|BC + await iTerm.handleInput(ZoweTerminal.Keys.RIGHT); // testB|C + await iTerm.handleInput(ZoweTerminal.Keys.BACKSPACE); // test|C + // handle multiple characters in sequence (CPU delay / copy+paste) + await iTerm.handleInput("1A"); // test1A|C + await iTerm.handleInput(ZoweTerminal.Keys.BACKSPACE); // test1|C + // Handle double byte characters + await iTerm.handleInput("🙏🙏"); // test1🙏🙏|C + await iTerm.handleInput(ZoweTerminal.Keys.BACKSPACE); // test1🙏|C + // Handle unicode "hello" + await iTerm.handleInput("\u0048\u0065\u006C\u006C\u006F"); // test1🙏Hello|C + await iTerm.handleInput(ZoweTerminal.Keys.ENTER); + expect(spyCb).toHaveBeenCalledWith("test1🙏HelloC"); + spyCb.mockClear(); + + (iTerm as any).command = ""; + await iTerm.handleInput(ZoweTerminal.Keys.ENTER); + await iTerm.handleInput(ZoweTerminal.Keys.CTRL_C); + await iTerm.handleInput(":clear"); + await iTerm.handleInput(ZoweTerminal.Keys.ENTER); + await iTerm.handleInput(":exit"); + await iTerm.handleInput(ZoweTerminal.Keys.ENTER); + + expect((iTerm as any).mHistory as string[]).toEqual(["old", "testABC", "test1🙏HelloC", ":clear", ":exit"]); + }); +}); diff --git a/packages/zowe-explorer/__tests__/__unit__/tools/__snapshots__/ZoweTerminal.unit.test.ts.snap b/packages/zowe-explorer/__tests__/__unit__/tools/__snapshots__/ZoweTerminal.unit.test.ts.snap new file mode 100644 index 0000000000..9d0df627e9 --- /dev/null +++ b/packages/zowe-explorer/__tests__/__unit__/tools/__snapshots__/ZoweTerminal.unit.test.ts.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ZoweTerminal Unit Tests should not change the keys 1`] = ` +{ + "BACKSPACE": "", + "CLEAR_ALL": "", + "CLEAR_LINE": " +", + "CTRL_C": "", + "DEL": "", + "DOWN": "", + "EMPTY_LINE": "> ", + "ENTER": " +", + "LEFT": "", + "NEW_LINE": " +", + "RIGHT": "", + "UP": "", +} +`; diff --git a/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts index fc424552a6..285a7ee476 100644 --- a/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts @@ -997,12 +997,14 @@ describe("fetchDataset", () => { const lookupMock = jest.spyOn(DatasetFSProvider.instance, "lookup").mockImplementation(() => { throw new Error("unknown fs error"); }); - await expect((DatasetFSProvider.instance as any).fetchDataset(testUris.ps, { - isRoot: false, - slashAfterProfilePos: testUris.ps.path.indexOf("/", 1), - profileName: "sestest", - profile: testProfile, - })).rejects.toThrow(); + await expect( + (DatasetFSProvider.instance as any).fetchDataset(testUris.ps, { + isRoot: false, + slashAfterProfilePos: testUris.ps.path.indexOf("/", 1), + profileName: "sestest", + profile: testProfile, + }) + ).rejects.toThrow(); lookupMock.mockRestore(); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedHistoryView.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedHistoryView.unit.test.ts index 39784dc520..bead5092c7 100644 --- a/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedHistoryView.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedHistoryView.unit.test.ts @@ -98,7 +98,7 @@ describe("HistoryView Unit Tests", () => { { test: "test" } as any ); expect(historyView["treeProviders"]).toEqual({ test: "test" }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", uss: "search", jobs: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", uss: "search", jobs: "search", cmds: "mvs" }); }); }); @@ -125,11 +125,13 @@ describe("HistoryView Unit Tests", () => { ds: [], uss: [], jobs: [], + cmds: { mvs: [], tso: [], uss: [] }, tab: undefined, selection: { ds: "search", jobs: "search", uss: "search", + cmds: "mvs", }, }); }); @@ -148,7 +150,7 @@ describe("HistoryView Unit Tests", () => { const blockMocks = createBlockMocks(globalMocks); const historyView = await initializeHistoryViewMock(blockMocks, globalMocks); await historyView["onDidReceiveMessage"]({ command: "update-selection", attrs: { type: "uss", selection: "favorites" } }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "favorites" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "favorites", cmds: "mvs" }); }); it("should handle the case where 'add-item' is the command sent", async () => { @@ -159,7 +161,7 @@ describe("HistoryView Unit Tests", () => { const addSearchHistorySpy = jest.spyOn(historyView["treeProviders"].uss, "addSearchHistory"); jest.spyOn(historyView as any, "refreshView").mockImplementation(); await historyView["onDidReceiveMessage"]({ command: "add-item", attrs: { type: "uss" } }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(addSearchHistorySpy).toHaveBeenCalledWith("test"); }); @@ -173,7 +175,7 @@ describe("HistoryView Unit Tests", () => { command: "remove-item", attrs: { type: "ds", selection: "search", selectedItems: { test: "test1" } }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(removeSearchHistorySpy).toHaveBeenCalledWith("test"); }); @@ -187,7 +189,7 @@ describe("HistoryView Unit Tests", () => { command: "remove-item", attrs: { type: "ds", selection: "fileHistory", selectedItems: { test: "test1" } }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(removeFileHistorySpy).toHaveBeenCalledWith("test"); }); @@ -201,7 +203,7 @@ describe("HistoryView Unit Tests", () => { command: "remove-item", attrs: { type: "ds", selection: "favorites", selectedItems: { test: "test1" } }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(showMessageSpy).toHaveBeenCalledTimes(1); }); @@ -217,7 +219,7 @@ describe("HistoryView Unit Tests", () => { command: "remove-item", attrs: { type: "uss", selection: "encodingHistory", selectedItems: { test: "test" } }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(removeEncodingHistorySpy).toHaveBeenCalledWith("zowe.encodingHistory", []); }); @@ -233,7 +235,7 @@ describe("HistoryView Unit Tests", () => { command: "clear-all", attrs: { type: "ds", selection: "search" }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(resetSearchHistorySpy).toHaveBeenCalledTimes(1); }); @@ -249,7 +251,7 @@ describe("HistoryView Unit Tests", () => { command: "clear-all", attrs: { type: "ds", selection: "fileHistory" }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(resetFileHistorySpy).toHaveBeenCalledTimes(1); }); @@ -264,7 +266,7 @@ describe("HistoryView Unit Tests", () => { command: "clear-all", attrs: { type: "ds", selection: "favorites" }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(showMessageSpy).toHaveBeenCalledTimes(2); }); @@ -280,7 +282,7 @@ describe("HistoryView Unit Tests", () => { command: "clear-all", attrs: { type: "ds", selection: "encodingHistory" }, }); - expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search" }); + expect(historyView["currentSelection"]).toEqual({ ds: "search", jobs: "search", uss: "search", cmds: "mvs" }); expect(resetEncodingHistorySpy).toHaveBeenCalledTimes(2); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedInit.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedInit.unit.test.ts index a0e30bdc63..d246e78595 100644 --- a/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedInit.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/trees/shared/SharedInit.unit.test.ts @@ -50,6 +50,7 @@ describe("Test src/shared/extension", () => { _: { _: "_" }, }; const profileMocks = { deleteProfile: jest.fn(), disableValidation: jest.fn(), enableValidation: jest.fn(), refresh: jest.fn() }; + const cmdProviders = { mvs: { issueMvsCommand: jest.fn() }, tso: { issueTsoCommand: jest.fn() }, uss: { issueUnixCommand: jest.fn() } }; const treeProvider = { addFavorite: jest.fn(), deleteSession: jest.fn(), @@ -78,7 +79,7 @@ describe("Test src/shared/extension", () => { }, { name: "zowe.editHistory", - mock: [{ spy: jest.spyOn(SharedHistoryView, "SharedHistoryView"), arg: [test.context, test.value.providers] }], + mock: [{ spy: jest.spyOn(SharedHistoryView, "SharedHistoryView"), arg: [test.context, test.value.providers, cmdProviders] }], }, { name: "zowe.promptCredentials", @@ -253,21 +254,21 @@ describe("Test src/shared/extension", () => { }, { name: "zowe.issueTsoCmd:1", - mock: [{ spy: jest.spyOn(TsoCommandHandler, "getInstance"), arg: [], ret: { issueTsoCommand: jest.fn() } }], + mock: [{ spy: jest.spyOn(TsoCommandHandler, "getInstance"), arg: [], ret: cmdProviders.tso }], }, { name: "zowe.issueTsoCmd:2", parm: [], - mock: [{ spy: jest.spyOn(TsoCommandHandler, "getInstance"), arg: [], ret: { issueTsoCommand: jest.fn() } }], + mock: [{ spy: jest.spyOn(TsoCommandHandler, "getInstance"), arg: [], ret: cmdProviders.tso }], }, { name: "zowe.issueMvsCmd:1", - mock: [{ spy: jest.spyOn(MvsCommandHandler, "getInstance"), arg: [], ret: { issueMvsCommand: jest.fn() } }], + mock: [{ spy: jest.spyOn(MvsCommandHandler, "getInstance"), arg: [], ret: cmdProviders.mvs }], }, { name: "zowe.issueMvsCmd:2", parm: [], - mock: [{ spy: jest.spyOn(MvsCommandHandler, "getInstance"), arg: [], ret: { issueMvsCommand: jest.fn() } }], + mock: [{ spy: jest.spyOn(MvsCommandHandler, "getInstance"), arg: [], ret: cmdProviders.mvs }], }, { name: "zowe.selectForCompare", @@ -287,12 +288,12 @@ describe("Test src/shared/extension", () => { }, { name: "zowe.issueUnixCmd:1", - mock: [{ spy: jest.spyOn(UnixCommandHandler, "getInstance"), arg: [], ret: { issueUnixCommand: jest.fn() } }], + mock: [{ spy: jest.spyOn(UnixCommandHandler, "getInstance"), arg: [], ret: cmdProviders.uss }], }, { name: "zowe.issueUnixCmd:2", parm: [], - mock: [{ spy: jest.spyOn(UnixCommandHandler, "getInstance"), arg: [], ret: { issueUnixCommand: jest.fn() } }], + mock: [{ spy: jest.spyOn(UnixCommandHandler, "getInstance"), arg: [], ret: cmdProviders.uss }], }, ]; diff --git a/packages/zowe-explorer/l10n/bundle.l10n.json b/packages/zowe-explorer/l10n/bundle.l10n.json index 4e88316430..c3d6993654 100644 --- a/packages/zowe-explorer/l10n/bundle.l10n.json +++ b/packages/zowe-explorer/l10n/bundle.l10n.json @@ -203,6 +203,48 @@ "Profile auth error": "Profile auth error", "Profile is not authenticated, please log in to continue": "Profile is not authenticated, please log in to continue", "Retrieving response from USS list API": "Retrieving response from USS list API", + "The 'move' function is not implemented for this USS API.": "The 'move' function is not implemented for this USS API.", + "Failed to move {0}/File path": { + "message": "Failed to move {0}", + "comment": [ + "File path" + ] + }, + "Failed to get contents for {0}/File path": { + "message": "Failed to get contents for {0}", + "comment": [ + "File path" + ] + }, + "Profile does not exist for this file.": "Profile does not exist for this file.", + "Saving USS file...": "Saving USS file...", + "Failed to rename {0}/File path": { + "message": "Failed to rename {0}", + "comment": [ + "File path" + ] + }, + "Failed to delete {0}/File name": { + "message": "Failed to delete {0}", + "comment": [ + "File name" + ] + }, + "No error details given": "No error details given", + "Error fetching destination {0} for paste action: {1}/USS pathError message": { + "message": "Error fetching destination {0} for paste action: {1}", + "comment": [ + "USS path", + "Error message" + ] + }, + "Failed to copy {0} to {1}/Source pathDestination path": { + "message": "Failed to copy {0} to {1}", + "comment": [ + "Source path", + "Destination path" + ] + }, "Downloaded: {0}/Download time": { "message": "Downloaded: {0}", "comment": [ @@ -273,48 +315,6 @@ "initializeUSSFavorites.error.buttonRemove": "initializeUSSFavorites.error.buttonRemove", "File does not exist. It may have been deleted.": "File does not exist. It may have been deleted.", "Pulling from Mainframe...": "Pulling from Mainframe...", - "The 'move' function is not implemented for this USS API.": "The 'move' function is not implemented for this USS API.", - "Failed to move {0}/File path": { - "message": "Failed to move {0}", - "comment": [ - "File path" - ] - }, - "Failed to get contents for {0}/File path": { - "message": "Failed to get contents for {0}", - "comment": [ - "File path" - ] - }, - "Profile does not exist for this file.": "Profile does not exist for this file.", - "Saving USS file...": "Saving USS file...", - "Failed to rename {0}/File path": { - "message": "Failed to rename {0}", - "comment": [ - "File path" - ] - }, - "Failed to delete {0}/File name": { - "message": "Failed to delete {0}", - "comment": [ - "File name" - ] - }, - "No error details given": "No error details given", - "Error fetching destination {0} for paste action: {1}/USS pathError message": { - "message": "Error fetching destination {0} for paste action: {1}", - "comment": [ - "USS path", - "Error message" - ] - }, - "Failed to copy {0} to {1}/Source pathDestination path": { - "message": "Failed to copy {0} to {1}", - "comment": [ - "Source path", - "Destination path" - ] - }, "{0} location/Node type": { "message": "{0} location", "comment": [ @@ -1103,7 +1103,16 @@ "All jobs": "All jobs", "Ascending": "Ascending", "Descending": "Descending", - "Create a new Unix command": "Create a new Unix command", + "Unable to perform this operation due to the following problem.": "Unable to perform this operation due to the following problem.", + "Response From Service": "Response From Service", + "Diagnostic Information": "Diagnostic Information", + "Welcome to the integrated terminal for: {0}/Terminal Name": { + "message": "Welcome to the integrated terminal for: {0}", + "comment": [ + "Terminal Name" + ] + }, + "Profile is invalid": "Profile is invalid", "Issuing commands is not supported for this profile type, {0}./Profile type": { "message": "Issuing commands is not supported for this profile type, {0}.", "comment": [ @@ -1117,22 +1126,13 @@ ] }, "Error preparing SSH connection for issuing UNIX commands, please check SSH profile for correctness.": "Error preparing SSH connection for issuing UNIX commands, please check SSH profile for correctness.", - "No SSH profile found. Please create an SSH profile.": "No SSH profile found. Please create an SSH profile.", - "SSH profile missing connection details. Please update.": "SSH profile missing connection details. Please update.", - "No profiles available.": "No profiles available.", "Redirecting to Home Directory": "Redirecting to Home Directory", - "Zowe Unix Command": "Zowe Unix Command", - "An SSH profile will be used for issuing UNIX commands with the profile {0}.": "An SSH profile will be used for issuing UNIX commands with the profile {0}.", - "Error checking if SSH profile type required for issuing UNIX commands, setting requirement to false for profile {0}.": "Error checking if SSH profile type required for issuing UNIX commands, setting requirement to false for profile {0}.", - "Enter the path of the directory in order to execute the command": "Enter the path of the directory in order to execute the command", - "Not implemented yet for profile of type: {0}/Profile type": { - "message": "Not implemented yet for profile of type: {0}", - "comment": [ - "Profile type" - ] - }, - "Select the SSH Profile.": "Select the SSH Profile.", + "SSH profile missing connection details. Please update.": "SSH profile missing connection details. Please update.", + "No SSH profile found. Please create an SSH profile.": "No SSH profile found. Please create an SSH profile.", + "Unix command submitted.": "Unix command submitted.", + "$(plus) Create a new Unix command": "$(plus) Create a new Unix command", "Select the profile to use to submit the Unix command": "Select the profile to use to submit the Unix command", + "Enter or update the Unix command": "Enter or update the Unix command", "Select a Unix command to run against {0} (An option to edit will follow)/Current work directory": { "message": "Select a Unix command to run against {0} (An option to edit will follow)", "comment": [ @@ -1145,12 +1145,20 @@ "Current work directory" ] }, - "Enter or update the Unix command": "Enter or update the Unix command", - "Unix command submitted.": "Unix command submitted.", + "Zowe Unix Command": "Zowe Unix Command", + "An SSH profile will be used for issuing UNIX commands with the profile {0}.": "An SSH profile will be used for issuing UNIX commands with the profile {0}.", + "Error checking if SSH profile type required for issuing UNIX commands, setting requirement to false for profile {0}.": "Error checking if SSH profile type required for issuing UNIX commands, setting requirement to false for profile {0}.", + "Enter the path of the directory in order to execute the command": "Enter the path of the directory in order to execute the command", + "Not implemented yet for profile of type: {0}/Profile type": { + "message": "Not implemented yet for profile of type: {0}", + "comment": [ + "Profile type" + ] + }, + "TSO command submitted.": "TSO command submitted.", "Create a new TSO command": "Create a new TSO command", - "Zowe TSO Command": "Zowe TSO Command", "Select the profile to use to submit the TSO command": "Select the profile to use to submit the TSO command", - "Profile is invalid": "Profile is invalid", + "Enter or update the TSO command": "Enter or update the TSO command", "Select a TSO command to run against {0} (An option to edit will follow)/Host name": { "message": "Select a TSO command to run against {0} (An option to edit will follow)", "comment": [ @@ -1163,17 +1171,13 @@ "Host name" ] }, - "Enter or update the TSO command": "Enter or update the TSO command", - "No command entered.": "No command entered.", - "TSO command submitted.": "TSO command submitted.", - "No account number was supplied.": "No account number was supplied.", - "Select the TSO profile to use for account number.": "Select the TSO profile to use for account number.", + "Zowe TSO Command": "Zowe TSO Command", "Account Number": "Account Number", "Enter the account number for the TSO connection.": "Enter the account number for the TSO connection.", - "Operation cancelled.": "Operation cancelled.", + "MVS command submitted.": "MVS command submitted.", "Create a new MVS command": "Create a new MVS command", - "Zowe MVS Command": "Zowe MVS Command", - "Select the profile to use to submit the command": "Select the profile to use to submit the command", + "Select the profile to use to submit the MVS command": "Select the profile to use to submit the MVS command", + "Enter or update the MVS command": "Enter or update the MVS command", "Select an MVS command to run against {0} (An option to edit will follow)/Host name": { "message": "Select an MVS command to run against {0} (An option to edit will follow)", "comment": [ @@ -1186,6 +1190,5 @@ "Host name" ] }, - "Enter or update the MVS command": "Enter or update the MVS command", - "MVS command submitted.": "MVS command submitted." + "Zowe MVS Command": "Zowe MVS Command" } \ No newline at end of file diff --git a/packages/zowe-explorer/l10n/poeditor.json b/packages/zowe-explorer/l10n/poeditor.json index e715a39d2f..3bc4bfda3c 100644 --- a/packages/zowe-explorer/l10n/poeditor.json +++ b/packages/zowe-explorer/l10n/poeditor.json @@ -314,8 +314,20 @@ "zowe.cliLoggerSetting.presented": { "User has been asked to sync Zowe Explorer log setting with Zowe CL's environment variable.": "" }, - "zowe.commands.history": { - "Toggle if Commands persist locally": "" + "zowe.commands.mvs.history": { + "Toggle if MVS Commands persist locally": "" + }, + "zowe.commands.tso.history": { + "Toggle if TSO Commands persist locally": "" + }, + "zowe.commands.uss.history": { + "Toggle if Unix Commands persist locally": "" + }, + "zowe.commands.alwaysEdit": { + "Allow editing of commands before submitting": "" + }, + "zowe.commands.useIntegratedTerminals": { + "Allow commands to be executed using integrated terminals": "" }, "zowe.automaticProfileValidation": { "Allow automatic validation of profiles.": "" @@ -534,6 +546,16 @@ "Profile auth error": "", "Profile is not authenticated, please log in to continue": "", "Retrieving response from USS list API": "", + "The 'move' function is not implemented for this USS API.": "", + "Failed to move {0}": "", + "Failed to get contents for {0}": "", + "Profile does not exist for this file.": "", + "Saving USS file...": "", + "Failed to rename {0}": "", + "Failed to delete {0}": "", + "No error details given": "", + "Error fetching destination {0} for paste action: {1}": "", + "Failed to copy {0} to {1}": "", "Downloaded: {0}": "", "Encoding: {0}": "", "Binary": "", @@ -562,16 +584,6 @@ "initializeUSSFavorites.error.buttonRemove": "", "File does not exist. It may have been deleted.": "", "Pulling from Mainframe...": "", - "The 'move' function is not implemented for this USS API.": "", - "Failed to move {0}": "", - "Failed to get contents for {0}": "", - "Profile does not exist for this file.": "", - "Saving USS file...": "", - "Failed to rename {0}": "", - "Failed to delete {0}": "", - "No error details given": "", - "Error fetching destination {0} for paste action: {1}": "", - "Failed to copy {0} to {1}": "", "{0} location": "", "Choose a location to create the {0}": "", "Name of file or directory": "", @@ -896,43 +908,41 @@ "All jobs": "", "Ascending": "", "Descending": "", - "Create a new Unix command": "", + "Unable to perform this operation due to the following problem.": "", + "Response From Service": "", + "Diagnostic Information": "", + "Welcome to the integrated terminal for: {0}": "", + "Profile is invalid": "", "Issuing commands is not supported for this profile type, {0}.": "", "Issuing UNIX commands is not supported for this profile type, {0}.": "", "Error preparing SSH connection for issuing UNIX commands, please check SSH profile for correctness.": "", - "No SSH profile found. Please create an SSH profile.": "", - "SSH profile missing connection details. Please update.": "", - "No profiles available.": "", "Redirecting to Home Directory": "", + "SSH profile missing connection details. Please update.": "", + "No SSH profile found. Please create an SSH profile.": "", + "Unix command submitted.": "", + "$(plus) Create a new Unix command": "", + "Select the profile to use to submit the Unix command": "", + "Enter or update the Unix command": "", + "Select a Unix command to run against {0} (An option to edit will follow)": "", + "Select a Unix command to run immediately against {0}": "", "Zowe Unix Command": "", "An SSH profile will be used for issuing UNIX commands with the profile {0}.": "", "Error checking if SSH profile type required for issuing UNIX commands, setting requirement to false for profile {0}.": "", "Enter the path of the directory in order to execute the command": "", - "Select the SSH Profile.": "", - "Select the profile to use to submit the Unix command": "", - "Select a Unix command to run against {0} (An option to edit will follow)": "", - "Select a Unix command to run immediately against {0}": "", - "Enter or update the Unix command": "", - "Unix command submitted.": "", + "TSO command submitted.": "", "Create a new TSO command": "", - "Zowe TSO Command": "", "Select the profile to use to submit the TSO command": "", - "Profile is invalid": "", + "Enter or update the TSO command": "", "Select a TSO command to run against {0} (An option to edit will follow)": "", "Select a TSO command to run immediately against {0}": "", - "Enter or update the TSO command": "", - "No command entered.": "", - "TSO command submitted.": "", - "No account number was supplied.": "", - "Select the TSO profile to use for account number.": "", + "Zowe TSO Command": "", "Account Number": "", "Enter the account number for the TSO connection.": "", - "Operation cancelled.": "", + "MVS command submitted.": "", "Create a new MVS command": "", - "Zowe MVS Command": "", - "Select the profile to use to submit the command": "", + "Select the profile to use to submit the MVS command": "", + "Enter or update the MVS command": "", "Select an MVS command to run against {0} (An option to edit will follow)": "", "Select an MVS command to run immediately against {0}": "", - "Enter or update the MVS command": "", - "MVS command submitted.": "" + "Zowe MVS Command": "" } diff --git a/packages/zowe-explorer/package.json b/packages/zowe-explorer/package.json index 2217747bf2..663e313b09 100644 --- a/packages/zowe-explorer/package.json +++ b/packages/zowe-explorer/package.json @@ -1713,18 +1713,40 @@ "description": "%zowe.jobs.confirmSubmission%", "scope": "window" }, + "zowe.commands.useIntegratedTerminals": { + "type": "boolean", + "default": true, + "description": "%zowe.commands.useIntegratedTerminals%", + "scope": "window" + }, "zowe.commands.alwaysEdit": { "type": "boolean", "default": true, - "description": "Allow editing of commands before submitting", + "description": "%zowe.commands.alwaysEdit%", "scope": "window" }, - "zowe.commands.history": { + "zowe.commands.mvs.history": { + "default": { + "persistence": true, + "history": [] + }, + "description": "%zowe.commands.mvs.history%", + "scope": "application" + }, + "zowe.commands.tso.history": { + "default": { + "persistence": true, + "history": [] + }, + "description": "%zowe.commands.tso.history%", + "scope": "application" + }, + "zowe.commands.uss.history": { "default": { "persistence": true, "history": [] }, - "description": "%zowe.commands.history%", + "description": "%zowe.commands.uss.history%", "scope": "application" }, "zowe.automaticProfileValidation": { @@ -1864,11 +1886,11 @@ }, "dependencies": { "@vscode/codicons": "^0.0.35", - "@zowe/core-for-zowe-sdk": "^8.2.0", + "@zowe/core-for-zowe-sdk": "^8.7.0", "@zowe/secrets-for-zowe-sdk": "^8.1.2", - "@zowe/zos-files-for-zowe-sdk": "^8.2.0", - "@zowe/zos-jobs-for-zowe-sdk": "^8.2.0", - "@zowe/zosmf-for-zowe-sdk": "^8.2.0", + "@zowe/zos-files-for-zowe-sdk": "^8.7.0", + "@zowe/zos-jobs-for-zowe-sdk": "^8.7.0", + "@zowe/zosmf-for-zowe-sdk": "^8.7.0", "@zowe/zowe-explorer-api": "3.1.0-SNAPSHOT", "dayjs": "^1.11.10", "fs-extra": "8.0.1", diff --git a/packages/zowe-explorer/package.nls.json b/packages/zowe-explorer/package.nls.json index b8997e4ebe..5a15b99e83 100644 --- a/packages/zowe-explorer/package.nls.json +++ b/packages/zowe-explorer/package.nls.json @@ -104,7 +104,11 @@ "zowe.logger.error.description": "Messages about serious problem occurrences.", "zowe.logger.fatal.description": "Messages about catastraphic error events.", "zowe.cliLoggerSetting.presented": "User has been asked to sync Zowe Explorer log setting with Zowe CL's environment variable.", - "zowe.commands.history": "Toggle if Commands persist locally", + "zowe.commands.mvs.history": "Toggle if MVS Commands persist locally", + "zowe.commands.tso.history": "Toggle if TSO Commands persist locally", + "zowe.commands.uss.history": "Toggle if Unix Commands persist locally", + "zowe.commands.alwaysEdit": "Allow editing of commands before submitting", + "zowe.commands.useIntegratedTerminals": "Allow commands to be executed using integrated terminals", "zowe.automaticProfileValidation": "Allow automatic validation of profiles.", "zowe.pollInterval.info": "Default interval (in milliseconds) when polling spool files.", "zowe.security.checkForCustomCredentialManagers": "Check for any installed VS Code extensions for handling credentials when activating Zowe Explorer", diff --git a/packages/zowe-explorer/src/commands/MvsCommandHandler.ts b/packages/zowe-explorer/src/commands/MvsCommandHandler.ts index cccb993c35..e0e3d75e94 100644 --- a/packages/zowe-explorer/src/commands/MvsCommandHandler.ts +++ b/packages/zowe-explorer/src/commands/MvsCommandHandler.ts @@ -10,17 +10,13 @@ */ import * as vscode from "vscode"; -import { Validation, imperative, IZoweTreeNode, Gui, ZoweExplorerApiType } from "@zowe/zowe-explorer-api"; -import { ZoweCommandProvider } from "./ZoweCommandProvider"; +import { Validation, imperative, IZoweTreeNode, Gui, PersistenceSchemaEnum, ZoweExplorerApiType } from "@zowe/zowe-explorer-api"; +import { ICommandProviderDialogs, ZoweCommandProvider } from "./ZoweCommandProvider"; import { ZoweLogger } from "../tools/ZoweLogger"; -import { Profiles } from "../configuration/Profiles"; import { ZoweExplorerApiRegister } from "../extending/ZoweExplorerApiRegister"; -import { ProfileManagement } from "../management/ProfileManagement"; -import { Constants } from "../configuration/Constants"; -import { SettingsConfig } from "../configuration/SettingsConfig"; -import { FilterDescriptor, FilterItem } from "../management/FilterManagement"; import { AuthUtils } from "../utils/AuthUtils"; import { Definitions } from "../configuration/Definitions"; +import { ZowePersistentFilters } from "../tools/ZowePersistentFilters"; /** * Provides a class that manages submitting a command on the server @@ -42,13 +38,31 @@ export class MvsCommandHandler extends ZoweCommandProvider { return this.instance; } - private static readonly defaultDialogText: string = `$(plus) ${vscode.l10n.t("Create a new MVS command")}`; + public readonly dialogs: ICommandProviderDialogs = { + commandSubmitted: vscode.l10n.t("MVS command submitted."), + defaultText: `$(plus) ${vscode.l10n.t("Create a new MVS command")}`, + selectProfile: vscode.l10n.t("Select the profile to use to submit the MVS command"), + searchCommand: vscode.l10n.t("Enter or update the MVS command"), + writeCommand: (options) => + vscode.l10n.t({ + message: "Select an MVS command to run against {0} (An option to edit will follow)", + args: options, + comment: ["Host name"], + }), + selectCommand: (options) => + vscode.l10n.t({ + message: "Select an MVS command to run immediately against {0}", + args: options, + comment: ["Host name"], + }), + }; + + public history: ZowePersistentFilters; private static instance: MvsCommandHandler; - public outputChannel: vscode.OutputChannel; public constructor() { - super(); - this.outputChannel = Gui.createOutputChannel(vscode.l10n.t("Zowe MVS Command")); + super(vscode.l10n.t("Zowe MVS Command")); + this.history = new ZowePersistentFilters(PersistenceSchemaEnum.MvsCommands, ZoweCommandProvider.totalFilters); } /** @@ -59,7 +73,6 @@ export class MvsCommandHandler extends ZoweCommandProvider { */ public async issueMvsCommand(session?: imperative.Session, command?: string, node?: IZoweTreeNode): Promise { ZoweLogger.trace("MvsCommandHandler.issueMvsCommand called."); - const profiles = Profiles.getInstance(); let profile: imperative.IProfileLoaded; if (node) { await this.checkCurrentProfile(node); @@ -71,49 +84,25 @@ export class MvsCommandHandler extends ZoweCommandProvider { } } if (!session) { - const allProfiles = profiles.allProfiles; - const profileNamesList = ProfileManagement.getRegisteredProfileNameList(Definitions.Trees.MVS); - if (profileNamesList.length) { - const quickPickOptions: vscode.QuickPickOptions = { - placeHolder: vscode.l10n.t("Select the profile to use to submit the command"), - ignoreFocusOut: true, - canPickMany: false, - }; - const sesName = await Gui.showQuickPick(profileNamesList, quickPickOptions); - if (sesName === undefined) { - Gui.showMessage(vscode.l10n.t("Operation cancelled")); - return; - } - profile = allProfiles.filter((temprofile) => temprofile.name === sesName)[0]; - if (!node) { - await profiles.checkCurrentProfile(profile); - } - if (profiles.validProfile !== Validation.ValidationType.INVALID) { - session = ZoweExplorerApiRegister.getMvsApi(profile).getSession(); - } else { - Gui.errorMessage(vscode.l10n.t("Profile is invalid")); - return; - } - } else { - Gui.showMessage(vscode.l10n.t("No profiles available")); + profile = await this.selectNodeProfile(Definitions.Trees.MVS); + if (!profile) { return; } } else { profile = node.getProfile(); } try { - if (profiles.validProfile !== Validation.ValidationType.INVALID) { + if (this.profileInstance.validProfile !== Validation.ValidationType.INVALID) { const commandApi = ZoweExplorerApiRegister.getInstance().getCommandApi(profile); if (commandApi) { - let command1: string = command; if (!command) { - command1 = await this.getQuickPick(session && session.ISession ? session.ISession.hostname : "unknown"); + command = await this.getQuickPick([session && session.ISession ? session.ISession.hostname : "unknown"]); } - await this.issueCommand(profile, command1); - } else { - Gui.errorMessage(vscode.l10n.t("Profile is invalid")); - return; + await this.issueCommand(profile, command); } + } else { + Gui.errorMessage(vscode.l10n.t("Profile is invalid")); + return; } } catch (error) { if (error.toString().includes("non-existing")) { @@ -131,92 +120,18 @@ export class MvsCommandHandler extends ZoweCommandProvider { } } - private async getQuickPick(hostname: string): Promise { - ZoweLogger.trace("MvsCommandHandler.getQuickPick called."); - let response = ""; - const alwaysEdit: boolean = SettingsConfig.getDirectValue(Constants.SETTINGS_COMMANDS_ALWAYS_EDIT); - if (this.history.getSearchHistory().length > 0) { - const createPick = new FilterDescriptor(MvsCommandHandler.defaultDialogText); - const items: vscode.QuickPickItem[] = this.history.getSearchHistory().map((element) => new FilterItem({ text: element })); - const quickpick = Gui.createQuickPick(); - quickpick.placeholder = alwaysEdit - ? vscode.l10n.t({ - message: "Select an MVS command to run against {0} (An option to edit will follow)", - args: [hostname], - comment: ["Host name"], - }) - : vscode.l10n.t({ - message: "Select an MVS command to run immediately against {0}", - args: [hostname], - comment: ["Host name"], - }); - - quickpick.items = [createPick, ...items]; - quickpick.ignoreFocusOut = true; - quickpick.show(); - const choice = await Gui.resolveQuickPick(quickpick); - quickpick.hide(); - if (!choice) { - Gui.showMessage(vscode.l10n.t("No selection made. Operation cancelled.")); - return; - } - if (choice instanceof FilterDescriptor) { - if (quickpick.value) { - response = quickpick.value; - } - } else { - response = choice.label; - } - } - if (!response || alwaysEdit) { - // manually entering a search - const options2: vscode.InputBoxOptions = { - prompt: vscode.l10n.t("Enter or update the MVS command"), - value: response, - valueSelection: response ? [response.length, response.length] : undefined, - }; - // get user input - response = await Gui.showInputBox(options2); - if (!response) { - Gui.showMessage(vscode.l10n.t("No command entered.")); - return; - } + public formatCommandLine(command: string): string { + if (command.startsWith("/")) { + command = command.substring(1); } - return response; + return `> ${command}`; } - /** - * Allow the user to submit an MVS Console command to the selected server. Response is written - * to the output channel. - * @param session The Session object - * @param command the command string - */ - private async issueCommand(profile: imperative.IProfileLoaded, command: string): Promise { - ZoweLogger.trace("MvsCommandHandler.issueCommand called."); - try { - if (command) { - // If the user has started their command with a / then remove it - if (command.startsWith("/")) { - command = command.substring(1); - } - this.outputChannel.appendLine(`> ${command}`); - const submitResponse = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t("MVS command submitted."), - }, - () => { - return ZoweExplorerApiRegister.getCommandApi(profile).issueMvsCommand(command, profile.profile?.consoleName); - } - ); - if (submitResponse.success) { - this.outputChannel.appendLine(submitResponse.commandResponse); - this.outputChannel.show(true); - } - } - } catch (error) { - await AuthUtils.errorHandling(error, { apiType: ZoweExplorerApiType.Command, profile }); + public async runCommand(profile: imperative.IProfileLoaded, command: string): Promise { + if (command.startsWith("/")) { + command = command.substring(1); } - this.history.addSearchHistory(command); + const response = await ZoweExplorerApiRegister.getCommandApi(profile).issueMvsCommand(command, profile.profile?.consoleName); + return response.commandResponse; } } diff --git a/packages/zowe-explorer/src/commands/TsoCommandHandler.ts b/packages/zowe-explorer/src/commands/TsoCommandHandler.ts index 56c8815da9..02967fbe8b 100644 --- a/packages/zowe-explorer/src/commands/TsoCommandHandler.ts +++ b/packages/zowe-explorer/src/commands/TsoCommandHandler.ts @@ -11,17 +11,13 @@ import * as vscode from "vscode"; import * as zostso from "@zowe/zos-tso-for-zowe-sdk"; -import { Gui, Validation, imperative, IZoweTreeNode, ZoweExplorerApiType } from "@zowe/zowe-explorer-api"; -import { ZoweCommandProvider } from "./ZoweCommandProvider"; +import { Gui, Validation, imperative, IZoweTreeNode, PersistenceSchemaEnum, ZoweExplorerApiType } from "@zowe/zowe-explorer-api"; +import { ICommandProviderDialogs, ZoweCommandProvider } from "./ZoweCommandProvider"; import { ZoweLogger } from "../tools/ZoweLogger"; -import { Profiles } from "../configuration/Profiles"; import { ZoweExplorerApiRegister } from "../extending/ZoweExplorerApiRegister"; -import { ProfileManagement } from "../management/ProfileManagement"; -import { Constants } from "../configuration/Constants"; -import { SettingsConfig } from "../configuration/SettingsConfig"; -import { FilterDescriptor, FilterItem } from "../management/FilterManagement"; import { AuthUtils } from "../utils/AuthUtils"; import { Definitions } from "../configuration/Definitions"; +import { ZowePersistentFilters } from "../tools/ZowePersistentFilters"; /** * Provides a class that manages submitting a TSO command on the server @@ -43,13 +39,33 @@ export class TsoCommandHandler extends ZoweCommandProvider { return this.instance; } - private static readonly defaultDialogText: string = `$(plus) ${vscode.l10n.t("Create a new TSO command")}`; + public history: ZowePersistentFilters; private static instance: TsoCommandHandler; - public outputChannel: vscode.OutputChannel; + + public readonly dialogs: ICommandProviderDialogs = { + commandSubmitted: vscode.l10n.t("TSO command submitted."), + defaultText: `$(plus) ${vscode.l10n.t("Create a new TSO command")}`, + selectProfile: vscode.l10n.t("Select the profile to use to submit the TSO command"), + searchCommand: vscode.l10n.t("Enter or update the TSO command"), + writeCommand: (options) => + vscode.l10n.t({ + message: "Select a TSO command to run against {0} (An option to edit will follow)", + args: options, + comment: ["Host name"], + }), + selectCommand: (options) => + vscode.l10n.t({ + message: "Select a TSO command to run immediately against {0}", + args: options, + comment: ["Host name"], + }), + }; + + public tsoParams: zostso.IStartTsoParms; public constructor() { - super(); - this.outputChannel = Gui.createOutputChannel(vscode.l10n.t("Zowe TSO Command")); + super(vscode.l10n.t("Zowe TSO Command")); + this.history = new ZowePersistentFilters(PersistenceSchemaEnum.TsoCommands, ZoweCommandProvider.totalFilters); } /** @@ -60,7 +76,6 @@ export class TsoCommandHandler extends ZoweCommandProvider { */ public async issueTsoCommand(session?: imperative.Session, command?: string, node?: IZoweTreeNode): Promise { ZoweLogger.trace("TsoCommandHandler.issueTsoCommand called."); - const profiles = Profiles.getInstance(); let profile: imperative.IProfileLoaded; if (node) { await this.checkCurrentProfile(node); @@ -72,56 +87,31 @@ export class TsoCommandHandler extends ZoweCommandProvider { } } if (!session) { - const profileNamesList = ProfileManagement.getRegisteredProfileNameList(Definitions.Trees.MVS); - if (profileNamesList.length > 0) { - const quickPickOptions: vscode.QuickPickOptions = { - placeHolder: vscode.l10n.t("Select the profile to use to submit the TSO command"), - ignoreFocusOut: true, - canPickMany: false, - }; - const sesName = await Gui.showQuickPick(profileNamesList, quickPickOptions); - if (sesName === undefined) { - Gui.showMessage(vscode.l10n.t("Operation cancelled")); - return; - } - const allProfiles = profiles.allProfiles; - profile = allProfiles.filter((temprofile) => temprofile.name === sesName)[0]; - if (!node) { - await profiles.checkCurrentProfile(profile); - } - if (profiles.validProfile !== Validation.ValidationType.INVALID) { - session = ZoweExplorerApiRegister.getMvsApi(profile).getSession(); - } else { - Gui.errorMessage(vscode.l10n.t("Profile is invalid")); - return; - } - } else { - Gui.showMessage(vscode.l10n.t("No profiles available")); + profile = await this.selectNodeProfile(Definitions.Trees.MVS); + if (!profile) { return; } } else { profile = node.getProfile(); } try { - if (profiles.validProfile !== Validation.ValidationType.INVALID) { + if (this.profileInstance.validProfile !== Validation.ValidationType.INVALID) { const commandApi = ZoweExplorerApiRegister.getInstance().getCommandApi(profile); if (commandApi) { - let tsoParams: zostso.IStartTsoParms; if (profile.type === "zosmf") { - tsoParams = await this.getTsoParams(); - if (!tsoParams) { + this.tsoParams = await this.getTsoParams(); + if (!this.tsoParams) { return; } } - let command1: string = command; if (!command) { - command1 = await this.getQuickPick(session && session.ISession ? session.ISession.hostname : "unknown"); + command = await this.getQuickPick([session && session.ISession ? session.ISession.hostname : "unknown"]); } - await this.issueCommand(command1, profile, tsoParams); - } else { - Gui.errorMessage(vscode.l10n.t("Profile is invalid")); - return; + await this.issueCommand(profile, command); } + } else { + Gui.errorMessage(vscode.l10n.t("Profile is invalid")); + return; } } catch (error) { if (error.toString().includes("non-existing")) { @@ -139,125 +129,19 @@ export class TsoCommandHandler extends ZoweCommandProvider { } } - private async getQuickPick(hostname: string): Promise { - ZoweLogger.trace("TsoCommandHandler.getQuickPick called."); - let response = ""; - const alwaysEdit: boolean = SettingsConfig.getDirectValue(Constants.SETTINGS_COMMANDS_ALWAYS_EDIT); - if (this.history.getSearchHistory().length > 0) { - const createPick = new FilterDescriptor(TsoCommandHandler.defaultDialogText); - const items: vscode.QuickPickItem[] = this.history.getSearchHistory().map((element) => new FilterItem({ text: element })); - const quickpick = Gui.createQuickPick(); - quickpick.placeholder = alwaysEdit - ? vscode.l10n.t({ - message: "Select a TSO command to run against {0} (An option to edit will follow)", - args: [hostname], - comment: ["Host name"], - }) - : vscode.l10n.t({ - message: "Select a TSO command to run immediately against {0}", - args: [hostname], - comment: ["Host name"], - }); - - quickpick.items = [createPick, ...items]; - quickpick.ignoreFocusOut = true; - quickpick.show(); - const choice = await Gui.resolveQuickPick(quickpick); - quickpick.hide(); - if (!choice) { - Gui.showMessage(vscode.l10n.t("No selection made. Operation cancelled.")); - return; - } - if (choice instanceof FilterDescriptor) { - if (quickpick.value) { - response = quickpick.value; - } - } else { - response = choice.label; - } - } - if (!response || alwaysEdit) { - // manually entering a search - const options2: vscode.InputBoxOptions = { - prompt: vscode.l10n.t("Enter or update the TSO command"), - value: response, - valueSelection: response ? [response.length, response.length] : undefined, - }; - // get user input - response = await Gui.showInputBox(options2); - if (!response) { - Gui.showMessage(vscode.l10n.t("No command entered.")); - return; - } - } - return response; - } - /** - * Allow the user to submit an TSO command to the selected server. Response is written - * to the output channel. - * @param command the command string - * @param profile profile to be used - * @param tsoParams parameters (from TSO profile, when used) - */ - private async issueCommand(command: string, profile: imperative.IProfileLoaded, tsoParams?: zostso.IStartTsoParms): Promise { - ZoweLogger.trace("TsoCommandHandler.issueCommand called."); - try { - if (command) { - // If the user has started their command with a / then remove it - if (command.startsWith("/")) { - command = command.substring(1); - } - this.outputChannel.appendLine(`> ${command}`); - const submitResponse = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t("TSO command submitted."), - }, - () => { - return ZoweExplorerApiRegister.getCommandApi(profile).issueTsoCommandWithParms(command, tsoParams); - } - ); - if (submitResponse.success) { - this.outputChannel.appendLine(submitResponse.commandResponse); - this.outputChannel.show(true); - } - } - this.history.addSearchHistory(command); - } catch (error) { - if (error.toString().includes("account number")) { - const message = vscode.l10n.t("No account number was supplied."); - ZoweLogger.error(message); - Gui.errorMessage(message); - } else { - await AuthUtils.errorHandling(error, { apiType: ZoweExplorerApiType.Command, profile }); - } + public formatCommandLine(command: string): string { + if (command.startsWith("/")) { + command = command.substring(1); } + return `> ${command}`; } - private async selectTsoProfile(tsoProfiles: imperative.IProfileLoaded[] = []): Promise { - ZoweLogger.trace("TsoCommandHandler.selectTsoProfile called."); - let tsoProfile: imperative.IProfileLoaded; - if (tsoProfiles.length > 1) { - const tsoProfileNamesList = tsoProfiles.map((temprofile) => { - return temprofile.name; - }); - if (tsoProfileNamesList.length) { - const quickPickOptions: vscode.QuickPickOptions = { - placeHolder: vscode.l10n.t("Select the TSO profile to use for account number."), - ignoreFocusOut: true, - canPickMany: false, - }; - const sesName = await Gui.showQuickPick(tsoProfileNamesList, quickPickOptions); - if (sesName === undefined) { - Gui.showMessage(vscode.l10n.t("Operation cancelled")); - return; - } - tsoProfile = tsoProfiles.filter((temprofile) => temprofile.name === sesName)[0]; - } - } else if (tsoProfiles.length > 0) { - tsoProfile = tsoProfiles[0]; + public async runCommand(profile: imperative.IProfileLoaded, command: string): Promise { + if (command.startsWith("/")) { + command = command.substring(1); } - return tsoProfile; + const response = await ZoweExplorerApiRegister.getCommandApi(profile).issueTsoCommandWithParms(command, this.tsoParams); + return response.commandResponse; } /** @@ -267,7 +151,7 @@ export class TsoCommandHandler extends ZoweCommandProvider { */ private async getTsoParams(): Promise { ZoweLogger.trace("TsoCommandHandler.getTsoParams called."); - const profileInfo = await Profiles.getInstance().getProfileInfo(); + const profileInfo = await this.profileInstance.getProfileInfo(); let tsoParms: zostso.IStartTsoParms = {}; // Keys in the IStartTsoParms interface @@ -276,7 +160,7 @@ export class TsoCommandHandler extends ZoweCommandProvider { const profiles = profileInfo.getAllProfiles("tso"); let tsoProfile: imperative.IProfileLoaded; if (profiles.length > 0) { - tsoProfile = await this.selectTsoProfile(profiles.map((p) => imperative.ProfileInfo.profAttrsToProfLoaded(p))); + tsoProfile = await this.selectServiceProfile(profiles.map((p) => imperative.ProfileInfo.profAttrsToProfLoaded(p))); if (tsoProfile != null) { const prof = profileInfo.mergeArgsForProfile(tsoProfile.profile as imperative.IProfAttrs); iStartTso.forEach((p) => (tsoProfile.profile[p] = prof.knownArgs.find((a) => a.argName === p)?.argValue)); @@ -301,7 +185,7 @@ export class TsoCommandHandler extends ZoweCommandProvider { }; tsoParms.account = await Gui.showInputBox(InputBoxOptions); if (!tsoParms.account) { - Gui.showMessage(vscode.l10n.t("Operation cancelled.")); + ZoweLogger.info(this.operationCancelled); return; } } diff --git a/packages/zowe-explorer/src/commands/UnixCommandHandler.ts b/packages/zowe-explorer/src/commands/UnixCommandHandler.ts index 51726100e5..5eb82b542f 100644 --- a/packages/zowe-explorer/src/commands/UnixCommandHandler.ts +++ b/packages/zowe-explorer/src/commands/UnixCommandHandler.ts @@ -11,17 +11,13 @@ import * as vscode from "vscode"; import * as zosuss from "@zowe/zos-uss-for-zowe-sdk"; -import { ZoweCommandProvider } from "./ZoweCommandProvider"; -import { Gui, IZoweTreeNode, ZoweExplorerApiType, imperative } from "@zowe/zowe-explorer-api"; -import { Profiles } from "../configuration/Profiles"; +import { ICommandProviderDialogs, ZoweCommandProvider } from "./ZoweCommandProvider"; +import { Gui, IZoweTreeNode, PersistenceSchemaEnum, Validation, ZoweExplorerApiType, imperative } from "@zowe/zowe-explorer-api"; import { ZoweExplorerApiRegister } from "../extending/ZoweExplorerApiRegister"; import { ZoweLogger } from "../tools/ZoweLogger"; -import { ProfileManagement } from "../management/ProfileManagement"; -import { Constants } from "../configuration/Constants"; -import { SettingsConfig } from "../configuration/SettingsConfig"; -import { FilterDescriptor, FilterItem } from "../management/FilterManagement"; import { AuthUtils } from "../utils/AuthUtils"; import { Definitions } from "../configuration/Definitions"; +import { ZowePersistentFilters } from "../tools/ZowePersistentFilters"; /** * Provides a class that manages submitting a Unix command on the server @@ -43,219 +39,192 @@ export class UnixCommandHandler extends ZoweCommandProvider { return this.instance; } - private static readonly defaultDialogText: string = `$(plus) ${vscode.l10n.t("Create a new Unix command")}`; + public history: ZowePersistentFilters; private static instance: UnixCommandHandler; - private serviceProf: imperative.IProfileLoaded = undefined; + private nodeProfile: imperative.IProfileLoaded = undefined; private unixCmdMsgs = { - opCancelledMsg: vscode.l10n.t("Operation cancelled"), - issueCmdNotSupportedMsg: vscode.l10n.t({ - message: "Issuing commands is not supported for this profile type, {0}.", - args: [this.serviceProf?.type], - comment: ["Profile type"], - }), - issueUnixCmdNotSupportedMsg: vscode.l10n.t({ - message: "Issuing UNIX commands is not supported for this profile type, {0}.", - args: [this.serviceProf?.type], - comment: ["Profile type"], - }), + issueCmdNotSupportedMsg: (profileType: string) => + vscode.l10n.t({ + message: "Issuing commands is not supported for this profile type, {0}.", + args: [profileType], + comment: ["Profile type"], + }), + issueUnixCmdNotSupportedMsg: (profileType: string) => + vscode.l10n.t({ + message: "Issuing UNIX commands is not supported for this profile type, {0}.", + args: [profileType], + comment: ["Profile type"], + }), sshSessionErrorMsg: vscode.l10n.t("Error preparing SSH connection for issuing UNIX commands, please check SSH profile for correctness."), - sshProfNotFoundMsg: vscode.l10n.t("No SSH profile found. Please create an SSH profile."), - sshProfMissingInfoMsg: vscode.l10n.t("SSH profile missing connection details. Please update."), - noProfilesAvailableMsg: vscode.l10n.t("No profiles available."), cwdRedirectingMsg: vscode.l10n.t("Redirecting to Home Directory"), + sshProfMissingInfoMsg: vscode.l10n.t("SSH profile missing connection details. Please update."), + sshProfNotFoundMsg: vscode.l10n.t("No SSH profile found. Please create an SSH profile."), }; - public profileInstance = Profiles.getInstance(); - public outputChannel: vscode.OutputChannel; + public sshCwd: string; public sshSession: zosuss.SshSession; public sshProfile: imperative.IProfileLoaded; public isSshRequiredForProf: boolean = false; + public readonly dialogs: ICommandProviderDialogs = { + commandSubmitted: vscode.l10n.t("Unix command submitted."), + defaultText: vscode.l10n.t("$(plus) Create a new Unix command"), + selectProfile: vscode.l10n.t("Select the profile to use to submit the Unix command"), + searchCommand: vscode.l10n.t("Enter or update the Unix command"), + writeCommand: (options) => + vscode.l10n.t({ + message: "Select a Unix command to run against {0} (An option to edit will follow)", + args: options, + comment: ["Current work directory"], + }), + selectCommand: (options) => + vscode.l10n.t({ + message: "Select a Unix command to run immediately against {0}", + args: options, + comment: ["Current work directory"], + }), + }; + public constructor() { - super(); - this.outputChannel = Gui.createOutputChannel(vscode.l10n.t("Zowe Unix Command")); + super(vscode.l10n.t("Zowe Unix Command")); + this.history = new ZowePersistentFilters(PersistenceSchemaEnum.UssCommands, ZoweCommandProvider.totalFilters); } public async issueUnixCommand(node?: IZoweTreeNode, command?: string): Promise { - let cwd: string; + ZoweLogger.trace("UnixCommandHandler.issueUnixCommand called."); + if (node) { - this.serviceProf = node.getProfile(); - cwd = node.fullPath; + await this.checkCurrentProfile(node); + this.nodeProfile = node.getProfile(); + this.sshCwd = node.fullPath; } - if (!this.serviceProf) { - this.serviceProf = await this.userSelectProfile(); - if (!this.serviceProf) { + if (!this.nodeProfile) { + this.nodeProfile = await this.selectNodeProfile(Definitions.Trees.USS); + if (!this.nodeProfile) { return; } } try { // check for availability of all needed ZE APIs for issuing UNIX commands - const commandApi = ZoweExplorerApiRegister.getInstance().getCommandApi(this.serviceProf); + const commandApi = ZoweExplorerApiRegister.getInstance().getCommandApi(this.nodeProfile); if (!commandApi) { - ZoweLogger.error(this.unixCmdMsgs.issueCmdNotSupportedMsg); - Gui.errorMessage(this.unixCmdMsgs.issueCmdNotSupportedMsg); + ZoweLogger.error(this.unixCmdMsgs.issueCmdNotSupportedMsg(this.nodeProfile.type)); + Gui.errorMessage(this.unixCmdMsgs.issueCmdNotSupportedMsg(this.nodeProfile.type)); return; } - if (!ZoweExplorerApiRegister.getCommandApi(this.serviceProf).issueUnixCommand) { - ZoweLogger.error(this.unixCmdMsgs.issueUnixCmdNotSupportedMsg); - Gui.errorMessage( - vscode.l10n.t({ - message: "Issuing UNIX commands is not supported for this profile type, {0}.", - args: [this.serviceProf?.type], - comment: ["Profile type"], - }) - ); - this.serviceProf = undefined; + if (!ZoweExplorerApiRegister.getCommandApi(this.nodeProfile).issueUnixCommand) { + ZoweLogger.error(this.unixCmdMsgs.issueUnixCmdNotSupportedMsg(this.nodeProfile.type)); + Gui.errorMessage(this.unixCmdMsgs.issueUnixCmdNotSupportedMsg(this.nodeProfile.type)); + this.nodeProfile = undefined; return; } try { - this.isSshRequiredForProf = ZoweExplorerApiRegister.getCommandApi(this.serviceProf).sshProfileRequired(); + this.isSshRequiredForProf = ZoweExplorerApiRegister.getCommandApi(this.nodeProfile).sshProfileRequired(); ZoweLogger.info( - vscode.l10n.t("An SSH profile will be used for issuing UNIX commands with the profile {0}.", [this.serviceProf?.name]) + vscode.l10n.t("An SSH profile will be used for issuing UNIX commands with the profile {0}.", [this.nodeProfile?.name]) ); } catch (e) { // error would be due to missing API, assuming SSH profile not required ZoweLogger.warn( vscode.l10n.t( "Error checking if SSH profile type required for issuing UNIX commands, setting requirement to false for profile {0}.", - [this.serviceProf?.name] + [this.nodeProfile?.name] ) ); } - await this.profileInstance.checkCurrentProfile(this.serviceProf); + + await this.profileInstance.checkCurrentProfile(this.nodeProfile); + if (this.profileInstance.validProfile === Validation.ValidationType.INVALID) { + Gui.errorMessage(vscode.l10n.t("Profile is invalid")); + return; + } if (this.isSshRequiredForProf) { - await this.setsshSession(); - if (!this.sshSession) { - this.serviceProf = undefined; + await this.getSshProfile(); + if (!this.sshProfile) { + return; + } + const cmdArgs: imperative.ICommandArguments = this.getSshCmdArgs(this.sshProfile.profile); + // create the SSH session + const sshSessCfg = zosuss.SshSession.createSshSessCfgFromArgs(cmdArgs); + imperative.ConnectionPropsForSessCfg.resolveSessCfgProps(sshSessCfg, cmdArgs); + this.sshSession = new zosuss.SshSession(sshSessCfg); + + const profileStatus = await this.profileInstance.profileValidationHelper( + this.sshProfile, + async (prof: imperative.IProfileLoaded, type: string): Promise => { + if (type !== "ssh" || prof.profile.host !== this.sshSession.ISshSession.hostname) return "unverified"; + return (await zosuss.Shell.isConnectionValid(this.sshSession)) ? "active" : "inactive"; + } + ); + + if (!this.sshSession || profileStatus !== "active") { + this.nodeProfile = undefined; ZoweLogger.error(this.unixCmdMsgs.sshSessionErrorMsg); Gui.errorMessage(this.unixCmdMsgs.sshSessionErrorMsg); return; } } - if (!cwd) { + if (!this.sshCwd) { const options: vscode.InputBoxOptions = { prompt: vscode.l10n.t("Enter the path of the directory in order to execute the command"), }; - cwd = await Gui.showInputBox(options); - if (cwd === "") { + this.sshCwd = await Gui.showInputBox(options); + if (this.sshCwd === "") { ZoweLogger.info(this.unixCmdMsgs.cwdRedirectingMsg); Gui.showMessage(this.unixCmdMsgs.cwdRedirectingMsg); } - if (cwd == undefined) { - this.serviceProf = undefined; - ZoweLogger.info(this.unixCmdMsgs.opCancelledMsg); - Gui.showMessage(this.unixCmdMsgs.opCancelledMsg); + if (this.sshCwd == undefined) { + this.nodeProfile = undefined; + ZoweLogger.info(this.operationCancelled); return; } } if (!command) { - command = await this.getQuickPick(cwd); + command = await this.getQuickPick([this.sshCwd]); } - await this.issueCommand(this.serviceProf, command, cwd); + await this.issueCommand(this.nodeProfile, command); } catch (error) { if (error.toString().includes("non-existing")) { ZoweLogger.error(error); Gui.errorMessage( vscode.l10n.t({ message: "Not implemented yet for profile of type: {0}", - args: [this.serviceProf.type], + args: [this.nodeProfile.type], comment: ["Profile type"], }) ); } else { - await AuthUtils.errorHandling(error, { apiType: ZoweExplorerApiType.Command, profile: this.serviceProf }); + await AuthUtils.errorHandling(error, { apiType: ZoweExplorerApiType.Command, profile: this.nodeProfile }); } } } - public checkForSshRequiredForAllTypes(allProfiles: imperative.IProfileLoaded[]): boolean { - const sshReqArray: boolean[] = []; - try { - allProfiles.forEach((p) => { - sshReqArray.push(ZoweExplorerApiRegister.getCommandApi(p).sshProfileRequired()); - }); - sshReqArray.every((v) => v === true); - } catch (error) { - return false; - } - } - - public async setsshSession(): Promise { - ZoweLogger.trace("UnixCommandHandler.setsshSession called."); - await this.getSshProfile(); - if (this.sshProfile) { - const cmdArgs: imperative.ICommandArguments = this.getSshCmdArgs(this.sshProfile.profile); - // create the ssh session - const sshSessCfg = zosuss.SshSession.createSshSessCfgFromArgs(cmdArgs); - imperative.ConnectionPropsForSessCfg.resolveSessCfgProps(sshSessCfg, cmdArgs); - this.sshSession = new zosuss.SshSession(sshSessCfg); - } else { - ZoweLogger.info(this.unixCmdMsgs.opCancelledMsg); - Gui.showMessage(this.unixCmdMsgs.opCancelledMsg); - } - } - - private async selectSshProfile(sshProfiles: imperative.IProfileLoaded[] = []): Promise { - ZoweLogger.trace("UnixCommandHandler.selectSshProfile called."); - let sshProfile: imperative.IProfileLoaded; - if (sshProfiles.length > 1) { - const sshProfileNamesList = sshProfiles.map((temprofile) => { - return temprofile.name; - }); - if (sshProfileNamesList.length) { - const quickPickOptions: vscode.QuickPickOptions = { - placeHolder: vscode.l10n.t("Select the SSH Profile."), - ignoreFocusOut: true, - canPickMany: false, - }; - const sesName = await Gui.showQuickPick(sshProfileNamesList, quickPickOptions); - if (sesName === undefined) { - Gui.showMessage(this.unixCmdMsgs.opCancelledMsg); - return; - } - - sshProfile = sshProfiles.filter((temprofile) => temprofile.name === sesName)[0]; - } - } else if (sshProfiles.length > 0) { - sshProfile = sshProfiles[0]; - } - return sshProfile; - } - private async getSshProfile(): Promise { - ZoweLogger.trace("UnixCommandHandler.getsshProfile called."); const profiles = await this.profileInstance.fetchAllProfilesByType("ssh"); if (!profiles.length) { ZoweLogger.error(this.unixCmdMsgs.sshProfNotFoundMsg); Gui.errorMessage(this.unixCmdMsgs.sshProfNotFoundMsg); return; } - if (profiles.length > 0) { - this.sshProfile = await this.selectSshProfile(profiles); - if (!this.sshProfile) { - return; - } - if (!(this.sshProfile.profile.host && this.sshProfile.profile.port)) { - const currentProfile = await this.profileInstance.getProfileFromConfig(this.sshProfile.name); - const filePath = currentProfile.profLoc.osLoc[0]; - await this.profileInstance.openConfigFile(filePath); - ZoweLogger.error(this.unixCmdMsgs.sshProfMissingInfoMsg); - Gui.errorMessage(this.unixCmdMsgs.sshProfMissingInfoMsg); + this.sshProfile = await this.selectServiceProfile(profiles); + if (!this.sshProfile) { + return; + } + if (!(this.sshProfile.profile.host && this.sshProfile.profile.port)) { + const currentProfile = await this.profileInstance.getProfileFromConfig(this.sshProfile.name); + const filePath = currentProfile.profLoc.osLoc?.[0]; + await this.profileInstance.openConfigFile(filePath); + ZoweLogger.error(this.unixCmdMsgs.sshProfMissingInfoMsg); + Gui.errorMessage(this.unixCmdMsgs.sshProfMissingInfoMsg); + return; + } + if (!(this.sshProfile.profile.user || this.sshProfile.profile.password) && !this.sshProfile.profile.privateKey) { + const prompted = await this.profileInstance.promptCredentials(this.sshProfile); + if (!prompted) { return; } - const baseProfile = Constants.PROFILES_CACHE.getDefaultProfile("base"); - if (baseProfile?.profile?.user && baseProfile?.profile?.password) { - this.sshProfile.profile.user = baseProfile.profile.user; - this.sshProfile.profile.password = baseProfile.profile.password; - } - if (!(this.sshProfile.profile.user || this.sshProfile.profile.password) && !this.sshProfile.profile.privateKey) { - const prompted = await this.profileInstance.promptCredentials(this.sshProfile); - if (!prompted) { - return; - } - } } } @@ -271,114 +240,19 @@ export class UnixCommandHandler extends ZoweCommandProvider { return cmdArgs; } - private async userSelectProfile(): Promise { - const allProfiles = this.profileInstance.allProfiles; - const sshReq = this.checkForSshRequiredForAllTypes(allProfiles); - const profileNamesList = ProfileManagement.getRegisteredProfileNameList(Definitions.Trees.USS); - if (profileNamesList.length) { - if (!sshReq) { - const quickPickOptions: vscode.QuickPickOptions = { - placeHolder: vscode.l10n.t("Select the profile to use to submit the Unix command"), - ignoreFocusOut: true, - canPickMany: false, - }; - const sesName = await Gui.showQuickPick(profileNamesList, quickPickOptions); - if (sesName === undefined) { - Gui.showMessage(this.unixCmdMsgs.opCancelledMsg); - return; - } - return allProfiles.find((temprofile) => temprofile.name === sesName); - } + public formatCommandLine(command: string, profile?: imperative.IProfileLoaded): string { + const prof = this.nodeProfile ?? profile; + const user: string = prof?.profile.user; + if (prof) { + return `> ${user}@${prof.name}:${this.sshCwd ?? "~"} $ ${command}`; } else { - ZoweLogger.info(this.unixCmdMsgs.noProfilesAvailableMsg); - Gui.showMessage(this.unixCmdMsgs.noProfilesAvailableMsg); + return `> ${user}:${this.sshCwd ?? "~"} $ ${command}`; } } - private async getQuickPick(cwd: string): Promise { - ZoweLogger.trace("UnixCommandHandler.getQuickPick called."); - let response = ""; - const alwaysEdit: boolean = SettingsConfig.getDirectValue(Constants.SETTINGS_COMMANDS_ALWAYS_EDIT); - if (this.history.getSearchHistory().length > 0) { - const createPick = new FilterDescriptor(UnixCommandHandler.defaultDialogText); - const items: vscode.QuickPickItem[] = this.history.getSearchHistory().map((element) => new FilterItem({ text: element })); - const quickpick = Gui.createQuickPick(); - quickpick.placeholder = alwaysEdit - ? vscode.l10n.t({ - message: "Select a Unix command to run against {0} (An option to edit will follow)", - args: [cwd], - comment: ["Current work directory"], - }) - : vscode.l10n.t({ - message: "Select a Unix command to run immediately against {0}", - args: [cwd], - comment: ["Current work directory"], - }); - - quickpick.items = [createPick, ...items]; - quickpick.ignoreFocusOut = true; - quickpick.show(); - const choice = await Gui.resolveQuickPick(quickpick); - quickpick.hide(); - if (!choice) { - this.serviceProf = undefined; - ZoweLogger.info(this.unixCmdMsgs.opCancelledMsg); - Gui.showMessage(this.unixCmdMsgs.opCancelledMsg); - return; - } - if (choice instanceof FilterDescriptor) { - if (quickpick.value) { - response = quickpick.value; - } - } else { - response = choice.label; - } - } - if (!response || alwaysEdit) { - const options2: vscode.InputBoxOptions = { - prompt: vscode.l10n.t("Enter or update the Unix command"), - value: response, - valueSelection: response ? [response.length, response.length] : undefined, - }; - // get user input - response = await Gui.showInputBox(options2); - if (!response) { - this.serviceProf = undefined; - ZoweLogger.info(this.unixCmdMsgs.opCancelledMsg); - Gui.showMessage(this.unixCmdMsgs.opCancelledMsg); - return; - } - } - return response; - } - - private async issueCommand(profile: imperative.IProfileLoaded, command: string, cwd: string): Promise { - ZoweLogger.trace("UnixCommandHandler.issueCommand called."); - try { - if (command) { - const user: string = profile.profile.user; - if (this.sshProfile) { - this.outputChannel.appendLine(`> ${user}@${this.sshProfile.name}:${cwd ? cwd : "~"}$ ${command}`); - } else { - this.outputChannel.appendLine(`> ${user}:${cwd ? cwd : "~"}$ ${command}`); - } - const submitResponse = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t("Unix command submitted."), - }, - () => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return ZoweExplorerApiRegister.getCommandApi(profile).issueUnixCommand(command, cwd, this.sshSession); - } - ); - this.outputChannel.appendLine(submitResponse); - this.outputChannel.show(true); - this.history.addSearchHistory(command); - this.serviceProf = undefined; - } - } catch (error) { - await AuthUtils.errorHandling(error, { apiType: ZoweExplorerApiType.Command, profile }); - } + public runCommand(profile: imperative.IProfileLoaded, command: string): Promise { + // Clear path and selected profile for follow up commands from the command palette + this.nodeProfile = undefined; + return ZoweExplorerApiRegister.getCommandApi(profile).issueUnixCommand(command, this.sshCwd, this.sshSession); } } diff --git a/packages/zowe-explorer/src/commands/ZoweCommandProvider.ts b/packages/zowe-explorer/src/commands/ZoweCommandProvider.ts index 7db19f3cf8..2970306b8a 100644 --- a/packages/zowe-explorer/src/commands/ZoweCommandProvider.ts +++ b/packages/zowe-explorer/src/commands/ZoweCommandProvider.ts @@ -10,7 +10,7 @@ */ import * as vscode from "vscode"; -import { IZoweTreeNode, PersistenceSchemaEnum, Validation, ZoweExplorerApiType } from "@zowe/zowe-explorer-api"; +import { Gui, imperative, IZoweTreeNode, Validation, ZoweExplorerApiType } from "@zowe/zowe-explorer-api"; import { ZowePersistentFilters } from "../tools/ZowePersistentFilters"; import { ZoweLogger } from "../tools/ZoweLogger"; import { SharedContext } from "../trees/shared/SharedContext"; @@ -19,18 +19,225 @@ import { Constants } from "../configuration/Constants"; import { IconGenerator } from "../icons/IconGenerator"; import { IconUtils } from "../icons/IconUtils"; import { AuthUtils } from "../utils/AuthUtils"; +import { ProfileManagement } from "../management/ProfileManagement"; +import { Definitions } from "../configuration/Definitions"; +import { SettingsConfig } from "../configuration/SettingsConfig"; +import { FilterDescriptor, FilterItem } from "../management/FilterManagement"; +import { ZoweTerminal } from "../tools/ZoweTerminal"; -export class ZoweCommandProvider { - // eslint-disable-next-line no-magic-numbers - private static readonly totalFilters: number = 10; +export interface ICommandProviderDialogs { + commandSubmitted: string; + searchCommand: string; + selectCommand: (args: string[]) => string; + writeCommand: (args: string[]) => string; + defaultText: string; + selectProfile: string; +} - public history: ZowePersistentFilters; +export abstract class ZoweCommandProvider { + // eslint-disable-next-line no-magic-numbers + public static readonly totalFilters: number = 10; + protected readonly operationCancelled: string = vscode.l10n.t("Operation cancelled"); + public profileInstance: Profiles; + public abstract history: ZowePersistentFilters; // Event Emitters used to notify subscribers that the refresh event has fired public mOnDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); public readonly onDidChangeTreeData: vscode.Event = this.mOnDidChangeTreeData.event; - public constructor() { - this.history = new ZowePersistentFilters(PersistenceSchemaEnum.Commands, ZoweCommandProvider.totalFilters); + public abstract dialogs: ICommandProviderDialogs; + public outputChannel: vscode.OutputChannel; + public terminal: vscode.Terminal; + public pseudoTerminal: ZoweTerminal; + + public constructor(protected terminalName: string) { + this.profileInstance = Profiles.getInstance(); + } + + public abstract formatCommandLine(command: string, profile: imperative.IProfileLoaded): string; + public abstract runCommand(profile: imperative.IProfileLoaded, command: string): Promise; + + public async issueCommand(profile: imperative.IProfileLoaded, command: string): Promise { + ZoweLogger.trace("ZoweCommandProvider.issueCommand called."); + if (profile == null || command == null) { + return; + } + try { + const iTerms = SettingsConfig.getDirectValue(Constants.SETTINGS_COMMANDS_INTEGRATED_TERMINALS) ?? true; + if (iTerms) { + this.pseudoTerminal = new ZoweTerminal( + this.terminalName, + async (command: string): Promise => { + try { + // We need to await the response, otherwise we can't catch errors thrown + this.history.addSearchHistory(command); + return await this.runCommand(profile, command); + } catch (error) { + if (error instanceof imperative.ImperativeError) { + let formattedError = ""; + formattedError += imperative.TextUtils.chalk.red( + vscode.l10n.t("Unable to perform this operation due to the following problem.") + "\n" + ); + + formattedError += imperative.TextUtils.chalk.red( + error.message.replace(/Rest API failure with HTTP\(S\) status \d\d\d\n/, "") + ); + + const responseTitle = vscode.l10n.t("Response From Service") + "\n"; + if (error.causeErrors) { + try { + const causeErrorsJson = JSON.parse(error.causeErrors); + formattedError += "\n" + imperative.TextUtils.chalk.bold.yellow(responseTitle); + formattedError += imperative.TextUtils.prettyJson(causeErrorsJson, undefined, false, ""); + } catch (parseErr) { + // causeErrors was not JSON. + const causeErrString: string = error.causeErrors.toString(); + if (causeErrString.length > 0) { + // output the text value of causeErrors + formattedError += "\n" + imperative.TextUtils.chalk.bold.yellow(responseTitle); + formattedError += causeErrString; + } + } + } + + const diagInfo: string = error.details.additionalDetails; + if (diagInfo?.length > 0) { + formattedError += imperative.TextUtils.chalk.bold.yellow(`\n${vscode.l10n.t("Diagnostic Information")}\n`); + formattedError += diagInfo; + } + + return formattedError; + } + return error.message; + } + }, + { + message: vscode.l10n.t({ + message: "Welcome to the integrated terminal for: {0}", + args: [this.terminalName], + comment: ["Terminal Name"], + }), + history: [...this.history.getSearchHistory()].reverse(), + startup: command, + formatCommandLine: (cmd: string) => this.formatCommandLine(cmd, profile), + } + ); + this.terminal = vscode.window.createTerminal({ name: `(${profile.name}) ${this.terminalName}`, pty: this.pseudoTerminal }); + this.terminal.show(); + } else { + this.outputChannel ??= Gui.createOutputChannel(this.terminalName); + this.outputChannel.appendLine(this.formatCommandLine(command, profile)); + const response = await Gui.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: this.dialogs.commandSubmitted, + }, + () => { + return this.runCommand(profile, command); + } + ); + this.outputChannel.appendLine(response); + this.outputChannel.show(true); + this.history.addSearchHistory(command); + } + } catch (error) { + await AuthUtils.errorHandling(error, { apiType: ZoweExplorerApiType.Command, profile }); + } + } + + public async selectNodeProfile(cmdTree: Definitions.Trees): Promise { + ZoweLogger.trace("ZoweCommandProvider.selectNodeProfile called."); + + const profileNamesList = ProfileManagement.getRegisteredProfileNameList(cmdTree); + if (profileNamesList.length > 0) { + const quickPickOptions: vscode.QuickPickOptions = { + placeHolder: this.dialogs.selectProfile, + ignoreFocusOut: true, + canPickMany: false, + }; + const sesName = await Gui.showQuickPick(profileNamesList, quickPickOptions); + if (sesName === undefined) { + ZoweLogger.info(this.operationCancelled); + return; + } + const profile = this.profileInstance.allProfiles.find((tempProfile) => tempProfile.name === sesName); + await this.profileInstance.checkCurrentProfile(profile); + if (this.profileInstance.validProfile === Validation.ValidationType.INVALID) { + Gui.errorMessage(vscode.l10n.t("Profile is invalid")); + return; + } + return profile; + } else { + const noProfAvailable = vscode.l10n.t("No profiles available"); + ZoweLogger.info(noProfAvailable); + Gui.showMessage(noProfAvailable); + } + } + + public async selectServiceProfile(profiles: imperative.IProfileLoaded[] = []): Promise { + ZoweLogger.trace("ZoweCommandProvider.selectServiceProfile called."); + let profile: imperative.IProfileLoaded; + if (profiles.length > 1) { + const profileNamesList = profiles.map((tempProfile) => { + return tempProfile.name; + }); + const quickPickOptions: vscode.QuickPickOptions = { + placeHolder: this.dialogs.selectProfile, + ignoreFocusOut: true, + canPickMany: false, + }; + const sesName = await Gui.showQuickPick(profileNamesList, quickPickOptions); + if (sesName === undefined) { + ZoweLogger.info(this.operationCancelled); + return; + } + profile = profiles.filter((tempProfile) => tempProfile.name === sesName)[0]; + } else if (profiles.length > 0) { + profile = profiles[0]; + } + return profile; + } + + public async getQuickPick(dialogOptions: string[]): Promise { + ZoweLogger.trace("ZoweCommandProvider.getQuickPick called."); + let response = ""; + const alwaysEdit: boolean = SettingsConfig.getDirectValue(Constants.SETTINGS_COMMANDS_ALWAYS_EDIT); + if (this.history.getSearchHistory().length > 0) { + const createPick = new FilterDescriptor(this.dialogs.defaultText); + const items: vscode.QuickPickItem[] = this.history.getSearchHistory().map((element) => new FilterItem({ text: element })); + const quickpick = Gui.createQuickPick(); + quickpick.placeholder = alwaysEdit ? this.dialogs.writeCommand(dialogOptions) : this.dialogs.selectCommand(dialogOptions); + quickpick.items = [createPick, ...items]; + quickpick.ignoreFocusOut = true; + quickpick.show(); + const choice = await Gui.resolveQuickPick(quickpick); + quickpick.hide(); + if (!choice) { + ZoweLogger.info(this.operationCancelled); + return; + } + if (choice instanceof FilterDescriptor) { + if (quickpick.value) { + response = quickpick.value; + } + } else { + response = choice.label; + } + } + if (!response || alwaysEdit) { + // manually entering a search + const options2: vscode.InputBoxOptions = { + prompt: this.dialogs.searchCommand, + value: response, + valueSelection: response ? [response.length, response.length] : undefined, + }; + // get user input + response = await Gui.showInputBox(options2); + if (!response) { + ZoweLogger.info(this.operationCancelled); + return; + } + } + return response; } /** diff --git a/packages/zowe-explorer/src/configuration/Constants.ts b/packages/zowe-explorer/src/configuration/Constants.ts index e584d01e9c..3d3784255b 100644 --- a/packages/zowe-explorer/src/configuration/Constants.ts +++ b/packages/zowe-explorer/src/configuration/Constants.ts @@ -69,6 +69,7 @@ export class Constants { public static readonly SETTINGS_DS_DEFAULT_EXTENDED = "zowe.ds.default.extended"; public static readonly SETTINGS_DS_DEFAULT_PS = "zowe.ds.default.ps"; public static readonly SETTINGS_DS_TEMPLATES = "zowe.ds.templates"; + public static readonly SETTINGS_COMMANDS_INTEGRATED_TERMINALS = "zowe.commands.useIntegratedTerminals"; public static readonly SETTINGS_COMMANDS_ALWAYS_EDIT = "zowe.commands.alwaysEdit"; public static readonly SETTINGS_AUTOMATIC_PROFILE_VALIDATION = "zowe.automaticProfileValidation"; public static readonly SETTINGS_SECURE_CREDENTIALS_ENABLED = "zowe.security.secureCredentialsEnabled"; @@ -96,7 +97,9 @@ export class Constants { "Zowe-Default-Datasets-PDS": Constants.SETTINGS_DS_DEFAULT_PDS, "Zowe-Default-Datasets-Extended": Constants.SETTINGS_DS_DEFAULT_EXTENDED, "Zowe-Default-Datasets-PS": Constants.SETTINGS_DS_DEFAULT_PS, - "Zowe Commands: History": PersistenceSchemaEnum.Commands, + "Zowe MVS Commands: History": PersistenceSchemaEnum.MvsCommands, + "Zowe TSO Commands: History": PersistenceSchemaEnum.TsoCommands, + "Zowe Unix Commands: History": PersistenceSchemaEnum.UssCommands, "Zowe Commands: Always edit": Constants.SETTINGS_COMMANDS_ALWAYS_EDIT, "Zowe-Automatic-Validation": Constants.SETTINGS_AUTOMATIC_PROFILE_VALIDATION, "Zowe-DS-Persistent": PersistenceSchemaEnum.Dataset, @@ -264,5 +267,6 @@ export class Constants { DS: "ds-panel-tab", USS: "uss-panel-tab", JOBS: "jobs-panel-tab", + CMDS: "cmds-panel-tab", }; } diff --git a/packages/zowe-explorer/src/configuration/Definitions.ts b/packages/zowe-explorer/src/configuration/Definitions.ts index 46eb078898..c69a668987 100644 --- a/packages/zowe-explorer/src/configuration/Definitions.ts +++ b/packages/zowe-explorer/src/configuration/Definitions.ts @@ -15,6 +15,9 @@ import { Types, IZoweTreeNode, imperative, ZosEncoding, IZoweTree } from "@zowe/ import type { DatasetTree } from "../trees/dataset/DatasetTree"; import type { JobTree } from "../trees/job/JobTree"; import type { USSTree } from "../trees/uss/USSTree"; +import type { MvsCommandHandler } from "../commands/MvsCommandHandler"; +import type { TsoCommandHandler } from "../commands/TsoCommandHandler"; +import type { UnixCommandHandler } from "../commands/UnixCommandHandler"; export namespace Definitions { export type LocalFileInfo = { @@ -79,6 +82,11 @@ export namespace Definitions { uss: Types.IZoweUSSTreeType; job: Types.IZoweJobTreeType; } + export interface IZoweCommandProviders { + mvs: MvsCommandHandler; + tso: TsoCommandHandler; + uss: UnixCommandHandler; + } export interface IZoweJobTreeOpts extends IZoweTreeOpts { job?: zosJobs.IJob; } diff --git a/packages/zowe-explorer/src/configuration/Profiles.ts b/packages/zowe-explorer/src/configuration/Profiles.ts index aaec1446c6..c04f1b3dba 100644 --- a/packages/zowe-explorer/src/configuration/Profiles.ts +++ b/packages/zowe-explorer/src/configuration/Profiles.ts @@ -668,6 +668,33 @@ export class Profiles extends ProfilesCache { await this.openConfigFile(filePath); } + public async profileValidationHelper(theProfile: imperative.IProfileLoaded, getStatus: (...args: unknown[]) => Promise) { + return Gui.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: vscode.l10n.t({ + message: `Validating {0} Profile.`, + args: [theProfile.name], + comment: [`The profile name`], + }), + cancellable: true, + }, + async (progress, token) => { + token.onCancellationRequested(() => { + // will be returned as undefined + Gui.showMessage( + vscode.l10n.t({ + message: `Validating {0} was cancelled.`, + args: [theProfile.name], + comment: [`The profile name`], + }) + ); + }); + return getStatus(theProfile, theProfile.type); + } + ); + } + public async validateProfiles(theProfile: imperative.IProfileLoaded): Promise { ZoweLogger.trace("Profiles.validateProfiles called."); let filteredProfile: Validation.IValidationProfile; @@ -688,30 +715,7 @@ export class Profiles extends ProfilesCache { if (filteredProfile === undefined) { try { if (getSessStatus.getStatus) { - profileStatus = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t({ - message: `Validating {0} Profile.`, - args: [theProfile.name], - comment: [`The profile name`], - }), - cancellable: true, - }, - async (progress, token) => { - token.onCancellationRequested(() => { - // will be returned as undefined - Gui.showMessage( - vscode.l10n.t({ - message: `Validating {0} was cancelled.`, - args: [theProfile.name], - comment: [`The profile name`], - }) - ); - }); - return getSessStatus.getStatus(theProfile, theProfile.type); - } - ); + profileStatus = await this.profileValidationHelper(theProfile, getSessStatus.getStatus.bind(getSessStatus)); } else { profileStatus = "unverified"; } diff --git a/packages/zowe-explorer/src/configuration/SettingsConfig.ts b/packages/zowe-explorer/src/configuration/SettingsConfig.ts index 2cc4f2c33d..c985ddeca5 100644 --- a/packages/zowe-explorer/src/configuration/SettingsConfig.ts +++ b/packages/zowe-explorer/src/configuration/SettingsConfig.ts @@ -192,7 +192,9 @@ export class SettingsConfig { PersistenceSchemaEnum.Dataset, PersistenceSchemaEnum.USS, PersistenceSchemaEnum.Job, - PersistenceSchemaEnum.Commands, + PersistenceSchemaEnum.MvsCommands, + PersistenceSchemaEnum.TsoCommands, + PersistenceSchemaEnum.UssCommands, Definitions.LocalStorageKey.CLI_LOGGER_SETTING_PRESENTED, ]; const vscodePersistentSettings = persistentSettings.filter((setting) => { diff --git a/packages/zowe-explorer/src/tools/ZoweTerminal.ts b/packages/zowe-explorer/src/tools/ZoweTerminal.ts new file mode 100644 index 0000000000..34f2661456 --- /dev/null +++ b/packages/zowe-explorer/src/tools/ZoweTerminal.ts @@ -0,0 +1,175 @@ +/** + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + * + */ + +import { imperative } from "@zowe/zowe-explorer-api"; +import * as vscode from "vscode"; + +export class ZoweTerminal implements vscode.Pseudoterminal { + public static readonly mTermX = ">"; + public static readonly Keys = { + EMPTY_LINE: `${this.mTermX} `, + CLEAR_ALL: "\x1b[2J\x1b[3J\x1b[;H", + CLEAR_LINE: `\x1b[2K\r`, + CTRL_C: "\x03", + DEL: "\x1b[P", + ENTER: "\r", + NEW_LINE: "\r\n", + UP: "\x1b[A", + DOWN: "\x1b[B", + RIGHT: "\x1b[C", + LEFT: "\x1b[D", + BACKSPACE: "\x7f", + }; + + public constructor( + terminalName: string, + private processCmd: (cmd: string) => Promise, + options?: { startup?: string; message?: string; history?: string[]; formatCommandLine?: (cmd: string) => string } + ) { + this.mTerminalName = terminalName; + this.mMessage = options?.message ?? this.mTerminalName; + this.mHistory = options?.history ?? []; + this.historyIndex = this.mHistory.length; + this.command = options?.startup ?? ""; + this.cursorPosition = this.command.length; + this.formatCommandLine = options?.formatCommandLine ?? ((cmd: string) => `${ZoweTerminal.Keys.EMPTY_LINE}${cmd}`); + } + + private mMessage: string; + protected mTerminalName: string = ""; + protected mHistory: string[]; + private historyIndex: number; + + private writeEmitter = new vscode.EventEmitter(); + protected write(text: string) { + this.writeEmitter.fire(text); + } + protected writeLine(text: string) { + this.write(text); + this.write(ZoweTerminal.Keys.NEW_LINE); + this.writeCmd(); + } + protected clearLine() { + this.write(ZoweTerminal.Keys.CLEAR_LINE); + } + protected writeCmd(cmd?: string) { + this.write(this.formatCommandLine ? this.formatCommandLine(cmd ?? this.command) : cmd ?? this.command); + } + protected refreshCmd() { + this.clearLine(); + this.writeCmd(); + if (this.command.length !== this.cursorPosition) { + this.write(`\x1B[${this.command.length - this.cursorPosition}D`); + } + } + protected clear() { + this.write(ZoweTerminal.Keys.CLEAR_ALL); + this.writeLine(this.mMessage); + } + + protected command: string; + protected formatCommandLine: (cmd: string) => string; + protected cursorPosition: number; + + public onDidWrite: vscode.Event = this.writeEmitter.event; + + private closeEmitter = new vscode.EventEmitter(); + public onDidClose?: vscode.Event = this.closeEmitter.event; + + public open(initialDimensions?: vscode.TerminalDimensions | undefined): void { + this.writeLine(imperative.TextUtils.chalk.dim.italic(this.mMessage)); + if (this.command.length > 0) { + this.handleInput(ZoweTerminal.Keys.ENTER); + } + } + + public close(): void { + this.closeEmitter.fire(); + } + + private navigateHistory(offset: number): void { + this.historyIndex = Math.max(0, Math.min(this.mHistory.length, this.historyIndex + offset)); + this.command = this.mHistory[this.historyIndex] ?? ""; + this.cursorPosition = this.command.length; + this.refreshCmd(); + } + + private moveCursor(offset: number): void { + this.cursorPosition = Math.max(0, Math.min(this.command.length, this.cursorPosition + offset)); + this.refreshCmd(); + } + + // Handle input from the terminal + public async handleInput(data: string): Promise { + switch (data) { + case ZoweTerminal.Keys.CTRL_C: + this.close(); + break; + case ZoweTerminal.Keys.UP: + this.navigateHistory(-1); + break; + case ZoweTerminal.Keys.DOWN: + this.navigateHistory(1); + break; + case ZoweTerminal.Keys.LEFT: + this.moveCursor(-1); + break; + case ZoweTerminal.Keys.RIGHT: + this.moveCursor(1); + break; + case ZoweTerminal.Keys.BACKSPACE: { + if (this.command.length === 0 || this.cursorPosition === 0) { + return; + } + this.write(ZoweTerminal.Keys.LEFT); + this.write(ZoweTerminal.Keys.DEL); + + const charArray = Array.from(this.command); + charArray.splice(this.cursorPosition - 1, 1); + this.command = charArray.join(""); + this.cursorPosition--; + break; + } + case ZoweTerminal.Keys.ENTER: { + this.write(ZoweTerminal.Keys.NEW_LINE); + const cmd = this.command; + this.command = ""; + if (cmd.length === 0) { + this.writeCmd(); + return; + } + + if (cmd[0] === ":") { + if (cmd === ":clear") { + this.clear(); + } else if (cmd === ":exit") { + this.close(); + } + } else { + const output = await this.processCmd(cmd); + this.writeLine(output.trim().split("\n").join("\r\n")); + } + this.mHistory.push(cmd); + this.historyIndex = this.mHistory.length; + this.cursorPosition = 0; + break; + } + default: { + const charArray = Array.from(this.command); + this.command = charArray.slice(0, Math.max(0, this.cursorPosition)).join("") + data + charArray.slice(this.cursorPosition).join(""); + this.cursorPosition = Math.min(Array.from(this.command).length, this.cursorPosition + Array.from(data).length); + + this.write(data); + this.refreshCmd(); + } + } + } +} diff --git a/packages/zowe-explorer/src/trees/shared/SharedHistoryView.ts b/packages/zowe-explorer/src/trees/shared/SharedHistoryView.ts index 1133cbb676..07fcabcd7b 100644 --- a/packages/zowe-explorer/src/trees/shared/SharedHistoryView.ts +++ b/packages/zowe-explorer/src/trees/shared/SharedHistoryView.ts @@ -21,17 +21,19 @@ import * as fs from "fs"; export class SharedHistoryView extends WebView { private treeProviders: Definitions.IZoweProviders; + private cmdProviders: Definitions.IZoweCommandProviders; private currentTab: string; private currentSelection: { [type: string]: string }; - public constructor(context: ExtensionContext, treeProviders: Definitions.IZoweProviders) { + public constructor(context: ExtensionContext, treeProviders: Definitions.IZoweProviders, cmdProviders?: Definitions.IZoweCommandProviders) { const label = "Edit History"; super(label, "edit-history", context, { onDidReceiveMessage: (message: object) => this.onDidReceiveMessage(message), retainContext: true, }); this.treeProviders = treeProviders; - this.currentSelection = { ds: "search", uss: "search", jobs: "search" }; + this.cmdProviders = cmdProviders; + this.currentSelection = { ds: "search", uss: "search", jobs: "search", cmds: "mvs" }; } protected async onDidReceiveMessage(message: any): Promise { @@ -44,6 +46,11 @@ export class SharedHistoryView extends WebView { ds: this.getHistoryData("ds"), uss: this.getHistoryData("uss"), jobs: this.getHistoryData("job"), + cmds: { + mvs: this.cmdProviders?.mvs.history.getSearchHistory() ?? [], + tso: this.cmdProviders?.tso.history.getSearchHistory() ?? [], + uss: this.cmdProviders?.uss.history.getSearchHistory() ?? [], + }, tab: this.currentTab, selection: this.currentSelection, }); @@ -203,6 +210,11 @@ export class SharedHistoryView extends WebView { ds: this.getHistoryData("ds"), uss: this.getHistoryData("uss"), jobs: this.getHistoryData("job"), + cmds: { + mvs: this.cmdProviders?.mvs.history.getSearchHistory() ?? [], + tso: this.cmdProviders?.tso.history.getSearchHistory() ?? [], + uss: this.cmdProviders?.uss.history.getSearchHistory() ?? [], + }, tab: this.currentTab, selection: this.currentSelection, }); diff --git a/packages/zowe-explorer/src/trees/shared/SharedInit.ts b/packages/zowe-explorer/src/trees/shared/SharedInit.ts index dafe3d0f28..9e208034e9 100644 --- a/packages/zowe-explorer/src/trees/shared/SharedInit.ts +++ b/packages/zowe-explorer/src/trees/shared/SharedInit.ts @@ -79,10 +79,16 @@ export class SharedInit { // Contribute the "Zowe Resources" view as a WebviewView panel in Zowe Explorer. context.subscriptions.push(vscode.window.registerWebviewViewProvider("zowe-resources", TableViewProvider.getInstance())); + const commandProviders: Definitions.IZoweCommandProviders = { + mvs: MvsCommandHandler.getInstance(), + tso: TsoCommandHandler.getInstance(), + uss: UnixCommandHandler.getInstance(), + }; + // Webview for editing persistent items on Zowe Explorer context.subscriptions.push( vscode.commands.registerCommand("zowe.editHistory", () => { - return new SharedHistoryView(context, providers); + return new SharedHistoryView(context, providers, commandProviders); }) ); @@ -236,27 +242,27 @@ export class SharedInit { context.subscriptions.push( vscode.commands.registerCommand("zowe.issueTsoCmd", async (node?, command?) => { if (node) { - await TsoCommandHandler.getInstance().issueTsoCommand(node.session, command, node); + await commandProviders.tso.issueTsoCommand(node.session, command, node); } else { - await TsoCommandHandler.getInstance().issueTsoCommand(); + await commandProviders.tso.issueTsoCommand(); } }) ); context.subscriptions.push( vscode.commands.registerCommand("zowe.issueUnixCmd", async (node?, command?) => { if (node) { - await UnixCommandHandler.getInstance().issueUnixCommand(node, command); + await commandProviders.uss.issueUnixCommand(node, command); } else { - await UnixCommandHandler.getInstance().issueUnixCommand(); + await commandProviders.uss.issueUnixCommand(); } }) ); context.subscriptions.push( vscode.commands.registerCommand("zowe.issueMvsCmd", async (node?, command?) => { if (node) { - await MvsCommandHandler.getInstance().issueMvsCommand(node.session, command, node); + await commandProviders.mvs.issueMvsCommand(node.session, command, node); } else { - await MvsCommandHandler.getInstance().issueMvsCommand(); + await commandProviders.mvs.issueMvsCommand(); } }) ); diff --git a/packages/zowe-explorer/src/trees/uss/USSActions.ts b/packages/zowe-explorer/src/trees/uss/USSActions.ts index ed6e4aad93..d7685ce448 100644 --- a/packages/zowe-explorer/src/trees/uss/USSActions.ts +++ b/packages/zowe-explorer/src/trees/uss/USSActions.ts @@ -375,7 +375,6 @@ export class USSActions { */ public static async pasteUss(ussFileProvider: Types.IZoweUSSTreeType, node: IZoweUSSTreeNode): Promise { ZoweLogger.trace("uss.actions.pasteUss called."); - /* eslint-disable-next-line deprecation/deprecation */ if (node.pasteUssTree == null) { await Gui.infoMessage(vscode.l10n.t("The paste operation is not supported for this node.")); return; @@ -386,7 +385,6 @@ export class USSActions { title: vscode.l10n.t("Pasting files..."), }, async () => { - /* eslint-disable-next-line deprecation/deprecation */ await node.pasteUssTree(); } ); diff --git a/packages/zowe-explorer/src/webviews/src/edit-history/App.tsx b/packages/zowe-explorer/src/webviews/src/edit-history/App.tsx index a28fe785ae..c8c044fa89 100644 --- a/packages/zowe-explorer/src/webviews/src/edit-history/App.tsx +++ b/packages/zowe-explorer/src/webviews/src/edit-history/App.tsx @@ -60,9 +60,13 @@ export function App(): JSXInternal.Element {

{l10n.t("Jobs")}

+ +

Zowe Commands

+
+ ); diff --git a/packages/zowe-explorer/src/webviews/src/edit-history/components/PersistentTable/PersistentDataPanel.tsx b/packages/zowe-explorer/src/webviews/src/edit-history/components/PersistentTable/PersistentDataPanel.tsx index b3bef8545b..3485252a49 100644 --- a/packages/zowe-explorer/src/webviews/src/edit-history/components/PersistentTable/PersistentDataPanel.tsx +++ b/packages/zowe-explorer/src/webviews/src/edit-history/components/PersistentTable/PersistentDataPanel.tsx @@ -75,6 +75,15 @@ export default function PersistentDataPanel({ type }: Readonly<{ type: Readonly< setPersistentProp(() => data[type][selection[type]]); }, [selection]); + if (type == "cmds") { + return ( + + +

Coming soon!

+
+
+ ); + } return ( diff --git a/packages/zowe-explorer/src/webviews/src/edit-history/types.ts b/packages/zowe-explorer/src/webviews/src/edit-history/types.ts index 77e6d08087..b4fcfd9198 100644 --- a/packages/zowe-explorer/src/webviews/src/edit-history/types.ts +++ b/packages/zowe-explorer/src/webviews/src/edit-history/types.ts @@ -13,6 +13,7 @@ export const panelId: { [key: string]: string } = { ds: "ds-panel-view", uss: "uss-panel-view", jobs: "jobs-panel-view", + cmds: "cmds-panel-view", }; export type DataPanelContextType = { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ab810f064..2ed67b2d57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,69 +15,69 @@ importers: specifier: ^0.0.18 version: 0.0.18 disposablestack: - specifier: ^1.1.4 - version: 1.1.5 + specifier: ^1.1.6 + version: 1.1.6 devDependencies: '@types/jest': - specifier: ^29.2.3 - version: 29.5.12 + specifier: ^29.5.14 + version: 29.5.14 '@types/mocha': - specifier: ^10.0.1 - version: 10.0.6 + specifier: ^10.0.9 + version: 10.0.9 '@types/node': - specifier: ^18.19.14 - version: 18.19.33 + specifier: ^18.19.64 + version: 18.19.64 '@types/vscode': - specifier: ^1.73.0 - version: 1.89.0 + specifier: ^1.95.0 + version: 1.95.0 '@typescript-eslint/eslint-plugin': - specifier: ^5.53.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + specifier: ^5.62.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/parser': - specifier: ^5.53.0 - version: 5.62.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^5.62.0 + version: 5.62.0(eslint@8.57.1)(typescript@5.6.3) '@vscode/l10n-dev': specifier: ^0.0.35 version: 0.0.35 '@vscode/test-electron': - specifier: ^1.6.0 + specifier: ^1.6.2 version: 1.6.2 '@vscode/vsce': - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^3.2.1 + version: 3.2.1 concurrently: specifier: ^6.5.1 version: 6.5.1 esbuild-loader: - specifier: ^4.1.0 - version: 4.1.0(webpack@5.94.0) + specifier: ^4.2.2 + version: 4.2.2(webpack@5.96.1) eslint: - specifier: ^8.34.0 - version: 8.57.0 + specifier: ^8.57.1 + version: 8.57.1 eslint-config-prettier: - specifier: ^8.6.0 - version: 8.10.0(eslint@8.57.0) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.57.1) eslint-plugin-deprecation: specifier: ^2.0.0 - version: 2.0.0(eslint@8.57.0)(typescript@5.4.5) + version: 2.0.0(eslint@8.57.1)(typescript@5.6.3) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@2.8.8) + version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.1)(prettier@2.8.8) eslint-plugin-zowe-explorer: specifier: workspace:./packages/eslint-plugin-zowe-explorer version: link:packages/eslint-plugin-zowe-explorer fork-ts-checker-webpack-plugin: specifier: ^9.0.2 - version: 9.0.2(typescript@5.4.5)(webpack@5.94.0) + version: 9.0.2(typescript@5.6.3)(webpack@5.96.1) husky: specifier: ^6.0.0 version: 6.0.0 jest: - specifier: ^29.3.1 - version: 29.7.0(@types/node@18.19.33) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.19.64) jest-html-reporter: - specifier: ^3.7.0 - version: 3.10.2(jest@29.7.0)(typescript@5.4.5) + specifier: ^3.10.2 + version: 3.10.2(jest@29.7.0)(typescript@5.6.3) jest-junit: specifier: ^15.0.0 version: 15.0.0 @@ -85,47 +85,47 @@ importers: specifier: ^3.0.5 version: 3.0.5 jest-stare: - specifier: ^2.4.1 - version: 2.5.1(@popperjs/core@2.11.8) + specifier: ^2.5.2 + version: 2.5.2(@popperjs/core@2.11.8) madge: specifier: ^7.0.0 - version: 7.0.0(typescript@5.4.5) + version: 7.0.0(typescript@5.6.3) mocha: - specifier: ^10.2.0 - version: 10.4.0 + specifier: ^10.8.2 + version: 10.8.2 mocha-junit-reporter: - specifier: ^2.2.0 - version: 2.2.1(mocha@10.4.0) + specifier: ^2.2.1 + version: 2.2.1(mocha@10.8.2) mocha-multi-reporters: specifier: ^1.5.1 - version: 1.5.1(mocha@10.4.0) + version: 1.5.1(mocha@10.8.2) node-loader: specifier: ^2.0.0 - version: 2.0.0(webpack@5.94.0) + version: 2.0.0(webpack@5.96.1) prettier: - specifier: ^2.6.0 + specifier: ^2.8.8 version: 2.8.8 rimraf: specifier: ^3.0.2 version: 3.0.2 terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.10(webpack@5.94.0) + version: 5.3.10(webpack@5.96.1) ts-jest: - specifier: ^29.0.3 - version: 29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.26.0)(jest@29.7.0)(typescript@5.6.3) tsx: - specifier: ^4.9.3 - version: 4.10.4 + specifier: ^4.19.2 + version: 4.19.2 typescript: - specifier: ^5.3.3 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 webpack: - specifier: ^5.94.0 - version: 5.94.0(webpack-cli@5.1.4) + specifier: ^5.96.1 + version: 5.96.1(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack@5.94.0) + version: 5.1.4(webpack@5.96.1) packages/eslint-plugin-zowe-explorer: devDependencies: @@ -142,20 +142,20 @@ importers: specifier: ^0.0.35 version: 0.0.35 '@zowe/core-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/imperative@8.7.0) '@zowe/secrets-for-zowe-sdk': specifier: ^8.1.2 version: 8.1.2 '@zowe/zos-files-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zos-jobs-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zosmf-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zowe-explorer-api': specifier: 3.1.0-SNAPSHOT version: link:../zowe-explorer-api @@ -234,7 +234,7 @@ importers: version: 19.0.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@18.19.33)(typescript@5.5.4) + version: 10.9.2(@types/node@22.9.0)(typescript@5.6.3) wdio-vscode-service: specifier: ^6.1.1 version: 6.1.1(webdriverio@8.40.5) @@ -251,32 +251,32 @@ importers: specifier: ^1.53.2 version: 1.89.0 '@zowe/core-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/imperative@8.7.0) '@zowe/imperative': - specifier: ^8.2.0 - version: 8.2.0 + specifier: ^8.7.0 + version: 8.7.0 '@zowe/secrets-for-zowe-sdk': specifier: ^8.1.2 version: 8.1.2 '@zowe/zos-console-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zos-files-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zos-jobs-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zos-tso-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zos-uss-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/imperative@8.7.0) '@zowe/zosmf-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) deep-object-diff: specifier: ^1.1.9 version: 1.1.9 @@ -300,14 +300,14 @@ importers: packages/zowe-explorer-ftp-extension: dependencies: '@zowe/zos-files-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zos-ftp-for-zowe-cli': specifier: ^3.0.0 - version: 3.0.0(@zowe/imperative@8.2.0) + version: 3.0.0(@zowe/imperative@8.7.0) '@zowe/zos-jobs-for-zowe-sdk': - specifier: ^8.2.0 - version: 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + specifier: ^8.7.0 + version: 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) '@zowe/zowe-explorer-api': specifier: 3.1.0-SNAPSHOT version: link:../zowe-explorer-api @@ -351,16 +351,16 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.5.0 - version: 2.8.2(@babel/core@7.25.2)(preact@10.22.0)(vite@4.5.5) + version: 2.8.2(@babel/core@7.26.0)(preact@10.22.0)(vite@4.5.5) typescript: specifier: ^5.3.3 version: 5.4.5 vite: specifier: ^4.5.5 - version: 4.5.5(@types/node@18.19.33) + version: 4.5.5(@types/node@18.19.64) vite-plugin-checker: specifier: ^0.6.4 - version: 0.6.4(eslint@8.57.0)(typescript@5.4.5)(vite@4.5.5) + version: 0.6.4(eslint@8.57.1)(typescript@5.4.5)(vite@4.5.5) vite-plugin-static-copy: specifier: ^0.17.1 version: 0.17.1(vite@4.5.5) @@ -375,15 +375,15 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: true - /@azure-rest/ai-translation-text@1.0.0-beta.1: - resolution: {integrity: sha512-h1xDrmVRbk6eAAqTHxy9Npv543cWteqgop15sVXBQhadOwzHoREn+UqMCzNfvL6/AjiInUlwNSaNQK1ANgobLA==} - engines: {node: '>=14.0.0'} + /@azure-rest/ai-translation-text@1.0.0: + resolution: {integrity: sha512-Zt1nwHdvfEzM6EVnx4cLz6GNYS5gxYWbwA3dAr6+NM9CWb3vk+p2Vy/mleU53OSeJvkzhpjXJ78qiJh42JmcXA==} + engines: {node: '>=18.0.0'} dependencies: '@azure-rest/core-client': 1.4.0 - '@azure/core-auth': 1.7.2 - '@azure/core-rest-pipeline': 1.16.0 - '@azure/logger': 1.1.2 - tslib: 2.6.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.17.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true @@ -393,36 +393,29 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.7.2 - '@azure/core-rest-pipeline': 1.16.0 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - tslib: 2.6.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.17.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true - /@azure/abort-controller@1.1.0: - resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} - engines: {node: '>=12.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - /@azure/abort-controller@2.1.2: resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: true - /@azure/core-auth@1.7.2: - resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==} + /@azure/core-auth@1.9.0: + resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.9.0 - tslib: 2.6.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 dev: true /@azure/core-client@1.9.2: @@ -430,98 +423,93 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.7.2 - '@azure/core-rest-pipeline': 1.16.0 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 - tslib: 2.6.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.17.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true - /@azure/core-rest-pipeline@1.16.0: - resolution: {integrity: sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==} + /@azure/core-rest-pipeline@1.17.0: + resolution: {integrity: sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.7.2 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true - /@azure/core-tracing@1.1.2: - resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} + /@azure/core-tracing@1.2.0: + resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: true - /@azure/core-util@1.9.0: - resolution: {integrity: sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==} + /@azure/core-util@1.11.0: + resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - tslib: 2.6.2 + tslib: 2.8.1 dev: true - /@azure/identity@4.4.1: - resolution: {integrity: sha512-DwnG4cKFEM7S3T+9u05NstXU/HN0dk45kPOinUyNKsn5VWwpXd9sbPKEg6kgJzGbm1lMuhx9o31PVbCtM5sfBA==} + /@azure/identity@4.5.0: + resolution: {integrity: sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.7.2 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.16.0 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 - '@azure/msal-browser': 3.14.0 - '@azure/msal-node': 2.13.1 + '@azure/core-rest-pipeline': 1.17.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 3.27.0 + '@azure/msal-node': 2.16.0 events: 3.3.0 jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true - /@azure/logger@1.1.2: - resolution: {integrity: sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==} + /@azure/logger@1.1.4: + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: true - /@azure/msal-browser@3.14.0: - resolution: {integrity: sha512-Un85LhOoecJ3HDTS3Uv3UWnXC9/43ZSO+Kc+anSqpZvcEt58SiO/3DuVCAe1A3I5UIBYJNMgTmZPGXQ0MVYrwA==} + /@azure/msal-browser@3.27.0: + resolution: {integrity: sha512-+b4ZKSD8+vslCtVRVetkegEhOFMLP3rxDWJY212ct+2r6jVg6OSQKc1Qz3kCoXo0FgwaXkb+76TMZfpHp8QtgA==} engines: {node: '>=0.8.0'} dependencies: - '@azure/msal-common': 14.10.0 - dev: true - - /@azure/msal-common@14.10.0: - resolution: {integrity: sha512-Zk6DPDz7e1wPgLoLgAp0349Yay9RvcjPM5We/ehuenDNsz/t9QEFI7tRoHpp/e47I4p20XE3FiDlhKwAo3utDA==} - engines: {node: '>=0.8.0'} + '@azure/msal-common': 14.16.0 dev: true - /@azure/msal-common@14.14.2: - resolution: {integrity: sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog==} + /@azure/msal-common@14.16.0: + resolution: {integrity: sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==} engines: {node: '>=0.8.0'} dev: true - /@azure/msal-node@2.13.1: - resolution: {integrity: sha512-sijfzPNorKt6+9g1/miHwhj6Iapff4mPQx1azmmZExgzUROqWTM1o3ACyxDja0g47VpowFy/sxTM/WsuCyXTiw==} + /@azure/msal-node@2.16.0: + resolution: {integrity: sha512-oww0oJTOOvPKTVXqVyxfcFVjExQKYEkKR5KM0cTG3jnzt6u/MRMx8XaK49L/bxV35r9sCHQFjNlEShad9qGSYA==} engines: {node: '>=16'} dependencies: - '@azure/msal-common': 14.14.2 + '@azure/msal-common': 14.16.0 jsonwebtoken: 9.0.2 uuid: 8.3.2 dev: true @@ -540,40 +528,36 @@ packages: picocolors: 1.0.1 dev: true - /@babel/code-frame@7.24.7: - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + /@babel/code-frame@7.26.2: + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.0 - dev: true - - /@babel/compat-data@7.24.4: - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 dev: true - /@babel/compat-data@7.25.4: - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + /@babel/compat-data@7.26.2: + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.24.5: - resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -581,22 +565,22 @@ packages: - supports-color dev: true - /@babel/core@7.25.2: - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + /@babel/core@7.26.0: + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -604,24 +588,15 @@ packages: - supports-color dev: true - /@babel/generator@7.24.5: - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: true - - /@babel/generator@7.25.6: - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + /@babel/generator@7.26.2: + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 dev: true /@babel/helper-annotate-as-pure@7.22.5: @@ -631,48 +606,17 @@ packages: '@babel/types': 7.24.5 dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.25.9: + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-compilation-targets@7.25.2: - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 - dev: true - /@babel/helper-module-imports@7.24.3: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} @@ -680,41 +624,40 @@ packages: '@babel/types': 7.24.5 dev: true - /@babel/helper-module-imports@7.24.7: - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + /@babel/helper-module-transforms@7.26.0(@babel/core@7.25.2): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color dev: true @@ -724,28 +667,9 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-simple-access@7.24.5: - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 - dev: true - - /@babel/helper-simple-access@7.24.7: - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-split-export-declaration@7.24.5: - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + /@babel/helper-plugin-utils@7.25.9: + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 dev: true /@babel/helper-string-parser@7.24.1: @@ -753,8 +677,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-string-parser@7.24.8: - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} dev: true @@ -763,38 +687,22 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.24.7: - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@babel/helper-validator-option@7.25.9: + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.24.8: - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers@7.24.5: - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + /@babel/helpers@7.26.0: + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers@7.25.6: - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 dev: true /@babel/highlight@7.24.5: @@ -807,238 +715,233 @@ packages: picocolors: 1.0.1 dev: true - /@babel/highlight@7.24.7: - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} + /@babel/parser@7.26.2: + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 + '@babel/types': 7.26.0 dev: true - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} - engines: {node: '>=6.0.0'} - hasBin: true + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/parser@7.25.6: - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} - engines: {node: '>=6.0.0'} - hasBin: true + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.25.6 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.25.2): + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.26.0): resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): + /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.25.2): - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 dev: true - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.25.2): + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.26.0): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.26.0) dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.25.2): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.26.0): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.25.2) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.26.0) '@babel/types': 7.24.5 dev: true - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@babel/runtime@7.26.0: + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: true - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 dev: true - /@babel/template@7.25.0: - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + /@babel/traverse@7.25.9: + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 - dev: true - - /@babel/traverse@7.24.5: - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - debug: 4.3.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/traverse@7.25.6: - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - debug: 4.3.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1053,13 +956,12 @@ packages: to-fast-properties: 2.0.0 dev: true - /@babel/types@7.25.6: - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + /@babel/types@7.26.0: + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 dev: true /@bcoe/v8-coverage@0.2.3: @@ -1240,8 +1142,8 @@ packages: engines: {node: '>=10.0.0'} dev: true - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + /@esbuild/aix-ppc64@0.21.5: + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -1249,6 +1151,15 @@ packages: dev: true optional: true + /@esbuild/aix-ppc64@0.23.1: + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -1258,8 +1169,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + /@esbuild/android-arm64@0.21.5: + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1267,6 +1178,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.23.1: + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -1276,8 +1196,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + /@esbuild/android-arm@0.21.5: + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1285,6 +1205,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.23.1: + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -1294,8 +1223,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + /@esbuild/android-x64@0.21.5: + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1303,6 +1232,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.23.1: + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -1312,8 +1250,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + /@esbuild/darwin-arm64@0.21.5: + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1321,6 +1259,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.23.1: + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -1330,8 +1277,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + /@esbuild/darwin-x64@0.21.5: + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1339,6 +1286,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.23.1: + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -1348,8 +1304,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + /@esbuild/freebsd-arm64@0.21.5: + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1357,6 +1313,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.23.1: + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -1366,8 +1331,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + /@esbuild/freebsd-x64@0.21.5: + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1375,6 +1340,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.23.1: + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -1384,8 +1358,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + /@esbuild/linux-arm64@0.21.5: + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1393,6 +1367,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.23.1: + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -1402,8 +1385,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + /@esbuild/linux-arm@0.21.5: + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1411,6 +1394,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.23.1: + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -1420,8 +1412,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + /@esbuild/linux-ia32@0.21.5: + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1429,6 +1421,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.23.1: + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -1438,8 +1439,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + /@esbuild/linux-loong64@0.21.5: + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1447,6 +1448,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.23.1: + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -1456,8 +1466,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + /@esbuild/linux-mips64el@0.21.5: + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1465,6 +1475,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.23.1: + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -1474,8 +1493,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + /@esbuild/linux-ppc64@0.21.5: + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1483,6 +1502,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.23.1: + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -1492,9 +1520,18 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} + /@esbuild/linux-riscv64@0.21.5: + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.23.1: + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -1510,8 +1547,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + /@esbuild/linux-s390x@0.21.5: + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1519,6 +1556,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.23.1: + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -1528,8 +1574,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + /@esbuild/linux-x64@0.21.5: + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1537,6 +1583,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.23.1: + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -1546,8 +1601,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + /@esbuild/netbsd-x64@0.21.5: + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1555,6 +1610,24 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.23.1: + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.23.1: + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -1564,8 +1637,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + /@esbuild/openbsd-x64@0.21.5: + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1573,6 +1646,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.23.1: + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -1582,8 +1664,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + /@esbuild/sunos-x64@0.21.5: + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1591,6 +1673,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.23.1: + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -1600,8 +1691,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + /@esbuild/win32-arm64@0.21.5: + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1609,6 +1700,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.23.1: + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -1618,8 +1718,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + /@esbuild/win32-ia32@0.21.5: + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1627,6 +1727,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.23.1: + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -1636,8 +1745,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + /@esbuild/win32-x64@0.21.5: + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1645,18 +1754,27 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + /@esbuild/win32-x64@0.23.1: + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@eslint-community/regexpp@4.12.1: + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -1665,7 +1783,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) espree: 7.3.1 globals: 13.24.0 ignore: 4.0.6 @@ -1682,10 +1800,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1694,8 +1812,8 @@ packages: - supports-color dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + /@eslint/js@8.57.1: + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1761,12 +1879,13 @@ packages: glob: 10.4.5 dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1775,9 +1894,10 @@ packages: /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1790,10 +1910,12 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead dev: true /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead dev: true /@isaacs/cliui@8.0.2: @@ -1828,7 +1950,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1849,14 +1971,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.33) + jest-config: 29.7.0(@types/node@18.19.64) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1884,7 +2006,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 jest-mock: 29.7.0 dev: true @@ -1911,7 +2033,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.33 + '@types/node': 18.19.64 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1944,14 +2066,14 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 18.19.33 + '@types/node': 18.19.64 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 + istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.7 @@ -1961,7 +2083,7 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color dev: true @@ -2005,7 +2127,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -2030,7 +2152,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.33 + '@types/node': 22.9.0 '@types/yargs': 15.0.19 chalk: 4.1.2 dev: true @@ -2042,8 +2164,8 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.33 - '@types/yargs': 17.0.32 + '@types/node': 18.19.64 + '@types/yargs': 17.0.33 chalk: 4.1.2 dev: true @@ -2170,7 +2292,7 @@ packages: dependencies: agent-base: 7.1.1 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.4 lru-cache: 10.4.3 socks-proxy-agent: 8.0.4 transitivePeerDependencies: @@ -2215,8 +2337,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: false - /@npmcli/package-json@5.2.0: - resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==} + /@npmcli/package-json@5.2.1: + resolution: {integrity: sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@npmcli/git': 5.0.8 @@ -2247,7 +2369,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@npmcli/node-gyp': 3.0.0 - '@npmcli/package-json': 5.2.0 + '@npmcli/package-json': 5.2.1 '@npmcli/promise-spawn': 7.0.2 node-gyp: 10.2.0 proc-log: 4.2.0 @@ -2267,18 +2389,18 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: true - /@preact/preset-vite@2.8.2(@babel/core@7.25.2)(preact@10.22.0)(vite@4.5.5): + /@preact/preset-vite@2.8.2(@babel/core@7.26.0)(preact@10.22.0)(vite@4.5.5): resolution: {integrity: sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==} peerDependencies: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.26.0) '@prefresh/vite': 2.4.5(preact@10.22.0)(vite@4.5.5) '@rollup/pluginutils': 4.2.1 - babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.25.2) + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.26.0) debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 magic-string: 0.30.5 @@ -2286,7 +2408,7 @@ packages: resolve: 1.22.8 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 4.5.5(@types/node@18.19.33) + vite: 4.5.5(@types/node@18.19.64) transitivePeerDependencies: - preact - supports-color @@ -2314,13 +2436,13 @@ packages: preact: ^10.4.0 vite: '>=2.0.0' dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.25.2 '@prefresh/babel-plugin': 0.5.1 '@prefresh/core': 1.5.2(preact@10.22.0) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.22.0 - vite: 4.5.5(@types/node@18.19.33) + vite: 4.5.5(@types/node@18.19.64) transitivePeerDependencies: - supports-color dev: true @@ -2332,6 +2454,14 @@ packages: spacetrim: 0.11.39 dev: true + /@promptbook/utils@0.69.5: + resolution: {integrity: sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==} + requiresBuild: true + dependencies: + spacetrim: 0.11.59 + dev: true + optional: true + /@puppeteer/browsers@1.9.1: resolution: {integrity: sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==} engines: {node: '>=16.3.0'} @@ -2517,46 +2647,60 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 + '@types/babel__traverse': 7.20.6 dev: true /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + dev: true + + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + dependencies: + '@babel/types': 7.26.0 dev: true - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@babel/types': 7.25.6 + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + dev: true + + /@types/eslint@9.6.1: + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} dev: true /@types/fs-extra@7.0.0: resolution: {integrity: sha512-ndoMMbGyuToTy4qB6Lex/inR98nPiNHacsgMPvy+zqMLgSxbt8VtWpDArpGp69h1fEDQHn1KB+9DWD++wgbwYA==} dependencies: - '@types/node': 18.19.33 + '@types/node': 22.9.0 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.64 dev: true /@types/http-cache-semantics@4.0.4: @@ -2579,8 +2723,8 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + /@types/jest@29.5.14: + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 @@ -2590,23 +2734,22 @@ packages: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/mocha@10.0.6: - resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} + /@types/mocha@10.0.9: + resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==} dev: true /@types/mustache@4.2.5: resolution: {integrity: sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA==} dev: true - /@types/node@18.19.33: - resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} + /@types/node@18.19.64: + resolution: {integrity: sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@22.5.2: - resolution: {integrity: sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==} - requiresBuild: true + /@types/node@22.9.0: + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} dependencies: undici-types: 6.19.8 dev: true @@ -2659,6 +2802,11 @@ packages: /@types/vscode@1.89.0: resolution: {integrity: sha512-TMfGKLSVxfGfoO8JfIE/neZqv7QLwS4nwPwL/NwMvxtAY2230H2I4Z5xx6836pmJvMAzqooRQ4pmLm7RUicP3A==} + dev: false + + /@types/vscode@1.95.0: + resolution: {integrity: sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==} + dev: true /@types/which@2.0.2: resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} @@ -2669,8 +2817,16 @@ packages: resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} requiresBuild: true dependencies: - '@types/node': 18.19.33 + '@types/node': 22.9.0 + dev: true + + /@types/ws@8.5.13: + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + requiresBuild: true + dependencies: + '@types/node': 22.9.0 dev: true + optional: true /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2681,27 +2837,20 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - /@types/yargs@17.0.33: resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: '@types/yargs-parser': 21.0.3 - dev: false /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 18.19.33 + '@types/node': 22.9.0 dev: true optional: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.3): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2712,24 +2861,24 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.6.2 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.3): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2741,10 +2890,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 - typescript: 5.4.5 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true @@ -2765,7 +2914,7 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.6.3): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2775,12 +2924,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true @@ -2795,7 +2944,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2806,17 +2955,17 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.2 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.3): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2827,51 +2976,51 @@ packages: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.3): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - eslint: 8.57.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.3): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.2 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) + eslint: 8.57.1 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -2923,10 +3072,10 @@ packages: resolution: {integrity: sha512-s6uzBXsVDSL69Z85HSqpc5dfKswQkeucY8L00t1TWzGalw7wkLQUKMRwuzqTq+AMwQKrRd7Po14cMoTcd11iDw==} hasBin: true dependencies: - '@azure-rest/ai-translation-text': 1.0.0-beta.1 - debug: 4.3.4(supports-color@8.1.1) + '@azure-rest/ai-translation-text': 1.0.0 + debug: 4.3.7(supports-color@8.1.1) deepmerge-json: 1.5.0 - glob: 10.3.15 + glob: 10.4.5 markdown-it: 14.1.0 node-html-markdown: 1.3.0 pseudo-localization: 2.4.0 @@ -3038,8 +3187,8 @@ packages: dev: true optional: true - /@vscode/vsce-sign@2.0.4: - resolution: {integrity: sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA==} + /@vscode/vsce-sign@2.0.5: + resolution: {integrity: sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q==} requiresBuild: true optionalDependencies: '@vscode/vsce-sign-alpine-arm64': 2.0.2 @@ -3053,29 +3202,29 @@ packages: '@vscode/vsce-sign-win32-x64': 2.0.2 dev: true - /@vscode/vsce@3.1.0: - resolution: {integrity: sha512-fwdfp1Ol+bZtlSGkpcd/nztfo6+SVsTOMWjZ/+a88lVtUn7gXNbSu7dbniecl5mz4vINl+oaVDVtVdGbJDApmw==} + /@vscode/vsce@3.2.1: + resolution: {integrity: sha512-AY9vBjwExakK1c0cI/3NN2Ey0EgiKLBye/fxl/ue+o4q6RZ7N+xzd1jAD6eI6eBeMVANi617+V2rxIAkDPco2Q==} engines: {node: '>= 20'} hasBin: true dependencies: - '@azure/identity': 4.4.1 - '@vscode/vsce-sign': 2.0.4 + '@azure/identity': 4.5.0 + '@vscode/vsce-sign': 2.0.5 azure-devops-node-api: 12.5.0 chalk: 2.4.2 - cheerio: 1.0.0-rc.12 - cockatiel: 3.1.3 + cheerio: 1.0.0 + cockatiel: 3.2.1 commander: 6.2.1 - form-data: 4.0.0 + form-data: 4.0.1 glob: 11.0.0 hosted-git-info: 4.1.0 - jsonc-parser: 3.2.1 + jsonc-parser: 3.3.1 leven: 3.1.0 markdown-it: 14.1.0 mime: 1.6.0 minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - semver: 7.6.2 + semver: 7.6.3 tmp: 0.2.3 typed-rest-client: 1.8.11 url-join: 4.0.1 @@ -3105,7 +3254,7 @@ packages: engines: {node: ^16.13 || >=18} hasBin: true dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@vitest/snapshot': 2.1.1 '@wdio/config': 8.40.3 '@wdio/globals': 8.40.5 @@ -3153,6 +3302,23 @@ packages: - supports-color dev: true + /@wdio/config@8.40.6: + resolution: {integrity: sha512-rHCSmrhdJf7FlidcQPDvRKRPLYjklbrdxQa6J20BxHifTO4h2v23Wrq4OqqYIcq23gf9LpZvCA/PAMiET/QdVg==} + engines: {node: ^16.13 || >=18} + requiresBuild: true + dependencies: + '@wdio/logger': 8.38.0 + '@wdio/types': 8.40.6 + '@wdio/utils': 8.40.6 + decamelize: 6.0.0 + deepmerge-ts: 5.1.0 + glob: 10.4.5 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + /@wdio/cucumber-framework@8.40.5: resolution: {integrity: sha512-JAAPP3lYWu7CFCFqu5q5wsX1hY9suyjk1lw7SNB9jfxCFHUmAkPoYMuva/JjU8WAscL58jkAIlJfGXx7lDWalA==} engines: {node: ^16.13 || >=18} @@ -3160,7 +3326,7 @@ packages: '@cucumber/cucumber': 9.5.1 '@cucumber/gherkin': 29.0.0 '@cucumber/messages': 25.0.1 - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@wdio/logger': 8.38.0 '@wdio/types': 8.40.3 '@wdio/utils': 8.40.3 @@ -3186,6 +3352,22 @@ packages: - utf-8-validate dev: true + /@wdio/globals@8.40.6: + resolution: {integrity: sha512-37llSQk4ngM6wzn8diBQ1Xik2ZZtUCU29Hr7NbfyfXahQdzIApRxNtw0B2J5XrjGX9yuO6gdyg5Kj+UuaKIo7A==} + engines: {node: ^16.13 || >=18} + requiresBuild: true + optionalDependencies: + expect-webdriverio: 4.15.4 + webdriverio: 8.40.6 + transitivePeerDependencies: + - bufferutil + - devtools + - encoding + - supports-color + - utf-8-validate + dev: true + optional: true + /@wdio/junit-reporter@8.40.3: resolution: {integrity: sha512-V3611KwLRhaPjClLDI4k+Q0zcsqg/RnuI1bUgzLorPoCNKwlQAaO5Xn61s+asU8oF438639YcxVV+mNIMCUnVA==} engines: {node: ^16.13 || >=18} @@ -3200,7 +3382,7 @@ packages: resolution: {integrity: sha512-/0RXdFU4OH/FZgRGgVYpYWfJIk5ht6VqF2hwuVtS8URBv2riDUKa+Hl+fu5Y8GUQzAs2reNPG0ES2OyNjXxugw==} engines: {node: ^16.13 || >=18} dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@wdio/logger': 8.38.0 '@wdio/repl': 8.40.3 '@wdio/runner': 8.40.5 @@ -3237,16 +3419,28 @@ packages: strip-ansi: 7.1.0 dev: true + /@wdio/logger@9.1.3: + resolution: {integrity: sha512-cumRMK/gE1uedBUw3WmWXOQ7HtB6DR8EyKQioUz2P0IJtRRpglMBdZV7Svr3b++WWawOuzZHMfbTkJQmaVt8Gw==} + engines: {node: '>=18.20.0'} + requiresBuild: true + dependencies: + chalk: 5.3.0 + loglevel: 1.9.2 + loglevel-plugin-prefix: 0.8.4 + strip-ansi: 7.1.0 + dev: true + optional: true + /@wdio/mocha-framework@8.40.3: resolution: {integrity: sha512-u8toUYRroA5MgCQZPHiQQv88RbeLjJFXSeowXQX6hwMTLurqDLfrqKtaTweFO6QJRFROeq/M0iNJbK008EXXMQ==} engines: {node: ^16.13 || >=18} dependencies: - '@types/mocha': 10.0.6 - '@types/node': 22.5.2 + '@types/mocha': 10.0.9 + '@types/node': 22.9.0 '@wdio/logger': 8.38.0 '@wdio/types': 8.40.3 '@wdio/utils': 8.40.3 - mocha: 10.4.0 + mocha: 10.8.2 transitivePeerDependencies: - supports-color dev: true @@ -3261,14 +3455,14 @@ packages: engines: {node: ^16.13 || >=18} requiresBuild: true dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 dev: true /@wdio/reporter@8.40.3: resolution: {integrity: sha512-icoUnlyIqLKgxB215OPdDTHG+hlu+U+t/sO6S9eI0ZTYBYaDIQBWVCilkUWRvgfcNSiXYo+1VlVt6waIgIHKwQ==} engines: {node: ^16.13 || >=18} dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@wdio/logger': 8.38.0 '@wdio/types': 8.40.3 diff: 5.2.0 @@ -3279,7 +3473,7 @@ packages: resolution: {integrity: sha512-5sKORwwps0fvuPDfBbBz+jm8RV2xBV4xBGOLHiad6Mpruzc7+uDwxz6ILkE+CErQhJoNdB99YOOm2foh+aO4Ww==} engines: {node: ^16.13 || >=18} dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@wdio/config': 8.40.3 '@wdio/globals': 8.40.5 '@wdio/logger': 8.38.0 @@ -3314,8 +3508,17 @@ packages: engines: {node: ^16.13 || >=18} requiresBuild: true dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 + dev: true + + /@wdio/types@8.40.6: + resolution: {integrity: sha512-ALftLri1BdsRuPrQkuW3evBNdOA5n4IkuoegOw6UE2z+R0f1YI5fHGSHNRWLnhtbOECbGyHXXqzbSxCEb+o+MA==} + engines: {node: ^16.13 || >=18} + requiresBuild: true + dependencies: + '@types/node': 22.9.0 dev: true + optional: true /@wdio/utils@8.40.3: resolution: {integrity: sha512-pv/848KGfPN3YXU4QRfTYGkAu4/lejIfoGzGpvGNDcACiVxgZhyRZkJ2xVaSnGaXzF0R7pMozrkU5/DnEhcxMg==} @@ -3339,135 +3542,158 @@ packages: - supports-color dev: true - /@webassemblyjs/ast@1.12.1: - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + /@wdio/utils@8.40.6: + resolution: {integrity: sha512-+TWfV6h+4f8gs7QiYUAWbWEylpZudQ+xkJPN34tRzPJK6dOBYEnIT/j6+1m3j39m1WPDehyYxIf1wCsrGKBxNQ==} + engines: {node: ^16.13 || >=18} + requiresBuild: true + dependencies: + '@puppeteer/browsers': 1.9.1 + '@wdio/logger': 8.38.0 + '@wdio/types': 8.40.6 + decamelize: 6.0.0 + deepmerge-ts: 5.1.0 + edgedriver: 5.6.1 + geckodriver: 4.5.1 + get-port: 7.1.0 + import-meta-resolve: 4.1.0 + locate-app: 2.5.0 + safaridriver: 0.1.2 + split2: 4.2.0 + wait-port: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /@webassemblyjs/ast@1.13.1: + resolution: {integrity: sha512-+Zp/YJMBws+tg2Nuy5jiFhwvPiSeIB0gPp1Ie/TyqFg69qJ/vRrOKQ7AsFLn3solq5/9ubkBjrGd0UcvFjFsYA==} dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-numbers': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.12.1 dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + /@webassemblyjs/floating-point-hex-parser@1.12.1: + resolution: {integrity: sha512-0vqwjuCO3Sa6pO3nfplawORkL1GUgza/H1A62SdXHSFCmAHoRcrtX/yVG3f1LuMYW951cvYRcRt6hThhz4FnCQ==} dev: true - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + /@webassemblyjs/helper-api-error@1.12.1: + resolution: {integrity: sha512-czovmKZdRk4rYauCOuMV/EImC3qyfcqyJuOYyDRYR6PZSOW37VWe26fAZQznbvKjlwJdyxLl6mIfx47Cfz8ykw==} dev: true - /@webassemblyjs/helper-buffer@1.12.1: - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + /@webassemblyjs/helper-buffer@1.13.1: + resolution: {integrity: sha512-J0gf97+D3CavG7aO5XmtwxRWMiMEuxQ6t8Aov8areSnyI5P5fM0HV0m8bE3iLfDQZBhxLCc15tRsFVOGyAJ0ng==} dev: true - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + /@webassemblyjs/helper-numbers@1.12.1: + resolution: {integrity: sha512-Vp6k5nXOMvI9dWJqDGCMvwAc8+G6tI2YziuYWqxk7XYnWHdxEJo19CGpqm/kRh86rJxwYANLGuyreARhM+C9lQ==} dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/floating-point-hex-parser': 1.12.1 + '@webassemblyjs/helper-api-error': 1.12.1 '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + /@webassemblyjs/helper-wasm-bytecode@1.12.1: + resolution: {integrity: sha512-flsRYmCqN2ZJmvAyNxZXPPFkwKoezeTUczytfBovql8cOjYTr6OTcZvku4UzyKFW0Kj+PgD+UaG8/IdX31EYWg==} dev: true - /@webassemblyjs/helper-wasm-section@1.12.1: - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + /@webassemblyjs/helper-wasm-section@1.13.1: + resolution: {integrity: sha512-lcVNbrM5Wm7867lmbU61l+R4dU7emD2X70f9V0PuicvsdVUS5vvXODAxRYGVGBAJ6rWmXMuZKjM0PoeBjAcm2A==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/ast': 1.13.1 + '@webassemblyjs/helper-buffer': 1.13.1 + '@webassemblyjs/helper-wasm-bytecode': 1.12.1 + '@webassemblyjs/wasm-gen': 1.13.1 dev: true - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + /@webassemblyjs/ieee754@1.12.1: + resolution: {integrity: sha512-fcrUCqE2dVldeVAHTWFiTiKMS9ivc5jOgB2c30zYOZnm3O54SWeMJWS/HXYK862we2AYHtf6GYuP9xG9J+5zyQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + /@webassemblyjs/leb128@1.12.1: + resolution: {integrity: sha512-jOU6pTFNf7aGm46NCrEU7Gj6cVuP55T7+kyo5TU/rCduZ5EdwMPBZwSwwzjPZ3eFXYFCmC5wZdPZN0ZWio6n4Q==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + /@webassemblyjs/utf8@1.12.1: + resolution: {integrity: sha512-zcZvnAY3/M28Of012dksIfC26qZQJlj2PQCCvxqlsRJHOYtasp+OvK8nRcg11TKzAAv3ja7Y0NEBMKAjH6ljnw==} dev: true - /@webassemblyjs/wasm-edit@1.12.1: - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + /@webassemblyjs/wasm-edit@1.13.1: + resolution: {integrity: sha512-YHnh/f4P4ggjPB+pcri8Pb2HHwCGK+B8qBE+NeEp/WTMQ7dAjgWTnLhXxUqb6WLOT25TK5m0VTCAKTYw8AKxcg==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 + '@webassemblyjs/ast': 1.13.1 + '@webassemblyjs/helper-buffer': 1.13.1 + '@webassemblyjs/helper-wasm-bytecode': 1.12.1 + '@webassemblyjs/helper-wasm-section': 1.13.1 + '@webassemblyjs/wasm-gen': 1.13.1 + '@webassemblyjs/wasm-opt': 1.13.1 + '@webassemblyjs/wasm-parser': 1.13.1 + '@webassemblyjs/wast-printer': 1.13.1 dev: true - /@webassemblyjs/wasm-gen@1.12.1: - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + /@webassemblyjs/wasm-gen@1.13.1: + resolution: {integrity: sha512-AxWiaqIeLh3c1H+8d1gPgVNXHyKP7jDu2G828Of9/E0/ovVEsh6LjX1QZ6g1tFBHocCwuUHK9O4w35kgojZRqA==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.13.1 + '@webassemblyjs/helper-wasm-bytecode': 1.12.1 + '@webassemblyjs/ieee754': 1.12.1 + '@webassemblyjs/leb128': 1.12.1 + '@webassemblyjs/utf8': 1.12.1 dev: true - /@webassemblyjs/wasm-opt@1.12.1: - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + /@webassemblyjs/wasm-opt@1.13.1: + resolution: {integrity: sha512-SUMlvCrfykC7dtWX5g4TSuMmWi9w9tK5kGIdvQMnLuvJfnFLsnAaF86FNbSBSAL33VhM/hOhx4t9o66N37IqSg==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/ast': 1.13.1 + '@webassemblyjs/helper-buffer': 1.13.1 + '@webassemblyjs/wasm-gen': 1.13.1 + '@webassemblyjs/wasm-parser': 1.13.1 dev: true - /@webassemblyjs/wasm-parser@1.12.1: - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + /@webassemblyjs/wasm-parser@1.13.1: + resolution: {integrity: sha512-8SPOcbqSb7vXHG+B0PTsJrvT/HilwV3WkJgxw34lmhWvO+7qM9xBTd9u4dn1Lb86WHpKswT5XwF277uBTHFikg==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.13.1 + '@webassemblyjs/helper-api-error': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.12.1 + '@webassemblyjs/ieee754': 1.12.1 + '@webassemblyjs/leb128': 1.12.1 + '@webassemblyjs/utf8': 1.12.1 dev: true - /@webassemblyjs/wast-printer@1.12.1: - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + /@webassemblyjs/wast-printer@1.13.1: + resolution: {integrity: sha512-q0zIfwpbFvaNkgbSzkZFzLsOs8ixZ5MSdTTMESilSAk1C3P8BKEWfbLEvIqyI/PjNpP9+ZU+/KwgfXx3T7ApKw==} dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.13.1 '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.94.0): + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.96.1): resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.94.0) + webpack: 5.96.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.96.1) dev: true - /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.94.0): + /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.96.1): resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.94.0) + webpack: 5.96.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.96.1) dev: true - /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.94.0): + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.96.1): resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} engines: {node: '>=14.15.0'} peerDependencies: @@ -3478,8 +3704,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.94.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.94.0) + webpack: 5.96.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.96.1) dev: true /@xhmikosr/archive-type@7.0.0: @@ -3569,19 +3795,26 @@ packages: requiresBuild: true dev: true - /@zowe/core-for-zowe-sdk@8.2.0(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-pNSnJXmV8/OR8X2TXVF4nor8MdlyFCfU4WzPmtqlrpC+prwOvVMRbHpkS6CxibHh6O457L/dBEtBaQkEh46gBw==} + /@zip.js/zip.js@2.7.53: + resolution: {integrity: sha512-G6Bl5wN9EXXVaTUIox71vIX5Z454zEBe+akKpV4m1tUboIctT5h7ID3QXCJd/Lfy2rSvmkTmZIucf1jGRR4f5A==} + engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} + requiresBuild: true + dev: true + optional: true + + /@zowe/core-for-zowe-sdk@8.7.0(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-Yy0V588jdLwyrTQMBMzLt46dhg2xw0od2IdfyGCyfD2AGOXbrC9Q4V0LpGl7KAffCNV2eGEOXrkmHBuliXlzUg==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/imperative': 8.2.0 + '@zowe/imperative': 8.7.0 comment-json: 4.2.5 string-width: 4.2.3 dev: false - /@zowe/imperative@8.2.0: - resolution: {integrity: sha512-7noMZFgLe6gLeWGkt69Wyy5LOuo4mM9VClWpJibhCxkQp0L8KOz8TaW4wTu9Ze9gVm2bheE0rK3Nuv52Vaop4g==} + /@zowe/imperative@8.7.0: + resolution: {integrity: sha512-FQIaNiQo3qoX/JMESCk3PJmet/0HUxnKm6QnI5xkvECjW+B22NNfq+lL3YMuYJ/xWUdTvBq0WuSY5dMBypmiow==} engines: {node: '>=18.12.0'} dependencies: '@types/yargs': 17.0.33 @@ -3631,82 +3864,82 @@ packages: requiresBuild: true dev: false - /@zowe/zos-console-for-zowe-sdk@8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-9nW4UlrXRGLJkzDfWIhw6qu058eo1TaeuDkyd7XtRHbwm6fy4UCgWsalhoSqJsrTRsk9rEVtQklrxbTzbyHkMQ==} + /@zowe/zos-console-for-zowe-sdk@8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-ePcP+x1kx6v2DOUxZnxKCTWN08ZTSyTQQ4v46iGkOna0kTZNLTytDyYvjsZIhWLdWbztqjIBcemjtav7mEiZwA==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/core-for-zowe-sdk': ^8.0.0 '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/core-for-zowe-sdk': 8.2.0(@zowe/imperative@8.2.0) - '@zowe/imperative': 8.2.0 + '@zowe/core-for-zowe-sdk': 8.7.0(@zowe/imperative@8.7.0) + '@zowe/imperative': 8.7.0 dev: false - /@zowe/zos-files-for-zowe-sdk@8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-KRcSjbzOPZBo/Yvp1sOc7v1mirTJV8IuHAotSLEWCF1YTXv5e09w1O9T3IctmYDFUi32/bmlCLsK13HKNUwdQw==} + /@zowe/zos-files-for-zowe-sdk@8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-HD5BMmw9AzDC0uU4NtbGRwZDWGKYG2pdgFc0sDKE54OQjL2WOq8btvzMIcRuHBgAkc8T+DpHkIeIv0+SkRVy0w==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/core-for-zowe-sdk': ^8.0.0 '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/core-for-zowe-sdk': 8.2.0(@zowe/imperative@8.2.0) - '@zowe/imperative': 8.2.0 + '@zowe/core-for-zowe-sdk': 8.7.0(@zowe/imperative@8.7.0) + '@zowe/imperative': 8.7.0 lodash: 4.17.21 minimatch: 9.0.5 dev: false - /@zowe/zos-ftp-for-zowe-cli@3.0.0(@zowe/imperative@8.2.0): + /@zowe/zos-ftp-for-zowe-cli@3.0.0(@zowe/imperative@8.7.0): resolution: {integrity: sha512-lNt4t4VJMvnnjQXXusw5N5w5nVysbKZVSD+c7wvj/RJt6ceSV2aMH7QPeiyvTE0FEFErCkjCRl2AxeVtBkn82Q==} peerDependencies: '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/imperative': 8.2.0 + '@zowe/imperative': 8.7.0 zos-node-accessor: 2.0.11 dev: false - /@zowe/zos-jobs-for-zowe-sdk@8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-Hjh1r9PaJhyeubxcIjigkqTkYQ04dWPrcO4a5mWwkwRhgBIgSJU17xEenWv2+QrYbSEtiz//e3p6Y2sCvgAEKQ==} + /@zowe/zos-jobs-for-zowe-sdk@8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-nV5qCP+JEJSlRqxzGLV1GSvqpNGZ+hvpjLZdQdXqxWNVEVsTh65ncyyPz9ew3/RapoSQRU4yyT5Hwy1ZclhDWQ==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/core-for-zowe-sdk': ^8.0.0 '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/core-for-zowe-sdk': 8.2.0(@zowe/imperative@8.2.0) - '@zowe/imperative': 8.2.0 - '@zowe/zos-files-for-zowe-sdk': 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + '@zowe/core-for-zowe-sdk': 8.7.0(@zowe/imperative@8.7.0) + '@zowe/imperative': 8.7.0 + '@zowe/zos-files-for-zowe-sdk': 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) dev: false - /@zowe/zos-tso-for-zowe-sdk@8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-xY9VgGxsI1PGoBogIz/lw78s6+AvJmy1YfjZGpCWygy/0LgOj/A/Uk03Dusk0l+vVCn/XXLXgIl1NwU3AjcBuw==} + /@zowe/zos-tso-for-zowe-sdk@8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-BPxs/mxYRO1DXXDSIM2r9nYovKSp/AXTPxwbnIpFwd5vKsWWi8pGUfQsQkCT0cjSeMbMpZLO6ZYTT3/pftP12g==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/core-for-zowe-sdk': ^8.0.0 '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/core-for-zowe-sdk': 8.2.0(@zowe/imperative@8.2.0) - '@zowe/imperative': 8.2.0 - '@zowe/zosmf-for-zowe-sdk': 8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0) + '@zowe/core-for-zowe-sdk': 8.7.0(@zowe/imperative@8.7.0) + '@zowe/imperative': 8.7.0 + '@zowe/zosmf-for-zowe-sdk': 8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0) dev: false - /@zowe/zos-uss-for-zowe-sdk@8.2.0(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-fHsWjHaE9zPnDfdBH1MEuiN/mbeWDtdRECn0hbvC4ZrYfOyux54gr4wdN6F4sGr6YmHqu5OjfpXgyIhPskg8Pw==} + /@zowe/zos-uss-for-zowe-sdk@8.7.0(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-b31NxcKGq38cgLfROLLFqb+2fd8GELOTg2MU7MryI/6ywwBmjbkhqpfElcI9iUhFCikxZ6Az3UDwTyXv3E5yFg==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/imperative': 8.2.0 - ssh2: 1.15.0 + '@zowe/imperative': 8.7.0 + ssh2: 1.16.0 dev: false - /@zowe/zosmf-for-zowe-sdk@8.2.0(@zowe/core-for-zowe-sdk@8.2.0)(@zowe/imperative@8.2.0): - resolution: {integrity: sha512-h5n5wS7UX5cai2xeTf+M2bwMPm6/1u9P/7X+CjefqhOjys9ujurJCFzgUPYY6Xuq7SrCewVXgaYWQ0DO0nrWmA==} + /@zowe/zosmf-for-zowe-sdk@8.7.0(@zowe/core-for-zowe-sdk@8.7.0)(@zowe/imperative@8.7.0): + resolution: {integrity: sha512-SeWY+xMX/Z91zeTiPRGFwydYBZ7PcGdwD3gGO2tGfSpKKaG9w6b23gQZ3seAeDpbgamLsUBDmD8cMeJilcElfw==} engines: {node: '>=18.12.0'} peerDependencies: '@zowe/core-for-zowe-sdk': ^8.0.0 '@zowe/imperative': ^8.0.0 dependencies: - '@zowe/core-for-zowe-sdk': 8.2.0(@zowe/imperative@8.2.0) - '@zowe/imperative': 8.2.0 + '@zowe/core-for-zowe-sdk': 8.7.0(@zowe/imperative@8.7.0) + '@zowe/imperative': 8.7.0 dev: false /abbrev@1.1.1: @@ -3729,14 +3962,6 @@ packages: resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} dev: true - /acorn-import-attributes@1.9.5(acorn@8.11.3): - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.11.3 - dev: true - /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3745,12 +3970,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.14.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.14.0 dev: true /acorn-walk@8.3.2: @@ -3770,6 +3995,12 @@ packages: hasBin: true dev: true + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /ag-charts-types@10.0.2: resolution: {integrity: sha512-Nxo5slHOXlaeg0gRIsVnovAosQzzlYfWJtdDy0Aq/VvpJru/PJ+5i2c9aCyEhgRxhBjImsoegwkgRj7gNOWV6Q==} dev: false @@ -3796,7 +4027,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -3865,11 +4096,6 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -4044,7 +4270,7 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: true /astral-regex@2.0.0: @@ -4061,6 +4287,10 @@ packages: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true @@ -4095,17 +4325,17 @@ packages: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} dev: true - /babel-jest@29.7.0(@babel/core@7.25.2): + /babel-jest@29.7.0(@babel/core@7.26.0): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.25.2) + babel-preset-jest: 29.6.3(@babel/core@7.26.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -4117,7 +4347,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -4130,49 +4360,52 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 + '@types/babel__traverse': 7.20.6 dev: true - /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.25.2): + /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.26.0): resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} peerDependencies: '@babel/core': ^7.12.10 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.25.2): + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.26.0): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) dev: true /balanced-match@1.0.2: @@ -4184,8 +4417,14 @@ packages: dev: true optional: true - /bare-fs@2.3.3: - resolution: {integrity: sha512-7RYKL+vZVCyAsMLi5SPu7QGauGGT8avnP/HO571ndEuV4MYdGXvLhtW67FuLPeEI8EiIY7zbbRR9x7x7HU0kgw==} + /bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + requiresBuild: true + dev: true + optional: true + + /bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} requiresBuild: true dependencies: bare-events: 2.4.2 @@ -4306,26 +4545,15 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001620 - electron-to-chromium: 1.4.773 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) - dev: true - - /browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + /browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001655 - electron-to-chromium: 1.5.13 + caniuse-lite: 1.0.30001677 + electron-to-chromium: 1.5.52 node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + update-browserslist-db: 1.1.1(browserslist@4.24.2) dev: true /bs-logger@0.2.6: @@ -4450,12 +4678,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001620: - resolution: {integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==} - dev: true - - /caniuse-lite@1.0.30001655: - resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} + /caniuse-lite@1.0.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} dev: true /capital-case@1.0.4: @@ -4506,8 +4730,8 @@ packages: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true - /chart.js@4.4.3: - resolution: {integrity: sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==} + /chart.js@4.4.6: + resolution: {integrity: sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==} engines: {pnpm: '>=8'} dependencies: '@kurkle/color': 0.3.2 @@ -4524,32 +4748,21 @@ packages: domutils: 3.1.0 dev: true - /cheerio@1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} - engines: {node: '>= 6'} + /cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 domutils: 3.1.0 - htmlparser2: 8.0.2 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.20.1 + whatwg-mimetype: 4.0.0 dev: true /chokidar@3.6.0: @@ -4578,8 +4791,8 @@ packages: engines: {node: '>=10'} dev: false - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} dev: true @@ -4603,8 +4816,8 @@ packages: engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.3.1: - resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + /cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} dev: true /class-transformer@0.5.1: @@ -4703,8 +4916,8 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /cockatiel@3.1.3: - resolution: {integrity: sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==} + /cockatiel@3.2.1: + resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} engines: {node: '>=16'} dev: true @@ -4820,7 +5033,7 @@ packages: date-fns: 2.30.0 lodash: 4.17.21 rxjs: 6.6.7 - spawn-command: 0.0.2-1 + spawn-command: 0.0.2 supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 16.2.0 @@ -4862,7 +5075,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig@8.3.6(typescript@5.4.5): + /cosmiconfig@8.3.6(typescript@5.6.3): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -4875,7 +5088,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.4.5 + typescript: 5.6.3 dev: true /cpu-features@0.0.10: @@ -4884,7 +5097,7 @@ packages: requiresBuild: true dependencies: buildcheck: 0.0.6 - nan: 2.20.0 + nan: 2.22.0 dev: false optional: true @@ -4902,7 +5115,7 @@ packages: readable-stream: 4.5.2 dev: true - /create-jest@29.7.0(@types/node@18.19.33): + /create-jest@29.7.0(@types/node@18.19.64): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4911,7 +5124,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.19.33) + jest-config: 29.7.0(@types/node@18.19.64) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5015,7 +5228,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 dev: true /date-format@4.0.14: @@ -5053,6 +5266,18 @@ packages: dependencies: ms: 2.1.2 + /debug@4.3.7(supports-color@8.1.1): + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + supports-color: 8.1.1 + /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -5173,7 +5398,7 @@ packages: commander: 10.0.1 filing-cabinet: 4.2.0 precinct: 11.0.5 - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true @@ -5226,8 +5451,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dependencies: is-url: 1.2.4 - postcss: 8.4.38 - postcss-values-parser: 6.0.2(postcss@8.4.38) + postcss: 8.4.47 + postcss-values-parser: 6.0.2(postcss@8.4.47) dev: true /detective-sass@5.0.3: @@ -5255,10 +5480,10 @@ packages: resolution: {integrity: sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw==} engines: {node: ^14.14.0 || >=16.0.0} dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) ast-module-types: 5.0.0 node-source-walk: 6.0.2 - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true @@ -5273,6 +5498,12 @@ packages: requiresBuild: true dev: true + /devtools-protocol@0.0.1359167: + resolution: {integrity: sha512-f/9PeTaSH3weS/WAwrQb5/s9R3KMOeTGe+Jkhg5952yInub7iDPjdlzRdrDgpLZfxHbTrBuG9aUkAMM+ocVkXQ==} + requiresBuild: true + dev: true + optional: true + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5302,11 +5533,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true - /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -5327,8 +5553,8 @@ packages: path-type: 4.0.0 dev: true - /disposablestack@1.1.5: - resolution: {integrity: sha512-IdFBDMZxddlECKNUyMZ/ja1BkTGbhvtWGZ4lQ1/BotTXN/0Tz3as5AL/pu/z3xYAZl/JtQleUf7JBQf1+Ehtdg==} + /disposablestack@1.1.6: + resolution: {integrity: sha512-bah1d3fXuUrtjWEkS627JTKLejcozm69OVcHgjKBbnwmN2WkHlqVeH3caFmkaEZ6+lIEsIXmz9NLPK+coJFO5w==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -5433,15 +5659,11 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.9.1 - dev: true - - /electron-to-chromium@1.4.773: - resolution: {integrity: sha512-87eHF+h3PlCRwbxVEAw9KtK3v7lWfc/sUDr0W76955AdYTG4bV/k0zrl585Qnj/skRMH2qOSiE+kqMeOQ+LOpw==} + jake: 10.9.2 dev: true - /electron-to-chromium@1.5.13: - resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + /electron-to-chromium@1.5.52: + resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} dev: true /emittery@0.13.1: @@ -5464,6 +5686,13 @@ packages: engines: {node: '>= 4'} dev: true + /encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + dev: true + /encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} requiresBuild: true @@ -5509,8 +5738,8 @@ packages: engines: {node: '>=6'} dev: false - /envinfo@7.13.0: - resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} + /envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} engines: {node: '>=4'} hasBin: true dev: true @@ -5566,10 +5795,10 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 @@ -5593,8 +5822,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - /es-module-lexer@1.5.2: - resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} dev: true /es-object-atoms@1.0.0: @@ -5626,15 +5855,15 @@ packages: resolution: {integrity: sha512-eNJh3zF1KmAHRYd1D8rFi1cMFMCjrC6tumBfwuuZdSur97mED/ifyeBoGzxS11L4owCMx3XSmWTo6oxJQkdGng==} dev: false - /esbuild-loader@4.1.0(webpack@5.94.0): - resolution: {integrity: sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==} + /esbuild-loader@4.2.2(webpack@5.96.1): + resolution: {integrity: sha512-Mdq/A1L8p37hkibp8jGFwuQTDSWhDmlueAefsrCPRwNWThEOlQmIglV7Gd6GE2mO5bt7ksfxKOMwkuY7jjVTXg==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 dependencies: - esbuild: 0.20.2 - get-tsconfig: 4.7.5 + esbuild: 0.21.5 + get-tsconfig: 4.8.1 loader-utils: 2.0.4 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.96.1(webpack-cli@5.1.4) webpack-sources: 1.4.3 dev: true @@ -5668,35 +5897,67 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + /esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + dev: true + + /esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 dev: true /escalade@3.1.2: @@ -5744,31 +6005,31 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@8.10.0(eslint@8.57.0): + /eslint-config-prettier@8.10.0(eslint@8.57.1): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 dev: true - /eslint-plugin-deprecation@2.0.0(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-deprecation@2.0.0(eslint@8.57.1)(typescript@5.6.3): resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: ^4.2.4 || ^5.0.0 dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - tslib: 2.6.2 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 + tslib: 2.8.1 + tsutils: 3.21.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@2.8.8): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.1)(prettier@2.8.8): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5779,8 +6040,8 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.57.0 - eslint-config-prettier: 8.10.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-config-prettier: 8.10.0(eslint@8.57.1) prettier: 2.8.8 prettier-linter-helpers: 1.0.0 dev: true @@ -5826,6 +6087,7 @@ packages: /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: '@babel/code-frame': 7.12.11 @@ -5834,7 +6096,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -5842,7 +6104,7 @@ packages: eslint-utils: 2.1.0 eslint-visitor-keys: 2.1.0 espree: 7.3.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -5862,7 +6124,7 @@ packages: optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.6.2 + semver: 7.6.3 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 table: 6.8.2 @@ -5872,29 +6134,30 @@ packages: - supports-color dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + /eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -5902,7 +6165,7 @@ packages: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -5932,8 +6195,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 dev: true @@ -5942,8 +6205,8 @@ packages: engines: {node: '>=4'} hasBin: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -6040,7 +6303,7 @@ packages: jest-matcher-utils: 29.7.0 lodash.isequal: 4.5.0 optionalDependencies: - '@wdio/globals': 8.40.5 + '@wdio/globals': 8.40.6 '@wdio/logger': 8.38.0 webdriverio: 8.40.5 transitivePeerDependencies: @@ -6095,7 +6358,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.6 + debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -6307,7 +6570,7 @@ packages: sass-lookup: 5.0.1 stylus-lookup: 5.0.1 tsconfig-paths: 4.2.0 - typescript: 5.5.4 + typescript: 5.6.3 dev: true /fill-range@7.1.1: @@ -6378,43 +6641,34 @@ packages: is-callable: 1.2.7 dev: false - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - dev: true - - /foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - requiresBuild: true dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.4.5)(webpack@5.94.0): + /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.3)(webpack@5.96.1): resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} peerDependencies: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.2 chalk: 4.1.2 chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.6.3) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.6.2 + semver: 7.6.3 tapable: 2.2.1 - typescript: 5.4.5 - webpack: 5.94.0(webpack-cli@5.1.4) + typescript: 5.6.3 + webpack: 5.96.1(webpack-cli@5.1.4) dev: true /form-data-encoder@2.1.4: @@ -6422,8 +6676,8 @@ packages: engines: {node: '>= 14.17'} dev: true - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + /form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 @@ -6517,6 +6771,7 @@ packages: /fstream@1.0.12: resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} engines: {node: '>=0.6'} + deprecated: This package is no longer supported. dependencies: graceful-fs: 4.2.11 inherits: 2.0.4 @@ -6578,6 +6833,25 @@ packages: - supports-color dev: true + /geckodriver@4.5.1: + resolution: {integrity: sha512-lGCRqPMuzbRNDWJOQcUqhNqPvNsIFu6yzXF8J/6K3WCYFd2r5ckbeF7h1cxsnjA7YLSEiWzERCt6/gjZ3tW0ug==} + engines: {node: ^16.13 || >=18 || >=20} + hasBin: true + requiresBuild: true + dependencies: + '@wdio/logger': 9.1.3 + '@zip.js/zip.js': 2.7.53 + decamelize: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + node-fetch: 3.3.2 + tar-fs: 3.0.6 + which: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -6638,7 +6912,7 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: - pump: 3.0.0 + pump: 3.0.2 dev: true /get-stream@6.0.1: @@ -6668,8 +6942,8 @@ packages: get-intrinsic: 1.2.4 dev: false - /get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -6680,7 +6954,7 @@ packages: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.6 + debug: 4.3.4(supports-color@8.1.1) fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -6709,27 +6983,15 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.15: - resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} - engines: {node: '>=16 || 14 >=14.18'} - hasBin: true - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.1 - path-scurry: 1.11.1 - dev: true - /glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.0 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 /glob@11.0.0: @@ -6737,11 +6999,11 @@ packages: engines: {node: 20 || >=22} hasBin: true dependencies: - foreground-child: 3.2.1 - jackspeak: 4.0.1 + foreground-child: 3.3.0 + jackspeak: 4.0.2 minimatch: 10.0.1 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 2.0.0 dev: true @@ -6752,7 +7014,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.0.8 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -6782,6 +7044,7 @@ packages: /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6824,7 +7087,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -7000,8 +7263,8 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + /htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 @@ -7029,7 +7292,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -7039,7 +7302,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7056,7 +7319,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -7066,7 +7329,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -7079,6 +7342,7 @@ packages: debug: 4.3.6 transitivePeerDependencies: - supports-color + dev: true /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -7108,8 +7372,6 @@ packages: requiresBuild: true dependencies: safer-buffer: 2.1.2 - dev: false - optional: true /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -7132,8 +7394,8 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true @@ -7149,8 +7411,8 @@ packages: resolve-from: 4.0.0 dev: true - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true dependencies: @@ -7545,8 +7807,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.25.2 - '@babel/parser': 7.25.6 + '@babel/core': 7.26.0 + '@babel/parser': 7.26.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -7554,15 +7816,15 @@ packages: - supports-color dev: true - /istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/core': 7.26.0 + '@babel/parser': 7.26.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: true @@ -7580,7 +7842,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -7595,15 +7857,6 @@ packages: istanbul-lib-report: 3.0.1 dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true - /jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} requiresBuild: true @@ -7612,21 +7865,19 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jackspeak@4.0.1: - resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + /jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} engines: {node: 20 || >=22} dependencies: '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 dev: true - /jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true dependencies: - async: 3.2.5 + async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 @@ -7649,7 +7900,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -7670,7 +7921,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@18.19.33): + /jest-cli@29.7.0(@types/node@18.19.64): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7684,10 +7935,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.33) + create-jest: 29.7.0(@types/node@18.19.64) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.33) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@18.19.64) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -7698,7 +7949,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@18.19.33): + /jest-config@29.7.0(@types/node@18.19.64): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7710,11 +7961,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 - babel-jest: 29.7.0(@babel/core@7.25.2) + '@types/node': 18.19.64 + babel-jest: 29.7.0(@babel/core@7.26.0) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -7772,7 +8023,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -7787,7 +8038,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.33 + '@types/node': 18.19.64 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -7800,7 +8051,7 @@ packages: fsevents: 2.3.3 dev: true - /jest-html-reporter@3.10.2(jest@29.7.0)(typescript@5.4.5): + /jest-html-reporter@3.10.2(jest@29.7.0)(typescript@5.6.3): resolution: {integrity: sha512-XRBa5ylHPUQoo8aJXEEdKsTruieTdlPbRktMx9WG9evMTxzJEKGFMaw5x+sQxJuClWdNR72GGwbOaz+6HIlksA==} engines: {node: '>=4.8.3'} peerDependencies: @@ -7810,10 +8061,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 dateformat: 3.0.2 - jest: 29.7.0(@types/node@18.19.33) + jest: 29.7.0(@types/node@18.19.64) mkdirp: 1.0.4 strip-ansi: 6.0.1 - typescript: 5.4.5 + typescript: 5.6.3 xmlbuilder: 15.0.0 dev: true @@ -7849,7 +8100,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -7872,7 +8123,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 jest-util: 29.7.0 dev: true @@ -7927,7 +8178,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -7958,9 +8209,9 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 chalk: 4.1.2 - cjs-module-lexer: 1.3.1 + cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -7988,15 +8239,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.25.2 - '@babel/generator': 7.25.6 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.25.2) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.25.2) - '@babel/types': 7.25.6 + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -8007,24 +8258,24 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: true - /jest-stare@2.5.1(@popperjs/core@2.11.8): - resolution: {integrity: sha512-++3JWdY2zJNPFCN6ao1oeW0Qg8oKVYT9XaMUr8RaNDHDGKOQMNjmMrVz9E/4E43ZDU2mPTtk9U8pS+KjSuxPKg==} + /jest-stare@2.5.2(@popperjs/core@2.11.8): + resolution: {integrity: sha512-dvxHXOsiJlvBi0n2dK9pz6RWFTdPB6njc2ZoMpyjmWI+aIL+X1W8OW5mTm1pkv/quy2ocKO/G+GsTe7Bv07xkQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/jest': 29.5.12 + '@types/jest': 29.5.14 ansi-parser: 3.2.10 bootstrap: 5.3.3(@popperjs/core@2.11.8) chalk: 4.1.2 - chart.js: 4.4.3 + chart.js: 4.4.6 diff2html: 3.4.48 holderjs: 2.9.9 jquery: 3.7.1 @@ -8044,7 +8295,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.19.33 + '@types/node': 22.9.0 chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 @@ -8056,7 +8307,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8081,7 +8332,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.33 + '@types/node': 18.19.64 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -8093,7 +8344,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.64 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -8102,13 +8353,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.64 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@18.19.33): + /jest@29.7.0(@types/node@18.19.64): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -8120,8 +8371,8 @@ packages: dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.33) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@18.19.64) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -8153,9 +8404,9 @@ packages: /jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true dev: true @@ -8203,6 +8454,10 @@ packages: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true + /jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + dev: true + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -8237,7 +8492,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.2 + semver: 7.6.3 dev: true /jszip@3.10.1: @@ -8413,6 +8668,16 @@ packages: userhome: 1.0.0 dev: true + /locate-app@2.5.0: + resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} + requiresBuild: true + dependencies: + '@promptbook/utils': 0.69.5 + type-fest: 4.26.0 + userhome: 1.0.1 + dev: true + optional: true + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -8562,6 +8827,13 @@ packages: requiresBuild: true dev: true + /loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + requiresBuild: true + dev: true + optional: true + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -8587,8 +8859,8 @@ packages: /lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - /lru-cache@11.0.1: - resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} + /lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} engines: {node: 20 || >=22} dev: true @@ -8615,7 +8887,7 @@ packages: engines: {node: '>=12'} dev: true - /madge@7.0.0(typescript@5.4.5): + /madge@7.0.0(typescript@5.6.3): resolution: {integrity: sha512-x9eHkBWoCJ2B8yGesWf8LRucarkbH5P3lazqgvmxe4xn5U2Meyfu906iG9mBB1RnY/f4D+gtELWdiz1k6+jAZA==} engines: {node: '>=14'} hasBin: true @@ -8628,7 +8900,7 @@ packages: chalk: 4.1.2 commander: 7.2.0 commondir: 1.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) dependency-tree: 10.0.9 ora: 5.4.1 pluralize: 8.0.0 @@ -8637,7 +8909,7 @@ packages: rc: 1.2.8 stream-to-array: 2.3.0 ts-graphviz: 1.8.2 - typescript: 5.4.5 + typescript: 5.6.3 walkdir: 0.4.1 transitivePeerDependencies: - supports-color @@ -8667,7 +8939,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.6.2 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -8686,7 +8958,7 @@ packages: minipass-fetch: 3.0.5 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 - negotiator: 0.6.3 + negotiator: 0.6.4 proc-log: 4.2.0 promise-retry: 2.0.1 ssri: 10.0.6 @@ -8846,13 +9118,6 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch@5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -8988,58 +9253,58 @@ packages: obliterator: 2.0.4 dev: true - /mocha-junit-reporter@2.2.1(mocha@10.4.0): + /mocha-junit-reporter@2.2.1(mocha@10.8.2): resolution: {integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==} peerDependencies: mocha: '>=2.2.5' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) md5: 2.3.0 mkdirp: 3.0.1 - mocha: 10.4.0 + mocha: 10.8.2 strip-ansi: 6.0.1 xml: 1.0.1 transitivePeerDependencies: - supports-color dev: true - /mocha-multi-reporters@1.5.1(mocha@10.4.0): + /mocha-multi-reporters@1.5.1(mocha@10.8.2): resolution: {integrity: sha512-Yb4QJOaGLIcmB0VY7Wif5AjvLMUFAdV57D2TWEva1Y0kU/3LjKpeRVmlMIfuO1SVbauve459kgtIizADqxMWPg==} engines: {node: '>=6.0.0'} peerDependencies: mocha: '>=3.1.2' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) lodash: 4.17.21 - mocha: 10.4.0 + mocha: 10.8.2 transitivePeerDependencies: - supports-color dev: true - /mocha@10.4.0: - resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} + /mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} engines: {node: '>= 14.0.0'} hasBin: true dependencies: - ansi-colors: 4.1.1 + ansi-colors: 4.1.3 browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.0.0 + chokidar: 3.6.0 + debug: 4.3.7(supports-color@8.1.1) + diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 8.1.0 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 - minimatch: 5.0.1 + minimatch: 5.1.6 ms: 2.1.3 - serialize-javascript: 6.0.0 + serialize-javascript: 6.0.2 strip-json-comments: 3.1.1 supports-color: 8.1.1 - workerpool: 6.2.1 + workerpool: 6.5.1 yargs: 16.2.0 - yargs-parser: 20.2.4 + yargs-parser: 20.2.9 yargs-unparser: 2.0.0 dev: true @@ -9072,7 +9337,6 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true /mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} @@ -9094,8 +9358,8 @@ packages: thenify-all: 1.6.0 dev: true - /nan@2.20.0: - resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + /nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} requiresBuild: true dev: false optional: true @@ -9120,8 +9384,8 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + /negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} dev: false @@ -9151,12 +9415,12 @@ packages: tslib: 2.6.2 dev: true - /node-abi@3.62.0: - resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} + /node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} engines: {node: '>=10'} requiresBuild: true dependencies: - semver: 7.6.2 + semver: 7.6.3 dev: true optional: true @@ -9235,18 +9499,14 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-loader@2.0.0(webpack@5.94.0): + /node-loader@2.0.0(webpack@5.96.1): resolution: {integrity: sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q==} engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: loader-utils: 2.0.4 - webpack: 5.94.0(webpack-cli@5.1.4) - dev: true - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + webpack: 5.96.1(webpack-cli@5.1.4) dev: true /node-releases@2.0.18: @@ -9257,7 +9517,7 @@ packages: resolution: {integrity: sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==} engines: {node: '>=14'} dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.26.2 dev: true /noms@0.0.0: @@ -9287,7 +9547,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: hosted-git-info: 7.0.2 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 /normalize-path@3.0.0: @@ -9388,6 +9648,11 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -9564,7 +9829,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.4(supports-color@8.1.1) get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 @@ -9582,9 +9847,8 @@ packages: netmask: 2.0.2 dev: true - /package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - requiresBuild: true + /package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} /pacote@18.0.6: resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==} @@ -9593,7 +9857,7 @@ packages: dependencies: '@npmcli/git': 5.0.8 '@npmcli/installed-package-contents': 2.1.0 - '@npmcli/package-json': 5.2.0 + '@npmcli/package-json': 5.2.1 '@npmcli/promise-spawn': 7.0.2 '@npmcli/run-script': 8.1.0 cacache: 18.0.4 @@ -9635,7 +9899,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -9645,7 +9909,7 @@ packages: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 3.0.2 lines-and-columns: 2.0.4 @@ -9663,15 +9927,21 @@ packages: semver: 5.7.2 dev: true - /parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + /parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} dependencies: domhandler: 5.0.3 - parse5: 7.1.2 + parse5: 7.2.1 + dev: true + + /parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + dependencies: + parse5: 7.2.1 dev: true - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + /parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} dependencies: entities: 4.5.0 dev: true @@ -9719,7 +9989,7 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} dependencies: - lru-cache: 11.0.1 + lru-cache: 11.0.2 minipass: 7.1.2 dev: true @@ -9754,6 +10024,10 @@ packages: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} dev: true + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + dev: true + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -9820,7 +10094,7 @@ packages: engines: {node: '>= 0.4'} dev: false - /postcss-values-parser@6.0.2(postcss@8.4.38): + /postcss-values-parser@6.0.2(postcss@8.4.47): resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} peerDependencies: @@ -9828,7 +10102,7 @@ packages: dependencies: color-name: 1.1.4 is-url-superb: 4.0.0 - postcss: 8.4.38 + postcss: 8.4.47 quote-unquote: 1.0.0 dev: true @@ -9841,6 +10115,15 @@ packages: source-map-js: 1.2.0 dev: true + /postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + dev: true + /preact-render-to-string@6.5.7(preact@10.22.0): resolution: {integrity: sha512-nACZDdv/ZZciuldVYMcfGqr61DKJeaAfPx96hn6OXoBGhgtU2yGQkA0EpTzWH4SvnwF0syLsL4WK7AIp3Ruc1g==} peerDependencies: @@ -9864,8 +10147,8 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.62.0 - pump: 3.0.0 + node-abi: 3.71.0 + pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.1 @@ -10012,7 +10295,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.4(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -10045,6 +10328,14 @@ packages: once: 1.4.0 dev: true + /pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + requiresBuild: true + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -10084,8 +10375,8 @@ packages: (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) dev: false - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -10303,8 +10594,8 @@ packages: hasBin: true dev: true - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + /regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -10461,6 +10752,7 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -10468,6 +10760,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -10511,7 +10804,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: true /safaridriver@0.1.2: @@ -10567,8 +10860,8 @@ packages: commander: 10.0.1 dev: true - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: true /scheduler@0.23.2: @@ -10624,6 +10917,11 @@ packages: engines: {node: '>=10'} hasBin: true + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + /serialize-error@11.0.3: resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} engines: {node: '>=14.16'} @@ -10631,12 +10929,6 @@ packages: type-fest: 2.19.0 dev: true - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - dependencies: - randombytes: 2.1.0 - dev: true - /serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: @@ -10700,7 +10992,7 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -10783,7 +11075,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -10824,6 +11116,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: @@ -10853,8 +11150,14 @@ packages: requiresBuild: true dev: true - /spawn-command@0.0.2-1: - resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} + /spacetrim@0.11.59: + resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} + requiresBuild: true + dev: true + optional: true + + /spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} dev: true /spdx-correct@3.2.0: @@ -10887,8 +11190,8 @@ packages: /sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - /ssh2@1.15.0: - resolution: {integrity: sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==} + /ssh2@1.16.0: + resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} engines: {node: '>=10.16.0'} requiresBuild: true dependencies: @@ -10896,7 +11199,7 @@ packages: bcrypt-pbkdf: 1.0.2 optionalDependencies: cpu-features: 0.0.10 - nan: 2.20.0 + nan: 2.22.0 dev: false /ssri@10.0.6: @@ -10971,7 +11274,7 @@ packages: queue-tick: 1.0.1 text-decoder: 1.1.0 optionalDependencies: - bare-events: 2.4.2 + bare-events: 2.5.0 dev: true /string-argv@0.3.2: @@ -11197,7 +11500,7 @@ packages: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.0 + pump: 3.0.2 tar-stream: 2.2.0 dev: true optional: true @@ -11216,7 +11519,7 @@ packages: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.3 + bare-fs: 2.3.5 bare-path: 2.1.3 dev: true @@ -11253,7 +11556,7 @@ packages: yallist: 4.0.0 dev: false - /terser-webpack-plugin@5.3.10(webpack@5.94.0): + /terser-webpack-plugin@5.3.10(webpack@5.96.1): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -11273,17 +11576,17 @@ packages: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.0 - webpack: 5.94.0(webpack-cli@5.1.4) + terser: 5.36.0 + webpack: 5.96.1(webpack-cli@5.1.4) dev: true - /terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + /terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -11418,13 +11721,13 @@ packages: hasBin: true dev: true - /ts-api-utils@1.3.0(typescript@5.4.5): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + /ts-api-utils@1.4.0(typescript@5.6.3): + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.6.3 dev: true /ts-graphviz@1.8.2: @@ -11432,12 +11735,13 @@ packages: engines: {node: '>=14.16'} dev: true - /ts-jest@29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + /ts-jest@29.2.5(@babel/core@7.26.0)(jest@29.7.0)(typescript@5.6.3): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 '@jest/types': ^29.0.0 babel-jest: ^29.0.0 esbuild: '*' @@ -11446,6 +11750,8 @@ packages: peerDependenciesMeta: '@babel/core': optional: true + '@jest/transform': + optional: true '@jest/types': optional: true babel-jest: @@ -11453,20 +11759,21 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.33) + jest: 29.7.0(@types/node@18.19.64) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.2 - typescript: 5.4.5 + semver: 7.6.3 + typescript: 5.6.3 yargs-parser: 21.1.1 dev: true - /ts-node@10.9.2(@types/node@18.19.33)(typescript@5.5.4): + /ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -11485,14 +11792,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.33 + '@types/node': 22.9.0 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.4 + typescript: 5.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -11512,23 +11819,27 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.4.5): + /tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + dev: true + + /tsutils@3.21.0(typescript@5.6.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.6.3 dev: true - /tsx@4.10.4: - resolution: {integrity: sha512-Gtg9qnZWNqC/OtcgiXfoAUdAKx3/cgKOYvEocAsv+m21MV/eKpV/WUjRXe6/sDCaGBl2/v8S6v29BpUnGMCX5A==} + /tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.20.2 - get-tsconfig: 4.7.5 + esbuild: 0.23.1 + get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 dev: true @@ -11538,7 +11849,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@tufjs/models': 2.0.1 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color @@ -11608,6 +11919,13 @@ packages: engines: {node: '>=16'} dev: true + /type-fest@4.26.0: + resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} + engines: {node: '>=16'} + requiresBuild: true + dev: true + optional: true + /typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -11655,7 +11973,7 @@ packages: /typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} dependencies: - qs: 6.12.1 + qs: 6.13.0 tunnel: 0.0.6 underscore: 1.13.7 dev: true @@ -11672,8 +11990,8 @@ packages: hasBin: true dev: true - /typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + /typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -11725,6 +12043,11 @@ packages: '@fastify/busboy': 2.1.1 dev: true + /undici@6.20.1: + resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} + engines: {node: '>=18.17'} + dev: true + /unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -11767,26 +12090,15 @@ packages: setimmediate: 1.0.5 dev: true - /update-browserslist-db@1.0.16(browserslist@4.23.0): - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.23.0 - escalade: 3.2.0 - picocolors: 1.1.0 - dev: true - - /update-browserslist-db@1.1.0(browserslist@4.23.3): - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + /update-browserslist-db@1.1.1(browserslist@4.24.2): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.3 + browserslist: 4.24.2 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 dev: true /upper-case-first@2.0.2: @@ -11815,6 +12127,13 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /userhome@1.0.1: + resolution: {integrity: sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==} + engines: {node: '>= 0.8.0'} + requiresBuild: true + dev: true + optional: true + /util-arity@1.1.0: resolution: {integrity: sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==} dev: true @@ -11846,8 +12165,8 @@ packages: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} dev: true - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -11875,7 +12194,7 @@ packages: extsprintf: 1.4.1 dev: true - /vite-plugin-checker@0.6.4(eslint@8.57.0)(typescript@5.4.5)(vite@4.5.5): + /vite-plugin-checker@0.6.4(eslint@8.57.1)(typescript@5.4.5)(vite@4.5.5): resolution: {integrity: sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==} engines: {node: '>=14.16'} peerDependencies: @@ -11911,7 +12230,7 @@ packages: chalk: 4.1.2 chokidar: 3.6.0 commander: 8.3.0 - eslint: 8.57.0 + eslint: 8.57.1 fast-glob: 3.3.2 fs-extra: 11.2.0 npm-run-path: 4.0.1 @@ -11919,7 +12238,7 @@ packages: strip-ansi: 6.0.1 tiny-invariant: 1.3.3 typescript: 5.4.5 - vite: 4.5.5(@types/node@18.19.33) + vite: 4.5.5(@types/node@18.19.64) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.11 @@ -11936,10 +12255,10 @@ packages: fast-glob: 3.3.2 fs-extra: 11.2.0 picocolors: 1.0.1 - vite: 4.5.5(@types/node@18.19.33) + vite: 4.5.5(@types/node@18.19.64) dev: true - /vite@4.5.5(@types/node@18.19.33): + /vite@4.5.5(@types/node@18.19.64): resolution: {integrity: sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -11967,7 +12286,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.64 esbuild: 0.18.20 postcss: 8.4.38 rollup: 3.29.5 @@ -12022,7 +12341,7 @@ packages: dependencies: chalk: 4.1.2 commander: 9.4.1 - debug: 4.3.6 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -12038,8 +12357,8 @@ packages: makeerror: 1.0.12 dev: true - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + /watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -12104,7 +12423,7 @@ packages: resolution: {integrity: sha512-mc/pxLpgAQphnIaWvix/QXzp9CJpEvIA3YeF9t5plPaTbvbEaCAYYWkTP6e3vYPYWvx57krjGaYkNUnDCBNolA==} engines: {node: ^16.13 || >=18} dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@types/ws': 8.5.12 '@wdio/config': 8.40.3 '@wdio/logger': 8.38.0 @@ -12121,6 +12440,29 @@ packages: - utf-8-validate dev: true + /webdriver@8.40.6: + resolution: {integrity: sha512-jkslwUvOmqhFfc1E21Tz48NgYD8ykiR+09iWZlVLtx3P43k4jOfS+CfasvQ+6hJiVck+N5dXjYfg6zDjpkIFRw==} + engines: {node: ^16.13 || >=18} + requiresBuild: true + dependencies: + '@types/node': 22.9.0 + '@types/ws': 8.5.13 + '@wdio/config': 8.40.6 + '@wdio/logger': 8.38.0 + '@wdio/protocols': 8.40.3 + '@wdio/types': 8.40.6 + '@wdio/utils': 8.40.6 + deepmerge-ts: 5.1.0 + got: 12.6.1 + ky: 0.33.3 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + optional: true + /webdriverio@8.40.5: resolution: {integrity: sha512-fKzaAF8lbgVFWIP8i0eGk22MpjactVVTWP8qtUXDob5Kdo8ffrg1lCKP8mcyrz6fiZM1OY1m6dvkbFelf23Nxw==} engines: {node: ^16.13 || >=18} @@ -12130,7 +12472,7 @@ packages: devtools: optional: true dependencies: - '@types/node': 22.5.2 + '@types/node': 22.9.0 '@wdio/config': 8.40.3 '@wdio/logger': 8.38.0 '@wdio/protocols': 8.40.3 @@ -12162,12 +12504,55 @@ packages: - utf-8-validate dev: true + /webdriverio@8.40.6: + resolution: {integrity: sha512-hMFYRjVU5Nnk2e9Mi8kDx/IVFMWGaVyDCDpv/SeXXCP17DT9jAZtOWlwGhRaLVikN5JYYuHavHyatVa7gj6QTg==} + engines: {node: ^16.13 || >=18} + requiresBuild: true + peerDependencies: + devtools: ^8.14.0 + peerDependenciesMeta: + devtools: + optional: true + dependencies: + '@types/node': 22.9.0 + '@wdio/config': 8.40.6 + '@wdio/logger': 8.38.0 + '@wdio/protocols': 8.40.3 + '@wdio/repl': 8.40.3 + '@wdio/types': 8.40.6 + '@wdio/utils': 8.40.6 + archiver: 7.0.1 + aria-query: 5.3.0 + css-shorthand-properties: 1.1.1 + css-value: 0.0.1 + devtools-protocol: 0.0.1359167 + grapheme-splitter: 1.0.4 + import-meta-resolve: 4.1.0 + is-plain-obj: 4.1.0 + jszip: 3.10.1 + lodash.clonedeep: 4.5.0 + lodash.zip: 4.2.0 + minimatch: 9.0.5 + puppeteer-core: 21.11.0 + query-selector-shadow-dom: 1.0.1 + resq: 1.11.0 + rgb2hex: 0.2.5 + serialize-error: 11.0.3 + webdriver: 8.40.6 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + optional: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} requiresBuild: true dev: true - /webpack-cli@5.1.4(webpack@5.94.0): + /webpack-cli@5.1.4(webpack@5.96.1): resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} hasBin: true @@ -12185,18 +12570,18 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.94.0) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.94.0) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.94.0) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.96.1) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.96.1) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.96.1) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 - envinfo: 7.13.0 + envinfo: 7.14.0 fastest-levenshtein: 1.0.16 - import-local: 3.1.0 + import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.94.0(webpack-cli@5.1.4) + webpack: 5.96.1(webpack-cli@5.1.4) webpack-merge: 5.10.0 dev: true @@ -12221,8 +12606,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.94.0(webpack-cli@5.1.4): - resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + /webpack@5.96.1(webpack-cli@5.1.4): + resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -12231,16 +12616,16 @@ packages: webpack-cli: optional: true dependencies: - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-attributes: 1.9.5(acorn@8.11.3) - browserslist: 4.23.3 - chrome-trace-event: 1.0.3 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.13.1 + '@webassemblyjs/wasm-edit': 1.13.1 + '@webassemblyjs/wasm-parser': 1.13.1 + acorn: 8.14.0 + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.2 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -12251,9 +12636,9 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.94.0) - watchpack: 2.4.1 - webpack-cli: 5.1.4(webpack@5.94.0) + terser-webpack-plugin: 5.3.10(webpack@5.96.1) + watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.96.1) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -12261,6 +12646,18 @@ packages: - uglify-js dev: true + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + dev: true + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} requiresBuild: true @@ -12319,8 +12716,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /workerpool@6.2.1: - resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + /workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} dev: true /wrap-ansi@6.2.0: @@ -12377,7 +12774,7 @@ packages: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} dependencies: - sax: 1.3.0 + sax: 1.4.1 xmlbuilder: 11.0.1 dev: true @@ -12426,11 +12823,6 @@ packages: hasBin: true dev: true - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true - /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'}