From 8810e8d211f097d8bf559795365fc16a12b7a402 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Wed, 21 Aug 2024 14:04:48 +0800 Subject: [PATCH 01/52] build: update codeowner (#12255) --- .github/CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 021099472e..645c95cd33 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -150,7 +150,7 @@ /packages/fx-core/src/component/feature/sso.ts @KennethBWSong @xzf0587 /packages/fx-core/src/component/generator @Yukun-dong @hund030 @JerryYangKai @eriolchan /packages/fx-core/src/component/generator/apiSpec @yuqizhou77 @nliu-ms @Alive-Fish -/packages/fx-core/src/component/generator/copilotExtensionFromScratch @yuqizhou77 @huimiu +/packages/fx-core/src/component/generator/copilotExtension @yuqizhou77 @huimiu @jayzhang /packages/fx-core/src/component/generator/officeAddin @jayzhang @tecton /packages/fx-core/src/component/generator/officeXMLAddin @jayzhang @tecton /packages/fx-core/src/component/generator/spfx @HuihuiWu-Microsoft @yuqizhou77 @nliu-ms @@ -204,8 +204,8 @@ /packages/fx-core/tests/component/error @jayzhang @xzf0587 @LongOddCode /packages/fx-core/tests/component/feature @KennethBWSong @xzf0587 /packages/fx-core/tests/component/generator/generator.test.ts @Yukun-dong @hund030 @JerryYangKai @eriolchan -/packages/fx-core/tests/component/generator/copilotExtensionFromScratch.test.ts @yuqizhou77 @huimiu -/packages/fx-core/tests/component/generator/copilotGenerator.test.ts @yuqizhou77 @nliu-ms @Alive-Fish @jayzhang +/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts @yuqizhou77 @huimiu @jayzhang +/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @yuqizhou77 @nliu-ms @Alive-Fish @jayzhang /packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts @jayzhang @tecton /packages/fx-core/tests/component/generator/officeXMLAddinGenerator.test.ts @jayzhang @tecton /packages/fx-core/tests/component/generator/spfxGenerator.test.ts @HuihuiWu-Microsoft @yuqizhou77 @nliu-ms @jayzhang From faba0c4e7cdf55873ffb9c0809a2c04f9ed6a462 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Thu, 22 Aug 2024 10:56:24 +0800 Subject: [PATCH 02/52] refactor: add plugin treeview (#12257) * refactor: add treeview item * refactor: minor * refactor: minor * test: ut * test: ut * refactor: pr comment --- packages/api/src/constants.ts | 1 + .../fx-core/src/common/projectTypeChecker.ts | 2 +- .../driver/teamsApp/utils/ManifestUtils.ts | 26 +++++++++- packages/fx-core/src/core/FxCore.ts | 2 +- .../driver/teamsApp/manifestUtils.test.ts | 48 ++++++++++++++++++- packages/vscode-extension/package.nls.json | 3 ++ packages/vscode-extension/src/extension.ts | 3 ++ .../vscode-extension/src/globalVariables.ts | 12 +++++ .../src/handlers/lifecycleHandlers.ts | 5 ++ .../src/handlers/sharedOpts.ts | 4 ++ .../src/telemetry/extTelemetryEvents.ts | 3 ++ .../src/treeview/treeViewManager.ts | 13 ++++- .../test/extension/globalVariables.test.ts | 38 +++++++++++++++ .../test/handlers/lifecycleHandlers.test.ts | 18 +++++++ .../vscode-extension/test/mocks/mockCore.ts | 4 ++ 15 files changed, 177 insertions(+), 5 deletions(-) diff --git a/packages/api/src/constants.ts b/packages/api/src/constants.ts index 696b0cc68b..d5714d94bd 100644 --- a/packages/api/src/constants.ts +++ b/packages/api/src/constants.ts @@ -69,6 +69,7 @@ export enum Stage { createAppPackage = "createAppPackage", previewWithManifest = "previewWithManifest", copilotPluginAddAPI = "copilotPluginAddAPI", + addPlugin = "addPlugin", } export enum TelemetryEvent { diff --git a/packages/fx-core/src/common/projectTypeChecker.ts b/packages/fx-core/src/common/projectTypeChecker.ts index a329b40ccb..0a265a6fac 100644 --- a/packages/fx-core/src/common/projectTypeChecker.ts +++ b/packages/fx-core/src/common/projectTypeChecker.ts @@ -275,7 +275,7 @@ export function getCapabilities(manifest: any): string[] { } if ( manifest.copilotExtensions?.declarativeCopilots && - manifest.copilotExtensions.declarativeCopilots > 0 + manifest.copilotExtensions.declarativeCopilots.length > 0 ) { capabilities.push("copilotGpt"); } diff --git a/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts b/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts index f5805ecb30..f167b86eb5 100644 --- a/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts +++ b/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts @@ -23,7 +23,7 @@ import { v4 } from "uuid"; import isUUID from "validator/lib/isUUID"; import { getCapabilities as checkManifestCapabilities } from "../../../../common/projectTypeChecker"; import { ErrorContextMW } from "../../../../common/globalVars"; -import { FileNotFoundError, JSONSyntaxError } from "../../../../error/common"; +import { FileNotFoundError, JSONSyntaxError, ReadFileError } from "../../../../error/common"; import { CapabilityOptions } from "../../../../question/constants"; import { BotScenario } from "../../../constants"; import { convertManifestTemplateToV2, convertManifestTemplateToV3 } from "../../../migrate"; @@ -56,6 +56,30 @@ export class ManifestUtils { const filePath = this.getTeamsAppManifestPath(projectPath); return await this._readAppManifest(filePath); } + + readAppManifestSync(projectPath: string): Result { + const filePath = this.getTeamsAppManifestPath(projectPath); + if (!fs.existsSync(filePath)) { + return err(new FileNotFoundError("teamsApp", filePath)); + } + // Be compatible with UTF8-BOM encoding + // Avoid Unexpected token error at JSON.parse() + let content; + try { + content = fs.readFileSync(filePath, { encoding: "utf-8" }); + } catch (e) { + return err(new ReadFileError(e, "common")); + } + content = stripBom(content); + const contentV3 = convertManifestTemplateToV3(content); + try { + const manifest = JSON.parse(contentV3) as TeamsAppManifest; + return ok(manifest); + } catch (e) { + return err(new JSONSyntaxError(filePath, e, "ManifestUtils")); + } + } + @hooks([ErrorContextMW({ component: "ManifestUtils" })]) async _readAppManifest(manifestTemplatePath: string): Promise> { if (!(await fs.pathExists(manifestTemplatePath))) { diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index 395818e6ff..6677002ea5 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -1827,7 +1827,7 @@ export class FxCore { * Add plugin */ @hooks([ - ErrorContextMW({ component: "FxCore", stage: "addPlugin" }), + ErrorContextMW({ component: "FxCore", stage: Stage.addPlugin }), ErrorHandlerMW, QuestionMW("addPlugin"), ConcurrentLockerMW, diff --git a/packages/fx-core/tests/component/driver/teamsApp/manifestUtils.test.ts b/packages/fx-core/tests/component/driver/teamsApp/manifestUtils.test.ts index db2605a840..a20dbe66f6 100644 --- a/packages/fx-core/tests/component/driver/teamsApp/manifestUtils.test.ts +++ b/packages/fx-core/tests/component/driver/teamsApp/manifestUtils.test.ts @@ -2,7 +2,10 @@ import "mocha"; import { assert } from "chai"; import * as sinon from "sinon"; -import { ManifestUtils } from "../../../../src/component/driver/teamsApp/utils/ManifestUtils"; +import { + manifestUtils, + ManifestUtils, +} from "../../../../src/component/driver/teamsApp/utils/ManifestUtils"; import fs from "fs-extra"; import { TeamsAppManifest, @@ -21,6 +24,7 @@ import { getConfigurableTabsTplExistingAppBasedOnVersion, } from "../../../../src/component/driver/teamsApp/constants"; import { AppStudioError } from "../../../../src/component/driver/teamsApp/errors"; +import { FileNotFoundError, JSONSyntaxError, ReadFileError } from "../../../../src/error"; const latestManifestVersion = "1.17"; const oldManifestVersion = "1.16"; @@ -302,3 +306,45 @@ function mockInputManifestFileExceedLimit(manifestUtils: ManifestUtils, manifest }; sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(mockManifest)); } + +describe("readAppManifestSync", () => { + const sandbox = sinon.createSandbox(); + + afterEach(() => { + sandbox.restore(); + }); + + it("Success", () => { + const teamsManifest = new TeamsAppManifest(); + sandbox.stub(fs, "existsSync").callsFake(() => { + return true; + }); + sandbox.stub(fs, "readFileSync").returns(JSON.stringify(teamsManifest)); + + const res = manifestUtils.readAppManifestSync("projectPath"); + assert.isTrue(res.isOk()); + }); + + it("Return false if cannot find the manifest", () => { + sandbox.stub(fs, "existsSync").returns(false); + + const res = manifestUtils.readAppManifestSync("projectPath"); + assert.isTrue(res.isErr() && res.error instanceof FileNotFoundError); + }); + + it("Return false if pasring json failed", () => { + sandbox.stub(fs, "existsSync").returns(true); + sandbox.stub(fs, "readFileSync").returns(""); + + const res = manifestUtils.readAppManifestSync("projectPath"); + assert.isTrue(res.isErr() && res.error instanceof JSONSyntaxError); + }); + + it("Return false if read file failed", () => { + sandbox.stub(fs, "existsSync").returns(true); + sandbox.stub(fs, "readFileSync").throws("error"); + + const res = manifestUtils.readAppManifestSync("projectPath"); + assert.isTrue(res.isErr() && res.error instanceof ReadFileError); + }); +}); diff --git a/packages/vscode-extension/package.nls.json b/packages/vscode-extension/package.nls.json index 231df7ffc4..7d2315a121 100644 --- a/packages/vscode-extension/package.nls.json +++ b/packages/vscode-extension/package.nls.json @@ -161,6 +161,9 @@ "teamstoolkit.commandsTreeViewProvider.guideTitle": "View How-to Guides", "teamstoolkit.commandsTreeViewProvider.manageCollaboratorTitle": "Manage Collaborator", "teamstoolkit.commandsTreeViewProvider.manageCollaboratorDescription": "Manage M365 Teams App (with Microsoft Entra app) Collaborators", + "teamstoolkit.commandsTreeViewProvider.addPluginTitle": "Add Plugin", + "teamstoolkit.commandsTreeViewProvider.addPluginDescription": "Add plugin in declarative copilot", + "teamstoolkit.commandsTreeViewProvider.addPlugin.running": "Adding plugin...", "teamstoolkit.commandsTreeViewProvider.addWebpartTitle": "Add SPFx Web Part", "teamstoolkit.commandsTreeViewProvider.officeDevDeployTitle": "Deploy", "teamstoolkit.commandsTreeViewProvider.officeDevDeployDescription": "Deploy", diff --git a/packages/vscode-extension/src/extension.ts b/packages/vscode-extension/src/extension.ts index ceaf5ad25b..b6062ef35a 100644 --- a/packages/vscode-extension/src/extension.ts +++ b/packages/vscode-extension/src/extension.ts @@ -114,6 +114,7 @@ import { refreshEnvironment, } from "./handlers/envHandlers"; import { + addPluginHandler, addWebpartHandler, copilotPluginAddAPIHandler, createNewProjectHandler, @@ -579,6 +580,8 @@ function registerTreeViewCommandsInDevelopment(context: vscode.ExtensionContext) registerInCommandController(context, "fx-extension.OpenAdaptiveCardExt", installAdaptiveCardExt); registerInCommandController(context, "fx-extension.addWebpart", addWebpartHandler, "addWebpart"); + + registerInCommandController(context, "fx-extension.addPlugin", addPluginHandler, "addPlugin"); } function registerTreeViewCommandsInLifecycle(context: vscode.ExtensionContext) { diff --git a/packages/vscode-extension/src/globalVariables.ts b/packages/vscode-extension/src/globalVariables.ts index 16a2d4ae4c..6ed0e5472b 100644 --- a/packages/vscode-extension/src/globalVariables.ts +++ b/packages/vscode-extension/src/globalVariables.ts @@ -11,6 +11,7 @@ import { isValidProject, isValidOfficeAddInProject, isManifestOnlyOfficeAddinProject, + manifestUtils, } from "@microsoft/teamsfx-core"; import { Tools } from "@microsoft/teamsfx-api"; @@ -23,6 +24,7 @@ export let isTeamsFxProject = false; export let isOfficeAddInProject = false; export let isOfficeManifestOnlyProject = false; export let isSPFxProject = false; +export let isDeclarativeCopilotApp = false; export let isExistingUser = "no"; export let defaultExtensionLogPath: string; export let commandIsRunning = false; @@ -54,6 +56,7 @@ export function initializeGlobalVariables(ctx: vscode.ExtensionContext): void { } if (isTeamsFxProject && workspaceUri?.fsPath) { isSPFxProject = checkIsSPFx(workspaceUri?.fsPath); + isDeclarativeCopilotApp = checkIsDeclarativeCopilotApp(workspaceUri.fsPath); } else { isSPFxProject = fs.existsSync(path.join(workspaceUri?.fsPath ?? "./", "SPFx")); } @@ -74,6 +77,15 @@ export function checkIsSPFx(directory: string): boolean { return false; } +export function checkIsDeclarativeCopilotApp(directory: string): boolean { + const manifestRes = manifestUtils.readAppManifestSync(directory); + if (manifestRes.isOk()) { + return manifestUtils.getCapabilities(manifestRes.value).includes("copilotGpt"); + } else { + return false; + } +} + export function setCommandIsRunning(isRunning: boolean) { commandIsRunning = isRunning; } diff --git a/packages/vscode-extension/src/handlers/lifecycleHandlers.ts b/packages/vscode-extension/src/handlers/lifecycleHandlers.ts index 66370db0d1..3339715af1 100644 --- a/packages/vscode-extension/src/handlers/lifecycleHandlers.ts +++ b/packages/vscode-extension/src/handlers/lifecycleHandlers.ts @@ -97,6 +97,11 @@ export async function addWebpartHandler(...args: unknown[]) { return await runCommand(Stage.addWebpart); } +export async function addPluginHandler(...args: unknown[]) { + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.AddPluginStart, getTriggerFromProperty(args)); + return await runCommand(Stage.addPlugin); +} + /** * scaffold based on app id from Developer Portal */ diff --git a/packages/vscode-extension/src/handlers/sharedOpts.ts b/packages/vscode-extension/src/handlers/sharedOpts.ts index 3c7dcbc45a..e7b46e30ec 100644 --- a/packages/vscode-extension/src/handlers/sharedOpts.ts +++ b/packages/vscode-extension/src/handlers/sharedOpts.ts @@ -114,6 +114,10 @@ export async function runCommand( result = await core.copilotPluginAddAPI(inputs); break; } + case Stage.addPlugin: { + result = await core.addPlugin(inputs); + break; + } default: throw new SystemError( ExtensionSource, diff --git a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts index 13bf025631..4a08ce887a 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts @@ -34,6 +34,9 @@ export enum TelemetryEvent { AddWebpartStart = "add-web-part-start", AddWebpart = "add-web-part", + AddPluginStart = "add-plugin-start", + AddPlugin = "add-plugin", + ValidateManifestStart = "validate-manifest-start", ValidateManifest = "validate-manifest", ValidateApplication = "validate-application", diff --git a/packages/vscode-extension/src/treeview/treeViewManager.ts b/packages/vscode-extension/src/treeview/treeViewManager.ts index 2cfee3f969..2cf63307f4 100644 --- a/packages/vscode-extension/src/treeview/treeViewManager.ts +++ b/packages/vscode-extension/src/treeview/treeViewManager.ts @@ -5,7 +5,7 @@ import * as vscode from "vscode"; import { TreeCategory } from "@microsoft/teamsfx-api"; import { featureFlagManager, FeatureFlags, manifestUtils } from "@microsoft/teamsfx-core"; -import { isSPFxProject, workspaceUri } from "../globalVariables"; +import { isDeclarativeCopilotApp, isSPFxProject, workspaceUri } from "../globalVariables"; import { hasAdaptiveCardInWorkspace } from "../utils/commonUtils"; import { localize } from "../utils/localizeUtils"; import accountTreeViewProviderInstance from "./account/accountTreeViewProvider"; @@ -216,6 +216,17 @@ class TreeViewManager { ), ] : []), + ...(isDeclarativeCopilotApp + ? [ + new TreeViewCommand( + localize("teamstoolkit.commandsTreeViewProvider.addPluginTitle"), + localize("teamstoolkit.commandsTreeViewProvider.addPluginDescription"), + "fx-extension.addPlugin", + "addPlugin", + { name: "teamsfx-add-feature", custom: false } + ), + ] + : []), new TreeViewCommand( localize("teamstoolkit.commandsTreeViewProvider.guideTitle"), localize("teamstoolkit.commandsTreeViewProvider.guideDescription"), diff --git a/packages/vscode-extension/test/extension/globalVariables.test.ts b/packages/vscode-extension/test/extension/globalVariables.test.ts index e602adf99b..b1db44dcf7 100644 --- a/packages/vscode-extension/test/extension/globalVariables.test.ts +++ b/packages/vscode-extension/test/extension/globalVariables.test.ts @@ -5,6 +5,8 @@ import { ExtensionContext, Uri } from "vscode"; import * as globalVariables from "../../src/globalVariables"; import * as projectSettingHelper from "@microsoft/teamsfx-core/build/common/projectSettingsHelper"; +import { err, ok, SystemError, TeamsAppManifest } from "@microsoft/teamsfx-api"; +import { manifestUtils } from "@microsoft/teamsfx-core"; describe("Global Variables", () => { describe("isSPFxProject", () => { @@ -84,4 +86,40 @@ describe("Global Variables", () => { chai.expect(globalVariables.isTeamsFxProject).equals(false); }); }); + + describe("isDeclarativeCopilotApp", () => { + const sandbox = sinon.createSandbox(); + + afterEach(() => { + sandbox.restore(); + }); + + it("Declarative copilot project", () => { + const teamsManifest = new TeamsAppManifest(); + teamsManifest.copilotExtensions = { + declarativeCopilots: [{ id: "1", file: "testFile" }], + }; + sandbox.stub(manifestUtils, "readAppManifestSync").returns(ok(teamsManifest)); + + const res = globalVariables.checkIsDeclarativeCopilotApp("projectPath"); + chai.expect(res).to.be.true; + }); + + it("Not declarative copilot project", () => { + const teamsManifest = new TeamsAppManifest(); + sandbox.stub(manifestUtils, "readAppManifestSync").returns(ok(teamsManifest)); + + const res = globalVariables.checkIsDeclarativeCopilotApp("projectPath"); + chai.expect(res).to.be.false; + }); + + it("Error: return false", () => { + sandbox + .stub(manifestUtils, "readAppManifestSync") + .returns(err(new SystemError("error", "error", "error", "error"))); + + const res = globalVariables.checkIsDeclarativeCopilotApp("projectPath"); + chai.expect(res).to.be.false; + }); + }); }); diff --git a/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts b/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts index 77c9ee9ee5..e6684a9c6d 100644 --- a/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts +++ b/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts @@ -13,6 +13,7 @@ import * as vscode from "vscode"; import * as globalVariables from "../../src/globalVariables"; import * as copilotHandler from "../../src/handlers/copilotChatHandlers"; import { + addPluginHandler, addWebpartHandler, copilotPluginAddAPIHandler, createNewProjectHandler, @@ -346,4 +347,21 @@ describe("Lifecycle handlers", () => { sinon.assert.calledOnce(addAPIHanlder); }); }); + + describe("AddPluginHandler", async () => { + const sandbox = sinon.createSandbox(); + + afterEach(() => { + sandbox.restore(); + }); + + it("success:", async () => { + sandbox.stub(globalVariables, "core").value(new MockCore()); + const addPluginHanlder = sandbox.spy(globalVariables.core, "addPlugin"); + + await addPluginHandler(); + + sinon.assert.calledOnce(addPluginHanlder); + }); + }); }); diff --git a/packages/vscode-extension/test/mocks/mockCore.ts b/packages/vscode-extension/test/mocks/mockCore.ts index 3fc94ebdf6..31b2484920 100644 --- a/packages/vscode-extension/test/mocks/mockCore.ts +++ b/packages/vscode-extension/test/mocks/mockCore.ts @@ -148,4 +148,8 @@ export class MockCore { async isEnvFile(projectPath: string, inputFile: string): Promise> { return ok(true); } + + async addPlugin(inputs: Inputs): Promise> { + return ok(undefined); + } } From 56c12fdcf92cf70ae25e64afa5e4915c7fc59360 Mon Sep 17 00:00:00 2001 From: QinghuiMeng-M Date: Thu, 22 Aug 2024 13:21:32 +0800 Subject: [PATCH 03/52] feat: add Azure OpenAI Assistant API support for custom-copilot TS/JS template (#12258) * update template for Assistant API on Azure Open AI Service (JS/TS) * remove condition * fix miss flag * fix miss flag * update test case * update readme tpl by comments * remove azureOpenAIDeploymentName * update readme --- packages/fx-core/src/question/create.ts | 23 ++- .../fx-core/tests/question/create.test.ts | 2 +- .../README.md.tpl | 41 +++++ .../env/.env.dev.user.tpl | 19 ++- .../env/.env.local.user.tpl | 19 ++- .../env/.env.testtool.user.tpl | 19 ++- .../infra/{azure.bicep => azure.bicep.tpl} | 27 ++++ .../infra/azure.parameters.json.tpl | 13 ++ .../src/app/{app.js => app.js.tpl} | 17 +++ .../src/{config.js => config.js.tpl} | 7 + .../src/{creator.js => creator.js.tpl} | 32 ++++ .../teamsapp.local.yml.tpl | 9 +- ...testtool.yml => teamsapp.testtool.yml.tpl} | 7 + .../README.md.tpl | 41 +++++ .../env/.env.dev.user.tpl | 19 ++- .../env/.env.local.user.tpl | 19 ++- .../env/.env.testtool.user.tpl | 19 ++- .../infra/{azure.bicep => azure.bicep.tpl} | 27 ++++ .../infra/azure.parameters.json.tpl | 13 ++ .../src/app/{app.ts => app.ts.tpl} | 17 +++ .../src/{config.ts => config.ts.tpl} | 7 + .../src/creator.ts | 64 -------- .../src/creator.ts.tpl | 144 ++++++++++++++++++ .../teamsapp.local.yml.tpl | 9 +- ...testtool.yml => teamsapp.testtool.yml.tpl} | 7 + 25 files changed, 534 insertions(+), 87 deletions(-) rename templates/js/custom-copilot-assistant-assistants-api/infra/{azure.bicep => azure.bicep.tpl} (78%) rename templates/js/custom-copilot-assistant-assistants-api/src/app/{app.js => app.js.tpl} (73%) rename templates/js/custom-copilot-assistant-assistants-api/src/{config.js => config.js.tpl} (56%) rename templates/js/custom-copilot-assistant-assistants-api/src/{creator.js => creator.js.tpl} (63%) rename templates/js/custom-copilot-assistant-assistants-api/{teamsapp.testtool.yml => teamsapp.testtool.yml.tpl} (73%) rename templates/ts/custom-copilot-assistant-assistants-api/infra/{azure.bicep => azure.bicep.tpl} (78%) rename templates/ts/custom-copilot-assistant-assistants-api/src/app/{app.ts => app.ts.tpl} (72%) rename templates/ts/custom-copilot-assistant-assistants-api/src/{config.ts => config.ts.tpl} (55%) delete mode 100644 templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts create mode 100644 templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts.tpl rename templates/ts/custom-copilot-assistant-assistants-api/{teamsapp.testtool.yml => teamsapp.testtool.yml.tpl} (73%) diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index b031fd6f81..d5ffc6a04b 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -1204,25 +1204,20 @@ function llmServiceQuestion(): SingleSelectQuestion { ], dynamicOptions: (inputs: Inputs) => { const options: OptionItem[] = []; - // python tpl supports az oai assistant now. if other languages support az oai assistant, change the condition here. - if ( - (inputs[QuestionNames.CustomCopilotAssistant] === "custom-copilot-agent-assistants-api" && - inputs[QuestionNames.ProgrammingLanguage] === ProgrammingLanguage.PY) || - inputs[QuestionNames.CustomCopilotAssistant] !== "custom-copilot-agent-assistants-api" - ) { - options.push({ + options.push( + { id: "llm-service-azure-openai", label: getLocalizedString("core.createProjectQuestion.llmServiceAzureOpenAIOption.label"), detail: getLocalizedString( "core.createProjectQuestion.llmServiceAzureOpenAIOption.detail" ), - }); - } - options.push({ - id: "llm-service-openai", - label: getLocalizedString("core.createProjectQuestion.llmServiceOpenAIOption.label"), - detail: getLocalizedString("core.createProjectQuestion.llmServiceOpenAIOption.detail"), - }); + }, + { + id: "llm-service-openai", + label: getLocalizedString("core.createProjectQuestion.llmServiceOpenAIOption.label"), + detail: getLocalizedString("core.createProjectQuestion.llmServiceOpenAIOption.detail"), + } + ); return options; }, skipSingleOption: true, diff --git a/packages/fx-core/tests/question/create.test.ts b/packages/fx-core/tests/question/create.test.ts index 99173de4d1..7521a530af 100644 --- a/packages/fx-core/tests/question/create.test.ts +++ b/packages/fx-core/tests/question/create.test.ts @@ -1488,7 +1488,7 @@ describe("scaffold question", () => { } else if (question.name === QuestionNames.LLMService) { const select = question as SingleSelectQuestion; const options = await select.dynamicOptions!(inputs); - assert.isTrue(options.length === 1); + assert.isTrue(options.length === 2); return ok({ type: "success", result: "llm-service-openai" }); } else if (question.name === QuestionNames.OpenAIKey) { return ok({ type: "success", result: "testKey" }); diff --git a/templates/js/custom-copilot-assistant-assistants-api/README.md.tpl b/templates/js/custom-copilot-assistant-assistants-api/README.md.tpl index 57d3719ca8..ea79d5ac57 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/README.md.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/README.md.tpl @@ -14,7 +14,12 @@ It showcases how to build an AI agent in Teams capable of helping users accompli > - A [Microsoft 365 account for development](https://docs.microsoft.com/microsoftteams/platform/toolkit/accounts) {{/enableTestToolByDefault}} > - [Teams Toolkit Visual Studio Code Extension](https://aka.ms/teams-toolkit) version 5.0.0 and higher or [Teams Toolkit CLI](https://aka.ms/teamsfx-toolkit-cli) +{{#useAzureOpenAI}} +> - An account with [Azure OpenAI](https://aka.ms/oai/access). +{{/useAzureOpenAI}} +{{#useOpenAI}} > - An account with [OpenAI](https://platform.openai.com/). +{{/useOpenAI}} > > **Note** > @@ -22,18 +27,26 @@ It showcases how to build an AI agent in Teams capable of helping users accompli ### Create your own OpenAI Assistant +{{#useOpenAI}} Before running or debugging your bot, please follow these steps to setup your own [OpenAI Assistant](https://platform.openai.com/docs/assistants/overview). +{{/useOpenAI}} +{{#useAzureOpenAI}} +Before running or debugging your bot, please follow these steps to setup your own [Azure OpenAI Assistant](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/assistant). +{{/useAzureOpenAI}} **If you haven't setup any Assistant yet** > This app template provides script `src/creator.js` to help create assistant. You can change the instructions and settings in the script to customize the assistant. > +{{#useOpenAI}} > After creation, you can change and manage your assistants on [OpenAI](https://platform.openai.com/assistants). +{{/useOpenAI}} 1. Open terminal and run command `npm install` to install all dependency packages ``` > npm install ``` +{{#useOpenAI}} 1. After `npm install` completed, run command `npm run assistant:create -- ` ``` > npm run assistant:create -- xxxxxx @@ -52,6 +65,34 @@ Before running or debugging your bot, please follow these steps to setup your ow SECRET_OPENAI_API_KEY= OPENAI_ASSISTANT_ID= ``` +{{/useOpenAI}} +{{#useAzureOpenAI}} +1. After `npm install` completed, fill in both Azure OpenAI API Endpoint and Azure OpenAI API Deployment name into `src/creator.js` + ``` + const azureOpenAIEndpoint=""; + const azureOpenAIDeploymentName=""; + ``` +1. Run command `npm run assistant:create -- ` + ``` + > npm run assistant:create -- xxxxxx + ``` +1. The above command will output something like "*Created a new assistant with an ID of: **asst_xxx...***" +1. Fill in Azure OpenAI API Key, endpoint, and the created Assistant ID into `env/.env.*.user` + ``` + SECRET_AZURE_OPENAI_API_KEY= + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_ASSISTANT_ID= + ``` + +**If you already have an Assistant created** + +1. Fill in Azure OpenAI API Key, endpoint, and the created Assistant ID into `env/.env.*.user` + ``` + SECRET_AZURE_OPENAI_API_KEY= + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_ASSISTANT_ID= + ``` +{{/useAzureOpenAI}} ### Run Teams Bot locally diff --git a/templates/js/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl b/templates/js/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl index 8e9df35f6b..211ba5f5e8 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl @@ -1,10 +1,27 @@ # This file includes environment variables that will not be committed to git by default. You can set these environment variables in your CI/CD system for your project. # Secrets. Keys prefixed with `SECRET_` will be masked in Teams Toolkit logs. +{{#useOpenAI}} {{#openAIKey}} SECRET_OPENAI_API_KEY='{{{openAIKey}}}' {{/openAIKey}} {{^openAIKey}} SECRET_OPENAI_API_KEY= {{/openAIKey}} -OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. \ No newline at end of file +OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useOpenAI}} +{{#useAzureOpenAI}} +{{#azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY='{{{azureOpenAIKey}}}' +{{/azureOpenAIKey}} +{{^azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY= +{{/azureOpenAIKey}} +{{#azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT='{{{azureOpenAIEndpoint}}}' +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT= +{{/azureOpenAIEndpoint}} +AZURE_OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/js/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl b/templates/js/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl index ef104b2fd1..a6c58d7cd0 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl @@ -3,10 +3,27 @@ # If you're adding a secret value, add SECRET_ prefix to the name so Teams Toolkit can handle them properly # Secrets. Keys prefixed with `SECRET_` will be masked in Teams Toolkit logs. SECRET_BOT_PASSWORD= +{{#useOpenAI}} {{#openAIKey}} SECRET_OPENAI_API_KEY='{{{openAIKey}}}' {{/openAIKey}} {{^openAIKey}} SECRET_OPENAI_API_KEY= {{/openAIKey}} -OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. \ No newline at end of file +OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useOpenAI}} +{{#useAzureOpenAI}} +{{#azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY='{{{azureOpenAIKey}}}' +{{/azureOpenAIKey}} +{{^azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY= +{{/azureOpenAIKey}} +{{#azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT='{{{azureOpenAIEndpoint}}}' +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT= +{{/azureOpenAIEndpoint}} +AZURE_OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/js/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl b/templates/js/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl index 3808b59f51..485a252c33 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl @@ -2,10 +2,27 @@ # If you're adding a secret value, add SECRET_ prefix to the name so Teams Toolkit can handle them properly # Secrets. Keys prefixed with `SECRET_` will be masked in Teams Toolkit logs. +{{#useOpenAI}} {{#openAIKey}} SECRET_OPENAI_API_KEY='{{{openAIKey}}}' {{/openAIKey}} {{^openAIKey}} SECRET_OPENAI_API_KEY= {{/openAIKey}} -OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. \ No newline at end of file +OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useOpenAI}} +{{#useAzureOpenAI}} +{{#azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY='{{{azureOpenAIKey}}}' +{{/azureOpenAIKey}} +{{^azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY= +{{/azureOpenAIKey}} +{{#azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT='{{{azureOpenAIEndpoint}}}' +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT= +{{/azureOpenAIEndpoint}} +AZURE_OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/js/custom-copilot-assistant-assistants-api/infra/azure.bicep b/templates/js/custom-copilot-assistant-assistants-api/infra/azure.bicep.tpl similarity index 78% rename from templates/js/custom-copilot-assistant-assistants-api/infra/azure.bicep rename to templates/js/custom-copilot-assistant-assistants-api/infra/azure.bicep.tpl index 289961d996..aa0b321572 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/infra/azure.bicep +++ b/templates/js/custom-copilot-assistant-assistants-api/infra/azure.bicep.tpl @@ -3,11 +3,22 @@ @description('Used to generate names for all resources in this file') param resourceBaseName string +{{#useOpenAI}} @secure() param openAIKey string @secure() param openAIAssistantId string +{{/useOpenAI}} +{{#useAzureOpenAI}} +@secure() +@description('Required in your bot project to access Azure OpenAI service. You can get it from Azure Portal > OpenAI > Keys > Key1 > Resource Management > Endpoint') +param azureOpenaiKey string +param azureOpenaiEndpoint string + +@secure() +param azureOpenaiAssistantId string +{{/useAzureOpenAI}} param webAppSKU string @@ -69,6 +80,7 @@ resource webApp 'Microsoft.Web/sites@2021-02-01' = { name: 'BOT_TYPE' value: 'UserAssignedMsi' } + {{#useOpenAI}} { name: 'OPENAI_API_KEY' value: openAIKey @@ -77,6 +89,21 @@ resource webApp 'Microsoft.Web/sites@2021-02-01' = { name: 'OPENAI_ASSISTANT_ID' value: openAIAssistantId } + {{/useOpenAI}} + {{#useAzureOpenAI}} + { + name: 'AZURE_OPENAI_API_KEY' + value: azureOpenaiKey + } + { + name: 'AZURE_OPENAI_ENDPOINT' + value: azureOpenaiEndpoint + } + { + name: 'AZURE_OPENAI_ASSISTANT_ID' + value: azureOpenaiAssistantId + } + {{/useAzureOpenAI}} ] ftpsState: 'FtpsOnly' } diff --git a/templates/js/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl b/templates/js/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl index 12a067a9e8..84baa54b8a 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl @@ -5,12 +5,25 @@ "resourceBaseName": { "value": "bot${{RESOURCE_SUFFIX}}" }, + {{#useOpenAI}} "openAIKey": { "value": "${{SECRET_OPENAI_API_KEY}}" }, "openAIAssistantId": { "value": "${{OPENAI_ASSISTANT_ID}}" }, + {{/useOpenAI}} + {{#useAzureOpenAI}} + "azureOpenaiKey": { + "value": "${{SECRET_AZURE_OPENAI_API_KEY}}" + }, + "azureOpenaiEndpoint" : { + "value": "${{AZURE_OPENAI_ENDPOINT}}" + }, + "azureOpenaiAssistantId": { + "value": "${{AZURE_OPENAI_ASSISTANT_ID}}" + }, + {{/useAzureOpenAI}} "webAppSKU": { "value": "B1" }, diff --git a/templates/js/custom-copilot-assistant-assistants-api/src/app/app.js b/templates/js/custom-copilot-assistant-assistants-api/src/app/app.js.tpl similarity index 73% rename from templates/js/custom-copilot-assistant-assistants-api/src/app/app.js rename to templates/js/custom-copilot-assistant-assistants-api/src/app/app.js.tpl index ca79ed830e..1f54637e07 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/src/app/app.js +++ b/templates/js/custom-copilot-assistant-assistants-api/src/app/app.js.tpl @@ -4,12 +4,22 @@ const config = require("../config"); // See https://aka.ms/teams-ai-library to learn more about the Teams AI library. const { Application, AI, preview } = require("@microsoft/teams-ai"); +{{#useOpenAI}} // See README.md to prepare your own OpenAI Assistant if (!config.openAIKey || !config.openAIAssistantId) { throw new Error( "Missing OPENAI_API_KEY or OPENAI_ASSISTANT_ID. See README.md to prepare your own OpenAI Assistant." ); } +{{/useOpenAI}} + {{#useAzureOpenAI}} +// See README.md to prepare your own Azure OpenAI Assistant +if (!config.azureOpenAIKey || !config.azureOpenAIAssistantId) { + throw new Error( + "Missing AZURE_OPENAI_API_KEY or AZURE_OPENAI_ASSISTANT_ID. See README.md to prepare your own Azure OpenAI Assistant." + ); +} +{{/useAzureOpenAI}} const { resetMessage } = require("./messages"); const { httpErrorAction, getCurrentWeather, getNickname } = require("./actions"); @@ -17,8 +27,15 @@ const { httpErrorAction, getCurrentWeather, getNickname } = require("./actions") // Create AI components // Use OpenAI const planner = new preview.AssistantsPlanner({ +{{#useOpenAI}} apiKey: config.openAIKey, assistant_id: config.openAIAssistantId, +{{/useOpenAI}} + {{#useAzureOpenAI}} + apiKey: config.azureOpenAIKey, + assistant_id: config.azureOpenAIAssistantId, + endpoint: config.azureOpenAIEndpoint +{{/useAzureOpenAI}} }); // Define storage and application diff --git a/templates/js/custom-copilot-assistant-assistants-api/src/config.js b/templates/js/custom-copilot-assistant-assistants-api/src/config.js.tpl similarity index 56% rename from templates/js/custom-copilot-assistant-assistants-api/src/config.js rename to templates/js/custom-copilot-assistant-assistants-api/src/config.js.tpl index f0dc067d69..bc340643c8 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/src/config.js +++ b/templates/js/custom-copilot-assistant-assistants-api/src/config.js.tpl @@ -3,8 +3,15 @@ const config = { MicrosoftAppType: process.env.BOT_TYPE, MicrosoftAppTenantId: process.env.BOT_TENANT_ID, MicrosoftAppPassword: process.env.BOT_PASSWORD, + {{#useOpenAI}} openAIKey: process.env.OPENAI_API_KEY, openAIAssistantId: process.env.OPENAI_ASSISTANT_ID, + {{/useOpenAI}} + {{#useAzureOpenAI}} + azureOpenAIKey: process.env.AZURE_OPENAI_API_KEY, + azureOpenAIEndpoint: process.env.AZURE_OPENAI_ENDPOINT, + azureOpenAIAssistantId: process.env.AZURE_OPENAI_ASSISTANT_ID, + {{/useAzureOpenAI}} }; module.exports = config; diff --git a/templates/js/custom-copilot-assistant-assistants-api/src/creator.js b/templates/js/custom-copilot-assistant-assistants-api/src/creator.js.tpl similarity index 63% rename from templates/js/custom-copilot-assistant-assistants-api/src/creator.js rename to templates/js/custom-copilot-assistant-assistants-api/src/creator.js.tpl index f99f9cff2f..f04a7e1d37 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/src/creator.js +++ b/templates/js/custom-copilot-assistant-assistants-api/src/creator.js.tpl @@ -1,13 +1,38 @@ const { preview } = require("@microsoft/teams-ai"); +{{#useOpenAI}} const openAIKey = process.argv[2]; if (!openAIKey) { throw new Error("Missing input OpenAI Key"); } +{{/useOpenAI}} +{{#useAzureOpenAI}} +const azureOpenAIKey = process.argv[2]; +{{#azureOpenAIEndpoint}} +const azureOpenAIEndpoint="{{{azureOpenAIEndpoint}}}"; +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +const azureOpenAIEndpoint=""; +{{/azureOpenAIEndpoint}} +{{#azureOpenAIDeploymentName}} +const azureOpenAIDeploymentName="{{{azureOpenAIDeploymentName}}}"; +{{/azureOpenAIDeploymentName}} +{{^azureOpenAIDeploymentName}} +const azureOpenAIDeploymentName=""; +{{/azureOpenAIDeploymentName}} +if (!azureOpenAIKey || !azureOpenAIDeploymentName || !azureOpenAIEndpoint) { + throw new Error("Missing input Azure OpenAI Key, Deployment Name or Endpoint"); +} +{{/useAzureOpenAI}} // Create new Assistant (async () => { +{{#useOpenAI}} const assistant = await preview.AssistantsPlanner.createAssistant(openAIKey, { +{{/useOpenAI}} +{{#useAzureOpenAI}} + const assistant = await preview.AssistantsPlanner.createAssistant(azureOpenAIKey, { +{{/useAzureOpenAI}} name: "Assistant", instructions: [ "You are an intelligent bot that can", @@ -57,8 +82,15 @@ if (!openAIKey) { }, }, ], +{{#useOpenAI}} model: "gpt-3.5-turbo", }); +{{/useOpenAI}} +{{#useAzureOpenAI}} + model: azureOpenAIDeploymentName, + }, + azureOpenAIEndpoint); +{{/useAzureOpenAI}} console.log(`Created a new assistant with an ID of: ${assistant.id}`); })(); diff --git a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl index 610b24cde3..3622b79e23 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl @@ -81,5 +81,12 @@ deploy: BOT_ID: ${{BOT_ID}} BOT_PASSWORD: ${{SECRET_BOT_PASSWORD}} BOT_TYPE: 'MultiTenant' + {{#useOpenAI}} OPENAI_API_KEY: ${{SECRET_OPENAI_API_KEY}} - OPENAI_ASSISTANT_ID: ${{OPENAI_ASSISTANT_ID}} \ No newline at end of file + OPENAI_ASSISTANT_ID: ${{OPENAI_ASSISTANT_ID}} + {{/useOpenAI}} + {{#useAzureOpenAI}} + AZURE_OPENAI_API_KEY: ${{SECRET_AZURE_OPENAI_API_KEY}} + AZURE_OPENAI_ENDPOINT: ${{AZURE_OPENAI_ENDPOINT}} + AZURE_OPENAI_ASSISTANT_ID: ${{AZURE_OPENAI_ASSISTANT_ID}} + {{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl similarity index 73% rename from templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml rename to templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl index 9006194d0d..f02ff2622b 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml +++ b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl @@ -21,6 +21,13 @@ deploy: with: target: ./.localConfigs.testTool envs: + {{#useOpenAI}} OPENAI_API_KEY: ${{SECRET_OPENAI_API_KEY}} OPENAI_ASSISTANT_ID: ${{OPENAI_ASSISTANT_ID}} + {{/useOpenAI}} + {{#useAzureOpenAI}} + AZURE_OPENAI_API_KEY: ${{SECRET_AZURE_OPENAI_API_KEY}} + AZURE_OPENAI_ENDPOINT: ${{AZURE_OPENAI_ENDPOINT}} + AZURE_OPENAI_ASSISTANT_ID: ${{AZURE_OPENAI_ASSISTANT_ID}} + {{/useAzureOpenAI}} TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} \ No newline at end of file diff --git a/templates/ts/custom-copilot-assistant-assistants-api/README.md.tpl b/templates/ts/custom-copilot-assistant-assistants-api/README.md.tpl index 04ab73616f..f60a780f98 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/README.md.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/README.md.tpl @@ -15,7 +15,12 @@ It showcases how to build an AI agent in Teams capable of helping users accompli > - A [Microsoft 365 account for development](https://docs.microsoft.com/microsoftteams/platform/toolkit/accounts) {{/enableTestToolByDefault}} > - [Teams Toolkit Visual Studio Code Extension](https://aka.ms/teams-toolkit) version 5.0.0 and higher or [Teams Toolkit CLI](https://aka.ms/teamsfx-toolkit-cli) +{{#useAzureOpenAI}} +> - An account with [Azure OpenAI](https://aka.ms/oai/access). +{{/useAzureOpenAI}} +{{#useOpenAI}} > - An account with [OpenAI](https://platform.openai.com/). +{{/useOpenAI}} > > **Note** > @@ -24,19 +29,27 @@ It showcases how to build an AI agent in Teams capable of helping users accompli ### Create your own OpenAI Assistant +{{#useOpenAI}} Before running or debugging your bot, please follow these steps to setup your own [OpenAI Assistant](https://platform.openai.com/docs/assistants/overview). +{{/useOpenAI}} +{{#useAzureOpenAI}} +Before running or debugging your bot, please follow these steps to setup your own [Azure OpenAI Assistant](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/assistant). +{{/useAzureOpenAI}} **If you haven't setup any Assistant yet** > This app template provides script `src/creator.ts` to help create assistant. You can change the instructions and settings in the script to customize the assistant. > +{{#useOpenAI}} > After creation, you can change and manage your assistants on [OpenAI](https://platform.openai.com/assistants). +{{/useOpenAI}} 1. Open terminal and run command `npm install` to install all dependency packages ``` > npm install ``` +{{#useOpenAI}} 1. After `npm install` completed, run command `npm run assistant:create -- ` ``` > npm run assistant:create -- xxxxxx @@ -55,6 +68,34 @@ Before running or debugging your bot, please follow these steps to setup your ow SECRET_OPENAI_API_KEY= OPENAI_ASSISTANT_ID= ``` +{{/useOpenAI}} +{{#useAzureOpenAI}} +1. After `npm install` completed, fill in both Azure OpenAI API Endpoint and Azure OpenAI API Deployment name into `src/creator.ts` + ``` + const azureOpenAIEndpoint=""; + const azureOpenAIDeploymentName=""; + ``` +1. Run command `npm run assistant:create -- ` + ``` + > npm run assistant:create -- xxxxxx + ``` +1. The above command will output something like "*Created a new assistant with an ID of: **asst_xxx...***" +1. Fill in Azure OpenAI API Key, endpoint, and the created Assistant ID into `env/.env.*.user` + ``` + SECRET_AZURE_OPENAI_API_KEY= + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_ASSISTANT_ID= + ``` + +**If you already have an Assistant created** + +1. Fill in Azure OpenAI API Key, endpoint, and the created Assistant ID into `env/.env.*.user` + ``` + SECRET_AZURE_OPENAI_API_KEY= + AZURE_OPENAI_ENDPOINT= + AZURE_OPENAI_ASSISTANT_ID= + ``` +{{/useAzureOpenAI}} ### Run Teams Bot locally diff --git a/templates/ts/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl b/templates/ts/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl index 8e9df35f6b..211ba5f5e8 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/env/.env.dev.user.tpl @@ -1,10 +1,27 @@ # This file includes environment variables that will not be committed to git by default. You can set these environment variables in your CI/CD system for your project. # Secrets. Keys prefixed with `SECRET_` will be masked in Teams Toolkit logs. +{{#useOpenAI}} {{#openAIKey}} SECRET_OPENAI_API_KEY='{{{openAIKey}}}' {{/openAIKey}} {{^openAIKey}} SECRET_OPENAI_API_KEY= {{/openAIKey}} -OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. \ No newline at end of file +OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useOpenAI}} +{{#useAzureOpenAI}} +{{#azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY='{{{azureOpenAIKey}}}' +{{/azureOpenAIKey}} +{{^azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY= +{{/azureOpenAIKey}} +{{#azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT='{{{azureOpenAIEndpoint}}}' +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT= +{{/azureOpenAIEndpoint}} +AZURE_OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/ts/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl b/templates/ts/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl index ef104b2fd1..a6c58d7cd0 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/env/.env.local.user.tpl @@ -3,10 +3,27 @@ # If you're adding a secret value, add SECRET_ prefix to the name so Teams Toolkit can handle them properly # Secrets. Keys prefixed with `SECRET_` will be masked in Teams Toolkit logs. SECRET_BOT_PASSWORD= +{{#useOpenAI}} {{#openAIKey}} SECRET_OPENAI_API_KEY='{{{openAIKey}}}' {{/openAIKey}} {{^openAIKey}} SECRET_OPENAI_API_KEY= {{/openAIKey}} -OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. \ No newline at end of file +OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useOpenAI}} +{{#useAzureOpenAI}} +{{#azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY='{{{azureOpenAIKey}}}' +{{/azureOpenAIKey}} +{{^azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY= +{{/azureOpenAIKey}} +{{#azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT='{{{azureOpenAIEndpoint}}}' +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT= +{{/azureOpenAIEndpoint}} +AZURE_OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/ts/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl b/templates/ts/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl index 3808b59f51..485a252c33 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/env/.env.testtool.user.tpl @@ -2,10 +2,27 @@ # If you're adding a secret value, add SECRET_ prefix to the name so Teams Toolkit can handle them properly # Secrets. Keys prefixed with `SECRET_` will be masked in Teams Toolkit logs. +{{#useOpenAI}} {{#openAIKey}} SECRET_OPENAI_API_KEY='{{{openAIKey}}}' {{/openAIKey}} {{^openAIKey}} SECRET_OPENAI_API_KEY= {{/openAIKey}} -OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. \ No newline at end of file +OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useOpenAI}} +{{#useAzureOpenAI}} +{{#azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY='{{{azureOpenAIKey}}}' +{{/azureOpenAIKey}} +{{^azureOpenAIKey}} +SECRET_AZURE_OPENAI_API_KEY= +{{/azureOpenAIKey}} +{{#azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT='{{{azureOpenAIEndpoint}}}' +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +AZURE_OPENAI_ENDPOINT= +{{/azureOpenAIEndpoint}} +AZURE_OPENAI_ASSISTANT_ID= # See README.md for how to fill in this value. +{{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.bicep b/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.bicep.tpl similarity index 78% rename from templates/ts/custom-copilot-assistant-assistants-api/infra/azure.bicep rename to templates/ts/custom-copilot-assistant-assistants-api/infra/azure.bicep.tpl index 289961d996..aa0b321572 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.bicep +++ b/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.bicep.tpl @@ -3,11 +3,22 @@ @description('Used to generate names for all resources in this file') param resourceBaseName string +{{#useOpenAI}} @secure() param openAIKey string @secure() param openAIAssistantId string +{{/useOpenAI}} +{{#useAzureOpenAI}} +@secure() +@description('Required in your bot project to access Azure OpenAI service. You can get it from Azure Portal > OpenAI > Keys > Key1 > Resource Management > Endpoint') +param azureOpenaiKey string +param azureOpenaiEndpoint string + +@secure() +param azureOpenaiAssistantId string +{{/useAzureOpenAI}} param webAppSKU string @@ -69,6 +80,7 @@ resource webApp 'Microsoft.Web/sites@2021-02-01' = { name: 'BOT_TYPE' value: 'UserAssignedMsi' } + {{#useOpenAI}} { name: 'OPENAI_API_KEY' value: openAIKey @@ -77,6 +89,21 @@ resource webApp 'Microsoft.Web/sites@2021-02-01' = { name: 'OPENAI_ASSISTANT_ID' value: openAIAssistantId } + {{/useOpenAI}} + {{#useAzureOpenAI}} + { + name: 'AZURE_OPENAI_API_KEY' + value: azureOpenaiKey + } + { + name: 'AZURE_OPENAI_ENDPOINT' + value: azureOpenaiEndpoint + } + { + name: 'AZURE_OPENAI_ASSISTANT_ID' + value: azureOpenaiAssistantId + } + {{/useAzureOpenAI}} ] ftpsState: 'FtpsOnly' } diff --git a/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl b/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl index 12a067a9e8..84baa54b8a 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/infra/azure.parameters.json.tpl @@ -5,12 +5,25 @@ "resourceBaseName": { "value": "bot${{RESOURCE_SUFFIX}}" }, + {{#useOpenAI}} "openAIKey": { "value": "${{SECRET_OPENAI_API_KEY}}" }, "openAIAssistantId": { "value": "${{OPENAI_ASSISTANT_ID}}" }, + {{/useOpenAI}} + {{#useAzureOpenAI}} + "azureOpenaiKey": { + "value": "${{SECRET_AZURE_OPENAI_API_KEY}}" + }, + "azureOpenaiEndpoint" : { + "value": "${{AZURE_OPENAI_ENDPOINT}}" + }, + "azureOpenaiAssistantId": { + "value": "${{AZURE_OPENAI_ASSISTANT_ID}}" + }, + {{/useAzureOpenAI}} "webAppSKU": { "value": "B1" }, diff --git a/templates/ts/custom-copilot-assistant-assistants-api/src/app/app.ts b/templates/ts/custom-copilot-assistant-assistants-api/src/app/app.ts.tpl similarity index 72% rename from templates/ts/custom-copilot-assistant-assistants-api/src/app/app.ts rename to templates/ts/custom-copilot-assistant-assistants-api/src/app/app.ts.tpl index 9a3082e7f1..ec1a2f4ef4 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/src/app/app.ts +++ b/templates/ts/custom-copilot-assistant-assistants-api/src/app/app.ts.tpl @@ -5,12 +5,22 @@ import { Application, AI, preview } from "@microsoft/teams-ai"; import config from "../config"; +{{#useOpenAI}} // See README.md to prepare your own OpenAI Assistant if (!config.openAIKey || !config.openAIAssistantId) { throw new Error( "Missing OPENAI_API_KEY or OPENAI_ASSISTANT_ID. See README.md to prepare your own OpenAI Assistant." ); } +{{/useOpenAI}} + {{#useAzureOpenAI}} +// See README.md to prepare your own Azure OpenAI Assistant +if (!config.azureOpenAIKey || !config.azureOpenAIAssistantId) { + throw new Error( + "Missing AZURE_OPENAI_API_KEY or AZURE_OPENAI_ASSISTANT_ID. See README.md to prepare your own Azure OpenAI Assistant." + ); +} +{{/useAzureOpenAI}} import { resetMessage } from "./messages"; import { httpErrorAction, getCurrentWeather, getNickname } from "./actions"; @@ -18,8 +28,15 @@ import { httpErrorAction, getCurrentWeather, getNickname } from "./actions"; // Create AI components // Use OpenAI const planner = new preview.AssistantsPlanner({ + {{#useOpenAI}} apiKey: config.openAIKey, assistant_id: config.openAIAssistantId, + {{/useOpenAI}} + {{#useAzureOpenAI}} + apiKey: config.azureOpenAIKey, + assistant_id: config.azureOpenAIAssistantId, + endpoint: config.azureOpenAIEndpoint + {{/useAzureOpenAI}} }); // Define storage and application diff --git a/templates/ts/custom-copilot-assistant-assistants-api/src/config.ts b/templates/ts/custom-copilot-assistant-assistants-api/src/config.ts.tpl similarity index 55% rename from templates/ts/custom-copilot-assistant-assistants-api/src/config.ts rename to templates/ts/custom-copilot-assistant-assistants-api/src/config.ts.tpl index 803aeca261..d9824c4ed0 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/src/config.ts +++ b/templates/ts/custom-copilot-assistant-assistants-api/src/config.ts.tpl @@ -3,8 +3,15 @@ const config = { MicrosoftAppType: process.env.BOT_TYPE, MicrosoftAppTenantId: process.env.BOT_TENANT_ID, MicrosoftAppPassword: process.env.BOT_PASSWORD, + {{#useOpenAI}} openAIKey: process.env.OPENAI_API_KEY, openAIAssistantId: process.env.OPENAI_ASSISTANT_ID, + {{/useOpenAI}} + {{#useAzureOpenAI}} + azureOpenAIKey: process.env.AZURE_OPENAI_API_KEY, + azureOpenAIEndpoint: process.env.AZURE_OPENAI_ENDPOINT, + azureOpenAIAssistantId: process.env.AZURE_OPENAI_ASSISTANT_ID, + {{/useAzureOpenAI}} }; export default config; diff --git a/templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts b/templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts deleted file mode 100644 index 802c43d419..0000000000 --- a/templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { preview } from "@microsoft/teams-ai"; - -const openAIKey = process.argv[2]; -if (!openAIKey) { - throw new Error("Missing input OpenAI Key"); -} - -// Create new Assistant -(async () => { - const assistant = await preview.AssistantsPlanner.createAssistant(openAIKey, { - name: "Assistant", - instructions: [ - "You are an intelligent bot that can", - "- write and run code to answer math questions", - "- use the provided functions to answer questions", - ].join("\n"), - tools: [ - { - type: "code_interpreter", - }, - { - type: "function", - function: { - name: "getCurrentWeather", - description: "Get the weather in location", - parameters: { - type: "object", - properties: { - location: { - type: "string", - description: "The city and state e.g. San Francisco, CA", - }, - unit: { - type: "string", - enum: ["c", "f"], - }, - }, - required: ["location"], - }, - }, - }, - { - type: "function", - function: { - name: "getNickname", - description: "Get the nickname of a city", - parameters: { - type: "object", - properties: { - location: { - type: "string", - description: "The city and state e.g. San Francisco, CA", - }, - }, - required: ["location"], - }, - }, - }, - ], - model: "gpt-3.5-turbo", - }); - - console.log(`Created a new assistant with an ID of: ${assistant.id}`); -})(); diff --git a/templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts.tpl b/templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts.tpl new file mode 100644 index 0000000000..7e25b32d29 --- /dev/null +++ b/templates/ts/custom-copilot-assistant-assistants-api/src/creator.ts.tpl @@ -0,0 +1,144 @@ +import { preview } from "@microsoft/teams-ai"; + +{{#useOpenAI}} +const openAIKey = process.argv[2]; +if (!openAIKey) { + throw new Error("Missing input OpenAI Key"); +} +{{/useOpenAI}} +{{#useAzureOpenAI}} +const azureOpenAIKey = process.argv[2]; +{{#azureOpenAIEndpoint}} +const azureOpenAIEndpoint="{{{azureOpenAIEndpoint}}}"; +{{/azureOpenAIEndpoint}} +{{^azureOpenAIEndpoint}} +const azureOpenAIEndpoint=""; +{{/azureOpenAIEndpoint}} +{{#azureOpenAIDeploymentName}} +const azureOpenAIDeploymentName="{{{azureOpenAIDeploymentName}}}"; +{{/azureOpenAIDeploymentName}} +{{^azureOpenAIDeploymentName}} +const azureOpenAIDeploymentName=""; +{{/azureOpenAIDeploymentName}} +if (!azureOpenAIKey || !azureOpenAIDeploymentName || !azureOpenAIEndpoint) { + throw new Error("Missing input Azure OpenAI Key, Deployment Name or Endpoint"); +} +{{/useAzureOpenAI}} + +// Create new Assistant +(async () => { +{{#useOpenAI}} + const assistant = await preview.AssistantsPlanner.createAssistant(openAIKey, { + name: "Assistant", + instructions: [ + "You are an intelligent bot that can", + "- write and run code to answer math questions", + "- use the provided functions to answer questions", + ].join("\n"), + tools: [ + { + type: "code_interpreter", + }, + { + type: "function", + function: { + name: "getCurrentWeather", + description: "Get the weather in location", + parameters: { + type: "object", + properties: { + location: { + type: "string", + description: "The city and state e.g. San Francisco, CA", + }, + unit: { + type: "string", + enum: ["c", "f"], + }, + }, + required: ["location"], + }, + }, + }, + { + type: "function", + function: { + name: "getNickname", + description: "Get the nickname of a city", + parameters: { + type: "object", + properties: { + location: { + type: "string", + description: "The city and state e.g. San Francisco, CA", + }, + }, + required: ["location"], + }, + }, + }, + ], + model: "gpt-3.5-turbo", + }); +{{/useOpenAI}} +{{#useAzureOpenAI}} + const assistant = await preview.AssistantsPlanner.createAssistant( + azureOpenAIKey, + { + name: "Assistant", + instructions: [ + "You are an intelligent bot that can", + "- write and run code to answer math questions", + "- use the provided functions to answer questions", + ].join("\n"), + tools: [ + { + type: "code_interpreter", + }, + { + type: "function", + function: { + name: "getCurrentWeather", + description: "Get the weather in location", + parameters: { + type: "object", + properties: { + location: { + type: "string", + description: "The city and state e.g. San Francisco, CA", + }, + unit: { + type: "string", + enum: ["c", "f"], + }, + }, + required: ["location"], + }, + }, + }, + { + type: "function", + function: { + name: "getNickname", + description: "Get the nickname of a city", + parameters: { + type: "object", + properties: { + location: { + type: "string", + description: "The city and state e.g. San Francisco, CA", + }, + }, + required: ["location"], + }, + }, + }, + ], + model: azureOpenAIDeploymentName, + }, + azureOpenAIEndpoint + ); +{{/useAzureOpenAI}} + + console.log(`Created a new assistant with an ID of: ${assistant.id}`); +})(); diff --git a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl index 610b24cde3..3622b79e23 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl @@ -81,5 +81,12 @@ deploy: BOT_ID: ${{BOT_ID}} BOT_PASSWORD: ${{SECRET_BOT_PASSWORD}} BOT_TYPE: 'MultiTenant' + {{#useOpenAI}} OPENAI_API_KEY: ${{SECRET_OPENAI_API_KEY}} - OPENAI_ASSISTANT_ID: ${{OPENAI_ASSISTANT_ID}} \ No newline at end of file + OPENAI_ASSISTANT_ID: ${{OPENAI_ASSISTANT_ID}} + {{/useOpenAI}} + {{#useAzureOpenAI}} + AZURE_OPENAI_API_KEY: ${{SECRET_AZURE_OPENAI_API_KEY}} + AZURE_OPENAI_ENDPOINT: ${{AZURE_OPENAI_ENDPOINT}} + AZURE_OPENAI_ASSISTANT_ID: ${{AZURE_OPENAI_ASSISTANT_ID}} + {{/useAzureOpenAI}} \ No newline at end of file diff --git a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl similarity index 73% rename from templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml rename to templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl index 9006194d0d..f02ff2622b 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml +++ b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl @@ -21,6 +21,13 @@ deploy: with: target: ./.localConfigs.testTool envs: + {{#useOpenAI}} OPENAI_API_KEY: ${{SECRET_OPENAI_API_KEY}} OPENAI_ASSISTANT_ID: ${{OPENAI_ASSISTANT_ID}} + {{/useOpenAI}} + {{#useAzureOpenAI}} + AZURE_OPENAI_API_KEY: ${{SECRET_AZURE_OPENAI_API_KEY}} + AZURE_OPENAI_ENDPOINT: ${{AZURE_OPENAI_ENDPOINT}} + AZURE_OPENAI_ASSISTANT_ID: ${{AZURE_OPENAI_ASSISTANT_ID}} + {{/useAzureOpenAI}} TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} \ No newline at end of file From 43d2938eaaaf29e2ba5a8dd20ab34298cd751efe Mon Sep 17 00:00:00 2001 From: Annefch <33708747+Annefch@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:32:15 +0800 Subject: [PATCH 04/52] test: add case for Custom Copilot Rag Custom Api (#12262) * test: add auto cases for Custom API * test: add auto cases for Custom API * test: add auto cases for Custom API --- packages/tests/scripts/pvt.json | 18 ++- ...-chatdata-customapi-js-azureopenai.test.ts | 103 ++++++++++++++ ...debug-chatdata-customapi-js-openai.test.ts | 91 +++++++++++++ ...-chatdata-customapi-py-azureopenai.test.ts | 116 ++++++++++++++++ ...debug-chatdata-customapi-py-openai.test.ts | 102 ++++++++++++++ ...-chatdata-customapi-ts-azureopenai.test.ts | 106 +++++++++++++++ ...debug-chatdata-customapi-ts-openai.test.ts | 92 +++++++++++++ .../ui-test/localdebug/localdebugContext.ts | 9 ++ ...-customapi-js-azureopenai-win-only.test.ts | 125 +++++++++++++++++ ...tdata-customapi-js-openai-win-only.test.ts | 110 +++++++++++++++ ...-customapi-py-azureopenai-win-only.test.ts | 127 ++++++++++++++++++ ...tdata-customapi-py-openai-win-only.test.ts | 112 +++++++++++++++ ...-customapi-ts-azureopenai-win-only.test.ts | 126 +++++++++++++++++ ...tdata-customapi-ts-openai-win-only.test.ts | 111 +++++++++++++++ packages/tests/src/utils/constants.ts | 1 + .../tests/src/utils/playwrightOperation.ts | 75 +++++++++++ packages/tests/src/utils/vscodeOperation.ts | 36 ++++- 17 files changed, 1457 insertions(+), 3 deletions(-) create mode 100644 packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-azureopenai.test.ts create mode 100644 packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-openai.test.ts create mode 100644 packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-azureopenai.test.ts create mode 100644 packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-openai.test.ts create mode 100644 packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-azureopenai.test.ts create mode 100644 packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-openai.test.ts create mode 100644 packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-azureopenai-win-only.test.ts create mode 100644 packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-openai-win-only.test.ts create mode 100644 packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-azureopenai-win-only.test.ts create mode 100644 packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-openai-win-only.test.ts create mode 100644 packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-azureopenai-win-only.test.ts create mode 100644 packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-openai-win-only.test.ts diff --git a/packages/tests/scripts/pvt.json b/packages/tests/scripts/pvt.json index db297c52ef..6da79d3e49 100644 --- a/packages/tests/scripts/pvt.json +++ b/packages/tests/scripts/pvt.json @@ -91,7 +91,15 @@ "remotedebug-aichat-bot-py-azureopenai-win-only", "remotedebug-aichat-bot-py-openai-win-only", "remotedebug-aichat-bot-ts-azureopenai-win-only", - "remotedebug-aichat-bot-ts-openai-win-only" + "remotedebug-aichat-bot-ts-openai-win-only", + "remotedebug-chatdata-customapi-js-azureopenai-win-only", + "remotedebug-chatdata-customapi-js-openai-win-only", + "remotedebug-chatdata-customapi-ts-azureopenai-win-only", + "remotedebug-chatdata-customapi-ts-openai-win-only", + "remotedebug-chatdata-customapi-py-azureopenai-win-only", + "remotedebug-chatdata-customapi-py-openai-win-only" + + ], "node-20": ["localdebug-obo-tab"] }, @@ -151,7 +159,13 @@ "localdebug-aichat-bot-py-azureopenai", "localdebug-aichat-bot-py-openai", "localdebug-aichat-bot-ts-azureopenai", - "localdebug-aichat-bot-ts-openai" + "localdebug-aichat-bot-ts-openai", + "localdebug-chatdata-customapi-js-azureopenai", + "localdebug-chatdata-customapi-js-openai", + "localdebug-chatdata-customapi-ts-azureopenai", + "localdebug-chatdata-customapi-ts-openai", + "localdebug-chatdata-customapi-py-azureopenai", + "localdebug-chatdata-customapi-py-openai" ], "node-20": ["localdebug-obo-tab"] }, diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-azureopenai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-azureopenai.test.ts new file mode 100644 index 0000000000..3e69631fc7 --- /dev/null +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-azureopenai.test.ts @@ -0,0 +1,103 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { startDebugging, waitForTerminal } from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { LocalDebugTestContext } from "./localdebugContext"; +import { + Timeout, + LocalDebugTaskLabel, + DebugItemSelect, + ValidationContent, +} from "../../utils/constants"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Local Debug Tests", function () { + this.timeout(Timeout.testCase); + let localDebugTestContext: LocalDebugTestContext; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + localDebugTestContext = new LocalDebugTestContext("cdcustomapi", { + customCopilotRagType: "custom-copilot-rag-customApi", + }); + await localDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishTestCase); + await localDebugTestContext.after(false, true); + }); + + it( + "[auto][JS][Azure OpenAI] Local debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 27588577, + author: "v-annefu@microsoft.com", + }, + async function () { + const projectPath = path.resolve( + localDebugTestContext.testRootFolder, + localDebugTestContext.appName + ); + validateFileExist(projectPath, "src/index.js"); + const envPath = path.resolve(projectPath, "env", ".env.local.user"); + const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; + const azureOpenAiKey = OpenAiKey.azureOpenAiKey + ? OpenAiKey.azureOpenAiKey + : "fake"; + const azureOpenAiEndpoint = OpenAiKey.azureOpenAiEndpoint + ? OpenAiKey.azureOpenAiEndpoint + : "https://test.com"; + const azureOpenAiModelDeploymentName = + OpenAiKey.azureOpenAiModelDeploymentName + ? OpenAiKey.azureOpenAiModelDeploymentName + : "fake"; + editDotEnvFile(envPath, "SECRET_AZURE_OPENAI_API_KEY", azureOpenAiKey); + editDotEnvFile(envPath, "AZURE_OPENAI_ENDPOINT", azureOpenAiEndpoint); + editDotEnvFile( + envPath, + "AZURE_OPENAI_MODEL_DEPLOYMENT_NAME", + azureOpenAiModelDeploymentName + ); + + await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); + await waitForTerminal(LocalDebugTaskLabel.StartLocalTunnel); + await waitForTerminal(LocalDebugTaskLabel.StartBotApp, "Bot Started"); + const teamsAppId = await localDebugTestContext.getTeamsAppId(); + const page = await initPage( + localDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await localDebugTestContext.validateLocalStateForBot(); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-openai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-openai.test.ts new file mode 100644 index 0000000000..80251dc977 --- /dev/null +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-js-openai.test.ts @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { startDebugging, waitForTerminal } from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { LocalDebugTestContext } from "./localdebugContext"; +import { + Timeout, + LocalDebugTaskLabel, + DebugItemSelect, + ValidationContent, +} from "../../utils/constants"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Local Debug Tests", function () { + this.timeout(Timeout.testCase); + let localDebugTestContext: LocalDebugTestContext; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + localDebugTestContext = new LocalDebugTestContext("cdcustomapi", { + customCopilotRagType: "custom-copilot-rag-customApi", + llmServiceType: "llm-service-openai", + }); + await localDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishTestCase); + await localDebugTestContext.after(false, true); + }); + + it( + "[auto][JS][OpenAI] Local debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 27588587, + author: "v-annefu@microsoft.com", + }, + async function () { + const projectPath = path.resolve( + localDebugTestContext.testRootFolder, + localDebugTestContext.appName + ); + validateFileExist(projectPath, "src/index.js"); + const envPath = path.resolve(projectPath, "env", ".env.local.user"); + const isRealKey = OpenAiKey.openAiKey ? true : false; + const openAiKey = OpenAiKey.openAiKey ? OpenAiKey.openAiKey : "fake"; + editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); + + await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); + + await waitForTerminal(LocalDebugTaskLabel.StartLocalTunnel); + await waitForTerminal(LocalDebugTaskLabel.StartBotApp, "Bot Started"); + + const teamsAppId = await localDebugTestContext.getTeamsAppId(); + const page = await initPage( + localDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await localDebugTestContext.validateLocalStateForBot(); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-azureopenai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-azureopenai.test.ts new file mode 100644 index 0000000000..39c7587b2f --- /dev/null +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-azureopenai.test.ts @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { + createEnvironmentWithPython, + startDebugging, + waitForTerminal, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { LocalDebugTestContext } from "./localdebugContext"; +import { + Timeout, + LocalDebugTaskLabel, + DebugItemSelect, + ValidationContent, + LocalDebugTaskLabel2, +} from "../../utils/constants"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Local Debug Tests", function () { + this.timeout(Timeout.testCase); + let localDebugTestContext: LocalDebugTestContext; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + localDebugTestContext = new LocalDebugTestContext("cdcustomapi", { + lang: "python", + customCopilotRagType: "custom-copilot-rag-customApi", + }); + await localDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishTestCase); + await localDebugTestContext.after(false, true); + }); + + it( + "[auto][Python][Azure OpenAI] Local debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 28969537, + author: "v-annefu@microsoft.com", + }, + async function () { + const projectPath = path.resolve( + localDebugTestContext.testRootFolder, + localDebugTestContext.appName + ); + validateFileExist(projectPath, "src/app.py"); + const envPath = path.resolve(projectPath, "env", ".env.local.user"); + const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; + const azureOpenAiKey = OpenAiKey.azureOpenAiKey + ? OpenAiKey.azureOpenAiKey + : "fake"; + const azureOpenAiEndpoint = OpenAiKey.azureOpenAiEndpoint + ? OpenAiKey.azureOpenAiEndpoint + : "https://test.com"; + const azureOpenAiModelDeploymentName = + OpenAiKey.azureOpenAiModelDeploymentName + ? OpenAiKey.azureOpenAiModelDeploymentName + : "fake"; + editDotEnvFile(envPath, "SECRET_AZURE_OPENAI_API_KEY", azureOpenAiKey); + editDotEnvFile(envPath, "AZURE_OPENAI_ENDPOINT", azureOpenAiEndpoint); + editDotEnvFile( + envPath, + "AZURE_OPENAI_MODEL_DEPLOYMENT_NAME", + azureOpenAiModelDeploymentName + ); + + await createEnvironmentWithPython(); + + await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); + + await waitForTerminal(LocalDebugTaskLabel.StartLocalTunnel); + await waitForTerminal( + LocalDebugTaskLabel2.PythonDebugConsole, + "Running on http://localhost:3978" + ); + + const teamsAppId = await localDebugTestContext.getTeamsAppId(); + const page = await initPage( + localDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await localDebugTestContext.validateLocalStateForBot(); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-openai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-openai.test.ts new file mode 100644 index 0000000000..637f723684 --- /dev/null +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-py-openai.test.ts @@ -0,0 +1,102 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { + createEnvironmentWithPython, + startDebugging, + waitForTerminal, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { LocalDebugTestContext } from "./localdebugContext"; +import { + Timeout, + LocalDebugTaskLabel, + DebugItemSelect, + ValidationContent, + LocalDebugTaskLabel2, +} from "../../utils/constants"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Local Debug Tests", function () { + this.timeout(Timeout.testCase); + let localDebugTestContext: LocalDebugTestContext; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + localDebugTestContext = new LocalDebugTestContext("cdcustomapi", { + lang: "python", + customCopilotRagType: "custom-copilot-rag-customApi", + llmServiceType: "llm-service-openai", + }); + await localDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishTestCase); + await localDebugTestContext.after(false, true); + }); + + it( + "[auto][Python][OpenAI] Local debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 28969579, + author: "v-annefu@microsoft.com", + }, + async function () { + const projectPath = path.resolve( + localDebugTestContext.testRootFolder, + localDebugTestContext.appName + ); + validateFileExist(projectPath, "src/app.py"); + const envPath = path.resolve(projectPath, "env", ".env.local.user"); + const isRealKey = OpenAiKey.openAiKey ? true : false; + const openAiKey = OpenAiKey.openAiKey ? OpenAiKey.openAiKey : "fake"; + editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); + + await createEnvironmentWithPython(); + + await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); + + await waitForTerminal(LocalDebugTaskLabel.StartLocalTunnel); + await waitForTerminal( + LocalDebugTaskLabel2.PythonDebugConsole, + "Running on http://localhost:3978" + ); + + const teamsAppId = await localDebugTestContext.getTeamsAppId(); + const page = await initPage( + localDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await localDebugTestContext.validateLocalStateForBot(); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-azureopenai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-azureopenai.test.ts new file mode 100644 index 0000000000..1c347ad621 --- /dev/null +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-azureopenai.test.ts @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { startDebugging, waitForTerminal } from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { LocalDebugTestContext } from "./localdebugContext"; +import { + Timeout, + LocalDebugTaskLabel, + DebugItemSelect, + ValidationContent, +} from "../../utils/constants"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Local Debug Tests", function () { + this.timeout(Timeout.testCase); + let localDebugTestContext: LocalDebugTestContext; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + localDebugTestContext = new LocalDebugTestContext("cdcustomapi", { + lang: "typescript", + customCopilotRagType: "custom-copilot-rag-customApi", + }); + await localDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishTestCase); + await localDebugTestContext.after(false, true); + }); + + it( + "[auto][TS][Azure OpenAI] Local debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 27588564, + author: "v-annefu@microsoft.com", + }, + async function () { + const projectPath = path.resolve( + localDebugTestContext.testRootFolder, + localDebugTestContext.appName + ); + validateFileExist(projectPath, "src/index.ts"); + const envPath = path.resolve(projectPath, "env", ".env.local.user"); + const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; + const azureOpenAiKey = OpenAiKey.azureOpenAiKey + ? OpenAiKey.azureOpenAiKey + : "fake"; + const azureOpenAiEndpoint = OpenAiKey.azureOpenAiEndpoint + ? OpenAiKey.azureOpenAiEndpoint + : "https://test.com"; + const azureOpenAiModelDeploymentName = + OpenAiKey.azureOpenAiModelDeploymentName + ? OpenAiKey.azureOpenAiModelDeploymentName + : "fake"; + editDotEnvFile(envPath, "SECRET_AZURE_OPENAI_API_KEY", azureOpenAiKey); + editDotEnvFile(envPath, "AZURE_OPENAI_ENDPOINT", azureOpenAiEndpoint); + editDotEnvFile( + envPath, + "AZURE_OPENAI_MODEL_DEPLOYMENT_NAME", + azureOpenAiModelDeploymentName + ); + + await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); + + await waitForTerminal(LocalDebugTaskLabel.StartLocalTunnel); + await waitForTerminal(LocalDebugTaskLabel.StartBotApp, "Bot Started"); + + const teamsAppId = await localDebugTestContext.getTeamsAppId(); + const page = await initPage( + localDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await localDebugTestContext.validateLocalStateForBot(); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-openai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-openai.test.ts new file mode 100644 index 0000000000..987b009737 --- /dev/null +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-customapi-ts-openai.test.ts @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { startDebugging, waitForTerminal } from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { LocalDebugTestContext } from "./localdebugContext"; +import { + Timeout, + LocalDebugTaskLabel, + DebugItemSelect, + ValidationContent, +} from "../../utils/constants"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Local Debug Tests", function () { + this.timeout(Timeout.testCase); + let localDebugTestContext: LocalDebugTestContext; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + localDebugTestContext = new LocalDebugTestContext("cdcustomapi", { + lang: "typescript", + customCopilotRagType: "custom-copilot-rag-customApi", + llmServiceType: "llm-service-openai", + }); + await localDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishTestCase); + await localDebugTestContext.after(false, true); + }); + + it( + "[auto][TS][OpenAI] Local debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 27588580, + author: "v-annefu@microsoft.com", + }, + async function () { + const projectPath = path.resolve( + localDebugTestContext.testRootFolder, + localDebugTestContext.appName + ); + validateFileExist(projectPath, "src/index.ts"); + const envPath = path.resolve(projectPath, "env", ".env.local.user"); + const isRealKey = OpenAiKey.openAiKey ? true : false; + const openAiKey = OpenAiKey.openAiKey ? OpenAiKey.openAiKey : "fake"; + editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); + + await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); + + await waitForTerminal(LocalDebugTaskLabel.StartLocalTunnel); + await waitForTerminal(LocalDebugTaskLabel.StartBotApp, "Bot Started"); + + const teamsAppId = await localDebugTestContext.getTeamsAppId(); + const page = await initPage( + localDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await localDebugTestContext.validateLocalStateForBot(); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/localdebug/localdebugContext.ts b/packages/tests/src/ui-test/localdebug/localdebugContext.ts index 711157c53d..b87641de39 100644 --- a/packages/tests/src/ui-test/localdebug/localdebugContext.ts +++ b/packages/tests/src/ui-test/localdebug/localdebugContext.ts @@ -35,6 +35,7 @@ export type LocalDebugTestName = | "aichat" | "aiagent" | "chatdata" + | "cdcustomapi" | "msgnewapi" | "msgapikey" | "msgmicroentra"; @@ -323,6 +324,14 @@ export class LocalDebugTestContext extends TestContext { `teamsapp new --app-name ${this.appName} --interactive false --capability search-app --me-architecture new-api --api-auth microsoft-entra --programming-language ${this.lang} --telemetry false` ); break; + case "cdcustomapi": //chat data customApi + const apiSpecPath = + "https://raw.githubusercontent.com/SLdragon/example-openapi-spec/main/real-no-auth.yaml"; + await execCommand( + this.testRootFolder, + `teamsapp new --app-name ${this.appName} --interactive false --capability custom-copilot-rag --custom-copilot-rag ${this.customCopilotRagType} --llm-service ${this.llmServiceType} --programming-language ${this.lang} --openapi-spec-location ${apiSpecPath} --api-operation "GET /repairs" --telemetry false` + ); + break; } if (this.needMigrate) { await execCommand(this.testRootFolder, `set TEAMSFX_V3=true`); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-azureopenai-win-only.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-azureopenai-win-only.test.ts new file mode 100644 index 0000000000..1fc41a642d --- /dev/null +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-azureopenai-win-only.test.ts @@ -0,0 +1,125 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { VSBrowser } from "vscode-extension-tester"; +import { Timeout, ValidationContent } from "../../utils/constants"; +import { + RemoteDebugTestContext, + provisionProject, + deployProject, +} from "./remotedebugContext"; +import { + execCommandIfExist, + createNewProject, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Remote debug Tests", function () { + this.timeout(Timeout.testAzureCase); + let remoteDebugTestContext: RemoteDebugTestContext; + let testRootFolder: string; + let appName: string; + const appNameCopySuffix = "copy"; + let newAppFolderName: string; + let projectPath: string; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + remoteDebugTestContext = new RemoteDebugTestContext("cdcustomapi"); + testRootFolder = remoteDebugTestContext.testRootFolder; + appName = remoteDebugTestContext.appName; + newAppFolderName = appName + appNameCopySuffix; + projectPath = path.resolve(testRootFolder, newAppFolderName); + await remoteDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishAzureTestCase); + await remoteDebugTestContext.after(); + + //Close the folder and cleanup local sample project + await execCommandIfExist("Workspaces: Close Workspace", Timeout.webView); + console.log(`[Successfully] start to clean up for ${projectPath}`); + await remoteDebugTestContext.cleanUp( + appName, + projectPath, + false, + true, + false + ); + }); + + it( + "[auto][JS][Azure OpenAI] Remote debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 28891605, + author: "v-annefu@microsoft.com", + }, + async function () { + const driver = VSBrowser.instance.driver; + await createNewProject("cdcustomapi", appName, { + aiType: "Azure OpenAI", + dataOption: "Custom API", + }); + validateFileExist(projectPath, "src/index.js"); + const envPath = path.resolve(projectPath, "env", ".env.dev.user"); + const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; + const azureOpenAiKey = OpenAiKey.azureOpenAiKey + ? OpenAiKey.azureOpenAiKey + : "fake"; + const azureOpenAiEndpoint = OpenAiKey.azureOpenAiEndpoint + ? OpenAiKey.azureOpenAiEndpoint + : "https://test.com"; + const azureOpenAiModelDeploymentName = + OpenAiKey.azureOpenAiModelDeploymentName + ? OpenAiKey.azureOpenAiModelDeploymentName + : "fake"; + editDotEnvFile(envPath, "SECRET_AZURE_OPENAI_API_KEY", azureOpenAiKey); + editDotEnvFile(envPath, "AZURE_OPENAI_ENDPOINT", azureOpenAiEndpoint); + editDotEnvFile( + envPath, + "AZURE_OPENAI_MODEL_DEPLOYMENT_NAME", + azureOpenAiModelDeploymentName + ); + await provisionProject(appName, projectPath); + await deployProject(projectPath, Timeout.botDeploy); + const teamsAppId = await remoteDebugTestContext.getTeamsAppId( + projectPath + ); + const page = await initPage( + remoteDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await driver.sleep(Timeout.longTimeWait); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-openai-win-only.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-openai-win-only.test.ts new file mode 100644 index 0000000000..5e94e8c86d --- /dev/null +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-js-openai-win-only.test.ts @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { VSBrowser } from "vscode-extension-tester"; +import { Timeout, ValidationContent } from "../../utils/constants"; +import { + RemoteDebugTestContext, + provisionProject, + deployProject, +} from "./remotedebugContext"; +import { + execCommandIfExist, + createNewProject, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Remote debug Tests", function () { + this.timeout(Timeout.testAzureCase); + let remoteDebugTestContext: RemoteDebugTestContext; + let testRootFolder: string; + let appName: string; + const appNameCopySuffix = "copy"; + let newAppFolderName: string; + let projectPath: string; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + remoteDebugTestContext = new RemoteDebugTestContext("cdcustomapi"); + testRootFolder = remoteDebugTestContext.testRootFolder; + appName = remoteDebugTestContext.appName; + newAppFolderName = appName + appNameCopySuffix; + projectPath = path.resolve(testRootFolder, newAppFolderName); + await remoteDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishAzureTestCase); + await remoteDebugTestContext.after(); + + //Close the folder and cleanup local sample project + await execCommandIfExist("Workspaces: Close Workspace", Timeout.webView); + console.log(`[Successfully] start to clean up for ${projectPath}`); + await remoteDebugTestContext.cleanUp( + appName, + projectPath, + false, + true, + false + ); + }); + + it( + "[auto][JS][Azure OpenAI] Remote debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 28891605, + author: "v-annefu@microsoft.com", + }, + async function () { + const driver = VSBrowser.instance.driver; + await createNewProject("cdcustomapi", appName, { + aiType: "OpenAI", + dataOption: "Custom API", + }); + validateFileExist(projectPath, "src/index.js"); + const envPath = path.resolve(projectPath, "env", ".env.dev.user"); + const isRealKey = OpenAiKey.openAiKey ? true : false; + const openAiKey = OpenAiKey.openAiKey ? OpenAiKey.openAiKey : "fake"; + editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); + await provisionProject(appName, projectPath); + await deployProject(projectPath, Timeout.botDeploy); + const teamsAppId = await remoteDebugTestContext.getTeamsAppId( + projectPath + ); + const page = await initPage( + remoteDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await driver.sleep(Timeout.longTimeWait); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-azureopenai-win-only.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-azureopenai-win-only.test.ts new file mode 100644 index 0000000000..8edbdcd481 --- /dev/null +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-azureopenai-win-only.test.ts @@ -0,0 +1,127 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { VSBrowser } from "vscode-extension-tester"; +import { Timeout, ValidationContent } from "../../utils/constants"; +import { + RemoteDebugTestContext, + provisionProject, + deployProject, +} from "./remotedebugContext"; +import { + execCommandIfExist, + createNewProject, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; +import { RetryHandler } from "../../utils/retryHandler"; + +describe("Remote debug Tests", function () { + this.timeout(Timeout.testAzureCase); + let remoteDebugTestContext: RemoteDebugTestContext; + let testRootFolder: string; + let appName: string; + const appNameCopySuffix = "copy"; + let newAppFolderName: string; + let projectPath: string; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + remoteDebugTestContext = new RemoteDebugTestContext("cdcustomapi"); + testRootFolder = remoteDebugTestContext.testRootFolder; + appName = remoteDebugTestContext.appName; + newAppFolderName = appName + appNameCopySuffix; + projectPath = path.resolve(testRootFolder, newAppFolderName); + await remoteDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishAzureTestCase); + await remoteDebugTestContext.after(); + + //Close the folder and cleanup local sample project + await execCommandIfExist("Workspaces: Close Workspace", Timeout.webView); + console.log(`[Successfully] start to clean up for ${projectPath}`); + await remoteDebugTestContext.cleanUp( + appName, + projectPath, + false, + true, + false + ); + }); + + it( + "[auto][Python][Azure OpenAI] Remote debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 29165758, + author: "v-annefu@microsoft.com", + }, + async function () { + const driver = VSBrowser.instance.driver; + await createNewProject("cdcustomapi", appName, { + aiType: "Azure OpenAI", + lang: "Python", + dataOption: "Custom API", + }); + validateFileExist(projectPath, "src/app.py"); + const envPath = path.resolve(projectPath, "env", ".env.dev.user"); + const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; + const azureOpenAiKey = OpenAiKey.azureOpenAiKey + ? OpenAiKey.azureOpenAiKey + : "fake"; + const azureOpenAiEndpoint = OpenAiKey.azureOpenAiEndpoint + ? OpenAiKey.azureOpenAiEndpoint + : "https://test.com"; + const azureOpenAiModelDeploymentName = + OpenAiKey.azureOpenAiModelDeploymentName + ? OpenAiKey.azureOpenAiModelDeploymentName + : "fake"; + editDotEnvFile(envPath, "SECRET_AZURE_OPENAI_API_KEY", azureOpenAiKey); + editDotEnvFile(envPath, "AZURE_OPENAI_ENDPOINT", azureOpenAiEndpoint); + editDotEnvFile( + envPath, + "AZURE_OPENAI_MODEL_DEPLOYMENT_NAME", + azureOpenAiModelDeploymentName + ); + await provisionProject(appName, projectPath); + await deployProject(projectPath, Timeout.botDeploy); + const teamsAppId = await remoteDebugTestContext.getTeamsAppId( + projectPath + ); + const page = await initPage( + remoteDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await driver.sleep(Timeout.longTimeWait); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-openai-win-only.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-openai-win-only.test.ts new file mode 100644 index 0000000000..4d940edac5 --- /dev/null +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-py-openai-win-only.test.ts @@ -0,0 +1,112 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { VSBrowser } from "vscode-extension-tester"; +import { Timeout, ValidationContent } from "../../utils/constants"; +import { + RemoteDebugTestContext, + provisionProject, + deployProject, +} from "./remotedebugContext"; +import { + execCommandIfExist, + createNewProject, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; +import { RetryHandler } from "../../utils/retryHandler"; + +describe("Remote debug Tests", function () { + this.timeout(Timeout.testAzureCase); + let remoteDebugTestContext: RemoteDebugTestContext; + let testRootFolder: string; + let appName: string; + const appNameCopySuffix = "copy"; + let newAppFolderName: string; + let projectPath: string; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + remoteDebugTestContext = new RemoteDebugTestContext("cdcustomapi"); + testRootFolder = remoteDebugTestContext.testRootFolder; + appName = remoteDebugTestContext.appName; + newAppFolderName = appName + appNameCopySuffix; + projectPath = path.resolve(testRootFolder, newAppFolderName); + await remoteDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishAzureTestCase); + await remoteDebugTestContext.after(); + + //Close the folder and cleanup local sample project + await execCommandIfExist("Workspaces: Close Workspace", Timeout.webView); + console.log(`[Successfully] start to clean up for ${projectPath}`); + await remoteDebugTestContext.cleanUp( + appName, + projectPath, + false, + true, + false + ); + }); + + it( + "[auto][Python][OpenAI] Remote debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 29165762, + author: "v-annefu@microsoft.com", + }, + async function () { + const driver = VSBrowser.instance.driver; + await createNewProject("cdcustomapi", appName, { + aiType: "OpenAI", + lang: "Python", + dataOption: "Custom API", + }); + validateFileExist(projectPath, "src/app.py"); + const envPath = path.resolve(projectPath, "env", ".env.dev.user"); + const isRealKey = OpenAiKey.openAiKey ? true : false; + const openAiKey = OpenAiKey.openAiKey ? OpenAiKey.openAiKey : "fake"; + editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); + await provisionProject(appName, projectPath); + await deployProject(projectPath, Timeout.botDeploy); + const teamsAppId = await remoteDebugTestContext.getTeamsAppId( + projectPath + ); + const page = await initPage( + remoteDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await driver.sleep(Timeout.longTimeWait); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-azureopenai-win-only.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-azureopenai-win-only.test.ts new file mode 100644 index 0000000000..a5a1f39ee1 --- /dev/null +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-azureopenai-win-only.test.ts @@ -0,0 +1,126 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { VSBrowser } from "vscode-extension-tester"; +import { Timeout, ValidationContent } from "../../utils/constants"; +import { + RemoteDebugTestContext, + provisionProject, + deployProject, +} from "./remotedebugContext"; +import { + execCommandIfExist, + createNewProject, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Remote debug Tests", function () { + this.timeout(Timeout.testAzureCase); + let remoteDebugTestContext: RemoteDebugTestContext; + let testRootFolder: string; + let appName: string; + const appNameCopySuffix = "copy"; + let newAppFolderName: string; + let projectPath: string; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + remoteDebugTestContext = new RemoteDebugTestContext("cdcustomapi"); + testRootFolder = remoteDebugTestContext.testRootFolder; + appName = remoteDebugTestContext.appName; + newAppFolderName = appName + appNameCopySuffix; + projectPath = path.resolve(testRootFolder, newAppFolderName); + await remoteDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishAzureTestCase); + await remoteDebugTestContext.after(); + + //Close the folder and cleanup local sample project + await execCommandIfExist("Workspaces: Close Workspace", Timeout.webView); + console.log(`[Successfully] start to clean up for ${projectPath}`); + await remoteDebugTestContext.cleanUp( + appName, + projectPath, + false, + true, + false + ); + }); + + it( + "[auto][TS][Azure OpenAI] Remote debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 28891618, + author: "v-annefu@microsoft.com", + }, + async function () { + const driver = VSBrowser.instance.driver; + await createNewProject("cdcustomapi", appName, { + aiType: "Azure OpenAI", + lang: "TypeScript", + dataOption: "Custom API", + }); + validateFileExist(projectPath, "src/index.ts"); + const envPath = path.resolve(projectPath, "env", ".env.dev.user"); + const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; + const azureOpenAiKey = OpenAiKey.azureOpenAiKey + ? OpenAiKey.azureOpenAiKey + : "fake"; + const azureOpenAiEndpoint = OpenAiKey.azureOpenAiEndpoint + ? OpenAiKey.azureOpenAiEndpoint + : "https://test.com"; + const azureOpenAiModelDeploymentName = + OpenAiKey.azureOpenAiModelDeploymentName + ? OpenAiKey.azureOpenAiModelDeploymentName + : "fake"; + editDotEnvFile(envPath, "SECRET_AZURE_OPENAI_API_KEY", azureOpenAiKey); + editDotEnvFile(envPath, "AZURE_OPENAI_ENDPOINT", azureOpenAiEndpoint); + editDotEnvFile( + envPath, + "AZURE_OPENAI_MODEL_DEPLOYMENT_NAME", + azureOpenAiModelDeploymentName + ); + await provisionProject(appName, projectPath); + await deployProject(projectPath, Timeout.botDeploy); + const teamsAppId = await remoteDebugTestContext.getTeamsAppId( + projectPath + ); + const page = await initPage( + remoteDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await driver.sleep(Timeout.longTimeWait); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-openai-win-only.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-openai-win-only.test.ts new file mode 100644 index 0000000000..d82df59355 --- /dev/null +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-customapi-ts-openai-win-only.test.ts @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Anne Fu + */ +import * as path from "path"; +import { VSBrowser } from "vscode-extension-tester"; +import { Timeout, ValidationContent } from "../../utils/constants"; +import { + RemoteDebugTestContext, + provisionProject, + deployProject, +} from "./remotedebugContext"; +import { + execCommandIfExist, + createNewProject, +} from "../../utils/vscodeOperation"; +import { initPage, validateCustomapi } from "../../utils/playwrightOperation"; +import { Env, OpenAiKey } from "../../utils/env"; +import { it } from "../../utils/it"; +import { editDotEnvFile, validateFileExist } from "../../utils/commonUtils"; + +describe("Remote debug Tests", function () { + this.timeout(Timeout.testAzureCase); + let remoteDebugTestContext: RemoteDebugTestContext; + let testRootFolder: string; + let appName: string; + const appNameCopySuffix = "copy"; + let newAppFolderName: string; + let projectPath: string; + + beforeEach(async function () { + // ensure workbench is ready + this.timeout(Timeout.prepareTestCase); + remoteDebugTestContext = new RemoteDebugTestContext("cdcustomapi"); + testRootFolder = remoteDebugTestContext.testRootFolder; + appName = remoteDebugTestContext.appName; + newAppFolderName = appName + appNameCopySuffix; + projectPath = path.resolve(testRootFolder, newAppFolderName); + await remoteDebugTestContext.before(); + }); + + afterEach(async function () { + this.timeout(Timeout.finishAzureTestCase); + await remoteDebugTestContext.after(); + + //Close the folder and cleanup local sample project + await execCommandIfExist("Workspaces: Close Workspace", Timeout.webView); + console.log(`[Successfully] start to clean up for ${projectPath}`); + await remoteDebugTestContext.cleanUp( + appName, + projectPath, + false, + true, + false + ); + }); + + it( + "[auto][TS][Azure OpenAI] Remote debug for Custom Copilot Rag Custom Api", + { + testPlanCaseId: 28891618, + author: "v-annefu@microsoft.com", + }, + async function () { + const driver = VSBrowser.instance.driver; + await createNewProject("cdcustomapi", appName, { + aiType: "OpenAI", + lang: "TypeScript", + dataOption: "Custom API", + }); + validateFileExist(projectPath, "src/index.ts"); + const envPath = path.resolve(projectPath, "env", ".env.dev.user"); + const isRealKey = OpenAiKey.openAiKey ? true : false; + const openAiKey = OpenAiKey.openAiKey ? OpenAiKey.openAiKey : "fake"; + editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); + await provisionProject(appName, projectPath); + await deployProject(projectPath, Timeout.botDeploy); + const teamsAppId = await remoteDebugTestContext.getTeamsAppId( + projectPath + ); + const page = await initPage( + remoteDebugTestContext.context!, + teamsAppId, + Env.username, + Env.password + ); + await driver.sleep(Timeout.longTimeWait); + if (isRealKey) { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: "assignedTo: Karin", + timeout: Timeout.longTimeWait, + }); + } else { + await validateCustomapi(page, { + hasWelcomeMessage: false, + hasCommandReplyValidation: true, + botCommand: "helloWorld", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + timeout: Timeout.longTimeWait, + }); + } + } + ); +}); diff --git a/packages/tests/src/utils/constants.ts b/packages/tests/src/utils/constants.ts index e7dc803a97..564df57ba7 100644 --- a/packages/tests/src/utils/constants.ts +++ b/packages/tests/src/utils/constants.ts @@ -360,6 +360,7 @@ export type AppType = | "aiagentassist" | "aiagentnew" | "chatdata" + | "cdcustomapi" //chatadata customApi | "msgnewapi" | "msgopenapi" | "msgapikey" diff --git a/packages/tests/src/utils/playwrightOperation.ts b/packages/tests/src/utils/playwrightOperation.ts index e7d46a54fe..ef0a9f81f7 100644 --- a/packages/tests/src/utils/playwrightOperation.ts +++ b/packages/tests/src/utils/playwrightOperation.ts @@ -2854,3 +2854,78 @@ export async function validateExisingApiMeResult(page: Page, appName: string) { throw error; } } + +export async function validateCustomapi( + page: Page, + options: { + hasWelcomeMessage?: boolean; + hasCommandReplyValidation: boolean; + botCommand?: string; + expectedWelcomeMessage?: string; + expectedReplyMessage?: string; + timeout?: number; + } = { + hasWelcomeMessage: true, + hasCommandReplyValidation: true, + botCommand: "Get repairs for Karin", + expectedWelcomeMessage: ValidationContent.AiChatBotWelcomeInstruction, + expectedReplyMessage: ValidationContent.AiBotErrorMessage, + } +) { + const timeout = options?.timeout ? options.timeout : 30 * 60 * 1000; + try { + console.log("start to verify bot"); + await page.waitForTimeout(Timeout.shortTimeLoading); + const frame = await page.waitForSelector("div#app"); + try { + console.log("dismiss message"); + await frame?.waitForSelector("div.ui-box"); + await page + .click('button:has-text("Dismiss")', { + timeout: Timeout.playwrightDefaultTimeout, + }) + .catch(() => {}); + } catch (error) { + console.log("no message to dismiss"); + } + + if (options.hasCommandReplyValidation) { + await RetryHandler.retry(async () => { + console.log( + "sending message ", + options?.botCommand || "Get repairs for Karin" + ); + const textbox = await frame?.waitForSelector( + 'div.ck-content[role="textbox"]' + ); + await textbox?.fill(options?.botCommand || "Get repairs for Karin"); + const sendButton = await frame?.waitForSelector('button[name="send"]'); + await sendButton?.click(); + if ( + options.expectedReplyMessage == ValidationContent.AiBotErrorMessage + ) { + await frame?.waitForSelector( + `p:has-text("${options?.expectedReplyMessage}")`, + { timeout: timeout } + ); + } else { + await frame?.waitForSelector( + `div.ac-textBlock div.fui-Primitive p:has-text("${options?.expectedReplyMessage}")`, + { timeout: timeout } + ); + } + console.log( + `verify bot successfully with content ${options?.expectedReplyMessage}!!!` + ); + }, 2); + } + + await page.waitForTimeout(Timeout.shortTimeLoading); + } catch (error) { + await page.screenshot({ + path: getPlaywrightScreenshotPath("error"), + fullPage: true, + }); + throw error; + } +} diff --git a/packages/tests/src/utils/vscodeOperation.ts b/packages/tests/src/utils/vscodeOperation.ts index 793af71471..cb91ee0832 100644 --- a/packages/tests/src/utils/vscodeOperation.ts +++ b/packages/tests/src/utils/vscodeOperation.ts @@ -549,7 +549,11 @@ export async function createNewProject( aiType?: "Azure OpenAI" | "OpenAI"; testRootFolder?: string; appNameCopySuffix?: string; - dataOption?: "Customize" | "Azure AI Search" | "Microsoft 365"; + dataOption?: + | "Customize" + | "Azure AI Search" + | "Custom API" + | "Microsoft 365"; } ): Promise { const driver = VSBrowser.instance.driver; @@ -907,6 +911,36 @@ export async function createNewProject( await driver.sleep(Timeout.input); break; } + + case "cdcustomapi": { + await input.selectQuickPick(CreateProjectQuestion.CustomCopilot); + await driver.sleep(Timeout.input); + await input.selectQuickPick("Chat With Your Data"); + await driver.sleep(Timeout.input); + await input.selectQuickPick(dataOption); + await driver.sleep(Timeout.input); + const apiSpecFilePath = + "https://raw.githubusercontent.com/SLdragon/example-openapi-spec/main/real-no-auth.yaml"; + await input.selectQuickPick( + "Enter OpenAPI Description Document Location" + ); + await inputFolderPath(driver, input, apiSpecFilePath); + await input.confirm(); + await driver.sleep(Timeout.shortTimeWait); + const ckAll = await driver.findElement(By.css(".quick-input-check-all")); + await ckAll?.click(); + await input.confirm(); + // Choose programming language + await input.selectQuickPick(lang); + await driver.sleep(Timeout.input); + await input.setText(aiType); + await driver.sleep(Timeout.input); + await input.confirm(); + await driver.sleep(Timeout.input); + await input.confirm(); + await driver.sleep(Timeout.input); + break; + } case "msgnewapi": { await input.selectQuickPick(CreateProjectQuestion.MessageExtension); await input.selectQuickPick("Custom Search Results"); From 535ba4ece4f82f7a53a0eb42d9c2ab4ab4898ba3 Mon Sep 17 00:00:00 2001 From: Huajie Zhang Date: Thu, 22 Aug 2024 14:25:46 +0800 Subject: [PATCH 05/52] refactor: improve secret detect code (#12259) * feat: improve secret detect precision * feat: improve secret detector * feat: improve secret detector * feat: improve secret detector * feat: up --- .../src/common/secretmasker/feature.ts | 23 ++----------------- .../fx-core/src/common/secretmasker/masker.ts | 1 + packages/fx-core/src/common/stringUtils.ts | 22 +++--------------- 3 files changed, 6 insertions(+), 40 deletions(-) diff --git a/packages/fx-core/src/common/secretmasker/feature.ts b/packages/fx-core/src/common/secretmasker/feature.ts index dd036b01ff..b53668e648 100644 --- a/packages/fx-core/src/common/secretmasker/feature.ts +++ b/packages/fx-core/src/common/secretmasker/feature.ts @@ -61,6 +61,7 @@ function containsSecretKeywords(token: string): number { "credential", "authorization", "bearer", + "encrypt", ]; const weekKeywords = ["login", "auth"]; if (keywords.some((keyword) => token.toLowerCase().includes(keyword))) return 1; @@ -82,29 +83,9 @@ interface FeatureToken { export type Token = SplitterToken | FeatureToken; -// export function tokenize(input: string): Token[] { -// // Regular expression to match any whitespace (including `\r\n`, `\t`, spaces, etc.) -// const tokens: string[] = input.split(/(\s+)/); // Retain the splitters in the result array - -// // Map the tokens into an array of Token objects -// return tokens.map((t) => { -// if (/\s+/.test(t)) { -// return { -// type: "splitter", -// token: t, -// }; -// } else { -// return { -// type: "feature", -// token: t, -// }; -// } -// }); -// } - export function tokenize(input: string): Token[] { // Regular expression to match JSON-specific delimiters and whitespace - const tokens: string[] = input.split(/(\s+|[{}[\],:"])/); // Retain and filter out empty tokens + const tokens: string[] = input.split(/(\s+|[{}[\],:"])/).filter((t) => t.length > 0); // Retain and filter out empty tokens // Map the tokens into an array of Token objects return tokens.map((t) => { diff --git a/packages/fx-core/src/common/secretmasker/masker.ts b/packages/fx-core/src/common/secretmasker/masker.ts index 5022f14dff..347a41941f 100644 --- a/packages/fx-core/src/common/secretmasker/masker.ts +++ b/packages/fx-core/src/common/secretmasker/masker.ts @@ -25,6 +25,7 @@ class SecretMasker { ], intercept_: [-7.761273206603221], }; + predict(features: number[]): number { const { coef_, intercept_ } = this.model; // Calculate the dot product between the features and the coefficients diff --git a/packages/fx-core/src/common/stringUtils.ts b/packages/fx-core/src/common/stringUtils.ts index cb2582db88..c57a53d400 100644 --- a/packages/fx-core/src/common/stringUtils.ts +++ b/packages/fx-core/src/common/stringUtils.ts @@ -10,7 +10,6 @@ import { getLocalizedString } from "./localizeUtils"; import { secretMasker } from "./secretmasker/masker"; const SECRET_REPLACE = ""; -const USER_REPLACE = ""; export interface MaskSecretOptions { threshold?: number; @@ -20,33 +19,18 @@ export interface MaskSecretOptions { export function maskSecret(inputText?: string, option?: MaskSecretOptions): string { if (!inputText) return ""; - option = option || {}; - // const threshold = option.threshold || MIN_ENTROPY; - // const whiteList = option.whiteList || WHITE_LIST; - const replace = option.replace || SECRET_REPLACE; - // mask by secret pattern - let output = maskByPattern(inputText); - // mask by .env.xxx.user - output = maskSecretFromEnv(output, replace); - // mask by entropy + const replace = option?.replace || SECRET_REPLACE; + let output = maskSecretFromEnv(inputText); output = secretMasker.maskSecret(output, replace); return output; } -function maskByPattern(command: string): string { - const regexU = /(-u|--username|--user) (\S+)/; - const regexP = /(-p|--password|--pwd|--secret|--credential) (\S+)/; - let output = command.replace(regexU, `$1 ${USER_REPLACE}`); - output = output.replace(regexP, `$1 ${SECRET_REPLACE}`); - return output; -} - export function maskSecretFromEnv(stdout: string, replace = SECRET_REPLACE): string { for (const key of Object.keys(process.env)) { if (key.startsWith("SECRET_")) { const value = process.env[key]; if (value) { - stdout = stdout.replace(value, replace); + stdout = stdout.replace(new RegExp(value, "g"), replace); } } } From d25ff9f7bc996a4cae911d5bc0931fc252bacf86 Mon Sep 17 00:00:00 2001 From: Ning Tang Date: Fri, 23 Aug 2024 12:11:45 +0800 Subject: [PATCH 06/52] fix: ui string (#12266) --- packages/fx-core/resource/package.nls.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fx-core/resource/package.nls.json b/packages/fx-core/resource/package.nls.json index ff345f64a1..b5edd41ff6 100644 --- a/packages/fx-core/resource/package.nls.json +++ b/packages/fx-core/resource/package.nls.json @@ -339,7 +339,7 @@ "core.createProjectQuestion.capability.customCopilotRagMicrosoft365Option.detail": "Load your data from Microsoft Graph and SharePoint", "core.createProjectQuestion.capability.customCopilotRag.title": "Chat With Your Data", "core.createProjectQuestion.capability.customCopilotRag.placeholder": "Select an option to load your data", - "core.createProjectQuestion.capability.customCopilotAssistantNewOption.label": "Build New", + "core.createProjectQuestion.capability.customCopilotAssistantNewOption.label": "Build from Scratch", "core.createProjectQuestion.capability.customCopilotAssistantNewOption.detail": "Build your own AI Agent from scratch using Teams AI Library", "core.createProjectQuestion.capability.customCopilotAssistantAssistantsApiOption.label": "Build with Assistants API", "core.createProjectQuestion.capability.customCopilotAssistantAssistantsApiOption.detail": "Build an AI agent with OpenAI Assistants API and Teams AI Library", From 031f60d593ae64190ee1a275e2332d2f2197d7bb Mon Sep 17 00:00:00 2001 From: Hui Miao Date: Fri, 23 Aug 2024 15:23:35 +0800 Subject: [PATCH 07/52] feat: support AAD for API Plugin from scratch templates (#12260) --- .../generator/copilotExtension/generator.ts | 20 ++++++++---- packages/fx-core/src/question/create.ts | 6 +++- .../copilotExtensionGenerator.test.ts | 7 ++++ .../fx-core/tests/question/create.test.ts | 5 +-- .../aad.manifest.json.tpl | 12 ++++++- .../appPackage/ai-plugin.dev.json.tpl | 5 +++ .../{repair.dev.yml => repair.dev.yml.tpl} | 14 +++++++- .../infra/{azure.bicep => azure.bicep.tpl} | 4 +++ .../infra/azure.parameters.json.tpl} | 2 ++ .../teamsapp.yml.tpl | 32 +++++++++++++++---- .../README.md.tpl | 2 ++ .../aad.manifest.json.tpl | 12 ++++++- .../appPackage/ai-plugin.dev.json.tpl | 5 +++ .../apiSpecificationFile/repair.dev.yml.tpl} | 13 ++++++++ .../infra/{azure.bicep => azure.bicep.tpl} | 5 ++- .../infra/azure.parameters.json.tpl} | 2 ++ .../teamsapp.yml.tpl | 28 +++++++++++++--- .../README.md.tpl | 2 ++ .../aad.manifest.json.tpl | 10 ++++++ .../appPackage/ai-plugin.dev.json.tpl | 5 +++ .../apiSpecificationFile/repair.dev.yml.tpl} | 13 ++++++++ .../infra/{azure.bicep => azure.bicep.tpl} | 5 +++ .../infra/azure.parameters.json.tpl} | 2 ++ .../teamsapp.yml.tpl | 28 +++++++++++++--- 24 files changed, 211 insertions(+), 28 deletions(-) rename templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/{repair.dev.yml => repair.dev.yml.tpl} (89%) rename templates/csharp/api-plugin-from-scratch-oauth/infra/{azure.bicep => azure.bicep.tpl} (97%) rename templates/{js/api-plugin-from-scratch-oauth/infra/azure.parameters.json => csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl} (93%) rename templates/{ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml => js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl} (89%) rename templates/js/api-plugin-from-scratch-oauth/infra/{azure.bicep => azure.bicep.tpl} (97%) rename templates/{ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json => js/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl} (93%) rename templates/{js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml => ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl} (89%) rename templates/ts/api-plugin-from-scratch-oauth/infra/{azure.bicep => azure.bicep.tpl} (97%) rename templates/{csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json => ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl} (93%) diff --git a/packages/fx-core/src/component/generator/copilotExtension/generator.ts b/packages/fx-core/src/component/generator/copilotExtension/generator.ts index 4b6b736f82..beb88336d7 100644 --- a/packages/fx-core/src/component/generator/copilotExtension/generator.ts +++ b/packages/fx-core/src/component/generator/copilotExtension/generator.ts @@ -25,6 +25,7 @@ import { declarativeCopilotInstructionFileName } from "../constant"; const enum telemetryProperties { templateName = "template-name", isDeclarativeCopilot = "is-declarative-copilot", + isMicrosoftEntra = "is-microsoft-entra", } /** @@ -65,6 +66,7 @@ export class CopilotExtensionGenerator extends DefaultTemplateGenerator { ), DeclarativeCopilot: isDeclarativeCopilot ? "true" : "", FileFunction: featureFlagManager.getBooleanValue(FeatureFlags.EnvFileFunc) ? "true" : "", + MicrosoftEntra: auth === ApiAuthOptions.microsoftEntra().id ? "true" : "", }; const filterFn = (fileName: string) => { @@ -78,13 +80,15 @@ export class CopilotExtensionGenerator extends DefaultTemplateGenerator { }; let templateName; - if (inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.newApi().id) { - templateName = - auth === ApiAuthOptions.apiKey().id - ? TemplateNames.ApiPluginFromScratchBearer - : auth === ApiAuthOptions.oauth().id - ? TemplateNames.ApiPluginFromScratchOAuth - : TemplateNames.ApiPluginFromScratch; + const apiPluginFromScratch = + inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.newApi().id; + if (apiPluginFromScratch) { + const authTemplateMap = { + [ApiAuthOptions.apiKey().id]: TemplateNames.ApiPluginFromScratchBearer, + [ApiAuthOptions.microsoftEntra().id]: TemplateNames.ApiPluginFromScratchOAuth, + [ApiAuthOptions.oauth().id]: TemplateNames.ApiPluginFromScratchOAuth, + }; + templateName = authTemplateMap[auth] || TemplateNames.ApiPluginFromScratch; } else { templateName = TemplateNames.BasicGpt; } @@ -92,6 +96,8 @@ export class CopilotExtensionGenerator extends DefaultTemplateGenerator { merge(actionContext?.telemetryProps, { [telemetryProperties.templateName]: templateName, [telemetryProperties.isDeclarativeCopilot]: isDeclarativeCopilot.toString(), + [telemetryProperties.isMicrosoftEntra]: + auth === ApiAuthOptions.microsoftEntra().id ? "true" : "", }); return Promise.resolve( diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index d5ffc6a04b..3c02db1ac1 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -1039,7 +1039,11 @@ export function apiAuthQuestion(): SingleSelectQuestion { if (inputs[QuestionNames.MeArchitectureType] === MeArchitectureOptions.newApi().id) { options.push(ApiAuthOptions.apiKey(), ApiAuthOptions.microsoftEntra()); } else if (inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.newApi().id) { - options.push(ApiAuthOptions.apiKey(), ApiAuthOptions.oauth()); + options.push( + ApiAuthOptions.apiKey(), + ApiAuthOptions.microsoftEntra(), + ApiAuthOptions.oauth() + ); } return options; }, diff --git a/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts b/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts index 1a2d27623e..a611e78a17 100644 --- a/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts @@ -59,6 +59,13 @@ describe("copilotExtension", async () => { info = await generator.getTemplateInfos(context, inputs, "."); assert.isTrue(res); assert.equal(info.isOk() && info.value[0].templateName, "api-plugin-from-scratch-oauth"); + + inputs[QuestionNames.ApiAuth] = ApiAuthOptions.microsoftEntra().id; + res = await generator.activate(context, inputs); + info = await generator.getTemplateInfos(context, inputs, "."); + assert.isTrue(res); + assert.equal(info.isOk() && info.value[0].templateName, "api-plugin-from-scratch-oauth"); + if (info.isOk()) { const filterFn = info.value[0].filterFn; assert.isFalse(filterFn?.("repairDeclarativeCopilot.json")); diff --git a/packages/fx-core/tests/question/create.test.ts b/packages/fx-core/tests/question/create.test.ts index 7521a530af..9a5c9ca6dc 100644 --- a/packages/fx-core/tests/question/create.test.ts +++ b/packages/fx-core/tests/question/create.test.ts @@ -1631,7 +1631,7 @@ describe("scaffold question", () => { } else if (question.name === QuestionNames.ApiAuth) { const select = question as SingleSelectQuestion; const options = await select.dynamicOptions!(inputs); - assert.isTrue(options.length === 3); + assert.isTrue(options.length === 4); return ok({ type: "success", result: ApiAuthOptions.none().id }); } else if (question.name === QuestionNames.ProgrammingLanguage) { const select = question as SingleSelectQuestion; @@ -1686,7 +1686,7 @@ describe("scaffold question", () => { } else if (question.name === QuestionNames.ApiAuth) { const select = question as SingleSelectQuestion; const options = await select.dynamicOptions!(inputs); - assert.isTrue(options.length === 3); + assert.isTrue(options.length === 4); return ok({ type: "success", result: ApiAuthOptions.apiKey().id }); } else if (question.name === QuestionNames.ProgrammingLanguage) { const select = question as SingleSelectQuestion; @@ -3761,6 +3761,7 @@ describe("scaffold question", () => { assert.deepEqual(options, [ ApiAuthOptions.none(), ApiAuthOptions.apiKey(), + ApiAuthOptions.microsoftEntra(), ApiAuthOptions.oauth(), ]); } diff --git a/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl b/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl index 980545a890..b9e9389c3c 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl @@ -20,7 +20,7 @@ { "adminConsentDescription": "Allows Copilot to read repair records on your behalf.", "adminConsentDisplayName": "Read repairs", - "id": "${{TEAMS_APP_ID}}", + "id": "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}", "isEnabled": true, "type": "User", "userConsentDescription": "Allows Copilot to read repair records.", @@ -28,6 +28,16 @@ "value": "repairs_read" } ], +{{#MicrosoftEntra}} + "preAuthorizedApplications": [ + { + "appId": "ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b", + "permissionIds": [ + "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}" + ] + } + ], +{{/MicrosoftEntra}} "replyUrlsWithType": [ { "url": "https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect", diff --git a/templates/csharp/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl b/templates/csharp/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl index 2737eeba05..9e34c51b81 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl @@ -69,7 +69,12 @@ "type": "OpenApi", "auth": { "type": "OAuthPluginVault", +{{#MicrosoftEntra}} + "reference_id": "${{AADAUTHCODE_CONFIGURATION_ID}}" +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} "reference_id": "${{OAUTH2AUTHCODE_CONFIGURATION_ID}}" +{{/MicrosoftEntra}} }, "spec": { "url": "apiSpecificationFile/repair.dev.yml", diff --git a/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml b/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl similarity index 89% rename from templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml rename to templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl index aa56db796e..4288030123 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml +++ b/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl @@ -6,8 +6,15 @@ info: servers: - url: ${{OPENAPI_SERVER_URL}}/api description: The repair api server + components: securitySchemes: +{{#MicrosoftEntra}} + aadAuthCode: + type: oauth2 + description: AAD configuration for the repair service +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} oAuth2AuthCode: type: oauth2 description: OAuth configuration for the repair service @@ -17,7 +24,7 @@ components: tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token scopes: api://${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records - +{{/MicrosoftEntra}} paths: /repairs: get: @@ -25,7 +32,12 @@ paths: summary: List all repairs description: Returns a list of repairs with their details and images security: +{{#MicrosoftEntra}} + - aadAuthCode: [] +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} - oAuth2AuthCode: [] +{{/MicrosoftEntra}} parameters: - name: assignedTo in: query diff --git a/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep b/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl similarity index 97% rename from templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep rename to templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl index 8aba050a9e..6bf0871965 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep +++ b/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl @@ -3,8 +3,10 @@ param resourceBaseName string param functionAppSKU string param aadAppClientId string +{{^MicrosoftEntra}} @secure() param aadAppClientSecret string +{{/MicrosoftEntra}} param aadAppTenantId string param aadAppOauthAuthorityHost string param location string = resourceGroup().location @@ -52,10 +54,12 @@ resource functionApp 'Microsoft.Web/sites@2021-02-01' = { name: 'M365_CLIENT_ID' value: aadAppClientId } +{{^MicrosoftEntra}} { name: 'M365_CLIENT_SECRET' value: aadAppClientSecret } +{{/MicrosoftEntra}} { name: 'M365_TENANT_ID' value: aadAppTenantId diff --git a/templates/js/api-plugin-from-scratch-oauth/infra/azure.parameters.json b/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl similarity index 93% rename from templates/js/api-plugin-from-scratch-oauth/infra/azure.parameters.json rename to templates/csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl index 54ae4292b6..2dd7c71d3d 100644 --- a/templates/js/api-plugin-from-scratch-oauth/infra/azure.parameters.json +++ b/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl @@ -11,9 +11,11 @@ "aadAppClientId": { "value": "${{AAD_APP_CLIENT_ID}}" }, +{{^MicrosoftEntra}} "aadAppClientSecret": { "value": "${{SECRET_AAD_APP_CLIENT_SECRET}}" }, +{{/MicrosoftEntra}} "aadAppTenantId": { "value": "${{AAD_APP_TENANT_ID}}" }, diff --git a/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl b/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl index 6a54e0b0c5..68715d5279 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl @@ -1,13 +1,13 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.6 environmentFolderPath: ./env # Triggered when 'teamsapp provision' is executed provision: - # Creates a new Microsoft Entra app to authenticate users if + # Creates a new Microsoft Entra app to authenticate users if # the environment variable that stores clientId is empty - uses: aadApp/create with: @@ -17,7 +17,12 @@ provision: # defined here. name: {{appName}}-aad # If the value is false, the action will not generate client secret for you +{{#MicrosoftEntra}} + generateClientSecret: false +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} generateClientSecret: true +{{/MicrosoftEntra}} # Authenticate users with a Microsoft work or school account in your # organization's Microsoft Entra tenant (for example, single tenant). signInAudience: AzureADMyOrg @@ -27,7 +32,9 @@ provision: clientId: AAD_APP_CLIENT_ID # Environment variable that starts with `SECRET_` will be stored to the # .env.{envName}.user environment file +{{^MicrosoftEntra}} clientSecret: SECRET_AAD_APP_CLIENT_SECRET +{{/MicrosoftEntra}} objectId: AAD_APP_OBJECT_ID tenantId: AAD_APP_TENANT_ID authority: AAD_APP_OAUTH_AUTHORITY @@ -43,7 +50,7 @@ provision: writeToEnvironmentFile: teamsAppId: TEAMS_APP_ID - - uses: arm/deploy # Deploy given ARM templates parallelly. + - uses: arm/deploy # Deploy given ARM templates parallelly. with: # AZURE_SUBSCRIPTION_ID is a built-in environment variable, # if its value is empty, TeamsFx will prompt you to select a subscription. @@ -57,7 +64,7 @@ provision: # will skip the resource group selection prompt. resourceGroupName: ${{AZURE_RESOURCE_GROUP_NAME}} templates: - - path: ./infra/azure.bicep # Relative path to this file + - path: ./infra/azure.bicep # Relative path to this file # Relative path to this yaml file. # Placeholders will be replaced with corresponding environment # variable before ARM deployment. @@ -79,6 +86,18 @@ provision: - uses: oauth/register with: +{{#MicrosoftEntra}} + name: aadAuthCode + flow: authorizationCode + appId: ${{TEAMS_APP_ID}} + clientId: ${{AAD_APP_CLIENT_ID}} + # Path to OpenAPI description document + apiSpecPath: ./appPackage/apiSpecificationFile/repair.${{TEAMSFX_ENV}}.yml + identityProvider: MicrosoftEntra + writeToEnvironmentFile: + configurationId: AADAUTHCODE_CONFIGURATION_ID +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} name: oAuth2AuthCode flow: authorizationCode appId: ${{TEAMS_APP_ID}} @@ -88,6 +107,7 @@ provision: apiSpecPath: ./appPackage/apiSpecificationFile/repair.${{TEAMSFX_ENV}}.yml writeToEnvironmentFile: configurationId: OAUTH2AUTHCODE_CONFIGURATION_ID +{{/MicrosoftEntra}} # Build Teams app package with latest env value - uses: teamsApp/zipAppPackage @@ -101,7 +121,7 @@ provision: - uses: teamsApp/validateAppPackage with: # Relative path to this file. This is the path for built zip file. - appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. diff --git a/templates/js/api-plugin-from-scratch-oauth/README.md.tpl b/templates/js/api-plugin-from-scratch-oauth/README.md.tpl index e74b252756..7649652a88 100644 --- a/templates/js/api-plugin-from-scratch-oauth/README.md.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/README.md.tpl @@ -83,12 +83,14 @@ The following are Teams Toolkit specific project files. You can [visit a complet | `teamsapp.yml` | This is the main Teams Toolkit project file. The project file defines two primary things: Properties and configuration Stage definitions. | | `teamsapp.local.yml` | This overrides `teamsapp.yml` with actions that enable local execution and debugging. | | `aad.manifest.json` | This file defines the configuration of Microsoft Entra app. This template will only provision [single tenant](https://learn.microsoft.com/azure/active-directory/develop/single-and-multi-tenant-apps#who-can-sign-in-to-your-app) Microsoft Entra app. | +{{^MicrosoftEntra}} ## How OAuth works in the API plugin ![oauth-flow](https://github.com/OfficeDev/teams-toolkit/assets/107838226/f074abbe-d9e3-4a46-8e08-feb66b17a539) > **Note**: The OAuth flow is only functional in remote environments. It cannot be tested in a local environment due to the lack of authentication support in Azure Function core tools. +{{/MicrosoftEntra}} ## Addition information and references diff --git a/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl b/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl index 980545a890..b9e9389c3c 100644 --- a/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl @@ -20,7 +20,7 @@ { "adminConsentDescription": "Allows Copilot to read repair records on your behalf.", "adminConsentDisplayName": "Read repairs", - "id": "${{TEAMS_APP_ID}}", + "id": "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}", "isEnabled": true, "type": "User", "userConsentDescription": "Allows Copilot to read repair records.", @@ -28,6 +28,16 @@ "value": "repairs_read" } ], +{{#MicrosoftEntra}} + "preAuthorizedApplications": [ + { + "appId": "ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b", + "permissionIds": [ + "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}" + ] + } + ], +{{/MicrosoftEntra}} "replyUrlsWithType": [ { "url": "https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect", diff --git a/templates/js/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl b/templates/js/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl index 2737eeba05..9e34c51b81 100644 --- a/templates/js/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl @@ -69,7 +69,12 @@ "type": "OpenApi", "auth": { "type": "OAuthPluginVault", +{{#MicrosoftEntra}} + "reference_id": "${{AADAUTHCODE_CONFIGURATION_ID}}" +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} "reference_id": "${{OAUTH2AUTHCODE_CONFIGURATION_ID}}" +{{/MicrosoftEntra}} }, "spec": { "url": "apiSpecificationFile/repair.dev.yml", diff --git a/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml b/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl similarity index 89% rename from templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml rename to templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl index 27afb73066..4288030123 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml +++ b/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl @@ -6,8 +6,15 @@ info: servers: - url: ${{OPENAPI_SERVER_URL}}/api description: The repair api server + components: securitySchemes: +{{#MicrosoftEntra}} + aadAuthCode: + type: oauth2 + description: AAD configuration for the repair service +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} oAuth2AuthCode: type: oauth2 description: OAuth configuration for the repair service @@ -17,6 +24,7 @@ components: tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token scopes: api://${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records +{{/MicrosoftEntra}} paths: /repairs: get: @@ -24,7 +32,12 @@ paths: summary: List all repairs description: Returns a list of repairs with their details and images security: +{{#MicrosoftEntra}} + - aadAuthCode: [] +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} - oAuth2AuthCode: [] +{{/MicrosoftEntra}} parameters: - name: assignedTo in: query diff --git a/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep b/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl similarity index 97% rename from templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep rename to templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl index e70e5277b1..6bf0871965 100644 --- a/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep +++ b/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl @@ -3,8 +3,10 @@ param resourceBaseName string param functionAppSKU string param aadAppClientId string +{{^MicrosoftEntra}} @secure() param aadAppClientSecret string +{{/MicrosoftEntra}} param aadAppTenantId string param aadAppOauthAuthorityHost string param location string = resourceGroup().location @@ -52,10 +54,12 @@ resource functionApp 'Microsoft.Web/sites@2021-02-01' = { name: 'M365_CLIENT_ID' value: aadAppClientId } +{{^MicrosoftEntra}} { name: 'M365_CLIENT_SECRET' value: aadAppClientSecret } +{{/MicrosoftEntra}} { name: 'M365_TENANT_ID' value: aadAppTenantId @@ -82,7 +86,6 @@ resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { requireAuthentication: true unauthenticatedClientAction: 'Return401' } - identityProviders: { azureActiveDirectory: { enabled: true diff --git a/templates/ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json b/templates/js/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl similarity index 93% rename from templates/ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json rename to templates/js/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl index 54ae4292b6..2dd7c71d3d 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json +++ b/templates/js/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl @@ -11,9 +11,11 @@ "aadAppClientId": { "value": "${{AAD_APP_CLIENT_ID}}" }, +{{^MicrosoftEntra}} "aadAppClientSecret": { "value": "${{SECRET_AAD_APP_CLIENT_SECRET}}" }, +{{/MicrosoftEntra}} "aadAppTenantId": { "value": "${{AAD_APP_TENANT_ID}}" }, diff --git a/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl b/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl index 664021ca86..e743175a3d 100644 --- a/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.6 environmentFolderPath: ./env @@ -17,7 +17,12 @@ provision: # defined here. name: {{appName}}-aad # If the value is false, the action will not generate client secret for you +{{#MicrosoftEntra}} + generateClientSecret: false +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} generateClientSecret: true +{{/MicrosoftEntra}} # Authenticate users with a Microsoft work or school account in your # organization's Microsoft Entra tenant (for example, single tenant). signInAudience: AzureADMyOrg @@ -27,7 +32,9 @@ provision: clientId: AAD_APP_CLIENT_ID # Environment variable that starts with `SECRET_` will be stored to the # .env.{envName}.user environment file +{{^MicrosoftEntra}} clientSecret: SECRET_AAD_APP_CLIENT_SECRET +{{/MicrosoftEntra}} objectId: AAD_APP_OBJECT_ID tenantId: AAD_APP_TENANT_ID authority: AAD_APP_OAUTH_AUTHORITY @@ -79,6 +86,18 @@ provision: - uses: oauth/register with: +{{#MicrosoftEntra}} + name: aadAuthCode + flow: authorizationCode + appId: ${{TEAMS_APP_ID}} + clientId: ${{AAD_APP_CLIENT_ID}} + # Path to OpenAPI description document + apiSpecPath: ./appPackage/apiSpecificationFile/repair.${{TEAMSFX_ENV}}.yml + identityProvider: MicrosoftEntra + writeToEnvironmentFile: + configurationId: AADAUTHCODE_CONFIGURATION_ID +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} name: oAuth2AuthCode flow: authorizationCode appId: ${{TEAMS_APP_ID}} @@ -88,6 +107,7 @@ provision: apiSpecPath: ./appPackage/apiSpecificationFile/repair.${{TEAMSFX_ENV}}.yml writeToEnvironmentFile: configurationId: OAUTH2AUTHCODE_CONFIGURATION_ID +{{/MicrosoftEntra}} # Build Teams app package with latest env value - uses: teamsApp/zipAppPackage @@ -101,7 +121,7 @@ provision: - uses: teamsApp/validateAppPackage with: # Relative path to this file. This is the path for built zip file. - appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. @@ -157,7 +177,7 @@ publish: - uses: teamsApp/validateAppPackage with: # Relative path to this file. This is the path for built zip file. - appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. # Will use the app id in manifest file to determine which Teams app to update. diff --git a/templates/ts/api-plugin-from-scratch-oauth/README.md.tpl b/templates/ts/api-plugin-from-scratch-oauth/README.md.tpl index ad8590ddb4..bea1d735f4 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/README.md.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/README.md.tpl @@ -83,12 +83,14 @@ The following are Teams Toolkit specific project files. You can [visit a complet | `teamsapp.yml` | This is the main Teams Toolkit project file. The project file defines two primary things: Properties and configuration Stage definitions. | | `teamsapp.local.yml` | This overrides `teamsapp.yml` with actions that enable local execution and debugging. | | `aad.manifest.json` | This file defines the configuration of Microsoft Entra app. This template will only provision [single tenant](https://learn.microsoft.com/azure/active-directory/develop/single-and-multi-tenant-apps#who-can-sign-in-to-your-app) Microsoft Entra app. | +{{^MicrosoftEntra}} ## How OAuth works in the API plugin ![oauth-flow](https://github.com/OfficeDev/teams-toolkit/assets/107838226/f074abbe-d9e3-4a46-8e08-feb66b17a539) > **Note**: The OAuth flow is only functional in remote environments. It cannot be tested in a local environment due to the lack of authentication support in Azure Function core tools. +{{/MicrosoftEntra}} ## Addition information and references diff --git a/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl b/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl index 980545a890..96d7917c6d 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl @@ -28,6 +28,16 @@ "value": "repairs_read" } ], +{{#MicrosoftEntra}} + "preAuthorizedApplications": [ + { + "appId": "ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b", + "permissionIds": [ + "${{TEAMS_APP_ID}}" + ] + } + ], +{{/MicrosoftEntra}} "replyUrlsWithType": [ { "url": "https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect", diff --git a/templates/ts/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl b/templates/ts/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl index 2737eeba05..9e34c51b81 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/appPackage/ai-plugin.dev.json.tpl @@ -69,7 +69,12 @@ "type": "OpenApi", "auth": { "type": "OAuthPluginVault", +{{#MicrosoftEntra}} + "reference_id": "${{AADAUTHCODE_CONFIGURATION_ID}}" +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} "reference_id": "${{OAUTH2AUTHCODE_CONFIGURATION_ID}}" +{{/MicrosoftEntra}} }, "spec": { "url": "apiSpecificationFile/repair.dev.yml", diff --git a/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml b/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl similarity index 89% rename from templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml rename to templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl index 27afb73066..4288030123 100644 --- a/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml +++ b/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl @@ -6,8 +6,15 @@ info: servers: - url: ${{OPENAPI_SERVER_URL}}/api description: The repair api server + components: securitySchemes: +{{#MicrosoftEntra}} + aadAuthCode: + type: oauth2 + description: AAD configuration for the repair service +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} oAuth2AuthCode: type: oauth2 description: OAuth configuration for the repair service @@ -17,6 +24,7 @@ components: tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token scopes: api://${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records +{{/MicrosoftEntra}} paths: /repairs: get: @@ -24,7 +32,12 @@ paths: summary: List all repairs description: Returns a list of repairs with their details and images security: +{{#MicrosoftEntra}} + - aadAuthCode: [] +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} - oAuth2AuthCode: [] +{{/MicrosoftEntra}} parameters: - name: assignedTo in: query diff --git a/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep b/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl similarity index 97% rename from templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep rename to templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl index db45a3d3e3..6bf0871965 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep +++ b/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl @@ -3,14 +3,17 @@ param resourceBaseName string param functionAppSKU string param aadAppClientId string +{{^MicrosoftEntra}} @secure() param aadAppClientSecret string +{{/MicrosoftEntra}} param aadAppTenantId string param aadAppOauthAuthorityHost string param location string = resourceGroup().location param serverfarmsName string = resourceBaseName param functionAppName string = resourceBaseName + // Compute resources for Azure Functions resource serverfarms 'Microsoft.Web/serverfarms@2021-02-01' = { name: serverfarmsName @@ -51,10 +54,12 @@ resource functionApp 'Microsoft.Web/sites@2021-02-01' = { name: 'M365_CLIENT_ID' value: aadAppClientId } +{{^MicrosoftEntra}} { name: 'M365_CLIENT_SECRET' value: aadAppClientSecret } +{{/MicrosoftEntra}} { name: 'M365_TENANT_ID' value: aadAppTenantId diff --git a/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json b/templates/ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl similarity index 93% rename from templates/csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json rename to templates/ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl index 54ae4292b6..2dd7c71d3d 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.parameters.json +++ b/templates/ts/api-plugin-from-scratch-oauth/infra/azure.parameters.json.tpl @@ -11,9 +11,11 @@ "aadAppClientId": { "value": "${{AAD_APP_CLIENT_ID}}" }, +{{^MicrosoftEntra}} "aadAppClientSecret": { "value": "${{SECRET_AAD_APP_CLIENT_SECRET}}" }, +{{/MicrosoftEntra}} "aadAppTenantId": { "value": "${{AAD_APP_TENANT_ID}}" }, diff --git a/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl b/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl index 7112a391b9..d9a3e014f8 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.6 environmentFolderPath: ./env @@ -17,7 +17,12 @@ provision: # defined here. name: {{appName}}-aad # If the value is false, the action will not generate client secret for you +{{#MicrosoftEntra}} + generateClientSecret: false +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} generateClientSecret: true +{{/MicrosoftEntra}} # Authenticate users with a Microsoft work or school account in your # organization's Microsoft Entra tenant (for example, single tenant). signInAudience: AzureADMyOrg @@ -27,7 +32,9 @@ provision: clientId: AAD_APP_CLIENT_ID # Environment variable that starts with `SECRET_` will be stored to the # .env.{envName}.user environment file +{{^MicrosoftEntra}} clientSecret: SECRET_AAD_APP_CLIENT_SECRET +{{/MicrosoftEntra}} objectId: AAD_APP_OBJECT_ID tenantId: AAD_APP_TENANT_ID authority: AAD_APP_OAUTH_AUTHORITY @@ -79,6 +86,18 @@ provision: - uses: oauth/register with: +{{#MicrosoftEntra}} + name: aadAuthCode + flow: authorizationCode + appId: ${{TEAMS_APP_ID}} + clientId: ${{AAD_APP_CLIENT_ID}} + # Path to OpenAPI description document + apiSpecPath: ./appPackage/apiSpecificationFile/repair.${{TEAMSFX_ENV}}.yml + identityProvider: MicrosoftEntra + writeToEnvironmentFile: + configurationId: AADAUTHCODE_CONFIGURATION_ID +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} name: oAuth2AuthCode flow: authorizationCode appId: ${{TEAMS_APP_ID}} @@ -88,6 +107,7 @@ provision: apiSpecPath: ./appPackage/apiSpecificationFile/repair.${{TEAMSFX_ENV}}.yml writeToEnvironmentFile: configurationId: OAUTH2AUTHCODE_CONFIGURATION_ID +{{/MicrosoftEntra}} # Build Teams app package with latest env value - uses: teamsApp/zipAppPackage @@ -101,7 +121,7 @@ provision: - uses: teamsApp/validateAppPackage with: # Relative path to this file. This is the path for built zip file. - appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. @@ -162,7 +182,7 @@ publish: - uses: teamsApp/validateAppPackage with: # Relative path to this file. This is the path for built zip file. - appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. # Will use the app id in manifest file to determine which Teams app to update. From 4dcff5798cc6d0fd4413cf166d62036e01bf27f9 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:16:35 +0800 Subject: [PATCH 08/52] refactor: generate from api spec (#12265) * refactor: generate * refactor: more * test: ut * refactor: revert unnecessary change * test: ut * test: ut * refactor: more * refactor: more * refactor: more * refactor: more --- packages/fx-core/src/common/featureFlags.ts | 2 +- .../driver/teamsApp/utils/ManifestUtils.ts | 2 +- .../component/generator/apiSpec/generator.ts | 366 +++--------------- .../src/component/generator/apiSpec/helper.ts | 179 +++++++-- packages/fx-core/src/core/FxCore.ts | 188 ++++----- .../generator/apiSpecGenerator.test.ts | 2 +- packages/fx-core/tests/core/FxCore.test.ts | 205 +++++++--- 7 files changed, 431 insertions(+), 513 deletions(-) diff --git a/packages/fx-core/src/common/featureFlags.ts b/packages/fx-core/src/common/featureFlags.ts index 3c3a2685a6..181c19543c 100644 --- a/packages/fx-core/src/common/featureFlags.ts +++ b/packages/fx-core/src/common/featureFlags.ts @@ -81,7 +81,7 @@ export class FeatureFlags { }; static readonly EnvFileFunc = { name: FeatureFlagName.EnvFileFunc, - defaultValue: "false", // Set it to true for dogfooding. + defaultValue: "true", // Set it to true for dogfooding. }; } diff --git a/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts b/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts index f167b86eb5..f8c1bb3970 100644 --- a/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts +++ b/packages/fx-core/src/component/driver/teamsApp/utils/ManifestUtils.ts @@ -68,7 +68,7 @@ export class ManifestUtils { try { content = fs.readFileSync(filePath, { encoding: "utf-8" }); } catch (e) { - return err(new ReadFileError(e, "common")); + return err(new ReadFileError(e, "ManifestUtils")); } content = stripBom(content); const contentV3 = convertManifestTemplateToV3(content); diff --git a/packages/fx-core/src/component/generator/apiSpec/generator.ts b/packages/fx-core/src/component/generator/apiSpec/generator.ts index ef9adef0ed..5ac0c538ce 100644 --- a/packages/fx-core/src/component/generator/apiSpec/generator.ts +++ b/packages/fx-core/src/component/generator/apiSpec/generator.ts @@ -5,13 +5,11 @@ * @author yuqzho@microsoft.com */ -import { hooks } from "@feathersjs/hooks/lib"; import { ProjectType, SpecParser, SpecParserError, - ValidationStatus, - WarningType, + WarningResult, } from "@microsoft/m365-spec-parser"; import { AppPackageFolderName, @@ -25,7 +23,6 @@ import { ResponseTemplatesFolderName, Result, SystemError, - UserError, Warning, err, ok, @@ -33,9 +30,7 @@ import { import * as fs from "fs-extra"; import { merge } from "lodash"; import path from "path"; -import * as util from "util"; import { FeatureFlags, featureFlagManager } from "../../../common/featureFlags"; -import { getLocalizedString } from "../../../common/localizeUtils"; import { isValidHttpUrl } from "../../../common/stringUtils"; import { assembleError } from "../../../error"; import { @@ -47,26 +42,21 @@ import { QuestionNames, } from "../../../question/constants"; import { manifestUtils } from "../../driver/teamsApp/utils/ManifestUtils"; -import { ActionContext, ActionExecutionMW } from "../../middleware/actionExecutionMW"; +import { ActionContext } from "../../middleware/actionExecutionMW"; import { Generator } from "../generator"; -import { TelemetryEvents } from "../spfx/utils/telemetryEvents"; import { DefaultTemplateGenerator } from "../templates/templateGenerator"; import { TemplateInfo } from "../templates/templateInfo"; import { convertSpecParserErrorToFxError, - copilotPluginParserOptions, defaultApiSpecFolderName, defaultApiSpecJsonFileName, defaultApiSpecYamlFileName, defaultPluginManifestFileName, + generateFromApiSpec, generateScaffoldingSummary, getEnvName, - invalidApiSpecErrorName, + getParserOptions, isYamlSpecFile, - logValidationResults, - specParserGenerateResultAllSuccessTelemetryProperty, - specParserGenerateResultTelemetryEvent, - specParserGenerateResultWarningsTelemetryProperty, updateForCustomApi, } from "./helper"; import { copilotGptManifestUtils } from "../../driver/teamsApp/utils/CopilotGptManifestUtils"; @@ -101,186 +91,6 @@ export interface OpenAPISpecGeneratorResult { warnings?: Warning[]; } -// TODO: delete class for old generator -// export class OpenAPISpecGenerator { -// @hooks([ -// ActionExecutionMW({ -// enableTelemetry: true, -// telemetryComponentName: fromApiSpecComponentName, -// telemetryEventName: TelemetryEvents.Generate, -// errorSource: fromApiSpecComponentName, -// }), -// ]) -// public static async generateMe( -// context: Context, -// inputs: Inputs, -// destinationPath: string, -// actionContext?: ActionContext -// ): Promise> { -// const templateName = fromApiSpecTemplateName; -// const componentName = fromApiSpecComponentName; - -// merge(actionContext?.telemetryProps, { [telemetryProperties.templateName]: templateName }); - -// return await this.generate( -// context, -// inputs, -// destinationPath, -// templateName, -// componentName, -// false, -// inputs.apiAuthData -// ); -// } - -// @hooks([ -// ActionExecutionMW({ -// enableTelemetry: true, -// telemetryComponentName: pluginFromApiSpecComponentName, -// telemetryEventName: TelemetryEvents.Generate, -// errorSource: pluginFromApiSpecComponentName, -// }), -// ]) -// public static async generateCopilotPlugin( -// context: Context, -// inputs: Inputs, -// destinationPath: string, -// actionContext?: ActionContext -// ): Promise> { -// const templateName = apiPluginFromApiSpecTemplateName; -// const componentName = fromApiSpecComponentName; - -// merge(actionContext?.telemetryProps, { [telemetryProperties.templateName]: templateName }); - -// return await this.generate( -// context, -// inputs, -// destinationPath, -// templateName, -// componentName, -// true, -// inputs.apiAuthData -// ); -// } - -// @hooks([ -// ActionExecutionMW({ -// enableTelemetry: true, -// telemetryComponentName: fromOpenAIPlugincomponentName, -// telemetryEventName: TelemetryEvents.Generate, -// errorSource: fromOpenAIPlugincomponentName, -// }), -// ]) -// public static async generateCustomCopilot( -// context: Context, -// inputs: Inputs, -// destinationPath: string -// ): Promise> { -// return await this.generate( -// context, -// inputs, -// destinationPath, -// forCustomCopilotRagCustomApi, -// forCustomCopilotRagCustomApi, -// false -// ); -// } - -// private static async generate( -// context: Context, -// inputs: Inputs, -// destinationPath: string, -// templateName: string, -// componentName: string, -// isPlugin: boolean, -// authData?: AuthInfo -// ): Promise> { -// try { -// const appName = inputs[QuestionNames.AppName]; -// const language = inputs[QuestionNames.ProgrammingLanguage]; -// const safeProjectNameFromVS = -// language === "csharp" ? inputs[QuestionNames.SafeProjectName] : undefined; -// const type = -// templateName === forCustomCopilotRagCustomApi -// ? ProjectType.TeamsAi -// : isPlugin -// ? ProjectType.Copilot -// : ProjectType.SME; -// let url = inputs[QuestionNames.ApiSpecLocation]; -// url = url.trim(); -// let isYaml: boolean; -// try { -// isYaml = await isYamlSpecFile(url); -// } catch (e) { -// isYaml = false; -// } -// const openapiSpecFileName = isYaml ? defaultApiSpecYamlFileName : defaultApiSpecJsonFileName; -// if (authData?.authName) { -// const envName = getEnvName(authData.authName, authData.authType); -// context.templateVariables = Generator.getDefaultVariables( -// appName, -// safeProjectNameFromVS, -// inputs.targetFramework, -// inputs.placeProjectFileInSolutionDir === "true", -// { -// authName: authData.authName, -// openapiSpecPath: normalizePath( -// path.join(AppPackageFolderName, defaultApiSpecFolderName, openapiSpecFileName) -// ), -// registrationIdEnvName: envName, -// authType: authData.authType, -// withPlugin: inputs[QuestionNames.WithPlugin], -// } -// ); -// } else { -// context.templateVariables = Generator.getDefaultVariables( -// appName, -// safeProjectNameFromVS, -// inputs.targetFramework, -// inputs.placeProjectFileInSolutionDir === "true", -// withPlugin: inputs[QuestionNames.WithPlugin], -// ); -// } - -// if (templateName != forCustomCopilotRagCustomApi) { -// // download template -// const templateRes = await Generator.generateTemplate( -// context, -// destinationPath, -// templateName, -// language === ProgrammingLanguage.CSharp ? ProgrammingLanguage.CSharp : undefined -// ); -// if (templateRes.isErr()) return err(templateRes.error); -// } - -// context.telemetryReporter.sendTelemetryEvent(copilotPluginExistingApiSpecUrlTelemetryEvent, { -// [telemetryProperties.isRemoteUrlTelemetryProperty]: isValidHttpUrl(url).toString(), -// [telemetryProperties.generateType]: type.toString(), -// [telemetryProperties.authType]: authData?.authType ?? "None", -// }); - -// const newGenerator = new SpecGenerator(); -// const getTemplateInfosState: any = {}; -// inputs.getTemplateInfosState = getTemplateInfosState; -// getTemplateInfosState.isYaml = isYaml; -// getTemplateInfosState.isPlugin = isPlugin; -// getTemplateInfosState.templateName = templateName; -// getTemplateInfosState.url = url; -// getTemplateInfosState.type = type; -// const res = await newGenerator.post(context, inputs, destinationPath); -// return res; -// } catch (e) { -// let error: FxError; -// if (e instanceof SpecParserError) { -// error = convertSpecParserErrorToFxError(e); -// } else { -// error = assembleError(e); -// } -// return err(error); -// } -// } -// } - interface TemplateInfosState { isYaml: boolean; templateName: string; @@ -464,61 +274,6 @@ export class SpecGenerator extends DefaultTemplateGenerator { const getTemplateInfosState = inputs.getTemplateInfosState as TemplateInfosState; const isDeclarativeCopilot = inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id; - // validate API spec - const specParser = new SpecParser( - getTemplateInfosState.url, - getTemplateInfosState.isPlugin - ? { - ...copilotPluginParserOptions, - isGptPlugin: isDeclarativeCopilot, - } - : { - allowBearerTokenAuth: true, // Currently, API key auth support is actually bearer token auth - allowMultipleParameters: true, - projectType: getTemplateInfosState.type, - allowOauth2: featureFlagManager.getBooleanValue(FeatureFlags.SMEOAuth), - } - ); - const validationRes = await specParser.validate(); - const warnings = validationRes.warnings; - const operationIdWarning = warnings.find((w) => w.type === WarningType.OperationIdMissing); - const filters = inputs[QuestionNames.ApiOperation] as string[]; - if (operationIdWarning && operationIdWarning.data) { - const apisMissingOperationId = (operationIdWarning.data as string[]).filter((api) => - filters.includes(api) - ); - if (apisMissingOperationId.length > 0) { - operationIdWarning.content = util.format( - getLocalizedString("core.common.MissingOperationId"), - apisMissingOperationId.join(", ") - ); - delete operationIdWarning.data; - } else { - warnings.splice(warnings.indexOf(operationIdWarning), 1); - } - } - - const specVersionWarning = warnings.find( - (w) => w.type === WarningType.ConvertSwaggerToOpenAPI - ); - if (specVersionWarning) { - specVersionWarning.content = ""; // We don't care content of this warning - } - - if (validationRes.status === ValidationStatus.Error) { - logValidationResults(validationRes.errors, warnings, context, false, true); - const errorMessage = - inputs.platform === Platform.VSCode - ? getLocalizedString( - "core.createProjectQuestion.apiSpec.multipleValidationErrors.vscode.message" - ) - : getLocalizedString( - "core.createProjectQuestion.apiSpec.multipleValidationErrors.message" - ); - return err( - new UserError(this.componentName, invalidApiSpecErrorName, errorMessage, errorMessage) - ); - } const manifestPath = path.join( destinationPath, AppPackageFolderName, @@ -533,65 +288,57 @@ export class SpecGenerator extends DefaultTemplateGenerator { ? defaultApiSpecYamlFileName : defaultApiSpecJsonFileName; const openapiSpecPath = path.join(apiSpecFolderPath, openapiSpecFileName); - // generate files - await fs.ensureDir(apiSpecFolderPath); - let generateResult; - let pluginManifestPath: string | undefined; + await fs.ensureDir(apiSpecFolderPath); - if (getTemplateInfosState.isPlugin) { - pluginManifestPath = path.join( - destinationPath, - AppPackageFolderName, - defaultPluginManifestFileName - ); - generateResult = await specParser.generateForCopilot( - manifestPath, - filters, - openapiSpecPath, - pluginManifestPath - ); + let warnings: WarningResult[]; + const pluginManifestPath = + getTemplateInfosState.type === ProjectType.Copilot + ? path.join(destinationPath, AppPackageFolderName, defaultPluginManifestFileName) + : undefined; + const responseTemplateFolder = + getTemplateInfosState.type === ProjectType.SME + ? path.join(destinationPath, AppPackageFolderName, ResponseTemplatesFolderName) + : undefined; + const specParser = new SpecParser( + getTemplateInfosState.url, + getParserOptions(getTemplateInfosState.type, isDeclarativeCopilot) + ); + const generateResult = await generateFromApiSpec( + specParser, + manifestPath, + inputs, + context, + this.componentName, + getTemplateInfosState.type, + { + destinationApiSpecFilePath: openapiSpecPath, + pluginManifestFilePath: pluginManifestPath, + responseTemplateFolder, + } + ); + if (generateResult.isErr()) { + return err(generateResult.error); } else { - const responseTemplateFolder = path.join( - destinationPath, - AppPackageFolderName, - ResponseTemplatesFolderName + warnings = generateResult.value.warnings; + } + if (isDeclarativeCopilot) { + const gptManifestPath = path.join( + path.dirname(manifestPath), + defaultDeclarativeCopilotManifestFileName ); - generateResult = await specParser.generate( - manifestPath, - filters, - openapiSpecPath, - getTemplateInfosState.type === ProjectType.TeamsAi ? undefined : responseTemplateFolder + const addAcionResult = await copilotGptManifestUtils.addAction( + gptManifestPath, + defaultDeclarativeCopilotActionId, + defaultPluginManifestFileName ); + if (addAcionResult.isErr()) { + return err(addAcionResult.error); + } } - context.telemetryReporter.sendTelemetryEvent(specParserGenerateResultTelemetryEvent, { - [telemetryProperties.generateType]: getTemplateInfosState.type.toString(), - [specParserGenerateResultAllSuccessTelemetryProperty]: generateResult.allSuccess.toString(), - [specParserGenerateResultWarningsTelemetryProperty]: generateResult.warnings - .map((w) => w.type.toString() + ": " + w.content) - .join(";"), - }); - - if (generateResult.warnings.length > 0) { - generateResult.warnings.find((o) => { - if (o.type === WarningType.OperationOnlyContainsOptionalParam) { - o.content = ""; // We don't care content of this warning - } - }); - warnings.push(...generateResult.warnings); - } - - const manifestRes = await manifestUtils._readAppManifest(manifestPath); - - if (manifestRes.isErr()) { - return err(manifestRes.error); - } - - const teamsManifest = manifestRes.value; - if (getTemplateInfosState.templateName === forCustomCopilotRagCustomApi) { - const specs = await specParser.getFilteredSpecs(filters); + const specs = await specParser.getFilteredSpecs(inputs[QuestionNames.ApiOperation]); const spec = specs[1]; try { const language = inputs[QuestionNames.ProgrammingLanguage] as ProgrammingLanguage; @@ -606,21 +353,14 @@ export class SpecGenerator extends DefaultTemplateGenerator { } } - if (isDeclarativeCopilot) { - const gptManifestPath = path.join( - path.dirname(manifestPath), - defaultDeclarativeCopilotManifestFileName - ); - const addAcionResult = await copilotGptManifestUtils.addAction( - gptManifestPath, - defaultDeclarativeCopilotActionId, - defaultPluginManifestFileName - ); - if (addAcionResult.isErr()) { - return err(addAcionResult.error); - } + const manifestRes = await manifestUtils._readAppManifest(manifestPath); + + if (manifestRes.isErr()) { + return err(manifestRes.error); } + const teamsManifest = manifestRes.value; + // log warnings if (inputs.platform === Platform.CLI || inputs.platform === Platform.VS) { const warnSummary = await generateScaffoldingSummary( diff --git a/packages/fx-core/src/component/generator/apiSpec/helper.ts b/packages/fx-core/src/component/generator/apiSpec/helper.ts index 6c270f62ae..657ea27613 100644 --- a/packages/fx-core/src/component/generator/apiSpec/helper.ts +++ b/packages/fx-core/src/component/generator/apiSpec/helper.ts @@ -30,6 +30,7 @@ import { Inputs, ManifestTemplateFileName, ManifestUtil, + Platform, Result, SystemError, TeamsAppManifest, @@ -38,14 +39,13 @@ import { err, ok, } from "@microsoft/teamsfx-api"; -import axios, { AxiosResponse } from "axios"; import fs from "fs-extra"; import { OpenAPIV3 } from "openapi-types"; import { EOL } from "os"; import path from "path"; import { FeatureFlags, featureFlagManager } from "../../../common/featureFlags"; import { getLocalizedString } from "../../../common/localizeUtils"; -import { MissingRequiredInputError } from "../../../error"; +import { assembleError, MissingRequiredInputError } from "../../../error"; import { apiPluginApiSpecOptionId, CustomCopilotRagOptions, @@ -55,7 +55,9 @@ import { import { SummaryConstant } from "../../configManager/constant"; import { manifestUtils } from "../../driver/teamsApp/utils/ManifestUtils"; import { pluginManifestUtils } from "../../driver/teamsApp/utils/PluginManifestUtils"; -import { sendTelemetryErrorEvent } from "../../../common/telemetry"; +import { sendTelemetryErrorEvent, TelemetryProperty } from "../../../common/telemetry"; +import * as util from "util"; +import axios from "axios"; const enum telemetryProperties { validationStatus = "validation-status", @@ -69,6 +71,7 @@ const enum telemetryProperties { otherAuthCount = "other-auth-count", isFromAddingApi = "is-from-adding-api", failedReason = "failed-reason", + generateType = "generate-type", } const enum telemetryEvents { @@ -77,19 +80,39 @@ const enum telemetryEvents { failedToGetGenerateWarning = "failed-to-get-generate-warning", } -export const copilotPluginParserOptions: ParseOptions = { - allowAPIKeyAuth: false, - allowBearerTokenAuth: true, - allowMultipleParameters: true, - allowOauth2: true, - projectType: ProjectType.Copilot, - allowMissingId: true, - allowSwagger: true, - allowMethods: ["get", "post", "put", "delete", "patch", "head", "connect", "options", "trace"], - allowResponseSemantics: true, - allowConversationStarters: true, - allowConfirmation: false, // confirmation is not stable for public preview in Sydney, so it's temporarily set to false -}; +export function getParserOptions(type: ProjectType, isDeclarativeCopilot?: boolean): ParseOptions { + return type === ProjectType.Copilot + ? { + isGptPlugin: isDeclarativeCopilot, + allowAPIKeyAuth: false, + allowBearerTokenAuth: true, + allowMultipleParameters: true, + allowOauth2: true, + projectType: ProjectType.Copilot, + allowMissingId: true, + allowSwagger: true, + allowMethods: [ + "get", + "post", + "put", + "delete", + "patch", + "head", + "connect", + "options", + "trace", + ], + allowResponseSemantics: true, + allowConversationStarters: true, + allowConfirmation: false, // confirmation is not stable for public preview in Sydney, so it's temporarily set to false + } + : { + projectType: type, + allowBearerTokenAuth: true, // Currently, API key auth support is actually bearer token auth + allowMultipleParameters: true, + allowOauth2: featureFlagManager.getBooleanValue(FeatureFlags.SMEOAuth), + }; +} export const specParserGenerateResultTelemetryEvent = "spec-parser-generate-result"; export const specParserGenerateResultAllSuccessTelemetryProperty = "all-success"; @@ -130,22 +153,14 @@ export async function listOperations( !!inputs[QuestionNames.PluginAvailability]; const isCustomApi = inputs[QuestionNames.CustomCopilotRag] === CustomCopilotRagOptions.customApi().id; + const projectType = isPlugin + ? ProjectType.Copilot + : isCustomApi + ? ProjectType.TeamsAi + : ProjectType.SME; try { - const specParser = new SpecParser( - apiSpecUrl as string, - isPlugin - ? copilotPluginParserOptions - : isCustomApi - ? { - projectType: ProjectType.TeamsAi, - } - : { - allowBearerTokenAuth: true, // Currently, API key auth support is actually bearer token auth - allowMultipleParameters: true, - allowOauth2: featureFlagManager.getBooleanValue(FeatureFlags.SMEOAuth), - } - ); + const specParser = new SpecParser(apiSpecUrl as string, getParserOptions(projectType)); const validationRes = await specParser.validate(); validationRes.errors = formatValidationErrors(validationRes.errors, inputs); @@ -189,6 +204,7 @@ export async function listOperations( let operations = listResult.APIs.filter((value) => value.isValid); context.telemetryReporter.sendTelemetryEvent(telemetryEvents.listApis, { + [telemetryProperties.generateType]: projectType.toString(), [telemetryProperties.validApisCount]: listResult.validAPICount.toString(), [telemetryProperties.allApisCount]: listResult.allAPICount.toString(), [telemetryProperties.isFromAddingApi]: (!includeExistingAPIs).toString(), @@ -350,11 +366,112 @@ export async function listPluginExistingOperations( ); } - const specParser = new SpecParser(apiSpecFilePath, copilotPluginParserOptions); + const specParser = new SpecParser(apiSpecFilePath, getParserOptions(ProjectType.Copilot)); const listResult = await specParser.list(); return listResult.APIs.map((o) => o.api); } +interface SpecParserOutputFilePath { + destinationApiSpecFilePath: string; + pluginManifestFilePath?: string; + responseTemplateFolder?: string; +} + +interface SpecParserGenerateResult { + warnings: WarningResult[]; +} +export async function generateFromApiSpec( + specParser: SpecParser, + teamsManifestPath: string, + inputs: Inputs, + context: Context, + sourceComponent: string, + projectType: ProjectType, + outputFilePath: SpecParserOutputFilePath +): Promise> { + const operations = inputs[QuestionNames.ApiOperation] as string[]; + const validationRes = await specParser.validate(); + const warnings = validationRes.warnings; + const operationIdWarning = warnings.find((w) => w.type === WarningType.OperationIdMissing); + + if (operationIdWarning && operationIdWarning.data) { + const apisMissingOperationId = (operationIdWarning.data as string[]).filter((api) => + operations.includes(api) + ); + if (apisMissingOperationId.length > 0) { + operationIdWarning.content = util.format( + getLocalizedString("core.common.MissingOperationId"), + apisMissingOperationId.join(", ") + ); + delete operationIdWarning.data; + } else { + warnings.splice(warnings.indexOf(operationIdWarning), 1); + } + } + + const specVersionWarning = warnings.find((w) => w.type === WarningType.ConvertSwaggerToOpenAPI); + if (specVersionWarning) { + specVersionWarning.content = ""; // We don't care content of this warning + } + + if (validationRes.status === ValidationStatus.Error) { + logValidationResults(validationRes.errors, warnings, context, false, true); + const errorMessage = + inputs.platform === Platform.VSCode + ? getLocalizedString( + "core.createProjectQuestion.apiSpec.multipleValidationErrors.vscode.message" + ) + : getLocalizedString("core.createProjectQuestion.apiSpec.multipleValidationErrors.message"); + return err(new UserError(sourceComponent, invalidApiSpecErrorName, errorMessage, errorMessage)); + } + + try { + const generateResult = + projectType === ProjectType.Copilot + ? await specParser.generateForCopilot( + teamsManifestPath, + operations, + outputFilePath.destinationApiSpecFilePath, + outputFilePath.pluginManifestFilePath! + ) + : await specParser.generate( + teamsManifestPath, + operations, + outputFilePath.destinationApiSpecFilePath, + projectType === ProjectType.TeamsAi ? undefined : outputFilePath.responseTemplateFolder + ); + + // Send SpecParser.generate() warnings + context.telemetryReporter.sendTelemetryEvent(specParserGenerateResultTelemetryEvent, { + [telemetryProperties.generateType]: projectType.toString(), + [specParserGenerateResultAllSuccessTelemetryProperty]: generateResult.allSuccess.toString(), + [specParserGenerateResultWarningsTelemetryProperty]: generateResult.warnings + .map((w) => w.type.toString() + ": " + w.content) + .join(";"), + [TelemetryProperty.Component]: sourceComponent, + }); + + if (generateResult.warnings && generateResult.warnings.length > 0) { + generateResult.warnings.find((o) => { + if (o.type === WarningType.OperationOnlyContainsOptionalParam) { + o.content = ""; // We don't care content of this warning + } + }); + warnings.push(...generateResult.warnings); + } + + return ok({ warnings }); + } catch (e) { + let error: FxError; + if (e instanceof SpecParserError) { + error = convertSpecParserErrorToFxError(e); + } else { + error = assembleError(e, sourceComponent); + } + return err(error); + } +} + export function logValidationResults( errors: ErrorResult[], warnings: WarningResult[], diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index 6677002ea5..e42fce7620 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -2,7 +2,13 @@ // Licensed under the MIT license. import { hooks } from "@feathersjs/hooks"; -import { AuthType, SpecParser, SpecParserError, Utils } from "@microsoft/m365-spec-parser"; +import { + AuthType, + ProjectType, + SpecParser, + SpecParserError, + Utils, +} from "@microsoft/m365-spec-parser"; import { ApiOperation, AppPackageFolderName, @@ -93,18 +99,16 @@ import "../component/feature/sso"; import { SSO } from "../component/feature/sso"; import { convertSpecParserErrorToFxError, - copilotPluginParserOptions, defaultApiSpecFolderName, defaultApiSpecJsonFileName, defaultApiSpecYamlFileName, defaultPluginManifestFileName, + generateFromApiSpec, generateScaffoldingSummary, + getParserOptions, isYamlSpecFile, listOperations, listPluginExistingOperations, - specParserGenerateResultAllSuccessTelemetryProperty, - specParserGenerateResultTelemetryEvent, - specParserGenerateResultWarningsTelemetryProperty, } from "../component/generator/apiSpec/helper"; import { LaunchHelper } from "../component/m365/launchHelper"; import { EnvLoaderMW, EnvWriterMW } from "../component/middleware/envMW"; @@ -1604,47 +1608,41 @@ export class FxCore { // Merge existing operations in manifest.json const specParser = new SpecParser( url, - isPlugin - ? copilotPluginParserOptions - : { - allowBearerTokenAuth: true, // Currently, API key auth support is actually bearer token auth - allowMultipleParameters: true, - } + getParserOptions(isPlugin ? ProjectType.Copilot : ProjectType.SME) ); - - const listResult = await specParser.list(); - const apiResultList = listResult.APIs.filter((value) => value.isValid); - - let existingOperations: string[]; - let outputApiSpecPath: string; - if (isPlugin) { - if (!inputs[QuestionNames.DestinationApiSpecFilePath]) { - return err(new MissingRequiredInputError(QuestionNames.DestinationApiSpecFilePath)); + try { + const listResult = await specParser.list(); + const apiResultList = listResult.APIs.filter((value) => value.isValid); + + let existingOperations: string[]; + let outputApiSpecPath: string; + if (isPlugin) { + if (!inputs[QuestionNames.DestinationApiSpecFilePath]) { + return err(new MissingRequiredInputError(QuestionNames.DestinationApiSpecFilePath)); + } + outputApiSpecPath = inputs[QuestionNames.DestinationApiSpecFilePath]; + existingOperations = await listPluginExistingOperations( + manifestRes.value, + manifestPath, + inputs[QuestionNames.DestinationApiSpecFilePath] + ); + } else { + const existingOperationIds = manifestUtils.getOperationIds(manifestRes.value); + existingOperations = apiResultList + .filter((operation) => existingOperationIds.includes(operation.operationId)) + .map((operation) => operation.api); + const apiSpecificationFile = manifestRes.value.composeExtensions![0].apiSpecificationFile; + outputApiSpecPath = path.join(path.dirname(manifestPath), apiSpecificationFile!); } - outputApiSpecPath = inputs[QuestionNames.DestinationApiSpecFilePath]; - existingOperations = await listPluginExistingOperations( - manifestRes.value, - manifestPath, - inputs[QuestionNames.DestinationApiSpecFilePath] - ); - } else { - const existingOperationIds = manifestUtils.getOperationIds(manifestRes.value); - existingOperations = apiResultList - .filter((operation) => existingOperationIds.includes(operation.operationId)) - .map((operation) => operation.api); - const apiSpecificationFile = manifestRes.value.composeExtensions![0].apiSpecificationFile; - outputApiSpecPath = path.join(path.dirname(manifestPath), apiSpecificationFile!); - } - const operations = [...existingOperations, ...newOperations]; + const operations = [...existingOperations, ...newOperations]; - const adaptiveCardFolder = path.join( - inputs.projectPath!, - AppPackageFolderName, - ResponseTemplatesFolderName - ); + const adaptiveCardFolder = path.join( + inputs.projectPath!, + AppPackageFolderName, + ResponseTemplatesFolderName + ); - try { const authNames: Set = new Set(); const serverUrls: Set = new Set(); let authScheme: AuthType | undefined = undefined; @@ -1697,16 +1695,9 @@ export class FxCore { } } - let generateResult; let pluginPath: string | undefined; - if (!isPlugin) { - generateResult = await specParser.generate( - manifestPath, - operations, - outputApiSpecPath, - adaptiveCardFolder - ); - } else { + + if (isPlugin) { const pluginPathRes = await manifestUtils.getPluginFilePath( manifestRes.value, manifestPath @@ -1715,26 +1706,28 @@ export class FxCore { return err(pluginPathRes.error); } pluginPath = pluginPathRes.value; - generateResult = await specParser.generateForCopilot( - manifestPath, - operations, - outputApiSpecPath, - pluginPathRes.value - ); } + const generateResult = await generateFromApiSpec( + specParser, + manifestPath, + inputs, + context, + CoreTelemetryComponentName, + isPlugin ? ProjectType.Copilot : ProjectType.SME, + { + destinationApiSpecFilePath: outputApiSpecPath, + responseTemplateFolder: adaptiveCardFolder, + pluginManifestFilePath: pluginPath, + } + ); - // Send SpecParser.generate() warnings - context.telemetryReporter.sendTelemetryEvent(specParserGenerateResultTelemetryEvent, { - [specParserGenerateResultAllSuccessTelemetryProperty]: generateResult.allSuccess.toString(), - [specParserGenerateResultWarningsTelemetryProperty]: generateResult.warnings - .map((w) => w.type.toString() + ": " + w.content) - .join(";"), - [TelemetryProperty.Component]: CoreTelemetryComponentName, - }); + if (generateResult.isErr()) { + return err(generateResult.error); + } - if (generateResult.warnings && generateResult.warnings.length > 0) { + if (generateResult.value.warnings && generateResult.value.warnings.length > 0) { const warnSummary = await generateScaffoldingSummary( - generateResult.warnings, + generateResult.value.warnings, manifestRes.value, path.relative(inputs.projectPath!, outputApiSpecPath), pluginPath === undefined ? undefined : path.relative(inputs.projectPath!, pluginPath), @@ -1836,7 +1829,6 @@ export class FxCore { if (!inputs.projectPath) { throw new Error("projectPath is undefined"); // should never happen } - const operations = inputs[QuestionNames.ApiOperation] as string[]; const url = inputs[QuestionNames.ApiSpecLocation]; const manifestPath = inputs[QuestionNames.ManifestPath]; const appPackageFolder = path.dirname(manifestPath); @@ -1927,43 +1919,33 @@ export class FxCore { } const pluginManifestFilePath = path.join(appPackageFolder, pluginManifestName); - // generate plugin related files - const specParser = new SpecParser(url, { ...copilotPluginParserOptions, isGptPlugin: true }); - try { - const generateResult = await specParser.generateForCopilot( - manifestPath, - operations, - openApiSpecFilePath, - pluginManifestFilePath - ); - - // Send SpecParser.generate() warnings - context.telemetryReporter.sendTelemetryEvent(specParserGenerateResultTelemetryEvent, { - [specParserGenerateResultAllSuccessTelemetryProperty]: generateResult.allSuccess.toString(), - [specParserGenerateResultWarningsTelemetryProperty]: generateResult.warnings - .map((w) => w.type.toString() + ": " + w.content) - .join(";"), - [TelemetryProperty.Component]: CoreTelemetryComponentName, - }); - - if (generateResult.warnings && generateResult.warnings.length > 0) { - const warnSummary = await generateScaffoldingSummary( - generateResult.warnings, - manifestRes.value, - path.relative(inputs.projectPath, openApiSpecFilePath), - path.relative(inputs.projectPath, pluginManifestFilePath), - inputs.projectPath - ); - context.logProvider.info(warnSummary + "\n"); - } - } catch (e) { - let error: FxError; - if (e instanceof SpecParserError) { - error = convertSpecParserErrorToFxError(e); - } else { - error = assembleError(e); + const specParser = new SpecParser(url, getParserOptions(ProjectType.Copilot, true)); + const generateRes = await generateFromApiSpec( + specParser, + manifestPath, + inputs, + context, + CoreTelemetryComponentName, + ProjectType.Copilot, + { + destinationApiSpecFilePath: openApiSpecFilePath, + pluginManifestFilePath: pluginManifestFilePath, } - return err(error); + ); + if (generateRes.isErr()) { + return err(generateRes.error); + } + + const warnings = generateRes.value.warnings; + if (warnings && warnings.length > 0) { + const warnSummary = await generateScaffoldingSummary( + warnings, + manifestRes.value, + path.relative(inputs.projectPath, openApiSpecFilePath), + path.relative(inputs.projectPath, pluginManifestFilePath), + inputs.projectPath + ); + context.logProvider.info(warnSummary + "\n"); } // update Teams manifest diff --git a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts index c6f6e3d27b..5af9a52457 100644 --- a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @@ -327,7 +327,7 @@ describe("generateScaffoldingSummary", async () => { }); }); -describe("isYamlSpecFile", () => { +describe("isYamlFile", () => { afterEach(() => { sinon.restore(); }); diff --git a/packages/fx-core/tests/core/FxCore.test.ts b/packages/fx-core/tests/core/FxCore.test.ts index 258107006c..41249b3836 100644 --- a/packages/fx-core/tests/core/FxCore.test.ts +++ b/packages/fx-core/tests/core/FxCore.test.ts @@ -2165,6 +2165,11 @@ describe("copilotPlugin", async () => { warnings: [], allSuccess: true, }); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); @@ -2217,6 +2222,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(pluginGeneratorHelper, "generateScaffoldingSummary").resolves(""); @@ -2275,6 +2285,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(manifestUtils, "getPluginFilePath").resolves(ok("ai-plugin.json")); sinon.stub(validationUtils, "validateInputs").resolves(undefined); @@ -2478,6 +2493,11 @@ describe("copilotPlugin", async () => { warnings: [], allSuccess: true, }); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); @@ -2552,6 +2572,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -2641,6 +2666,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); const teamsappObject = { @@ -2720,6 +2750,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); const teamsappObject = { @@ -2798,6 +2833,11 @@ describe("copilotPlugin", async () => { warnings: [], allSuccess: true, }); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); @@ -2887,6 +2927,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -3000,6 +3045,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -3097,6 +3147,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -3237,6 +3292,11 @@ describe("copilotPlugin", async () => { sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); const teamsappObject = { provision: [ { @@ -3344,6 +3404,11 @@ describe("copilotPlugin", async () => { sinon.stub(SpecParser.prototype, "list").resolves(listResult); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); const teamsappObject = { provision: [ @@ -3493,6 +3558,11 @@ describe("copilotPlugin", async () => { sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); const teamsappObject = { provision: [ { @@ -3635,6 +3705,11 @@ describe("copilotPlugin", async () => { sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); const teamsappObject = { provision: [ { @@ -3782,6 +3857,11 @@ describe("copilotPlugin", async () => { sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); const teamsappObject = { provision: [ { @@ -3930,6 +4010,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -4066,6 +4151,11 @@ describe("copilotPlugin", async () => { allSuccess: true, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -4209,6 +4299,11 @@ describe("copilotPlugin", async () => { allSuccess: false, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(pluginGeneratorHelper, "generateScaffoldingSummary").resolves("warning message"); @@ -4280,6 +4375,11 @@ describe("copilotPlugin", async () => { allSuccess: false, }); sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); @@ -4357,6 +4457,35 @@ describe("copilotPlugin", async () => { sinon.stub(validationUtils, "validateInputs").resolves(undefined); sinon.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sinon.stub(tools.ui, "showMessage").resolves(ok("Add")); + const listResult: ListAPIResult = { + APIs: [ + { + operationId: "getUserById", + server: "https://server", + api: "GET /user/{userId}", + isValid: true, + reason: [], + }, + { + operationId: "getStoreOrder", + server: "https://server", + api: "GET /store/order", + isValid: true, + reason: [], + }, + ], + validAPICount: 2, + allAPICount: 2, + }; + sinon.stub(SpecParser.prototype, "validate").resolves({ + warnings: [], + status: ValidationStatus.Valid, + errors: [], + }); + sinon.stub(SpecParser.prototype, "list").resolves(listResult); + sinon + .stub(SpecParser.prototype, "generate") + .throws(new SpecParserError("", ErrorType.FilterSpecFailed)); const result = await core.copilotPluginAddAPI(inputs); assert.isTrue(result.isErr()); @@ -4669,10 +4798,13 @@ describe("addPlugin", async () => { .resolves(ok({} as DeclarativeCopilotManifestSchema)); const core = new FxCore(tools); - sandbox.stub(SpecParser.prototype, "generateForCopilot").resolves({ - warnings: [], - allSuccess: true, - }); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves( + ok({ + warnings: [ + { type: WarningType.OperationOnlyContainsOptionalParam, content: "fakeMessage" }, + ], + }) + ); sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); @@ -4732,10 +4864,7 @@ describe("addPlugin", async () => { .resolves(ok({} as DeclarativeCopilotManifestSchema)); const core = new FxCore(tools); - sandbox.stub(SpecParser.prototype, "generateForCopilot").resolves({ - warnings: [], - allSuccess: true, - }); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); @@ -4795,10 +4924,7 @@ describe("addPlugin", async () => { .resolves(ok({} as DeclarativeCopilotManifestSchema)); const core = new FxCore(tools); - sandbox.stub(SpecParser.prototype, "generateForCopilot").resolves({ - warnings: [{ type: WarningType.OperationOnlyContainsOptionalParam, content: "fakeMessage" }], - allSuccess: true, - }); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); @@ -4969,47 +5095,6 @@ describe("addPlugin", async () => { } }); - it("error: generateForCopilot exception", async () => { - const appName = await mockV3Project(); - const inputs: Inputs = { - platform: Platform.VSCode, - [QuestionNames.Folder]: os.tmpdir(), - [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", - [QuestionNames.ApiSpecLocation]: "test.json", - [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, - projectPath: path.join(os.tmpdir(), appName), - }; - const manifest = new TeamsAppManifest(); - manifest.copilotExtensions = { - declarativeCopilots: [ - { - file: "test1.json", - id: "action_1", - }, - ], - }; - sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { - if (path.endsWith("openapi_1.json")) { - return false; - } - if (path.endsWith("ai-plugin_1.json")) { - return false; - } - return true; - }); - sandbox.stub(validationUtils, "validateInputs").resolves(undefined); - sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); - sandbox - .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") - .resolves(ok({} as DeclarativeCopilotManifestSchema)); - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); - sandbox.stub(SpecParser.prototype, "generateForCopilot").throws(new Error("fakeError")); - const core = new FxCore(tools); - const result = await core.addPlugin(inputs); - assert.isTrue(result.isErr()); - }); - it("error: generateForCopilot error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { @@ -5046,8 +5131,8 @@ describe("addPlugin", async () => { .resolves(ok({} as DeclarativeCopilotManifestSchema)); sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); sandbox - .stub(SpecParser.prototype, "generateForCopilot") - .throws(new SpecParserError("fakeError", ErrorType.SpecNotValid)); + .stub(CopilotPluginHelper, "generateFromApiSpec") + .resolves(err(new SystemError("", "", "", ""))); const core = new FxCore(tools); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); @@ -5096,10 +5181,7 @@ describe("addPlugin", async () => { .resolves(ok({} as DeclarativeCopilotManifestSchema)); const core = new FxCore(tools); - sandbox.stub(SpecParser.prototype, "generateForCopilot").resolves({ - warnings: [], - allSuccess: true, - }); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); @@ -5152,10 +5234,7 @@ describe("addPlugin", async () => { .resolves(err(new SystemError("addActionError", "addActionError", "", ""))); const core = new FxCore(tools); - sandbox.stub(SpecParser.prototype, "generateForCopilot").resolves({ - warnings: [], - allSuccess: true, - }); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); From 3717d3442bc06ee04675d0f6400c3adfdd72fa21 Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Mon, 26 Aug 2024 10:16:44 +0800 Subject: [PATCH 09/52] fix(template): fix custom api template (#12270) --- templates/ts/custom-copilot-rag-custom-api/src/app/app.ts.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/ts/custom-copilot-rag-custom-api/src/app/app.ts.tpl b/templates/ts/custom-copilot-rag-custom-api/src/app/app.ts.tpl index c139f48e55..a192f64319 100644 --- a/templates/ts/custom-copilot-rag-custom-api/src/app/app.ts.tpl +++ b/templates/ts/custom-copilot-rag-custom-api/src/app/app.ts.tpl @@ -47,7 +47,7 @@ app.conversationUpdate("membersAdded", async (turnContext: TurnContext) => { }); import { generateAdaptiveCard, addAuthConfig } from "./utility"; -import { TurnContext, ConversationState } from "botbuilder"; +import { ConversationState } from "botbuilder"; import { TurnState, Memory } from "@microsoft/teams-ai"; import yaml from "js-yaml"; import { OpenAPIClientAxios, Document } from "openapi-client-axios"; From ccd614f4bd95743221fb6c8553aa804655e213bb Mon Sep 17 00:00:00 2001 From: Siyuan Chen <67082457+ayachensiyuan@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:32:42 +0800 Subject: [PATCH 10/52] test: fix test known issues (#12272) Co-authored-by: Ivan_Chen --- .../localdebug/localdebug-chatdata-m365-js-openai.test.ts | 3 ++- .../localdebug/localdebug-chatdata-m365-ts-openai.test.ts | 3 ++- .../src/ui-test/localdebug/localdebug-dashboard-tab-ts.test.ts | 3 ++- .../src/ui-test/localdebug/localdebug-dashboard-tab.test.ts | 3 ++- .../remotedebug/remotedebug-chatdata-m365-js-openai.test.ts | 2 +- .../remotedebug/remotedebug-chatdata-m365-ts-openai.test.ts | 2 +- .../ui-test/samples/sample-localdebug-bot-sso-docker.test.ts | 2 ++ .../src/ui-test/samples/sample-localdebug-bot-sso.test.ts | 2 ++ .../ui-test/samples/sample-localdebug-graph-connector.test.ts | 3 ++- 9 files changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-js-openai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-js-openai.test.ts index 2d0260351b..e8871c4be0 100644 --- a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-js-openai.test.ts +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-js-openai.test.ts @@ -27,6 +27,7 @@ describe("Local Debug Tests", function () { this.timeout(Timeout.prepareTestCase); localDebugTestContext = new LocalDebugTestContext("chatdata", { customCopilotRagType: "custom-copilot-rag-microsoft365", + llmServiceType: "llm-service-openai", }); await localDebugTestContext.before(); }); @@ -55,7 +56,7 @@ describe("Local Debug Tests", function () { editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); console.log(` - SECRET_AZURE_OPENAI_API_KEY=${openAiKey} + SECRET_OPENAI_API_KEY=${openAiKey} `); await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-ts-openai.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-ts-openai.test.ts index 9687e028d0..55322ab39b 100644 --- a/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-ts-openai.test.ts +++ b/packages/tests/src/ui-test/localdebug/localdebug-chatdata-m365-ts-openai.test.ts @@ -28,6 +28,7 @@ describe("Local Debug Tests", function () { localDebugTestContext = new LocalDebugTestContext("chatdata", { lang: "typescript", customCopilotRagType: "custom-copilot-rag-microsoft365", + llmServiceType: "llm-service-openai", }); await localDebugTestContext.before(); }); @@ -56,7 +57,7 @@ describe("Local Debug Tests", function () { editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", openAiKey); console.log(` - SECRET_AZURE_OPENAI_API_KEY=${openAiKey} + SECRET_OPENAI_API_KEY=${openAiKey} `); await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab-ts.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab-ts.test.ts index d28aee18c5..978005f085 100644 --- a/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab-ts.test.ts +++ b/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab-ts.test.ts @@ -54,7 +54,8 @@ describe("Local Debug Tests", function () { await startDebugging(DebugItemSelect.DebugInTeamsUsingChrome); await waitForTerminal( LocalDebugTaskLabel.StartFrontend, - "Compiled successfully!" + // [BUG] warning error message block the frontend validation + "Compiled with warnings" ); const teamsAppId = await localDebugTestContext.getTeamsAppId(); diff --git a/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab.test.ts b/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab.test.ts index 71cd92eaa3..11d97aa3c8 100644 --- a/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab.test.ts +++ b/packages/tests/src/ui-test/localdebug/localdebug-dashboard-tab.test.ts @@ -55,7 +55,8 @@ describe("Local Debug Tests", function () { await waitForTerminal( LocalDebugTaskLabel.StartFrontend, - "Compiled successfully!" + // [BUG] warning error message block the frontend validation + "Compiled with warnings" ); const teamsAppId = await localDebugTestContext.getTeamsAppId(); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-js-openai.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-js-openai.test.ts index 62df955398..884aec8fc1 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-js-openai.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-js-openai.test.ts @@ -66,7 +66,7 @@ describe("Remote debug Tests", function () { async function () { const driver = VSBrowser.instance.driver; await createNewProject("chatdata", appName, { - aiType: "Azure OpenAI", + aiType: "OpenAI", dataOption: "Microsoft 365", }); validateFileExist(projectPath, "src/index.js"); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-ts-openai.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-ts-openai.test.ts index 33b4595c1b..0368546630 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-ts-openai.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-chatdata-m365-ts-openai.test.ts @@ -67,7 +67,7 @@ describe("Remote debug Tests", function () { const driver = VSBrowser.instance.driver; await createNewProject("chatdata", appName, { lang: "TypeScript", - aiType: "Azure OpenAI", + aiType: "OpenAI", dataOption: "Microsoft 365", }); validateFileExist(projectPath, "src/index.ts"); diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso-docker.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso-docker.test.ts index 702f396256..a09d038e42 100644 --- a/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso-docker.test.ts +++ b/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso-docker.test.ts @@ -16,12 +16,14 @@ class BotSSODockerTestCase extends CaseFactory { return await validateBot(page, { botCommand: "show", expected: Env.displayName, + consentPrompt: true, }); } public override async onCliValidate(page: Page): Promise { return await validateBot(page, { botCommand: "show", expected: Env.displayName, + consentPrompt: true, }); } } diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso.test.ts index ca3a62b8c6..a1da73cc26 100644 --- a/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso.test.ts +++ b/packages/tests/src/ui-test/samples/sample-localdebug-bot-sso.test.ts @@ -16,12 +16,14 @@ class BotSSOTestCase extends CaseFactory { return await validateBot(page, { botCommand: "show", expected: Env.displayName, + consentPrompt: true, }); } public override async onCliValidate(page: Page): Promise { return await validateBot(page, { botCommand: "show", expected: Env.displayName, + consentPrompt: true, }); } } diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-graph-connector.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-graph-connector.test.ts index 2a826a4255..6e3414e86f 100644 --- a/packages/tests/src/ui-test/samples/sample-localdebug-graph-connector.test.ts +++ b/packages/tests/src/ui-test/samples/sample-localdebug-graph-connector.test.ts @@ -23,7 +23,8 @@ new GraphConnectorTestCase( "v-ivanchen@microsoft.com", "local", [ - LocalDebugTaskLabel.StartFrontend, + // [BUG] warning error message block the frontend validation + // LocalDebugTaskLabel.StartFrontend, LocalDebugTaskLabel.WatchBackend, LocalDebugTaskLabel.StartBackend, ] From 3b47479bafe1717de13469a3ae480436962203d9 Mon Sep 17 00:00:00 2001 From: frankqianms <109947924+frankqianms@users.noreply.github.com> Date: Mon, 26 Aug 2024 07:00:55 +0000 Subject: [PATCH 11/52] fix: let users input key in command parameters when trigger scripts (#12274) * fix: let users input key in command parameters when trigger scripts * fix: bad symb --- .../README.md.tpl | 8 +++--- .../src/utils/creator.py.tpl | 19 +++++++++++--- .../README.md.tpl | 17 +++++++++--- .../src/indexers/delete.py | 11 ++++++-- .../src/indexers/setup.py.tpl | 26 ++++++++++++++----- 5 files changed, 62 insertions(+), 19 deletions(-) diff --git a/templates/python/custom-copilot-assistant-assistants-api/README.md.tpl b/templates/python/custom-copilot-assistant-assistants-api/README.md.tpl index 39e40edb89..a1e771d151 100644 --- a/templates/python/custom-copilot-assistant-assistants-api/README.md.tpl +++ b/templates/python/custom-copilot-assistant-assistants-api/README.md.tpl @@ -55,9 +55,9 @@ Before running or debugging your bot, please follow these steps to setup your ow {{/useAzureOpenAI}} {{#useOpenAI}} -1. Run command `python src/utils/creator.py`. Remember to fill in your **OpenAI key** in *env/.env.local.user* first. +1. Run command `python src/utils/creator.py`. Remember to input your **OpenAI key** in command parameter. ``` - > python src/utils/creator.py + > python src/utils/creator.py --api-key ``` 1. The above command will output something like "*Created a new assistant with an ID of: **asst_xxx...***". 1. Fill in both OpenAI API Key and the created Assistant ID into `env/.env.local.user`. @@ -75,9 +75,9 @@ Before running or debugging your bot, please follow these steps to setup your ow ``` {{/useOpenAI}} {{#useAzureOpenAI}} -1. Run command `python src/utils/creator.py`. Remember to fill in your **Azure OpenAI key** in *env/.env.local.user* first. +1. Run command `python src/utils/creator.py`. Remember to input your **Azure OpenAI key** in command parameter. ``` - > python src/utils/creator.py + > python src/utils/creator.py --api-key ``` 1. The above command will output something like "*Created a new assistant with an ID of: **asst_xxx...***". 1. Fill in both Azure OpenAI API Key, endpoint, deployment name and the created Assistant ID into `env/.env.local.user`. diff --git a/templates/python/custom-copilot-assistant-assistants-api/src/utils/creator.py.tpl b/templates/python/custom-copilot-assistant-assistants-api/src/utils/creator.py.tpl index 0543ccf8a5..7b8a033492 100644 --- a/templates/python/custom-copilot-assistant-assistants-api/src/utils/creator.py.tpl +++ b/templates/python/custom-copilot-assistant-assistants-api/src/utils/creator.py.tpl @@ -1,4 +1,4 @@ -import asyncio, os +import asyncio, os, argparse from teams.ai.planners import AssistantsPlanner from openai.types.beta import AssistantCreateParams from openai.types.beta.function_tool_param import FunctionToolParam @@ -8,7 +8,20 @@ from dotenv import load_dotenv load_dotenv(f'{os.getcwd()}/env/.env.local.user', override=True) +def load_keys_from_args(): + parser = argparse.ArgumentParser(description='Load keys from command input parameters.') + {{#useAzureOpenAI}} + parser.add_argument('--api-key', type=str, required=True, help='Azure OpenAI API key for authentication') + {{/useAzureOpenAI}} + {{#useOpenAI}} + parser.add_argument('--api-key', type=str, required=True, help='OpenAI API key for authentication') + {{/useOpenAI}} + args = parser.parse_args() + return args + async def main(): + args = load_keys_from_args() + options = AssistantCreateParams( name="Assistant", instructions="\n".join([ @@ -68,11 +81,11 @@ async def main(): ) {{#useOpenAI}} - assistant = await AssistantsPlanner.create_assistant(api_key=os.getenv("SECRET_OPENAI_API_KEY"), api_version="", organization="", endpoint="", request=options) + assistant = await AssistantsPlanner.create_assistant(api_key=args.api_key, api_version="", organization="", endpoint="", request=options) {{/useOpenAI}} {{#useAzureOpenAI}} assistant = await AssistantsPlanner.create_assistant( - api_key=os.getenv("SECRET_AZURE_OPENAI_API_KEY"), + api_key=args.api_key, api_version="", organization="", endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), diff --git a/templates/python/custom-copilot-rag-azure-ai-search/README.md.tpl b/templates/python/custom-copilot-rag-azure-ai-search/README.md.tpl index c5032e4908..4c10251d19 100644 --- a/templates/python/custom-copilot-rag-azure-ai-search/README.md.tpl +++ b/templates/python/custom-copilot-rag-azure-ai-search/README.md.tpl @@ -36,15 +36,26 @@ This app template also demonstrates usage of techniques like: 1. In file *env/.env.local.user*, fill in your Azure Search key `SECRET_AZURE_SEARCH_KEY` and endpoint `AZURE_SEARCH_ENDPOINT`. ### Setting up index and documents -1. Azure Search key `SECRET_AZURE_SEARCH_KEY` and endpoint `AZURE_SEARCH_ENDPOINT` are loaded from *env/.env.local.user*. Please make sure you have already configured them. -1. Use command `python src/indexers/setup.py` to create index and upload documents in `src/indexers/data`. +1. Azure Search endpoint `AZURE_SEARCH_ENDPOINT` is loaded from *env/.env.local.user*. Please make sure you have already configured it. +{{#useAzureOpenAI}} +1. Use the following command with your api key to create index and upload documents in `src/indexers/data`. + ``` + python src/indexers/setup.py --api-key --ai-search-key + ``` +{{/useAzureOpenAI}} +{{#useOpenAI}} +1. Use the following command with your api key to create index and upload documents in `src/indexers/data`. + ``` + python src/indexers/setup.py --api-key --ai-search-key + ``` +{{/useOpenAI}} 1. You will see the following information indicated the success of setup: ``` Create index succeeded. If it does not exist, wait for 5 seconds... Upload new documents succeeded. If they do not exist, wait for several seconds... setup finished ``` -1. Once you're done using the sample it's good practice to delete the index. You can do so with the command `python src/indexers/delete.py`. +1. Once you're done using the sample it's good practice to delete the index. You can do so with the command `python src/indexers/delete.py --ai-search-key `. ### Conversation with bot 1. Select the Teams Toolkit icon on the left in the VS Code toolbar. diff --git a/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/delete.py b/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/delete.py index 5471aec1bf..1ed6e7b63f 100644 --- a/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/delete.py +++ b/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/delete.py @@ -1,4 +1,4 @@ -import os +import os, argparse from azure.core.credentials import AzureKeyCredential from azure.search.documents.indexes import SearchIndexClient @@ -6,12 +6,19 @@ load_dotenv(f'{os.getcwd()}/env/.env.local.user', override=True) +def load_keys_from_args(): + parser = argparse.ArgumentParser(description='Load keys from command input parameters.') + parser.add_argument('--ai-search-key', type=str, required=True, help='AI Search key for authentication') + args = parser.parse_args() + return args + def delete_index(client: SearchIndexClient, name: str): client.delete_index(name) print(f"Index {name} deleted") index = 'contoso-electronics' -search_api_key = os.getenv('SECRET_AZURE_SEARCH_KEY') +args = load_keys_from_args() +search_api_key = args.ai_search_key search_api_endpoint = os.getenv('AZURE_SEARCH_ENDPOINT') credentials = AzureKeyCredential(search_api_key) diff --git a/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/setup.py.tpl b/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/setup.py.tpl index 74d10980b8..56d8b8d933 100644 --- a/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/setup.py.tpl +++ b/templates/python/custom-copilot-rag-azure-ai-search/src/indexers/setup.py.tpl @@ -1,5 +1,4 @@ -import asyncio -import os +import asyncio, os, argparse from dataclasses import dataclass from typing import List, Optional @@ -60,7 +59,19 @@ async def create_index_if_not_exists(client: SearchIndexClient, name: str): client.create_or_update_index(doc_index) -async def setup(search_api_key, search_api_endpoint): +def load_keys_from_args(): + parser = argparse.ArgumentParser(description='Load keys from command input parameters.') + {{#useAzureOpenAI}} + parser.add_argument('--api-key', type=str, required=True, help='Azure OpenAI API key for authentication') + {{/useAzureOpenAI}} + {{#useOpenAI}} + parser.add_argument('--api-key', type=str, required=True, help='OpenAI API key for authentication') + {{/useOpenAI}} + parser.add_argument('--ai-search-key', type=str, required=True, help='AI Search key for authentication') + args = parser.parse_args() + return args + +async def setup(search_api_key, search_api_endpoint, args): index = 'contoso-electronics' credentials = AzureKeyCredential(search_api_key) @@ -75,14 +86,14 @@ async def setup(search_api_key, search_api_endpoint): {{#useAzureOpenAI}} embeddings = AzureOpenAIEmbeddings(AzureOpenAIEmbeddingsOptions( - azure_api_key=os.getenv('SECRET_AZURE_OPENAI_API_KEY'), + azure_api_key=args.api_key, azure_endpoint=os.getenv('AZURE_OPENAI_ENDPOINT'), azure_deployment=os.getenv('AZURE_OPENAI_EMBEDDING_DEPLOYMENT') )) {{/useAzureOpenAI}} {{#useOpenAI}} embeddings=OpenAIEmbeddings(OpenAIEmbeddingsOptions( - api_key=os.getenv('SECRET_OPENAI_API_KEY'), + api_key=args.api_key, model='text-embedding-ada-002' )) {{/useOpenAI}} @@ -91,8 +102,9 @@ async def setup(search_api_key, search_api_endpoint): print("Upload new documents succeeded. If they do not exist, wait for several seconds...") -search_api_key = os.getenv('SECRET_AZURE_SEARCH_KEY') +args = load_keys_from_args() +search_api_key = args.ai_search_key search_api_endpoint = os.getenv('AZURE_SEARCH_ENDPOINT') -asyncio.run(setup(search_api_key, search_api_endpoint)) +asyncio.run(setup(search_api_key, search_api_endpoint, args)) print("setup finished") From 3a54f6b8ab937d454cb438ded38cde3b47246da6 Mon Sep 17 00:00:00 2001 From: QinghuiMeng-M Date: Mon, 26 Aug 2024 16:00:37 +0800 Subject: [PATCH 12/52] fix RAG-M365 ts template app.ts (#12276) --- templates/ts/custom-copilot-rag-microsoft365/src/app/app.ts.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/ts/custom-copilot-rag-microsoft365/src/app/app.ts.tpl b/templates/ts/custom-copilot-rag-microsoft365/src/app/app.ts.tpl index 20df3a48f6..a90740b14a 100644 --- a/templates/ts/custom-copilot-rag-microsoft365/src/app/app.ts.tpl +++ b/templates/ts/custom-copilot-rag-microsoft365/src/app/app.ts.tpl @@ -1,4 +1,4 @@ -import { MemoryStorage MessageFactory, TurnContext } from "botbuilder"; +import { MemoryStorage, MessageFactory, TurnContext } from "botbuilder"; import * as path from "path"; import config from "../config"; From bc90c6d138607a1f1ac3b793b737f37f63c322e8 Mon Sep 17 00:00:00 2001 From: Siyuan Chen <67082457+ayachensiyuan@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:19:32 +0800 Subject: [PATCH 13/52] test: add validation in retail dashboard (#12275) * test: add validation --------- Co-authored-by: Ivan_Chen --- ...-localdebug-react-retail-dashboard.test.ts | 13 ++++++++-- ...remotedebug-react-retail-dashboard.test.ts | 13 ++++++++-- .../tests/src/utils/playwrightOperation.ts | 26 +++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-react-retail-dashboard.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-react-retail-dashboard.test.ts index cc448f9166..5f8789e81d 100644 --- a/packages/tests/src/ui-test/samples/sample-localdebug-react-retail-dashboard.test.ts +++ b/packages/tests/src/ui-test/samples/sample-localdebug-react-retail-dashboard.test.ts @@ -8,7 +8,10 @@ import { TemplateProject, LocalDebugTaskLabel } from "../../utils/constants"; import { CaseFactory } from "./sampleCaseFactory"; import { Page } from "playwright"; -import { initTeamsPage } from "../../utils/playwrightOperation"; +import { + initTeamsPage, + validateRetailDashboard, +} from "../../utils/playwrightOperation"; import { SampledebugContext } from "./sampledebugContext"; import { Env } from "../../utils/env"; @@ -32,6 +35,13 @@ class RetailDashboardTestCase extends CaseFactory { } ); } + + override async onValidate( + page: Page, + options?: { context: SampledebugContext } + ): Promise { + return await validateRetailDashboard(page); + } } new RetailDashboardTestCase( @@ -43,6 +53,5 @@ new RetailDashboardTestCase( { teamsAppName: "react-retail-dashboard-local", type: "spfx", - skipValidation: true, } ).test(); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-react-retail-dashboard.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-react-retail-dashboard.test.ts index d5ca010655..a4004da087 100644 --- a/packages/tests/src/ui-test/samples/sample-remotedebug-react-retail-dashboard.test.ts +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-react-retail-dashboard.test.ts @@ -8,7 +8,10 @@ import { TemplateProject } from "../../utils/constants"; import { CaseFactory } from "./sampleCaseFactory"; import { Page } from "playwright"; -import { initTeamsPage } from "../../utils/playwrightOperation"; +import { + initTeamsPage, + validateRetailDashboard, +} from "../../utils/playwrightOperation"; import { SampledebugContext } from "./sampledebugContext"; import { Env } from "../../utils/env"; @@ -32,6 +35,13 @@ class RetailDashboardTestCase extends CaseFactory { } ); } + + override async onValidate( + page: Page, + options?: { context: SampledebugContext } + ): Promise { + return await validateRetailDashboard(page); + } } new RetailDashboardTestCase( @@ -43,6 +53,5 @@ new RetailDashboardTestCase( { teamsAppName: "react-retail-dashboard-dev", type: "spfx", - skipValidation: true, } ).test(); diff --git a/packages/tests/src/utils/playwrightOperation.ts b/packages/tests/src/utils/playwrightOperation.ts index ef0a9f81f7..dfb0f80e5f 100644 --- a/packages/tests/src/utils/playwrightOperation.ts +++ b/packages/tests/src/utils/playwrightOperation.ts @@ -2929,3 +2929,29 @@ export async function validateCustomapi( throw error; } } + +export async function validateRetailDashboard(page: Page) { + try { + console.log("start to verify dashboard tab"); + await page?.waitForSelector("button:has-text('RetailDashboard')"); + await page?.waitForSelector("button:has-text('RetailHome')"); + await page?.waitForSelector("button:has-text('RetailInventory')"); + const frameElementHandle = await page.waitForSelector( + `iframe[name="embedded-page-container"]` + ); + const frame = await frameElementHandle?.contentFrame(); + await frame?.waitForSelector("span:has-text('Global Return Volume')"); + await frame?.waitForSelector( + "span:has-text('Global Customer Satisfaction')" + ); + await frame?.waitForSelector("span:has-text('Product Sell')"); + await frame?.waitForSelector("span:has-text('Reasons for Return')"); + console.log("Dashboard tab loaded successfully"); + } catch (error) { + await page.screenshot({ + path: getPlaywrightScreenshotPath("error"), + fullPage: true, + }); + throw error; + } +} From 26a35afb67594ac39ffc3e75e08e9305b332b530 Mon Sep 17 00:00:00 2001 From: Tian Yuan Date: Mon, 26 Aug 2024 16:21:55 +0800 Subject: [PATCH 14/52] refactor: script using input parameters (#12277) --- .../README.md.tpl | 9 +++-- .../src/indexers/delete.js | 5 ++- .../src/indexers/setup.js.tpl | 36 +++++++++++++------ .../README.md.tpl | 9 +++-- .../src/indexers/delete.ts | 5 ++- .../src/indexers/setup.ts.tpl | 36 +++++++++++++------ 6 files changed, 74 insertions(+), 26 deletions(-) diff --git a/templates/js/custom-copilot-rag-azure-ai-search/README.md.tpl b/templates/js/custom-copilot-rag-azure-ai-search/README.md.tpl index 915d919968..e9ea00a224 100644 --- a/templates/js/custom-copilot-rag-azure-ai-search/README.md.tpl +++ b/templates/js/custom-copilot-rag-azure-ai-search/README.md.tpl @@ -25,12 +25,17 @@ This app template also demonstrates usage of techniques like: 1. First, select the Teams Toolkit icon on the left in the VS Code toolbar. {{#useOpenAI}} -1. In file *env/.env.testtool.user*, fill in your OpenAI key `SECRET_OPENAI_API_KEY=`. And fill in your Azure AI search key `SECRET_AZURE_SEARCH_KEY=` and endpoint `AZURE_SEARCH_ENDPOINT=`. +1. In file *env/.env.testtool.user*, fill in your OpenAI key `SECRET_OPENAI_API_KEY=`. And fill in your Azure AI search key `SECRET_AZURE_SEARCH_KEY=` and endpoint `AZURE_SEARCH_ENDPOINT=`. {{/useOpenAI}} {{#useAzureOpenAI}} 1. In file *env/.env.testtool.user*, fill in your Azure OpenAI key `SECRET_AZURE_OPENAI_API_KEY=`, endpoint `AZURE_OPENAI_ENDPOINT=`, deployment name `AZURE_OPENAI_DEPLOYMENT_NAME=`, and embedding deployment name `AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=`. And fill in your Azure AI search key `SECRET_AZURE_SEARCH_KEY=` and endpoint `AZURE_SEARCH_ENDPOINT=`. {{/useAzureOpenAI}} -1. Do `npm install` and `npm run indexer:create` to create the my documents index. Once you're done using the sample it's good practice to delete the index. You can do so with the `npm run indexer:delete` command. +{{#useOpenAI}} +1. Do `npm install` and `npm run indexer:create -- ` to create the my documents index. Once you're done using the sample it's good practice to delete the index. You can do so with the `npm run indexer:delete -- ` command. +{{/useOpenAI}} +{{#useAzureOpenAI}} +1. Do `npm install` and `npm run indexer:create -- ` to create the my documents index. Once you're done using the sample it's good practice to delete the index. You can do so with the `npm run indexer:delete -- ` command. +{{/useAzureOpenAI}} 1. Press F5 to start debugging which launches your app in Teams App Test Tool using a web browser. Select `Debug in Test Tool`. 1. You can send any message to get a response from the bot. diff --git a/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/delete.js b/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/delete.js index 48215cacd3..fba435e3dd 100644 --- a/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/delete.js +++ b/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/delete.js @@ -2,7 +2,10 @@ const { AzureKeyCredential, SearchIndexClient } = require("@azure/search-documen const { deleteIndex } = require("./utils"); const index = "my-documents"; -const searchApiKey = process.env.SECRET_AZURE_SEARCH_KEY; +const searchApiKey = process.argv[2]; +if (!searchApiKey) { + throw new Error("Missing input Azure AI Search Key"); +} const searchApiEndpoint = process.env.AZURE_SEARCH_ENDPOINT; const credentials = new AzureKeyCredential(searchApiKey); diff --git a/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/setup.js.tpl b/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/setup.js.tpl index b75d9b1446..a308a754f1 100644 --- a/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/setup.js.tpl +++ b/templates/js/custom-copilot-rag-azure-ai-search/src/indexers/setup.js.tpl @@ -3,37 +3,53 @@ const { createIndexIfNotExists, delay, upsertDocuments, getEmbeddingVector } = r const path = require("path"); const fs = require("fs"); +const searchApiKey = process.argv[2]; +if (!searchApiKey) { + throw new Error("Missing input Azure AI Search Key"); +} +{{#useOpenAI}} +const openAIKey = process.argv[3]; +if (!openAIKey) { + throw new Error("Missing input OpenAI Key"); +} +process.env.SECRET_OPENAI_API_KEY = openAIKey; +{{/useOpenAI}} +{{#useAzureOpenAI}} +const azureOpenAIKey = process.argv[3]; +if (!azureOpenAIKey) { + throw new Error("Missing input Azure OpenAI Key"); +} +process.env.SECRET_AZURE_OPENAI_API_KEY = azureOpenAIKey; +{{/useAzureOpenAI}} + /** * Main function that creates the index and upserts the documents. */ async function main() { const index = "my-documents"; + {{#useOpenAI}} + if (!process.env.AZURE_SEARCH_ENDPOINT) { + {{/useOpenAI}} + {{#useAzureOpenAI}} if ( - !process.env.SECRET_AZURE_SEARCH_KEY || !process.env.AZURE_SEARCH_ENDPOINT || - {{#useOpenAI}} - !process.env.SECRET_OPENAI_API_KEY - {{/useOpenAI}} - {{#useAzureOpenAI}} - !process.env.SECRET_AZURE_OPENAI_API_KEY || !process.env.AZURE_OPENAI_ENDPOINT || !process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME - {{/useAzureOpenAI}} ) { + {{/useAzureOpenAI}} {{#useOpenAI}} throw new Error( - "Missing environment variables - please check that SECRET_AZURE_SEARCH_KEY, AZURE_SEARCH_ENDPOINT and SECRET_OPENAI_API_KEY are set." + "Missing environment variable - please check that AZURE_SEARCH_ENDPOINT is set." ); {{/useOpenAI}} {{#useAzureOpenAI}} throw new Error( - "Missing environment variables - please check that SECRET_AZURE_SEARCH_KEY, AZURE_SEARCH_ENDPOINT, SECRET_AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME are set." + "Missing environment variables - please check that AZURE_SEARCH_ENDPOINT, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME are set." ); {{/useAzureOpenAI}} } - const searchApiKey = process.env.SECRET_AZURE_SEARCH_KEY; const searchApiEndpoint = process.env.AZURE_SEARCH_ENDPOINT; const credentials = new AzureKeyCredential(searchApiKey); diff --git a/templates/ts/custom-copilot-rag-azure-ai-search/README.md.tpl b/templates/ts/custom-copilot-rag-azure-ai-search/README.md.tpl index 796dabbb0f..0d0a981571 100644 --- a/templates/ts/custom-copilot-rag-azure-ai-search/README.md.tpl +++ b/templates/ts/custom-copilot-rag-azure-ai-search/README.md.tpl @@ -25,12 +25,17 @@ This app template also demonstrates usage of techniques like: 1. First, select the Teams Toolkit icon on the left in the VS Code toolbar. {{#useOpenAI}} -1. In file *env/.env.testtool.user*, fill in your OpenAI key `SECRET_OPENAI_API_KEY=`. And fill in your Azure AI search key `SECRET_AZURE_SEARCH_KEY=` and endpoint `AZURE_SEARCH_ENDPOINT=`. +1. In file *env/.env.testtool.user*, fill in your OpenAI key `SECRET_OPENAI_API_KEY=`. And fill in your Azure AI search key `SECRET_AZURE_SEARCH_KEY=` and endpoint `AZURE_SEARCH_ENDPOINT=`. {{/useOpenAI}} {{#useAzureOpenAI}} 1. In file *env/.env.testtool.user*, fill in your Azure OpenAI key `SECRET_AZURE_OPENAI_API_KEY=`, endpoint `AZURE_OPENAI_ENDPOINT=`, deployment name `AZURE_OPENAI_DEPLOYMENT_NAME=`, and embedding deployment name `AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=`. And fill in your Azure AI search key `SECRET_AZURE_SEARCH_KEY=` and endpoint `AZURE_SEARCH_ENDPOINT=`. {{/useAzureOpenAI}} -1. Do `npm install` and `npm run indexer:create` to create the my documents index. Once you're done using the sample it's good practice to delete the index. You can do so with the `npm run indexer:delete` command. +{{#useOpenAI}} +1. Do `npm install` and `npm run indexer:create -- ` to create the my documents index. Once you're done using the sample it's good practice to delete the index. You can do so with the `npm run indexer:delete -- ` command. +{{/useOpenAI}} +{{#useAzureOpenAI}} +1. Do `npm install` and `npm run indexer:create -- ` to create the my documents index. Once you're done using the sample it's good practice to delete the index. You can do so with the `npm run indexer:delete -- ` command. +{{/useAzureOpenAI}} 1. Press F5 to start debugging which launches your app in Teams App Test Tool using a web browser. Select `Debug in Test Tool`. 1. You can send any message to get a response from the bot. diff --git a/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/delete.ts b/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/delete.ts index aa88ef6555..5bdbfd34bf 100644 --- a/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/delete.ts +++ b/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/delete.ts @@ -2,7 +2,10 @@ import { AzureKeyCredential, SearchIndexClient } from "@azure/search-documents"; import { deleteIndex } from "./utils"; const index = "my-documents"; -const searchApiKey = process.env.SECRET_AZURE_SEARCH_KEY!; +const searchApiKey = process.argv[2]; +if (!searchApiKey) { + throw new Error("Missing input Azure AI Search Key"); +} const searchApiEndpoint = process.env.AZURE_SEARCH_ENDPOINT!; const credentials = new AzureKeyCredential(searchApiKey); diff --git a/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/setup.ts.tpl b/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/setup.ts.tpl index ba7db5db20..b51b9d2de7 100644 --- a/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/setup.ts.tpl +++ b/templates/ts/custom-copilot-rag-azure-ai-search/src/indexers/setup.ts.tpl @@ -4,37 +4,53 @@ import { MyDocument } from "../app/azureAISearchDataSource"; import path from "path"; import * as fs from "fs"; +const searchApiKey = process.argv[2]; +if (!searchApiKey) { + throw new Error("Missing input Azure AI Search Key"); +} +{{#useOpenAI}} +const openAIKey = process.argv[3]; +if (!openAIKey) { + throw new Error("Missing input OpenAI Key"); +} +process.env.SECRET_OPENAI_API_KEY = openAIKey; +{{/useOpenAI}} +{{#useAzureOpenAI}} +const azureOpenAIKey = process.argv[3]; +if (!azureOpenAIKey) { + throw new Error("Missing input Azure OpenAI Key"); +} +process.env.SECRET_AZURE_OPENAI_API_KEY = azureOpenAIKey; +{{/useAzureOpenAI}} + /** * Main function that creates the index and upserts the documents. */ export async function main() { const index = "my-documents"; + {{#useOpenAI}} + if (!process.env.AZURE_SEARCH_ENDPOINT) { + {{/useOpenAI}} + {{#useAzureOpenAI}} if ( - !process.env.SECRET_AZURE_SEARCH_KEY || !process.env.AZURE_SEARCH_ENDPOINT || - {{#useOpenAI}} - !process.env.SECRET_OPENAI_API_KEY - {{/useOpenAI}} - {{#useAzureOpenAI}} - !process.env.SECRET_AZURE_OPENAI_API_KEY || !process.env.AZURE_OPENAI_ENDPOINT || !process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME - {{/useAzureOpenAI}} ) { + {{/useAzureOpenAI}} {{#useOpenAI}} throw new Error( - "Missing environment variables - please check that SECRET_AZURE_SEARCH_KEY, AZURE_SEARCH_ENDPOINT and SECRET_OPENAI_API_KEY are set." + "Missing environment variables - please check that AZURE_SEARCH_ENDPOINT are set." ); {{/useOpenAI}} {{#useAzureOpenAI}} throw new Error( - "Missing environment variables - please check that SECRET_AZURE_SEARCH_KEY, AZURE_SEARCH_ENDPOINT, SECRET_AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME are set." + "Missing environment variables - please check that AZURE_SEARCH_ENDPOINT, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME are set." ); {{/useAzureOpenAI}} } - const searchApiKey = process.env.SECRET_AZURE_SEARCH_KEY!; const searchApiEndpoint = process.env.AZURE_SEARCH_ENDPOINT!; const credentials = new AzureKeyCredential(searchApiKey); From 83620656ae26e99ee3c3a776ffd521bef09914e1 Mon Sep 17 00:00:00 2001 From: Hui Miao Date: Mon, 26 Aug 2024 16:37:50 +0800 Subject: [PATCH 15/52] fix: replace react-script with vite (#12268) --- .../ts/dashboard-tab/{public => }/index.html | 6 ++--- templates/ts/dashboard-tab/package.json.tpl | 15 ++++++----- templates/ts/dashboard-tab/public/favicon.ico | Bin 0 -> 91302 bytes .../dashboard-tab/src/{index.css => main.css} | 0 .../dashboard-tab/src/{index.tsx => main.tsx} | 2 +- templates/ts/dashboard-tab/teamsapp.yml.tpl | 4 +-- templates/ts/dashboard-tab/tsconfig.app.json | 24 +++++++++++++++++ templates/ts/dashboard-tab/tsconfig.json | 25 +++++------------- templates/ts/dashboard-tab/tsconfig.node.json | 22 +++++++++++++++ templates/ts/dashboard-tab/vite.config.ts | 15 +++++++++++ 10 files changed, 82 insertions(+), 31 deletions(-) rename templates/ts/dashboard-tab/{public => }/index.html (74%) create mode 100644 templates/ts/dashboard-tab/public/favicon.ico rename templates/ts/dashboard-tab/src/{index.css => main.css} (100%) rename templates/ts/dashboard-tab/src/{index.tsx => main.tsx} (90%) create mode 100644 templates/ts/dashboard-tab/tsconfig.app.json create mode 100644 templates/ts/dashboard-tab/tsconfig.node.json create mode 100644 templates/ts/dashboard-tab/vite.config.ts diff --git a/templates/ts/dashboard-tab/public/index.html b/templates/ts/dashboard-tab/index.html similarity index 74% rename from templates/ts/dashboard-tab/public/index.html rename to templates/ts/dashboard-tab/index.html index c61bcb4424..47a64953fc 100644 --- a/templates/ts/dashboard-tab/public/index.html +++ b/templates/ts/dashboard-tab/index.html @@ -1,17 +1,17 @@ + - + Microsoft Teams Tab - -
+ diff --git a/templates/ts/dashboard-tab/package.json.tpl b/templates/ts/dashboard-tab/package.json.tpl index f5a0672e9b..d4de71afca 100644 --- a/templates/ts/dashboard-tab/package.json.tpl +++ b/templates/ts/dashboard-tab/package.json.tpl @@ -4,6 +4,7 @@ "engines": { "node": "16 || 18" }, + "type": "module", "private": true, "dependencies": { "@fluentui/react-charting": "^5.14.10", @@ -14,22 +15,24 @@ "@microsoft/teamsfx-react": "^3.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.8.0", - "react-scripts": "^5.0.1" + "react-router-dom": "^6.8.0" }, "devDependencies": { "@types/node": "^18.0.0", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", "@types/react-router-dom": "^5.3.3", + "@vitejs/plugin-basic-ssl": "^1.1.0", + "@vitejs/plugin-react": "^4.3.1", "env-cmd": "^10.1.0", - "typescript": "^4.1.2" + "typescript": "^5.5.3", + "vite": "^5.4.0" }, "scripts": { "dev:teamsfx": "env-cmd --silent -f .localConfigs npm run start", - "start": "react-scripts start", - "build": "react-scripts build", - "eject": "react-scripts eject", + "start": "vite", + "build": "tsc && vite build", + "server": "vite preview", "test": "echo \"Error: no test specified\" && exit 1" }, "eslintConfig": { diff --git a/templates/ts/dashboard-tab/public/favicon.ico b/templates/ts/dashboard-tab/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ef5ef2b4b028da06704021fe28884aaa3bf313c6 GIT binary patch literal 91302 zcmeHQ2RxPE8-K46O*GW6WTm~dhmoWrvQ=gxG!#WfF0PDdD-B7s*RMqx*`>&CiOeJ; zdu4n7=Ui?--Q4S5?oIx^_v1L@J>z-4&vV9m){7uGgcE^393qIgPeKqkqVGTdD89}B z((`l65JX?U^Z9Kr1mRah5Gkon{|spac~y)cqM}{Try@w@OpsEr%g>D<=ag^=H?U!T zJJ=9JQXhwSC@ZcXIc(xEP|`>_Ss7LM6dKMUz|z@&+Zb3w&1E$$5M9(@M?CLERiu_(l!&og8b9@*d)Zt!-6<@?Sd&Cw zD5P3$woeuCAALz)Nog~BH!RYxxJISq+uh)-JJ#Q7@6D2$dBaO}Ll6I69t~o>T`fD$ z^N50W8QZesyZkshaLAMr(L*N`Mog}Bcf0@EwmiUBX zocT7mS8KNC`wdm)4Clz7i_^OmQ@2;MJhbq`Q@dfKb-teEm2z2}lj*>B@ZkJ01$e@( zQO^QQj*gXDs#eW5x`t!C!^7_t;Ypj>6^HxBPCdWDJ2;|Yf6a>Zf`0R37Y=>E8uEVf z)<*r>Nebf(yk{-bLZ*Iu5OzHvBDg_YIAqA71)HR~#bmQ}Cz& z$K0!n*4}rVEqRfB$0J`3g!9Q;|C*rYk&S1@X4$@v12JR+Lieb?N}a?McO=K zclPWv$EWB8`L3Pp&#ugJT6kJcxSb?HM20WRc8JVD5wiouAD2v*%d@(4`yI=S{mIF` z>n-JXg}Prd6iZY-rK6n^AU|o+J;_JDQxl#bM>00%<=Nf69x z8!h}aC~$<2?0p;Wt-0amADe@&$#_<>jP>^6t&ms~o;06*MxgIhKhEnVAzQUX9SiF~ zdJm93w6xVusbNuW-P9VNsQKH&_W3TVzaaH_2X3rKQBlg2XYKD3UxugpjXac-WgwQiicfgIB5<$E zT5(m%8Yew3GkfXGx!xnM2z)+oc76OcF^$6`Ipl*8X$6@JHH(f;39e-&xSs*8saqT8 zDBB;&<=Vtk^JR1LxR_wm;zv8$ETSqubv$2W-JWiBO7%v?L{;mYsb?$hq+37VFZXaR zo7V2ci6_!qhqA2!W!;5RSJ~Q(lOni%&rP3U#?HP0lr$q$J>hMZ7W(3oFaEh(2G69A z)g~{^?H+s2ep!=ldPyX*Z8KpyXCWIhMt0MhQQ1cS$Q*XJL^3v1Z;1Pl$O^s*HlBxNPE#^!X=n*<~NS zh|kuMOu|J}DBPE=2gk z<-J*`&(Y%W{q^R>H`uv_3)WN}U*<0Duzq~1?bnjaxw#G8D{d$!CS8o5DG?D-c37JQ zh-82D%!plxYs(2^y=E zU3#dvS5!0C^!*7=U&e%1tlWijk=gH|&MBH}b>h(&eLQfpg&rGjVzy<%P5X`*cl{RE zz-4oizD9roJ$LT*_2)nW1)qbq(8b?)mEreS7HdUU-EQVs%T{Oc&vbuw?$Py{hGJ_T zbAAiE7^=$Wjyek#>2epK`b7y>a>UmS7Zee(sNS$($!-70*=7wlS8N*6TzE8J20GW+ z9_5wVvix+NXLkJ1{IHA7IrqN`cieBjY<9(?DLAFAGQHOH)<+iQVNwT+PgIRHFm+60 zn{XbgPp0BSQ1H66ZJ^-zM(ZWkl{Y7_e=M}Pyi~y{DFv z*x1mv)I+xYf#Qn!K0BWx(!yijvBYnRjGFDVB`RroRczE^pVvF1N*JQ{aBBZcSS z^^hqOgNk-rE!uo!&FZ0&2Rs}-lV`4;OE@K)VmRKZ(X^OTjHPO7@#EQB>*_$&@+y;P zd#)h(H2321Gedk7hYRZD22A$nENl>4Y2KLo)+^cM9SbK9PA}M3sJymgvZvqcvbN_U zM^lSd&@2>+3Crd1tQ|S7A4tBdK`WYglZZ7J{&ZJ(|Hbq}}w{ zaBkto9Es4gZs=aI^;_ST?zOBib3I@B^n&!#RKKl(Vty7PngJj6x7TF?)mc|4m&MaE zMY!Z!uHk*Q88*UIi_VUYhSe-y~{beLNHiJbbm(w&i{dL+f{g%ys-sxZM?jgr`bo1mnw`C7W zyW{$?b!jYGhzqx`sM_XOta!{v^q+BOGj%7Hpw+iLP|Immi!$2pTl-roD(yz`sZz5*AgB4n6-@RWzc*1V4$ z{0CKCCzsa=o!*_(d?49XD;IPiatrxdC2XbkH{PCQyySZJbqV}NHs1L)s#e^V--cW= z$cwCCPpDl0I%-X;ou@~1aDG|cn6qrf+}IpfExk0Ckk-i7X}1Es)A^RCKD-*ge992K zy`za!oUmubu@%KjmTnq{=TRjBk(qI)V5h`-v?<6mwk+k?>qNI&-fJ)Hu9=>i#5K-f@q|ppxc0Yu zHeRcBypM7}O}ff)ard6$_MwoRE}%f*k7vb~PNCspPq3yI7pE z=awf2UwYkgYmuCb7_q;8`t_#i>HGE_PU1lZyT*7d39{IJH1=ZLCWSo-u;IS@NcQBb z?DD1Q=-K1f+A{@bR=VGnUmdwiEYUxHa}JNj`J$Bus>7wmjfiPj@Jwy|()9T=3T-=d zp3ITF6F7&zb(n{5P+9S~G&#;x~_}X?n8$obUG(bK`65{)g6-`^P+eYBX~F{2hD;wx*5$&i2{U=vKs- zNh-~*qLar6KAyJpYVGhBy3IIyQTJgi&8M%-Iq+&}+v3||&0|#)3(l-uTX+ceNiz;L zFAY4k#WG*e$RR;}xYS62nFQ0D`9nntxQ6U+)Jq)o!2I|kW3#p;u_%shI`2|Mk0bf% zy-fVR^JpI~I;Jni4!$cLi$)RJl490dDhX<~ zzX@z{KjF+(k+Gq6u6wx9;wUQ#}>FxH@N-aZnWq6rTPW2*F>!pSPk~> z6z7vC%yLo~>uK?_5k1*-$9i5YNF2Z2*t_>;o5sBs z!}0Ni3ZLB&)%-zzDc-?C4<^bQi62^-iK9{9zXDWS8V*m^6U?r zRBv&jUTw)>fR$$)fpj#kiu|XftxCscrK0#Y8O5rK@}&H4la>~(@SHV-O<7ybDaY=6 z=84gqI6i;tXO%27KAcRr`&N8HlMoLo4zO?Wbbo2Oo^!&g`|SSetFpK3ygan&!m$r5 z%6A1`c{P0#x;?K(>9*HIcV2=j&rJ};WhZXNxNU&lwHN;4prTKsxS!h#?;_(_bef430^*9xla;WK7IiKtXu&F$Q0D9VN1~tHabp8^k z`UyOBRS?Z_lXF1C)9&`S6xyuOo1 zhdGzj$lpUa+wdQ1<$So>#R6MQ&^<@pHH~MU2@v_vFi+eps$#;GqVs9I$m=I%ALeJXy$$Q}b;=Tm33N7)MJhtqI4zI_m>*Lud2u$y1P&faz3G+a^KLH$QwoT|ExGOd*+9oxT7 z_r>KIB}G3x|18&X=)Ww5Ywq!1td(_~?^qC&KX=a;a(z_-j*J#;9Mb8I_dL`lak^_(PstH?%_B- z>j>vNasZK<9We|n|K zx``sAm$XOjJ?30{#FJfNtYl>I_%hyT-+KZVTN*PJ|7AbL9v8b|SCXmi+IEBk@wj_; zim)T{XtoC4SE>5d2QH;BhZ$9GSmFh;%EcAI6UWu&O= zxOP(fPTt1?k69w4HP{u@CfvEKXPQ}ixne@QaH(^6`};4`rk{};RVHgxy2&QeJ7ZDx zLG+W=F;S1u8@B)YUz-wcy+JsXM;P7xVU60y`w1`Fo*)6+kNsOCz5~Zs_$pxt-+JYw zXWwt-BGvz7tr)eoKtjk2Z`$lNPNdGt`zk+M(pw)NZIs}AA+}+SXeaLT}L{8F|PI# zflVCeu;#*a?z)fvwv;}}V?{OaqXFN{PtX01N7?u#J*Lm6Qe_GO#&KF#h}E#i1OS@L^;(XFSr zrsfz&1Uau$^NmMBHz#hm=<4VVYt*Hbg}m6#ZQmj&*$5AL~_^bj+eKvM_+JVs>Knm+NDXqM!Ac#P7B!A z97y~3sqYkXwuA(?APwy#ms<7OmX_)h9YfuDrRJ67?i7Fj(h8F$2&&T#vKJtwj zGMB*D)+7+wwD@=(3f}6E?9)--eDd++Yx=U`kMtdKjs{s|__LpyA{-QL~+r%j0u`Djz9En=$+5fSqn^$q@Bw=0J1cdp>u6<;ZvyS#RCmXIl!>2S`PIO!aB)3U4;>gVFEzs;H?Y@3Uk zYazB$sycB=QzvvxdcBr!wSaj?%eQ-(d&J}??7$Vu?RRJ|lU|yYa%IT6f|R10o`69f zUXaG}TkJFAQ>mX)uC%NU7k5y%zpm6e8BBScG)}&{IVM1!Gu%w<=*kgqCNH`qVa9*7 z&dCu6+MU2xukLaoIxIu1Crv*)yx8Y;^GLH#iablT5Zo4DlYrrl<3t>MM9(41=TzNcCY?Z0WOxsvTFHaNj(pdRu@(lpTSlQZV-+VO` z%N0(27g(loRo2uaG(~gc#*tYdGVeiN|LD`GpoVuu*hlyH%%DK8v9&igoM}pEYyJ>s zx_;&~EreI({02>9?J^}9bB~HSQ=RZnBCmEVjEFWVd4kN@r4v%7MaVlWTe`|>x}aM~ z+)mSw%6wLd58OL(ThgESH}DDZJIO{=%vtMNjubjBUUqy~Q;qixFr&hDk@v}D*6j|{ zPR$Go9Lrwt^}?8_8McNM0-#hYFopMc|BdBQc6N;;tM^$5`K{S%%GnWNhi`8@9avv9 zyBW;iEqq-h;kWTik?Hs|JeW`u=VZRLs|$*uk= z#c+(1S6a4%%*LF_c^ymbOp9kO0i~P^H~g4kc`hFONwG2ytQx72f#UP zx5&DF%rA01VG)3ejb%PdNOQjZICZc(aYXjrAzhP0A$n|E1AM1)vVFvb*nZwPa`zq+ zk708O!d|Aib(zPiwsPbfIE`(1=gVpAvgHdmdYhwZn9^{6_o-DG5|U>;6J^X-$S6MY zHJKs1m)+KJMFM}??8fppEHijsyWUq@6#KRMt1xb&X>sXrr$$$s>?^kAg{*r`aXq+r*!a1G(blaM zd!~d%BzZ^XTS_UiipmkDuxd`o#OXWZ(mfWGWiKqg0atohG|wdrpG)A}wKsRwO^!RM zEs`f#+J*{(7LPxAIm=m=nb$;xykcV<8u}gQ9JUUJt;7A1D}UHJ9JUUJt;1pKaM(H=who7_!(r=i*g71x z4u`G7Vdvqn^KjUCIP5$eb{-Bp4~LzH!_LED=i#vPaM*b`>^vNH9u7MXhnu}gQ9JUUJt;1pKaM(H=who7_!wvFvxEbJVoIWtoz`*+|;g10Byu^MO z0vG}q0vG~)L!i>#ovXstep8t<{tz&CfJrNNv8#lp%*E~-@D~F+6ZrqFaIteJcf%{! zySk3=TWMG-h(Ogz0(XTo-Vop#RPKy#E_1d+=`lbSZRIZbP+;q#X9*)PRB1z?%)?`3 zg)813U|vNJ-qhpb8!BAvkHUIH8x?p)>oDi_G0qteAr^KX(trK^J+;Jbx{ z!9d$^d<%@s-ynmozLtq&oW8YHKp$#r-3ZhE-(^tdf)5^OeWzSL{yB=G@MAjvmp@R) zcT(oPZ+gq<{2-10kKjic8;_0HX;>G&!vO7%iQ2UtP29H&Ep)V|Yd(TjIl*=awvqpD zGKe-cI?*58$gyXhi%dC!XNh2)Y=t#pMg4%4BH?|ybYG{!HPez4(Mo1A1pXiqH|E=uchor ziLb#DKA7w0{52lripL#vk^< z%)r07x(d8r{QPTgX<511LJ*SkGk`DJL9MgYH|LM_dTH{jE;r@j8N6#sx#q=N3 ze_C~#o_PJyb4qC`>2QC-G5yE%pB}xYH7+F`?oW7s^qf*!O#dCtOi<5JS${)G2O&nczF^dHlIT6LP9c>U3HN@*$SaDT!v{m1m59=)a| z?zcmX-G2+~13V|zA3dj(_Wx1;3+))Q|Np0UNJ}}15{8t*>kA9e=9+4%rlX_d=glWw zzTVQ+7k;68kIL^_f6Op7Wa$29CFy{o}Wi7!gwe+&Mwy@zd1r`|ILd)VHCGsHJ#MfX6?``}E?k>rwaKo!p!+_RjiQ39? zK+mgt!kSVTj1SXMDr2zVOo`6k@F&eJfV;%vs-5vdlyK-R9AXIG0oo|xOg&tsjgkx~ z@ikb&X~iGP0mz`d%FTXNZ&;H*C$>3s>OHwUU_I!mEdn?X+Vj`JsvCZszXtsPP4^D~ z8MM$V16tdAa?Hv7FduT+4(9s@?sPl4u@$ZsB9Jwy`2cn>0J+(XTVW7FPv2W>Wdr(&S~ zs}%KC=0HEsv@u&k58gk;wc3l8IMIFwWpD3j@V%Cy_=Efg8sFZ^e`{st{u8EM_Zm_Q zgKZAfdwQ@Z)(!BUOpTtuQUAdh@wa{d1(rn(f1vw+UHcEepGK|SX6Q3e7B&2T$M}a@ z`2+C`e8aAep%_#7UJua!T53Epd;CwW?16grJMo8Q^~NVN-+y~6dmx_wN$n5hpPBPN z1A%XEW&TP1FNs!W&3}^e|C4OEcJjO0e^?f+yh9l!2OJkMV*Qs={sSEj=f;?gKP~fb1C7H#mJj;jIA+NJ z<~@+S4TiGe8VSIO;orxDdD6Q6G8k}TCXH~d5a7kI??b}8=v{wgCVzt=?=BhiyB6;;UKv?5ClhZHvs@0yFAsvy{gNd z58MJ>?r7lV>T(l+o0Ji7BCMU^Aj=<_65U8=cpD7wa>JrXg>`qsVo3#ex}#v-`|KoKN2B#-3gARs?}#Pf1pzV6>8r{w;T5Oe%C1iEC=sW6?TQgOH8&@ReQ zv>I{ja<2l?C+*SZLZcCZu5b>NfN*uWS-ZJmCLCSiL^q+!1H)nIP;p6asH~1%;eB!g z8epEpwB6l+&L81`{vU3@7jzS80Q~-N6J03Uz5aH01A4ovBZx@&QB6^R2dVl(%vN<} z0}J@!q{lG>;2{MJ0T>)22>yegbf<;=#}L2}`27f=r%!W~xj1Yrcg3Fr@3hh2owf*= zdN7wz1N@~h3_Lqs;o_hMH>kt3rbJ2a#nE{qRaqX%vbi*{{zrN%%ko?0o<8PKf#y=*1O#i|7 zr;q(V*8csBKwogg+W&RLG2lRq|FHHSYyYwKA8Y^n(r&{va%?=Jt}_~$?ViF+F=E8XlRDDe*UnyTEp@lV7D=s{0)VW8GO?Bso5JO6N95A5%#q@)L(^__ywlk?u?hiS<1{N3x{&w$(^@5jL!xQ_-HhnesE!GF(p ztm31|X@-8Vw68CJ=s(!|&VV~lf4xhS zQSBc&u8j6Gi+@J-e~jjrJU?dXKP-n4;~#Q*8SO6vZC79Rwf&T)hxU&|C&Ym2IH;HL zFDV~p*|6{Wi5D=gq1WG2|JR*fSQlV>&^acc@BOEHKFo5%b6xcE{9pW@$3M)Xl^OZM zF)SR*{>Kw-IzVmw%M3c1nJ0Xgp$7vPm)iReGiha3-o$fJG}Q&#-hY`zC$sY8d4VHlnBAIzo|%m4oy0V?y``CS)~5IS!<0Jj(jz}Vo%1JX?i#9J7^HcH}+ z2Kil=i;(PS033`@vI)Qs?=>LW0$n!9iRdStbtc^fLc057Fxf=70FNXaz(xR9Qou_o zI`6%}b#&c%(bjd}1^z!90EHmpL}YunC5e&%XcF&<05-u9r0*dJ8ZuQ_4X#7 zFZdH-g69S+T=5scxU`JYm<;qs6<`c0OdZUL=)ZN zF8JWzNq^vW-QBdDt9@>2gy!KbX?nK?dZ_z5c-SK+!V$7#TLCTf!#FX!jcB4D%&BC9 z?v91oJlxgVqTBtPYH#j)TQ$)_M{AmRsC0FZ2Xojfz?{VmU>AZlx+Y)>z`3NyiQ1~_ z;LL8n`2*`~!8X#XP-@0bW;J?JaRYiqQ=NErnbvP?em-DYKyCgR@bVIzx$W2a^h4{{ zq<23vO3A%fd>>)<&Ca}P+#@TPDZMn63yh{a4qz_ zTIX6IE%cWVtb3;)@B-xk#(TtZbfmhXDp>CCfM)KVbX=Cci0<-@1<%dUI16PtejfiydmL z{}cV4JlJ*g#6u_UztT?P1@b^H2WHGaK-#@G%Ar>^)zCMVdw!vxB!@CGU4lA8qLq>j z@c-Gu|))%U+1vMzUK>dof6%oa2SV?bd&OWb70TA9_hE*i{{!K+@m0J()l6K^;i_VFdksslO!o_tysWr;(2(d-ap)52OLMk)30NpWl69+tX9~ z*HG8@Z?gJJ%BxcjwDn)4H2t+gbIJ z7^kQHtH0$lB7G+hl;zOd_<<2L^fwQvOT_vB>St%WMEq7?Dy`$U{+5rW|2+tFzSqJX zU2q!_wBfcQXv1ws(1x44fKA*c*3Bkv7XyCqVI8m!ifF^H`Vc>~19p26ZLm5;v;ixG zE_VI^8?a2Ihh($1fv*$+x^PW^en?+6pdZ@ikPkG!SK9{i4dUTJKG5#Ot(u4(z_km{ zHn5uxK8L^mY`9NL5Ev<7e(clY2A=9bm*5dy83%c;T10SM;W1R zA8ht4h}>z|(c``la4-Jb1ABgb{~^+bZ)C(bKpq)t-=Maa1I$BEDBlh(akRb$?~a9Q zqR@c5gs&#*XiTREmwl_m3dz_1p??oBZX4DT_hC?y!516zU(S2O@$PF))$NdmaCHT@ z2zB`udgnC4z`5MB>!ne6KRLvPQu&nj9RN(46Sb6=_N8nRt&j$Y1GVxYU8MJ0avRVP zOv#Ilx*_&^z>sr#U;;=Uca}7a>YBV zy(QqiJ%G~rH+XkF=z9~v{5kl}iE<+8E_+B%fBT=4N*jLcAq3;Ic0k8Z^YE}N@_q;U zNi_7Q|GlOphd$8nTtguBzmSIRICS#;^L!U9ABOiNkKV%4EKNhm=W=tv`W&fzXhT_$ z@`0H5#6Jut#i7RrWACEwW%cL=aY%VGntyuB?@j(BI%%~bwmtIPZ7kj$f0!?%p%aH+ z^`F*qN%4s1Qh|<9qJdohNa+}9!#W1cFLQZ4)jvj-+dVHL4p0`I-{dTUn0K#t-Q)hr zZelwRr)c2xOf;BAfCf&{5Wp!t0+>3W`v+$sxSYZ44M@w1L#ux>&cNR}CDhjW`C>Rv z0jDJdfg#OPNU;G=FTZjZmq}p0^E!Ah1!t1*rNDia*6;k)ySk1Cy7HA=hd~|%FyCH^ zMq*5j?{|L}ePL?+U;78n~bLYlS;|RDGO))(P+|i zsHKOr{3+=n-`#&C9JkX-VaylvbA-|n@;On4G;=iZ()vFLBU!cptR*8~<(wKrEO(X--H39QK%ou`? literal 0 HcmV?d00001 diff --git a/templates/ts/dashboard-tab/src/index.css b/templates/ts/dashboard-tab/src/main.css similarity index 100% rename from templates/ts/dashboard-tab/src/index.css rename to templates/ts/dashboard-tab/src/main.css diff --git a/templates/ts/dashboard-tab/src/index.tsx b/templates/ts/dashboard-tab/src/main.tsx similarity index 90% rename from templates/ts/dashboard-tab/src/index.tsx rename to templates/ts/dashboard-tab/src/main.tsx index c329de3f7f..c7ff9f3a8e 100644 --- a/templates/ts/dashboard-tab/src/index.tsx +++ b/templates/ts/dashboard-tab/src/main.tsx @@ -1,4 +1,4 @@ -import "./index.css"; +import "./main.css"; import React from "react"; import { createRoot } from "react-dom/client"; diff --git a/templates/ts/dashboard-tab/teamsapp.yml.tpl b/templates/ts/dashboard-tab/teamsapp.yml.tpl index ddbf987989..49577b1a85 100644 --- a/templates/ts/dashboard-tab/teamsapp.yml.tpl +++ b/templates/ts/dashboard-tab/teamsapp.yml.tpl @@ -91,7 +91,7 @@ deploy: - uses: cli/runNpmCommand name: install dependencies with: - args: install --production + args: install - uses: cli/runNpmCommand name: build app with: @@ -100,7 +100,7 @@ deploy: - uses: cli/runNpxCommand name: deploy to Azure Static Web Apps with: - args: '@azure/static-web-apps-cli deploy build -d ${{SECRET_TAB_SWA_DEPLOYMENT_TOKEN}} --env production' + args: '@azure/static-web-apps-cli deploy ./dist -d ${{SECRET_TAB_SWA_DEPLOYMENT_TOKEN}} --env production' # Triggered when 'teamsapp publish' is executed publish: diff --git a/templates/ts/dashboard-tab/tsconfig.app.json b/templates/ts/dashboard-tab/tsconfig.app.json new file mode 100644 index 0000000000..f0a235055d --- /dev/null +++ b/templates/ts/dashboard-tab/tsconfig.app.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/templates/ts/dashboard-tab/tsconfig.json b/templates/ts/dashboard-tab/tsconfig.json index a9e45eac60..1ffef600d9 100644 --- a/templates/ts/dashboard-tab/tsconfig.json +++ b/templates/ts/dashboard-tab/tsconfig.json @@ -1,20 +1,7 @@ { - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": ["src"] - } \ No newline at end of file + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/templates/ts/dashboard-tab/tsconfig.node.json b/templates/ts/dashboard-tab/tsconfig.node.json new file mode 100644 index 0000000000..0d3d71446a --- /dev/null +++ b/templates/ts/dashboard-tab/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/templates/ts/dashboard-tab/vite.config.ts b/templates/ts/dashboard-tab/vite.config.ts new file mode 100644 index 0000000000..1f2556b593 --- /dev/null +++ b/templates/ts/dashboard-tab/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import fs from "fs"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + port: 53000, + https: { + cert: process.env.SSL_CRT_FILE ? fs.readFileSync(process.env.SSL_CRT_FILE) : undefined, + key: process.env.SSL_KEY_FILE ? fs.readFileSync(process.env.SSL_KEY_FILE) : undefined, + }, + }, +}); From a43cb66a815b629f03a2e7b44bc2f703333a4f2b Mon Sep 17 00:00:00 2001 From: anchenyi <162104711+anchenyi@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:22:37 +0800 Subject: [PATCH 16/52] feat: sync manifest from TDP (#12241) * feat: sync manifest --- packages/api/src/constants.ts | 1 + packages/fx-core/package.json | 2 + packages/fx-core/pnpm-lock.yaml | 14 + packages/fx-core/resource/package.nls.json | 16 + packages/fx-core/src/common/featureFlags.ts | 6 + .../fx-core/src/component/driver/index.ts | 1 + .../src/component/driver/teamsApp/errors.ts | 8 + .../teamsApp/interfaces/SyncManifest.ts | 17 + .../component/driver/teamsApp/syncManifest.ts | 286 ++++++ packages/fx-core/src/core/FxCore.ts | 28 +- packages/fx-core/src/question/constants.ts | 3 + packages/fx-core/src/question/generator.ts | 3 + packages/fx-core/src/question/index.ts | 4 + .../src/question/inputs/SyncManifestInputs.ts | 20 + packages/fx-core/src/question/inputs/index.ts | 1 + .../question/options/SyncManifestOptions.ts | 34 + .../fx-core/src/question/options/index.ts | 1 + packages/fx-core/src/question/other.ts | 45 + .../driver/teamsApp/syncManifest.test.ts | 871 ++++++++++++++++++ packages/fx-core/tests/core/FxCore.test.ts | 15 +- packages/vscode-extension/package.json | 6 + packages/vscode-extension/package.nls.json | 1 + packages/vscode-extension/src/extension.ts | 10 + .../src/handlers/manifestHandlers.ts | 13 + .../src/handlers/sharedOpts.ts | 4 + .../src/telemetry/extTelemetryEvents.ts | 1 + packages/vscode-extension/src/uriHandler.ts | 22 +- .../test/extension/uriHandler.test.ts | 55 ++ .../test/handlers/manifestHandlers.test.ts | 25 +- .../test/handlers/sharedOpts.test.ts | 8 + .../vscode-extension/test/mocks/mockCore.ts | 3 + 31 files changed, 1519 insertions(+), 5 deletions(-) create mode 100644 packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts create mode 100644 packages/fx-core/src/component/driver/teamsApp/syncManifest.ts create mode 100644 packages/fx-core/src/question/inputs/SyncManifestInputs.ts create mode 100644 packages/fx-core/src/question/options/SyncManifestOptions.ts create mode 100644 packages/fx-core/tests/component/driver/teamsApp/syncManifest.test.ts diff --git a/packages/api/src/constants.ts b/packages/api/src/constants.ts index d5714d94bd..217f46a0c4 100644 --- a/packages/api/src/constants.ts +++ b/packages/api/src/constants.ts @@ -69,6 +69,7 @@ export enum Stage { createAppPackage = "createAppPackage", previewWithManifest = "previewWithManifest", copilotPluginAddAPI = "copilotPluginAddAPI", + syncManifest = "syncManifest", addPlugin = "addPlugin", } diff --git a/packages/fx-core/package.json b/packages/fx-core/package.json index aafc3ee297..0f3df30658 100644 --- a/packages/fx-core/package.json +++ b/packages/fx-core/package.json @@ -105,6 +105,7 @@ "axios-retry": "^3.3.1", "comment-json": "^4.2.3", "cryptr": "^6.0.2", + "deep-diff": "^1.0.2", "detect-port": "^1.3.0", "dotenv": "^8.2.0", "form-data": "^4.0.0", @@ -146,6 +147,7 @@ "@types/chai-as-promised": "^7.1.3", "@types/chai-spies": "^1.0.3", "@types/cryptr": "^4.0.1", + "@types/deep-diff": "^1.0.5", "@types/detect-port": "^1.3.2", "@types/faker": "^5.5.0", "@types/fs-extra": "^9.0.9", diff --git a/packages/fx-core/pnpm-lock.yaml b/packages/fx-core/pnpm-lock.yaml index fbc6420635..540bc29bdf 100644 --- a/packages/fx-core/pnpm-lock.yaml +++ b/packages/fx-core/pnpm-lock.yaml @@ -65,6 +65,9 @@ dependencies: cryptr: specifier: ^6.0.2 version: 6.0.2 + deep-diff: + specifier: ^1.0.2 + version: 1.0.2 detect-port: specifier: ^1.3.0 version: 1.3.0 @@ -181,6 +184,9 @@ devDependencies: '@types/cryptr': specifier: ^4.0.1 version: 4.0.1 + '@types/deep-diff': + specifier: ^1.0.5 + version: 1.0.5 '@types/detect-port': specifier: ^1.3.2 version: 1.3.2 @@ -1151,6 +1157,10 @@ packages: resolution: {integrity: sha512-Nn8fvr+8XYWK5h422lj4xQACfOg6vdhKI+Rh9ERa5Mg0cZvPL9Vn3845vSY07dNZnEs5cqkSNVMdhmf70lAYkA==} dev: true + /@types/deep-diff@1.0.5: + resolution: {integrity: sha512-PQyNSy1YMZU1hgZA5tTYfHPpUAo9Dorn1PZho2/budQLfqLu3JIP37JAavnwYpR1S2yFZTXa3hxaE4ifGW5jaA==} + dev: true + /@types/detect-port@1.3.2: resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==} dev: true @@ -2348,6 +2358,10 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /deep-diff@1.0.2: + resolution: {integrity: sha512-aWS3UIVH+NPGCD1kki+DCU9Dua032iSsO43LqQpcs4R3+dVv7tX0qBGjiVHJHjplsoUM2XRO/KB92glqc68awg==} + dev: false + /deep-eql@3.0.1: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} diff --git a/packages/fx-core/resource/package.nls.json b/packages/fx-core/resource/package.nls.json index b5edd41ff6..9f0b654ef2 100644 --- a/packages/fx-core/resource/package.nls.json +++ b/packages/fx-core/resource/package.nls.json @@ -134,6 +134,7 @@ "plugins.appstudio.validationFailedNotice": "Manifest Validation is unsuccessful!", "plugins.appstudio.validateManifest.progressBar.message": "Validating manifest...", "plugins.appstudio.validateAppPackage.progressBar.message": "Validating app package...", + "plugins.appstudio.syncManifestFailedNotice": "Unable to sync manifest!", "plugins.appstudio.adminPortal": "Go to admin portal", "plugins.appstudio.publishSucceedNotice.cli": "[%s] is published successfully to Admin Portal (%s). After approval, your app will be available for your organization. Get more info from %s.", "plugins.appstudio.updatePublihsedAppConfirm": "Do you want to submit a new update?", @@ -195,6 +196,9 @@ "error.appstudio.noManifestId": "Invalid ID found in manifest find.", "error.appstudio.validateFetchSchemaFailed": "Unable to get schema from %s, message: %s", "error.appstudio.validateSchemaNotDefined": "Manifest schema is not defined", + "error.appstudio.syncManifestInvalidInput": "Input is invalid. Project path and env should not be empty.", + "error.appstudio.syncManifestNoTeamsAppId": "Unable to load Teams app ID from the env file.", + "error.appstudio.syncManifestNoManifest": "Manifest downloaded from Teams Developer Portal is empty", "error.appstudio.publishInDevPortalSuggestionForValidationError": "Generate package from \"Zip Teams app package\" and try again.", "error.appstudio.teamsAppCreateConflict": "Unable to create Teams app, which may be because your app ID is conflicting with another app's ID in your tenant. Click 'Get Help' to resolve this issue.", "error.appstudio.teamsAppCreateConflictWithPublishedApp": "Teams app with the same ID already exists in your organization's app store. Update the app and try again.", @@ -577,6 +581,18 @@ "core.uninstallQuestion.tdpOption": "App registration", "core.uninstallQuestion.botOption": "Bot framework registration", "core.uninstallQuestion.projectPath": "Project path", + "core.syncManifest.projectPath": "Project path", + "core.syncManifest.env": "Target Teams Toolkit Environment", + "core.syncManifest.teamsAppId": "Teams App ID (optional)", + "core.syncManifest.addWarning": "New properties added to the manifest template. Manually update the local manifest. Diff Path: %s. New Value %s.", + "core.syncManifest.deleteWarning": "Something was deleted from the manifest template. Manually update the local manifest. Diff Path: %s. Old Value: %s.", + "core.syncManifest.editKeyConflict": "Conflict in placeholder variable in the new manifest. Manually update the local manifest. Variable name: %s, value 1: %s, value 2: %s.", + "core.syncManifest.editNonVarPlaceholder": "The new manifest has non-placeholder changes. Manually update your local manifest. Old value: %s. New value: %s.", + "core.syncManifest.editNotMatch": "Value doesn't match the template placeholders. Manually update the local manifest. Template value: %s. New Value: %s.", + "core.syncManifest.updateEnvSuccess": "%s environment file updated successfully. New values: %s", + "core.syncManifest.success": "Manifest synced to environment: %s successfully.", + "core.syncManifest.noDiff": "Your manifest file is already up-to-date. Sync completed.", + "core.syncManifest.saveManifestSuccess": "Manifest file saved to %s successfully.", "ui.select.LoadingOptionsPlaceholder": "Loading options ...", "ui.select.LoadingDefaultPlaceholder": "Loading default value ...", "error.aad.manifest.NameIsMissing": "name is missing\n", diff --git a/packages/fx-core/src/common/featureFlags.ts b/packages/fx-core/src/common/featureFlags.ts index 181c19543c..56b2f9981a 100644 --- a/packages/fx-core/src/common/featureFlags.ts +++ b/packages/fx-core/src/common/featureFlags.ts @@ -28,8 +28,10 @@ export class FeatureFlagName { static readonly ShowDiagnostics = "TEAMSFX_SHOW_DIAGNOSTICS"; static readonly TelemetryTest = "TEAMSFX_TELEMETRY_TEST"; static readonly DevTunnelTest = "TEAMSFX_DEV_TUNNEL_TEST"; + static readonly SyncManifest = "TEAMSFX_SYNC_MANIFEST"; static readonly EnvFileFunc = "TEAMSFX_ENV_FILE_FUNC"; } + export interface FeatureFlag { name: string; defaultValue: string; @@ -79,6 +81,10 @@ export class FeatureFlags { name: FeatureFlagName.DevTunnelTest, defaultValue: "false", }; + static readonly SyncManifest = { + name: FeatureFlagName.SyncManifest, + defaultValue: "false", + }; static readonly EnvFileFunc = { name: FeatureFlagName.EnvFileFunc, defaultValue: "true", // Set it to true for dogfooding. diff --git a/packages/fx-core/src/component/driver/index.ts b/packages/fx-core/src/component/driver/index.ts index c6bd3c5ad7..d6a7028f0a 100644 --- a/packages/fx-core/src/component/driver/index.ts +++ b/packages/fx-core/src/component/driver/index.ts @@ -11,6 +11,7 @@ import "./teamsApp/validateTestCases"; import "./teamsApp/configure"; import "./teamsApp/copyAppPackageToSPFx"; import "./teamsApp/publishAppPackage"; +import "./teamsApp/syncManifest"; import "./aad/create"; import "./aad/update"; import "./arm/deploy"; diff --git a/packages/fx-core/src/component/driver/teamsApp/errors.ts b/packages/fx-core/src/component/driver/teamsApp/errors.ts index 0bffb4419e..5659f403f9 100644 --- a/packages/fx-core/src/component/driver/teamsApp/errors.ts +++ b/packages/fx-core/src/component/driver/teamsApp/errors.ts @@ -61,6 +61,14 @@ export class AppStudioError { ], }; + public static readonly SyncManifestFailedError = { + name: "SyncManifestFailed", + message: (errors: string[]): [string, string] => [ + getDefaultString("plugins.appstudio.syncManifestFailedNotice") + " " + errors.join("\n"), + getLocalizedString("plugins.appstudio.syncManifestFailedNotice") + " " + errors.join("\n"), + ], + }; + public static readonly TeamsAppPublishFailedError = { name: "TeamsAppPublishFailed", message: ( diff --git a/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts b/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts new file mode 100644 index 0000000000..1cb51a139e --- /dev/null +++ b/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +export interface SyncManifestArgs { + /** + * Teams app project path + */ + projectPath: string; + /** + * Environment + */ + env: string; + /** + * Teams app id + */ + teamsAppId?: string; +} diff --git a/packages/fx-core/src/component/driver/teamsApp/syncManifest.ts b/packages/fx-core/src/component/driver/teamsApp/syncManifest.ts new file mode 100644 index 0000000000..c78d13f53b --- /dev/null +++ b/packages/fx-core/src/component/driver/teamsApp/syncManifest.ts @@ -0,0 +1,286 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import * as deepDiff from "deep-diff"; +import { Service } from "typedi"; +import { ExecutionResult, StepDriver } from "../interface/stepDriver"; +import { DriverContext } from "../interface/commonArgs"; +import * as path from "path"; +import { SyncManifestArgs } from "./interfaces/SyncManifest"; +import { FxError, Result, err, ok } from "@microsoft/teamsfx-api"; +import * as appStudio from "./appStudio"; +import { WrapDriverContext } from "../util/wrapUtil"; +import { AppStudioResultFactory } from "./results"; +import { AppStudioError } from "./errors"; +import { getLocalizedString } from "../../../common/localizeUtils"; +import { envUtil, DotenvOutput } from "../../utils/envUtil"; +import { pathUtils } from "../../utils/pathUtils"; +import { metadataUtil } from "../../utils/metadataUtil"; +import { manifestUtils } from "./utils/ManifestUtils"; +import fs from "fs-extra"; + +const actionName = "teamsApp/syncManifest"; + +@Service(actionName) +export class SyncManifestDriver implements StepDriver { + description?: string | undefined; + progressTitle?: string | undefined; + public async execute(args: SyncManifestArgs, context: DriverContext): Promise { + const wrapContext = new WrapDriverContext(context, actionName, actionName); + const res = await this.sync(args, wrapContext); + return { + result: res, + summaries: wrapContext.summaries, + }; + } + + public async sync( + args: SyncManifestArgs, + context: WrapDriverContext + ): Promise, FxError>> { + if (!args.projectPath || !args.env) { + return err( + AppStudioResultFactory.UserError( + AppStudioError.SyncManifestFailedError.name, + AppStudioError.SyncManifestFailedError.message([ + getLocalizedString("error.appstudio.syncManifestInvalidInput"), + ]) + ) + ); + } + + const res = await this.getTeamsAppIdAndManifestTemplatePath(args); + if (res.isErr()) { + return err(res.error); + } + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const teamsAppId = res.value.get("teamsAppId")!; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const manifestTemplatePath = res.value.get("manifestTemplatePath")!; + + const appPackageRes = await appStudio.getAppPackage( + teamsAppId, + context.m365TokenProvider, + context.logProvider + ); + if (appPackageRes.isErr()) { + return err(appPackageRes.error); + } + const appPackage = appPackageRes.value; + if (!appPackage.manifest) { + return err( + AppStudioResultFactory.UserError( + AppStudioError.SyncManifestFailedError.name, + AppStudioError.SyncManifestFailedError.message([ + getLocalizedString("error.appstudio.syncManifestNoManifest"), + ]) + ) + ); + } + const newManifest = JSON.parse(appPackage.manifest.toString("utf8")); + // save the new manifest file. + const timeStamp = new Date().toISOString().replace(/[-:]/g, "").replace(/\..+/, ""); + const manifestFileName = `manifest.${args.env}.${teamsAppId}.json`; + const dirPath = path.join(args.projectPath, "appPackage", "syncHistory", timeStamp); + const filePath = path.join(dirPath, manifestFileName); + await fs.mkdir(dirPath, { recursive: true }); + await fs.writeFile(filePath, JSON.stringify(newManifest, null, "\t")); + context.logProvider.info(getLocalizedString("core.syncManifest.saveManifestSuccess", filePath)); + + const currentManifestRes = await manifestUtils._readAppManifest(manifestTemplatePath); + if (currentManifestRes.isErr()) { + return err(currentManifestRes.error); + } + const currentManifest = currentManifestRes.value as any; + const differences = deepDiff.diff(currentManifest, newManifest); + // If there are add or delete differences, log warnings and return. + // If there are edit differences, check if the different values are variable placeholders, like: ${{Teams_APP_ID}}. + const diffVariablesMap = new Map(); + for (const diff of differences ?? []) { + if (diff.kind === "N") { + context.logProvider.warning( + getLocalizedString("core.syncManifest.addWarning", diff.path, diff.rhs) + ); + return ok(new Map()); + } + if (diff.kind === "D") { + context.logProvider.warning( + getLocalizedString("core.syncManifest.deleteWarning", diff.path, diff.lhs) + ); + return ok(new Map()); + } + if (diff.kind === "E") { + const leftValue = diff.lhs; + const rightValue = diff.rhs; + const res = this.matchPlaceholders(leftValue, rightValue); + if (res.isErr()) { + context.logProvider.warning(res.error.message); + return ok(new Map()); + } + for (const [key, value] of res.value) { + if (diffVariablesMap.has(key)) { + if (diffVariablesMap.get(key) !== value) { + context.logProvider.warning( + getLocalizedString( + "core.syncManifest.editKeyConflict", + key, + diffVariablesMap.get(key), + value + ) + ); + return ok(new Map()); + } + } else { + diffVariablesMap.set(key, value); + } + } + } + } + if (diffVariablesMap.size === 0) { + context.logProvider.info(getLocalizedString("core.syncManifest.noDiff")); + return ok(new Map()); + } + const currentEnvRes = await envUtil.readEnv(args.projectPath, args.env); + if (currentEnvRes.isErr()) { + return err(currentEnvRes.error); + } + + const envToUpdate: DotenvOutput = {}; + for (const [key, value] of diffVariablesMap) { + if (currentEnvRes.value[key] != value) { + envToUpdate[key] = value; + } + } + if (Object.keys(envToUpdate).length > 0) { + const res = await envUtil.writeEnv(args.projectPath, args.env, envToUpdate); + if (res.isErr()) { + return err(res.error); + } + context.logProvider.info( + getLocalizedString("core.syncManifest.updateEnvSuccess", args.env, envToUpdate) + ); + } + context.logProvider.info(getLocalizedString("core.syncManifest.success", args.env)); + return ok(new Map()); + } + + // Returns the teams app id and manifest template path. + // Map key: "teamsAppId", "manifestTemplatePath". + private async getTeamsAppIdAndManifestTemplatePath( + args: SyncManifestArgs + ): Promise, FxError>> { + const envRes = await envUtil.readEnv(args.projectPath, args.env); + if (envRes.isErr()) { + return err(envRes.error); + } + const teamsappYamlPath = pathUtils.getYmlFilePath(args.projectPath, args.env); + const yamlProjectModel = await metadataUtil.parse(teamsappYamlPath, args.env); + if (yamlProjectModel.isErr()) { + return err(yamlProjectModel.error); + } + const projectModel = yamlProjectModel.value; + let teamsAppId = args.teamsAppId; + if (!teamsAppId) { + for (const action of projectModel.provision?.driverDefs ?? []) { + if (action.uses === "teamsApp/create") { + const teamsAppIdKeyName = action.writeToEnvironmentFile?.teamsAppId || "TEAMS_APP_ID"; + teamsAppId = envRes.value[teamsAppIdKeyName]; + } + } + if (!teamsAppId) { + return err( + AppStudioResultFactory.UserError( + AppStudioError.SyncManifestFailedError.name, + AppStudioError.SyncManifestFailedError.message([ + getLocalizedString("error.appstudio.syncManifestNoTeamsAppId"), + ]) + ) + ); + } + } + let yamlManifestPath = ""; + for (const action of projectModel.provision?.driverDefs ?? []) { + if (action.uses === "teamsApp/zipAppPackage") { + const parameters = action.with as { [key: string]: string }; + yamlManifestPath = parameters["manifestPath"]; + } + } + const deafultManifestTemplatePath = path.join(args.projectPath, "appPackage", "manifest.json"); + let manifestTemplatePath = ""; + if (!yamlManifestPath) { + manifestTemplatePath = deafultManifestTemplatePath; + } else if (path.isAbsolute(yamlManifestPath)) { + manifestTemplatePath = yamlManifestPath; + } else { + manifestTemplatePath = path.join(args.projectPath, yamlManifestPath); + } + return ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ); + } + + // Check if the value matches the template with placeholders and return the placeholder map. + private matchPlaceholders(template: string, value: string): Result, FxError> { + const placeholderPattern = /\${{(.*?)}}/g; + const placeholders: string[] = []; + let match; + while ((match = placeholderPattern.exec(template)) !== null) { + placeholders.push(match[1]); + } + if (placeholders.length === 0) { + if (template === value) { + return ok(new Map()); + } else { + return err( + AppStudioResultFactory.UserError( + AppStudioError.SyncManifestFailedError.name, + AppStudioError.SyncManifestFailedError.message([ + getLocalizedString("core.syncManifest.editNonVarPlaceholder", template, value), + ]) + ) + ); + } + } + const regexPattern = template.replace(placeholderPattern, "(.*?)"); + const regex = new RegExp(`^${regexPattern}$`); + const matchValues = value.match(regex); + if (!matchValues) { + return err( + AppStudioResultFactory.UserError( + AppStudioError.SyncManifestFailedError.name, + AppStudioError.SyncManifestFailedError.message([ + getLocalizedString("core.syncManifest.editNotMatch", template, value), + ]) + ) + ); + } + const result = new Map(); + for (let i = 0; i < placeholders.length; i++) { + const key = placeholders[i]; + const matchValue = matchValues[i + 1]; + if (result.has(key)) { + if (result.get(key) !== matchValue) { + return err( + AppStudioResultFactory.UserError( + AppStudioError.SyncManifestFailedError.name, + AppStudioError.SyncManifestFailedError.message([ + getLocalizedString( + "core.syncManifest.editKeyConflict", + key, + result.get(key), + matchValue + ), + ]) + ) + ); + } + } else { + result.set(key, matchValue); + } + } + return ok(result); + } +} diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index e42fce7620..4e8c889cdf 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -160,10 +160,12 @@ import { } from "./middleware/utils/v3MigrationUtils"; import { CoreTelemetryComponentName, CoreTelemetryEvent, CoreTelemetryProperty } from "./telemetry"; import { CoreHookContext, PreProvisionResForVS, VersionCheckRes } from "./types"; -import { UninstallInputs } from "../question"; +import { SyncManifestInputs, UninstallInputs } from "../question"; import { PackageService } from "../component/m365/packageService"; import { MosServiceEndpoint, MosServiceScope } from "../component/m365/serviceConstant"; import { teamsDevPortalClient } from "../client/teamsDevPortalClient"; +import { SyncManifestArgs } from "../component/driver/teamsApp/interfaces/SyncManifest"; +import { SyncManifestDriver } from "../component/driver/teamsApp/syncManifest"; import { generateDriverContext } from "../common/utils"; export class FxCore { @@ -972,6 +974,30 @@ export class FxCore { const driver: ValidateWithTestCasesDriver = Container.get("teamsApp/validateWithTestCases"); return (await driver.execute(args, context)).result; } + + /** + * v3 only none lifecycle command + */ + @hooks([ + ErrorContextMW({ component: "FxCore", stage: "syncManifest", reset: true }), + ErrorHandlerMW, + QuestionMW("syncManifest"), + ConcurrentLockerMW, + ]) + async syncManifest(inputs: SyncManifestInputs): Promise> { + const context: DriverContext = createDriverContext(inputs); + const projectPath = inputs[QuestionNames.ProjectPath] as string; + const env = inputs[QuestionNames.Env] as string; + const teamsAppId = inputs[QuestionNames.TeamsAppId]; + const args: SyncManifestArgs = { + projectPath: projectPath, + env: env, + teamsAppId: teamsAppId, + }; + const driver: SyncManifestDriver = Container.get("teamsApp/syncManifest"); + return (await driver.execute(args, context)).result; + } + /** * v3 only none lifecycle command */ diff --git a/packages/fx-core/src/question/constants.ts b/packages/fx-core/src/question/constants.ts index b28efe5d43..f0230fcede 100644 --- a/packages/fx-core/src/question/constants.ts +++ b/packages/fx-core/src/question/constants.ts @@ -82,6 +82,7 @@ export enum QuestionNames { ManifestPath = "manifest-path", ManifestId = "manifest-id", + TeamsAppId = "teams-app-id", TitleId = "title-id", UserEmail = "email", @@ -97,6 +98,8 @@ export enum QuestionNames { collaborationAppType = "collaborationType", DestinationApiSpecFilePath = "destination-api-spec-location", PluginAvailability = "plugin-availability", + + SyncManifest = "sync-manifest", ApiPluginType = "api-plugin-type", WithPlugin = "with-plugin", } diff --git a/packages/fx-core/src/question/generator.ts b/packages/fx-core/src/question/generator.ts index 52dab57560..b10137b0a9 100644 --- a/packages/fx-core/src/question/generator.ts +++ b/packages/fx-core/src/question/generator.ts @@ -457,6 +457,9 @@ async function batchGenerate() { await generateCliOptions(questionNodes.uninstall(), "Uninstall"); await generateInputs(questionNodes.uninstall(), "Uninstall"); + + await generateCliOptions(questionNodes.syncManifest(), "SyncManifest"); + await generateInputs(questionNodes.syncManifest(), "SyncManifest"); } void batchGenerate(); diff --git a/packages/fx-core/src/question/index.ts b/packages/fx-core/src/question/index.ts index 7765861f18..aeb492b4a4 100644 --- a/packages/fx-core/src/question/index.ts +++ b/packages/fx-core/src/question/index.ts @@ -21,6 +21,7 @@ import { selectTeamsAppManifestQuestionNode, uninstallQuestionNode, validateTeamsAppQuestionNode, + syncManifestQuestionNode, } from "./other"; export * from "./constants"; export * from "./create"; @@ -76,6 +77,9 @@ export class QuestionNodes { uninstall(): IQTreeNode { return uninstallQuestionNode(); } + syncManifest(): IQTreeNode { + return syncManifestQuestionNode(); + } } export const questionNodes = new QuestionNodes(); diff --git a/packages/fx-core/src/question/inputs/SyncManifestInputs.ts b/packages/fx-core/src/question/inputs/SyncManifestInputs.ts new file mode 100644 index 0000000000..87a9bdefcd --- /dev/null +++ b/packages/fx-core/src/question/inputs/SyncManifestInputs.ts @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/**************************************************************************************** + * NOTICE: AUTO-GENERATED * + **************************************************************************************** + * This file is automatically generated by script "./src/question/generator.ts". * + * Please don't manually change its contents, as any modifications will be overwritten! * + ***************************************************************************************/ + +import { Inputs } from "@microsoft/teamsfx-api"; + +export interface SyncManifestInputs extends Inputs { + /** @description Project path */ + projectPath?: string; + /** @description Target Teams Toolkit Environment */ + env?: string; + /** @description Teams App ID (optional) */ + "teams-app-id"?: string; +} diff --git a/packages/fx-core/src/question/inputs/index.ts b/packages/fx-core/src/question/inputs/index.ts index 767423e260..fb7617d879 100644 --- a/packages/fx-core/src/question/inputs/index.ts +++ b/packages/fx-core/src/question/inputs/index.ts @@ -12,3 +12,4 @@ export * from "./PermissionListInputs"; export * from "./DeployAadManifestInputs"; export * from "./AddPluginInputs"; export * from "./UninstallInputs"; +export * from "./SyncManifestInputs"; diff --git a/packages/fx-core/src/question/options/SyncManifestOptions.ts b/packages/fx-core/src/question/options/SyncManifestOptions.ts new file mode 100644 index 0000000000..91f563ee2f --- /dev/null +++ b/packages/fx-core/src/question/options/SyncManifestOptions.ts @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/**************************************************************************************** + * NOTICE: AUTO-GENERATED * + **************************************************************************************** + * This file is automatically generated by script "./src/question/generator.ts". * + * Please don't manually change its contents, as any modifications will be overwritten! * + ***************************************************************************************/ + +import { CLICommandOption, CLICommandArgument } from "@microsoft/teamsfx-api"; + +export const SyncManifestOptions: CLICommandOption[] = [ + { + name: "projectPath", + type: "string", + description: "Project Path", + required: true, + default: "./", + }, + { + name: "env", + type: "string", + description: "Target Teams Toolkit Environment", + required: true, + }, + { + name: "teams-app-id", + type: "string", + description: "Teams App ID (optional)", + required: true, + }, +]; +export const SyncManifestArguments: CLICommandArgument[] = []; diff --git a/packages/fx-core/src/question/options/index.ts b/packages/fx-core/src/question/options/index.ts index 07ebb6e24c..395eaba839 100644 --- a/packages/fx-core/src/question/options/index.ts +++ b/packages/fx-core/src/question/options/index.ts @@ -12,3 +12,4 @@ export * from "./PermissionListOptions"; export * from "./DeployAadManifestOptions"; export * from "./AddPluginOptions"; export * from "./UninstallOptions"; +export * from "./SyncManifestOptions"; diff --git a/packages/fx-core/src/question/other.ts b/packages/fx-core/src/question/other.ts index 5a9a04bc84..ac8d5c4665 100644 --- a/packages/fx-core/src/question/other.ts +++ b/packages/fx-core/src/question/other.ts @@ -1066,3 +1066,48 @@ function oauthClientSecretQuestion(): TextInputQuestion { }, }; } + +export function syncManifestQuestionNode(): IQTreeNode { + return { + data: { + type: "group", + }, + children: [ + { + data: { + type: "folder", + name: QuestionNames.ProjectPath, + title: getLocalizedString("core.syncManifest.projectPath"), + cliDescription: "Project Path", + placeholder: "./", + default: "./", + }, + condition: () => { + return true; + }, + }, + { + data: { + type: "text", + name: QuestionNames.Env, + title: getLocalizedString("core.syncManifest.env"), + cliDescription: "Target Teams Toolkit Environment", + }, + condition: () => { + return true; + }, + }, + { + data: { + type: "text", + name: QuestionNames.TeamsAppId, + title: getLocalizedString("core.syncManifest.teamsAppId"), + cliDescription: "Teams App ID (optional)", + }, + condition: () => { + return true; + }, + }, + ], + }; +} diff --git a/packages/fx-core/tests/component/driver/teamsApp/syncManifest.test.ts b/packages/fx-core/tests/component/driver/teamsApp/syncManifest.test.ts new file mode 100644 index 0000000000..d8f085c472 --- /dev/null +++ b/packages/fx-core/tests/component/driver/teamsApp/syncManifest.test.ts @@ -0,0 +1,871 @@ +import chai from "chai"; +import * as sinon from "sinon"; +import "mocha"; +import fs from "fs-extra"; +import { SyncManifestDriver } from "../../../../src/component/driver/teamsApp/syncManifest"; +import { AppStudioError } from "../../../../src/component/driver/teamsApp/errors"; +import { SyncManifestArgs } from "../../../../src/component/driver/teamsApp/interfaces/SyncManifest"; +import { MockedLogProvider, MockedM365Provider } from "../../../plugins/solution/util"; +import { envUtil } from "../../../../src/component/utils/envUtil"; +import { manifestUtils } from "../../../../src/component/driver/teamsApp/utils/ManifestUtils"; +import { ok, err, TeamsAppManifest, Err, UserError, Result, FxError } from "@microsoft/teamsfx-api"; +import * as appStudio from "../../../../src/component/driver/teamsApp/appStudio"; +import { DotenvOutput, getLocalizedString } from "../../../../build"; +import { metadataUtil, pathUtils } from "../../../../src"; +import { ILifecycle, ProjectModel } from "../../../../src/component/configManager/interface"; + +describe("teamsApp/syncManifest", async () => { + const syncManifestDriver = new SyncManifestDriver(); + const mockedDriverContext: any = { + m365TokenProvider: new MockedM365Provider(), + logProvider: new MockedLogProvider(), + }; + + afterEach(() => { + sinon.restore(); + }); + + it("projectPath or env is empty", async () => { + const emptyMap = new Map(); + const args: SyncManifestArgs = { + projectPath: emptyMap.get("projectPath") as string, + env: emptyMap.get("env") as string, + }; + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.equal(AppStudioError.SyncManifestFailedError.name, result.error.name); + } + }); + + it("getTeamsAppIdAndManifestTemplatePath error", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves(err(new Error("fake error"))); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.equal("fake error", result.error.message); + } + }); + + it("new manifest does not exist", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", "mockedTeamsAppId"], + ["manifestTemplatePath", "mockedManifestTemplatePath"], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves(err(new UserError("source", "name", "", ""))); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.equal("name", result.error.name); + } + }); + + it("new manifest is empty", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", "mockedTeamsAppId"], + ["manifestTemplatePath", "mockedManifestTemplatePath"], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves(ok({})); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.equal("SyncManifestFailed", result.error.name); + } + }); + + it("cannot find current manifest", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", "mockedTeamsAppId"], + ["manifestTemplatePath", "mockedManifestTemplatePath"], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from(JSON.stringify({})), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(fs, "pathExists").resolves(false); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.equal("FileNotFoundError", result.error.name); + } + }); + + it("add diff", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + version: "1.0", + id: "1", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "1", + } as TeamsAppManifest) + ); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("delete diff", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "1", + version: "1.0", + } as TeamsAppManifest) + ); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "id-11", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves( + ok({ + TEAMS_APP_ID: "2", + } as DotenvOutput) + ); + sinon + .stub(envUtil, "writeEnv") + .callsFake( + ( + projectPath: string, + env: string, + newEnv: DotenvOutput + ): Promise> => { + if ( + projectPath === args.projectPath && + env === args.env && + JSON.stringify(newEnv) === JSON.stringify({ TEAMS_APP_ID: "11" }) + ) { + return Promise.resolve(ok(undefined)); + } else { + return Promise.resolve( + err(new UserError("ut", "Invalid parameters passed to writeEnv", "", "")) + ); + } + } + ); + + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "id-${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff with placeholder conflicts", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "11", + version: "22", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "${{TEAMS_APP_ID}}", + version: "${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff with no placeholder in template", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "11", + version: "22", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "111", + version: "222", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff - cannot match template", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "11", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "app-${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff - placeholder conflicts in one match", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "app-1-2", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "app-${{TEAMS_APP_ID}}-${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("no diff", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").throws("error"); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "1", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff with same placeholders", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves( + ok({ + TEAMS_APP_ID: "1", + } as DotenvOutput) + ); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("edit diff with duplicate placeholders", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + packageName: "1", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves( + ok({ + TEAMS_APP_ID: "1", + } as DotenvOutput) + ); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "${{TEAMS_APP_ID}}", + packageName: "${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("read env failed", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves(err(new UserError("ut", "error", "", ""))); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.deepEqual(result.error.name, "error"); + } + }); + + it("read env failed in getTeamsAppIdAndManifestTemplatePath", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + sinon.stub(appStudio, "getAppPackage").throws("error"); + sinon.stub(fs, "mkdir").throws("error"); + sinon.stub(fs, "writeFile").throws("error"); + sinon.stub(envUtil, "readEnv").resolves(err(new UserError("ut", "error", "", ""))); + sinon.stub(envUtil, "writeEnv").throws("error"); + sinon.stub(manifestUtils, "_readAppManifest").throws("error"); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.deepEqual(result.error.name, "error"); + } + }); + + it("write env failed", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const teamsAppId = "mockedTeamsAppId"; + const manifestTemplatePath = "mockedManifestTemplatePath"; + sinon + .stub(syncManifestDriver, "getTeamsAppIdAndManifestTemplatePath" as keyof SyncManifestDriver) + .resolves( + ok( + new Map([ + ["teamsAppId", teamsAppId], + ["manifestTemplatePath", manifestTemplatePath], + ]) + ) + ); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "id-11", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves( + ok({ + TEAMS_APP_ID: "2", + } as DotenvOutput) + ); + sinon.stub(envUtil, "writeEnv").resolves(err(new UserError("ut", "error", "", ""))); + + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "id-${{TEAMS_APP_ID}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isErr()); + if (result.isErr()) { + chai.assert.deepEqual(result.error.name, "error"); + } + }); + + it("happy path", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + }; + const mockProjectModel: any = { + projectId: "12345", + provision: { + name: "provision", + driverDefs: [ + { + uses: "teamsApp/create", + with: { + name: "testappname${{APP_NAME_SUFFIX}}", + }, + writeToEnvironmentFile: { + teamsAppId: "TEAMS_APP_ID", + }, + }, + { + uses: "teamsApp/zipAppPackage", + with: { + manifestPath: "./", + }, + writeToEnvironmentFile: { + teamsAppId: "TEAMS_APP_ID", + }, + }, + ], + }, + }; + sinon.stub(pathUtils, "getYmlFilePath").resolves(""); + sinon.stub(metadataUtil, "parse").resolves(ok(mockProjectModel)); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + version: "2.0", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves( + ok({ + VERSION: "1.0", + TEAMS_APP_ID: "1", + } as DotenvOutput) + ); + sinon + .stub(envUtil, "writeEnv") + .callsFake( + ( + projectPath: string, + env: string, + newEnv: DotenvOutput + ): Promise> => { + if ( + projectPath === args.projectPath && + env === args.env && + JSON.stringify(newEnv) === JSON.stringify({ VERSION: "2.0" }) + ) { + return Promise.resolve(ok(undefined)); + } else { + return Promise.resolve( + err(new UserError("ut", "Invalid parameters passed to writeEnv", "", "")) + ); + } + } + ); + + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "1", + version: "${{VERSION}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); + + it("happy path with teamsApp Id", async () => { + const args: SyncManifestArgs = { + projectPath: "fakePath", + env: "dev", + teamsAppId: "1", + }; + const mockProjectModel: any = { + projectId: "12345", + provision: { + name: "provision", + driverDefs: [ + { + uses: "teamsApp/create", + with: { + name: "testappname${{APP_NAME_SUFFIX}}", + }, + writeToEnvironmentFile: { + teamsAppId: "TEAMS_APP_ID", + }, + }, + { + uses: "teamsApp/zipAppPackage", + with: { + manifestPath: "./", + }, + writeToEnvironmentFile: { + teamsAppId: "TEAMS_APP_ID", + }, + }, + ], + }, + }; + sinon.stub(pathUtils, "getYmlFilePath").resolves(""); + sinon.stub(metadataUtil, "parse").resolves(ok(mockProjectModel)); + sinon.stub(appStudio, "getAppPackage").resolves( + ok({ + manifest: Buffer.from( + JSON.stringify({ + id: "1", + version: "2.0", + }) + ), + }) + ); + sinon.stub(fs, "mkdir").resolves(); + sinon.stub(fs, "writeFile").resolves(); + sinon.stub(envUtil, "readEnv").resolves( + ok({ + VERSION: "1.0", + } as DotenvOutput) + ); + sinon + .stub(envUtil, "writeEnv") + .callsFake( + ( + projectPath: string, + env: string, + newEnv: DotenvOutput + ): Promise> => { + if ( + projectPath === args.projectPath && + env === args.env && + JSON.stringify(newEnv) === JSON.stringify({ VERSION: "2.0" }) + ) { + return Promise.resolve(ok(undefined)); + } else { + return Promise.resolve( + err(new UserError("ut", "Invalid parameters passed to writeEnv", "", "")) + ); + } + } + ); + + sinon.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + id: "1", + version: "${{VERSION}}", + } as TeamsAppManifest) + ); + const result = await syncManifestDriver.sync(args, mockedDriverContext); + chai.assert.isTrue(result.isOk()); + if (result.isOk()) { + chai.assert.deepEqual(result.value, new Map()); + } + }); +}); diff --git a/packages/fx-core/tests/core/FxCore.test.ts b/packages/fx-core/tests/core/FxCore.test.ts index 41249b3836..82b278004c 100644 --- a/packages/fx-core/tests/core/FxCore.test.ts +++ b/packages/fx-core/tests/core/FxCore.test.ts @@ -99,13 +99,14 @@ import { } from "../../src/question/constants"; import { validationUtils } from "../../src/ui/validationUtils"; import { MockTools, randomAppName } from "./utils"; -import { UninstallInputs } from "../../build"; +import { isValidProjectV3, SyncManifestInputs, UninstallInputs } from "../../build"; import { CoreHookContext } from "../../src/core/types"; import * as projectHelper from "../../src/common/projectSettingsHelper"; import * as migrationUtil from "../../src/core/middleware/utils/v3MigrationUtils"; import * as projMigrator from "../../src/core/middleware/projectMigratorV3"; import { VersionSource, VersionState } from "../../src/common/versionMetadata"; import * as pluginGeneratorHelper from "../../src/component/generator/apiSpec/helper"; +import { SyncManifestDriver } from "../../src/component/driver/teamsApp/syncManifest"; const tools = new MockTools(); @@ -5291,5 +5292,17 @@ describe("addPlugin", async () => { const result = await core.projectVersionCheck(inputs); assert.isTrue(result.isErr()); }); + it("sync Manifest - success", async () => { + const core = new FxCore(tools); + const inputs = { + platform: Platform.CLI_HELP, + projectPath: "fake", + env: "dev", + nonInteractive: true, + }; + sandbox.stub(SyncManifestDriver.prototype, "sync").resolves(ok(new Map())); + const res = await core.syncManifest(inputs as SyncManifestInputs); + assert.isTrue(res.isOk()); + }); }); }); diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index 97ec2eee2f..10fe59f082 100644 --- a/packages/vscode-extension/package.json +++ b/packages/vscode-extension/package.json @@ -930,6 +930,12 @@ "title": "%teamstoolkit.commandsTreeViewProvider.getCopilotHelpTitle%", "category": "Teams", "enablement": "fx-extension.isChatParticipantEnabled" + }, + { + "command": "fx-extension.syncManifest", + "title": "%teamstoolkit.commandsTreeViewProvider.syncManifest%", + "category": "Teams", + "enablement": "fx-extension.isSyncManifestEnabled" } ], "taskDefinitions": [ diff --git a/packages/vscode-extension/package.nls.json b/packages/vscode-extension/package.nls.json index 7d2315a121..7b64153997 100644 --- a/packages/vscode-extension/package.nls.json +++ b/packages/vscode-extension/package.nls.json @@ -189,6 +189,7 @@ "teamstoolkit.commandsTreeViewProvider.officeAddIn.documentationDescription": "The documentation about how to create Office Add-in project", "teamstoolkit.commandsTreeViewProvider.officeAddIn.stopDebugTitle": "Stop Previewing Your Office Add-in", "teamstoolkit.commandsTreeViewProvider.officeAddIn.stopDebugDescription": "Stop debugging the Office Add-in project", + "teamstoolkit.commandsTreeViewProvider.syncManifest": "Sync Manifest", "teamstoolkit.common.readMore": "Read more", "teamstoolkit.common.signin": "Sign in", "teamstoolkit.common.signout": "Sign out", diff --git a/packages/vscode-extension/src/extension.ts b/packages/vscode-extension/src/extension.ts index b6062ef35a..f42c6a73dc 100644 --- a/packages/vscode-extension/src/extension.ts +++ b/packages/vscode-extension/src/extension.ts @@ -126,6 +126,7 @@ import { import { buildPackageHandler, publishInDeveloperPortalHandler, + syncManifestHandler, updatePreviewManifest, validateManifestHandler, } from "./handlers/manifestHandlers"; @@ -272,6 +273,11 @@ export async function activate(context: vscode.ExtensionContext) { isOfficeManifestOnlyProject ); + await vscode.commands.executeCommand( + "setContext", + "fx-extension.isSyncManifestEnabled", + featureFlagManager.getBooleanValue(CoreFeatureFlags.SyncManifest) + ); void VsCodeLogInstance.info("Teams Toolkit extension is now active!"); // Don't wait this async method to let it run in background. @@ -682,6 +688,10 @@ function registerTeamsFxCommands(context: vscode.ExtensionContext) { (...args) => Correlator.run(checkCopilotCallback, args) ); context.subscriptions.push(checkCopilotCallbackCmd); + + if (featureFlagManager.getBooleanValue(FeatureFlags.SyncManifest)) { + registerInCommandController(context, "fx-extension.syncManifest", syncManifestHandler); + } } /** diff --git a/packages/vscode-extension/src/handlers/manifestHandlers.ts b/packages/vscode-extension/src/handlers/manifestHandlers.ts index 58d156e47e..fbb8d8868d 100644 --- a/packages/vscode-extension/src/handlers/manifestHandlers.ts +++ b/packages/vscode-extension/src/handlers/manifestHandlers.ts @@ -6,6 +6,7 @@ import { err, FxError, ok, + Platform, Result, SelectFileConfig, SingleSelectConfig, @@ -22,6 +23,7 @@ import { localize } from "../utils/localizeUtils"; import { getSystemInputs } from "../utils/systemEnvUtils"; import { getTriggerFromProperty } from "../utils/telemetryUtils"; import { runCommand } from "./sharedOpts"; +import { SyncManifestInputs } from "@microsoft/teamsfx-core"; export async function validateManifestHandler(args?: any[]): Promise> { ExtTelemetry.sendTelemetryEvent( @@ -33,6 +35,17 @@ export async function validateManifestHandler(args?: any[]): Promise> { + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.SyncManifest, getTriggerFromProperty(args)); + const inputs: SyncManifestInputs = { + platform: Platform.VSCode, + }; + if (args.length > 0) { + inputs["teams-app-id"] = args[0]; + } + return await runCommand(Stage.syncManifest, inputs); +} + export async function buildPackageHandler(...args: unknown[]): Promise> { ExtTelemetry.sendTelemetryEvent(TelemetryEvent.BuildStart, getTriggerFromProperty(args)); return await runCommand(Stage.createAppPackage); diff --git a/packages/vscode-extension/src/handlers/sharedOpts.ts b/packages/vscode-extension/src/handlers/sharedOpts.ts index e7b46e30ec..48063cb45a 100644 --- a/packages/vscode-extension/src/handlers/sharedOpts.ts +++ b/packages/vscode-extension/src/handlers/sharedOpts.ts @@ -106,6 +106,10 @@ export async function runCommand( result = await core.validateApplication(inputs); break; } + case Stage.syncManifest: { + result = await core.syncManifest(inputs); + break; + } case Stage.createAppPackage: { result = await core.createAppPackage(inputs); break; diff --git a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts index 4a08ce887a..73d9750898 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts @@ -40,6 +40,7 @@ export enum TelemetryEvent { ValidateManifestStart = "validate-manifest-start", ValidateManifest = "validate-manifest", ValidateApplication = "validate-application", + SyncManifest = "sync-manifest", UpdatePreviewManifestStart = "update-preview-manifest-start", UpdatePreviewManifest = "update-preview-manifest", diff --git a/packages/vscode-extension/src/uriHandler.ts b/packages/vscode-extension/src/uriHandler.ts index 76d54fa384..3aa722689b 100644 --- a/packages/vscode-extension/src/uriHandler.ts +++ b/packages/vscode-extension/src/uriHandler.ts @@ -7,13 +7,16 @@ import * as vscode from "vscode"; import { codeSpacesAuthComplete } from "./commonlib/common/constant"; import { localize } from "./utils/localizeUtils"; import { TelemetryTriggerFrom } from "./telemetry/extTelemetryEvents"; +import { featureFlagManager, FeatureFlags } from "@microsoft/teamsfx-core"; export let uriEventHandler: UriHandler; enum Referrer { DeveloperPortal = "developerportal", OfficeDoc = "officedoc", + SyncManifest = "syncmanifest", } + interface QueryParams { appId?: string; referrer?: string; @@ -68,7 +71,10 @@ export class UriHandler extends vscode.EventEmitter implements vscod isRunning = false; } ); - } else if (queryParamas.referrer === Referrer.OfficeDoc) { + return; + } + + if (queryParamas.referrer === Referrer.OfficeDoc) { if (!queryParamas.sampleId) { void vscode.window.showErrorMessage( localize("teamstoolkit.devPortalIntegration.invalidLink") @@ -80,6 +86,20 @@ export class UriHandler extends vscode.EventEmitter implements vscod TelemetryTriggerFrom.ExternalUrl, queryParamas.sampleId ); + return; + } + if ( + queryParamas.referrer === Referrer.SyncManifest && + featureFlagManager.getBooleanValue(FeatureFlags.SyncManifest) + ) { + if (!queryParamas.appId) { + void vscode.window.showErrorMessage( + localize("teamstoolkit.devPortalIntegration.invalidLink") + ); + return; + } + void vscode.commands.executeCommand("fx-extension.syncManifest", queryParamas.appId); + return; } } } diff --git a/packages/vscode-extension/test/extension/uriHandler.test.ts b/packages/vscode-extension/test/extension/uriHandler.test.ts index c438452417..b854666b06 100644 --- a/packages/vscode-extension/test/extension/uriHandler.test.ts +++ b/packages/vscode-extension/test/extension/uriHandler.test.ts @@ -3,6 +3,10 @@ import * as sinon from "sinon"; import * as vscode from "vscode"; import { UriHandler, setUriEventHandler } from "../../src/uriHandler"; import { TelemetryTriggerFrom } from "../../src/telemetry/extTelemetryEvents"; +import { featureFlagManager, FeatureFlags, QuestionNames } from "@microsoft/teamsfx-core"; +import { syncManifestHandler } from "../../src/handlers/manifestHandlers"; +import * as shared from "../../src/handlers/sharedOpts"; +import { err, FxError, Inputs, Result, Stage, UserError, ok } from "@microsoft/teamsfx-api"; describe("uri handler", () => { const sandbox = sinon.createSandbox(); @@ -124,6 +128,57 @@ describe("uri handler", () => { "hello-world-teams-tab-and-outlook-add-in" ); }); + it("valid sync manifest uri", async () => { + const handler = new UriHandler(); + const uri = vscode.Uri.parse( + "vscode://TeamsDevApp.ms-teams-vscode-extension?referrer=syncmanifest&appId=123" + ); + const currentFeatureFlag = featureFlagManager.getBooleanValue(FeatureFlags.SyncManifest); + featureFlagManager.setBooleanValue(FeatureFlags.SyncManifest, true); + const executeCommand = sandbox + .stub(vscode.commands, "executeCommand") + .callsFake(async (command: string, ...args: any[]) => { + const res = await syncManifestHandler(args); + chai.assert.isTrue(res.isOk()); + }); + sandbox + .stub(shared, "runCommand") + .callsFake((stage: Stage, inputs: Inputs | undefined): Promise> => { + if (inputs && inputs[QuestionNames.TeamsAppId] === "123") { + return Promise.resolve(ok(undefined)); + } + return Promise.resolve(err(new UserError("ut", "error", "", ""))); + }); + await handler.handleUri(uri); + featureFlagManager.setBooleanValue(FeatureFlags.SyncManifest, currentFeatureFlag); + chai.assert.isTrue(executeCommand.calledOnce); + }); + + it("sync manifest uri, missing app Id", async () => { + const handler = new UriHandler(); + const currentFeatureFlag = featureFlagManager.getBooleanValue(FeatureFlags.SyncManifest); + featureFlagManager.setBooleanValue(FeatureFlags.SyncManifest, true); + const executeCommand = sandbox.stub(vscode.commands, "executeCommand").throws("error"); + const uri = vscode.Uri.parse( + "vscode://TeamsDevApp.ms-teams-vscode-extension?referrer=syncmanifest" + ); + await handler.handleUri(uri); + + const uri1 = vscode.Uri.parse( + "vscode://TeamsDevApp.ms-teams-vscode-extension?referrer=syncmanifest&appId=" + ); + await handler.handleUri(uri1); + featureFlagManager.setBooleanValue(FeatureFlags.SyncManifest, currentFeatureFlag); + chai.assert.isTrue(executeCommand.notCalled); + }); + + it("not registered referrer", async () => { + const handler = new UriHandler(); + const executeCommand = sandbox.stub(vscode.commands, "executeCommand").throws("error"); + const uri = vscode.Uri.parse("vscode://TeamsDevApp.ms-teams-vscode-extension?referrer=fake"); + await handler.handleUri(uri); + chai.assert.isTrue(executeCommand.notCalled); + }); it("set uri handler", async () => { const uriHandler = new UriHandler(); diff --git a/packages/vscode-extension/test/handlers/manifestHandlers.test.ts b/packages/vscode-extension/test/handlers/manifestHandlers.test.ts index 5df6ec92fc..3730d43dad 100644 --- a/packages/vscode-extension/test/handlers/manifestHandlers.test.ts +++ b/packages/vscode-extension/test/handlers/manifestHandlers.test.ts @@ -1,5 +1,5 @@ -import { err, ok } from "@microsoft/teamsfx-api"; -import { UserCancelError } from "@microsoft/teamsfx-core"; +import { err, FxError, Inputs, ok, Result, Stage, UserError } from "@microsoft/teamsfx-api"; +import { QuestionNames, UserCancelError } from "@microsoft/teamsfx-core"; import { assert } from "chai"; import fs from "fs-extra"; import * as sinon from "sinon"; @@ -8,6 +8,7 @@ import * as globalVariables from "../../src/globalVariables"; import { buildPackageHandler, publishInDeveloperPortalHandler, + syncManifestHandler, updatePreviewManifest, validateManifestHandler, } from "../../src/handlers/manifestHandlers"; @@ -116,4 +117,24 @@ describe("Manifest handlers", () => { assert.isTrue(res.isErr()); }); }); + describe("syncManifest", () => { + it("happy", async () => { + const runCommandStub = sandbox.stub(shared, "runCommand").resolves(ok(undefined)); + await syncManifestHandler(); + assert.isTrue(runCommandStub.calledOnce); + }); + it("teams app id in the input", async () => { + const runCommandStub = sandbox + .stub(shared, "runCommand") + .callsFake((stage: Stage, inputs: Inputs | undefined): Promise> => { + if (inputs && inputs[QuestionNames.TeamsAppId] === "teamsAppId") { + return Promise.resolve(ok(undefined)); + } + return Promise.resolve(err(new UserError("ut", "error", "", ""))); + }); + const res = await syncManifestHandler("teamsAppId"); + assert.isTrue(runCommandStub.calledOnce); + assert.isTrue(res.isOk()); + }); + }); }); diff --git a/packages/vscode-extension/test/handlers/sharedOpts.test.ts b/packages/vscode-extension/test/handlers/sharedOpts.test.ts index 1f3bd0badb..0a36ff0748 100644 --- a/packages/vscode-extension/test/handlers/sharedOpts.test.ts +++ b/packages/vscode-extension/test/handlers/sharedOpts.test.ts @@ -194,6 +194,14 @@ describe("SharedOpts", () => { await runCommand(Stage.createEnv); sinon.assert.calledOnce(createEnv); }); + it("syncManifest", async () => { + sandbox.stub(globalVariables, "core").value(new MockCore()); + const syncManifest = sandbox.spy(globalVariables.core, "syncManifest"); + sandbox.stub(vscode.commands, "executeCommand"); + + await runCommand(Stage.syncManifest); + sinon.assert.calledOnce(syncManifest); + }); }); describe("processResult", () => { diff --git a/packages/vscode-extension/test/mocks/mockCore.ts b/packages/vscode-extension/test/mocks/mockCore.ts index 31b2484920..fc31221715 100644 --- a/packages/vscode-extension/test/mocks/mockCore.ts +++ b/packages/vscode-extension/test/mocks/mockCore.ts @@ -114,6 +114,9 @@ export class MockCore { async copilotPluginAddAPI(inputs: Inputs): Promise> { return ok(undefined); } + async syncManifest(inputs: Inputs): Promise> { + return ok(undefined); + } async getProjectInfo( projectPath: string, env: string From 9cc2159010fe3917c7f1c68f6fa1a46771194375 Mon Sep 17 00:00:00 2001 From: rentu <5545529+SLdragon@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:04:38 +0800 Subject: [PATCH 17/52] perf(spec-parser): enable selection of more than 10 APIs for type B (#12278) Co-authored-by: rentu --- packages/fx-core/src/question/create.ts | 3 +- .../fx-core/tests/question/create.test.ts | 122 +++++++++++++++++- 2 files changed, 123 insertions(+), 2 deletions(-) diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index 3c02db1ac1..7fe872b696 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -1105,7 +1105,8 @@ export function apiOperationQuestion( if ( input.length < 1 || (input.length > 10 && - inputs[QuestionNames.CustomCopilotRag] != CustomCopilotRagOptions.customApi().id) + inputs[QuestionNames.CustomCopilotRag] !== CustomCopilotRagOptions.customApi().id && + inputs[QuestionNames.ProjectType] !== ProjectTypeOptions.copilotExtension().id) ) { return getLocalizedString( "core.createProjectQuestion.apiSpec.operation.invalidMessage", diff --git a/packages/fx-core/tests/question/create.test.ts b/packages/fx-core/tests/question/create.test.ts index 9a5c9ca6dc..8084486786 100644 --- a/packages/fx-core/tests/question/create.test.ts +++ b/packages/fx-core/tests/question/create.test.ts @@ -2084,10 +2084,11 @@ describe("scaffold question", () => { assert.isUndefined(res); }); - it(" validate operations successfully due to length limitation", async () => { + it(" validate operations successfully with copilot project", async () => { const question = apiOperationQuestion(); const inputs: Inputs = { platform: Platform.VSCode, + [QuestionNames.ProjectType]: ProjectTypeOptions.copilotExtension().id, [QuestionNames.ApiSpecLocation]: "apispec", supportedApisFromApiSpec: [ { @@ -2199,6 +2200,125 @@ describe("scaffold question", () => { inputs ); + assert.isUndefined(res); + }); + + it(" validate operations successfully due to length limitation for sme project", async () => { + const question = apiOperationQuestion(); + const inputs: Inputs = { + platform: Platform.VSCode, + [QuestionNames.ApiSpecLocation]: "apispec", + [QuestionNames.ProjectType]: ProjectTypeOptions.me().id, + supportedApisFromApiSpec: [ + { + id: "operation1", + label: "operation1", + groupName: "1", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation2", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation3", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation4", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation5", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation6", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation7", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation8", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation9", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation10", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + { + id: "operation11", + label: "operation2", + groupName: "2", + data: { + serverUrl: "https://server1", + }, + }, + ], + }; + + const validationSchema = question.validation as FuncValidation; + const res = await validationSchema.validFunc!( + [ + "operation1", + "operation2", + "operation3", + "operation4", + "operation5", + "operation6", + "operation7", + "operation8", + "operation9", + "operation10", + "operation11", + ], + inputs + ); + expect(res).to.equal( "11 API(s) selected. You can select at least one and at most 10 APIs." ); From 57d96b8b533093b88206a6b52c7dbdbba707e7bb Mon Sep 17 00:00:00 2001 From: Hui Miao Date: Tue, 27 Aug 2024 17:04:14 +0800 Subject: [PATCH 18/52] refactor: add api domain to the identifierUris (#12280) --- .../aad.manifest.json.tpl | 7 ++++++- .../apiSpecificationFile/repair.dev.yml.tpl | 9 +++++++-- .../infra/azure.bicep.tpl | 6 ++++++ .../aad.manifest.json.tpl | 7 ++++++- .../apiSpecificationFile/repair.dev.yml.tpl | 9 +++++++-- .../infra/azure.bicep.tpl | 6 ++++++ .../aad.manifest.json.tpl | 11 ++++++++--- .../apiSpecificationFile/repair.dev.yml.tpl | 9 +++++++-- .../infra/azure.bicep.tpl | 6 ++++++ 9 files changed, 59 insertions(+), 11 deletions(-) diff --git a/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl b/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl index b9e9389c3c..99ac66c581 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/aad.manifest.json.tpl @@ -43,8 +43,13 @@ "url": "https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect", "type": "Web" } - ], + ], "identifierUris": [ +{{#MicrosoftEntra}} + "api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}" +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} "api://${{AAD_APP_CLIENT_ID}}" +{{/MicrosoftEntra}} ] } \ No newline at end of file diff --git a/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl b/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl index 4288030123..6dd6d35f3c 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl @@ -6,13 +6,18 @@ info: servers: - url: ${{OPENAPI_SERVER_URL}}/api description: The repair api server - components: securitySchemes: {{#MicrosoftEntra}} aadAuthCode: type: oauth2 - description: AAD configuration for the repair service + description: AAD configuration for the repair service + flows: + authorizationCode: + authorizationUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/authorize + tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token + scopes: + api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records {{/MicrosoftEntra}} {{^MicrosoftEntra}} oAuth2AuthCode: diff --git a/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl b/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl index 6bf0871965..3f04a0d731 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl @@ -76,6 +76,9 @@ resource functionApp 'Microsoft.Web/sites@2021-02-01' = { var apiEndpoint = 'https://${functionApp.properties.defaultHostName}' var oauthAuthority = uri(aadAppOauthAuthorityHost, aadAppTenantId) var aadApplicationIdUri = 'api://${aadAppClientId}' +{{#MicrosoftEntra}} +var aadApplicationIdUriWithDomain = 'api://${functionApp.properties.defaultHostName}/${aadAppClientId}' +{{/MicrosoftEntra}} // Configure Azure Functions to use Azure AD for authentication. resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { @@ -97,6 +100,9 @@ resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { allowedAudiences: [ aadAppClientId aadApplicationIdUri +{{#MicrosoftEntra}} + aadApplicationIdUriWithDomain +{{/MicrosoftEntra}} ] } } diff --git a/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl b/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl index b9e9389c3c..99ac66c581 100644 --- a/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/aad.manifest.json.tpl @@ -43,8 +43,13 @@ "url": "https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect", "type": "Web" } - ], + ], "identifierUris": [ +{{#MicrosoftEntra}} + "api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}" +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} "api://${{AAD_APP_CLIENT_ID}}" +{{/MicrosoftEntra}} ] } \ No newline at end of file diff --git a/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl b/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl index 4288030123..6dd6d35f3c 100644 --- a/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl @@ -6,13 +6,18 @@ info: servers: - url: ${{OPENAPI_SERVER_URL}}/api description: The repair api server - components: securitySchemes: {{#MicrosoftEntra}} aadAuthCode: type: oauth2 - description: AAD configuration for the repair service + description: AAD configuration for the repair service + flows: + authorizationCode: + authorizationUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/authorize + tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token + scopes: + api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records {{/MicrosoftEntra}} {{^MicrosoftEntra}} oAuth2AuthCode: diff --git a/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl b/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl index 6bf0871965..3f04a0d731 100644 --- a/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl @@ -76,6 +76,9 @@ resource functionApp 'Microsoft.Web/sites@2021-02-01' = { var apiEndpoint = 'https://${functionApp.properties.defaultHostName}' var oauthAuthority = uri(aadAppOauthAuthorityHost, aadAppTenantId) var aadApplicationIdUri = 'api://${aadAppClientId}' +{{#MicrosoftEntra}} +var aadApplicationIdUriWithDomain = 'api://${functionApp.properties.defaultHostName}/${aadAppClientId}' +{{/MicrosoftEntra}} // Configure Azure Functions to use Azure AD for authentication. resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { @@ -97,6 +100,9 @@ resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { allowedAudiences: [ aadAppClientId aadApplicationIdUri +{{#MicrosoftEntra}} + aadApplicationIdUriWithDomain +{{/MicrosoftEntra}} ] } } diff --git a/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl b/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl index 96d7917c6d..99ac66c581 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/aad.manifest.json.tpl @@ -20,7 +20,7 @@ { "adminConsentDescription": "Allows Copilot to read repair records on your behalf.", "adminConsentDisplayName": "Read repairs", - "id": "${{TEAMS_APP_ID}}", + "id": "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}", "isEnabled": true, "type": "User", "userConsentDescription": "Allows Copilot to read repair records.", @@ -33,7 +33,7 @@ { "appId": "ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b", "permissionIds": [ - "${{TEAMS_APP_ID}}" + "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}" ] } ], @@ -43,8 +43,13 @@ "url": "https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect", "type": "Web" } - ], + ], "identifierUris": [ +{{#MicrosoftEntra}} + "api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}" +{{/MicrosoftEntra}} +{{^MicrosoftEntra}} "api://${{AAD_APP_CLIENT_ID}}" +{{/MicrosoftEntra}} ] } \ No newline at end of file diff --git a/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl b/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl index 4288030123..6dd6d35f3c 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/appPackage/apiSpecificationFile/repair.dev.yml.tpl @@ -6,13 +6,18 @@ info: servers: - url: ${{OPENAPI_SERVER_URL}}/api description: The repair api server - components: securitySchemes: {{#MicrosoftEntra}} aadAuthCode: type: oauth2 - description: AAD configuration for the repair service + description: AAD configuration for the repair service + flows: + authorizationCode: + authorizationUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/authorize + tokenUrl: https://login.microsoftonline.com/${{AAD_APP_TENANT_ID}}/oauth2/v2.0/token + scopes: + api://${{OPENAPI_SERVER_DOMAIN}}/${{AAD_APP_CLIENT_ID}}/repairs_read: Read repair records {{/MicrosoftEntra}} {{^MicrosoftEntra}} oAuth2AuthCode: diff --git a/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl b/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl index 6bf0871965..3f04a0d731 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/infra/azure.bicep.tpl @@ -76,6 +76,9 @@ resource functionApp 'Microsoft.Web/sites@2021-02-01' = { var apiEndpoint = 'https://${functionApp.properties.defaultHostName}' var oauthAuthority = uri(aadAppOauthAuthorityHost, aadAppTenantId) var aadApplicationIdUri = 'api://${aadAppClientId}' +{{#MicrosoftEntra}} +var aadApplicationIdUriWithDomain = 'api://${functionApp.properties.defaultHostName}/${aadAppClientId}' +{{/MicrosoftEntra}} // Configure Azure Functions to use Azure AD for authentication. resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { @@ -97,6 +100,9 @@ resource authSettings 'Microsoft.Web/sites/config@2021-02-01' = { allowedAudiences: [ aadAppClientId aadApplicationIdUri +{{#MicrosoftEntra}} + aadApplicationIdUriWithDomain +{{/MicrosoftEntra}} ] } } From 05d4f617608f503b09898bb65f0275388fe7ebf8 Mon Sep 17 00:00:00 2001 From: Siyuan Chen <67082457+ayachensiyuan@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:08:54 +0800 Subject: [PATCH 19/52] test: add meeting validation (#12284) * test: add meeting validation --------- Co-authored-by: Ivan_Chen --- ...ple-localdebug-hello-world-meeting.test.ts | 10 ++- ...le-remotedebug-hello-world-meeting.test.ts | 10 ++- .../tests/src/utils/playwrightOperation.ts | 77 +++++++++++++++---- 3 files changed, 79 insertions(+), 18 deletions(-) diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-hello-world-meeting.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-hello-world-meeting.test.ts index 55c40ed294..9a4309d0c0 100644 --- a/packages/tests/src/ui-test/samples/sample-localdebug-hello-world-meeting.test.ts +++ b/packages/tests/src/ui-test/samples/sample-localdebug-hello-world-meeting.test.ts @@ -10,6 +10,7 @@ import { TemplateProject, LocalDebugTaskLabel } from "../../utils/constants"; import { initTeamsPage, reopenTeamsPage, + validateMeeting, } from "../../utils/playwrightOperation"; import { CaseFactory } from "./sampleCaseFactory"; import { Env } from "../../utils/env"; @@ -59,6 +60,14 @@ class MyFirstMeetingTestCase extends CaseFactory { } ); } + + override async onCliValidate(page: Page): Promise { + return await validateMeeting(page, Env.username); + } + + override async onValidate(page: Page): Promise { + return await validateMeeting(page, Env.username); + } } new MyFirstMeetingTestCase( @@ -70,7 +79,6 @@ new MyFirstMeetingTestCase( { teamsAppName: "fxuiMyFirslocal", type: "meeting", - skipValidation: true, debug: "cli", } ).test(); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-hello-world-meeting.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-hello-world-meeting.test.ts index d3dc18aa14..8af8b7ee75 100644 --- a/packages/tests/src/ui-test/samples/sample-remotedebug-hello-world-meeting.test.ts +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-hello-world-meeting.test.ts @@ -7,7 +7,10 @@ import { Page } from "playwright"; import { TemplateProject } from "../../utils/constants"; -import { initTeamsPage } from "../../utils/playwrightOperation"; +import { + initTeamsPage, + validateMeeting, +} from "../../utils/playwrightOperation"; import { CaseFactory } from "./sampleCaseFactory"; import { Env } from "../../utils/env"; import { SampledebugContext } from "./sampledebugContext"; @@ -32,6 +35,10 @@ class MyFirstMeetingTestCase extends CaseFactory { } ); } + + override async onValidate(page: Page): Promise { + return await validateMeeting(page, Env.username); + } } new MyFirstMeetingTestCase( @@ -43,6 +50,5 @@ new MyFirstMeetingTestCase( { teamsAppName: "fxuiMyFirsdev", type: "meeting", - skipValidation: true, } ).test(); diff --git a/packages/tests/src/utils/playwrightOperation.ts b/packages/tests/src/utils/playwrightOperation.ts index dfb0f80e5f..18d81cc295 100644 --- a/packages/tests/src/utils/playwrightOperation.ts +++ b/packages/tests/src/utils/playwrightOperation.ts @@ -432,22 +432,50 @@ export async function initTeamsPage( } // default - const addBtn = await page?.waitForSelector("button>span:has-text('Add')"); - await addBtn?.click(); - await page.waitForTimeout(Timeout.shortTimeLoading); + if (options?.type !== "meeting") { + console.log("click add button"); + const addBtn = await page?.waitForSelector( + "button>span:has-text('Add')" + ); + await addBtn?.click(); + await page.waitForTimeout(Timeout.shortTimeLoading); + } else { + // add in meeting + console.log("click showListBtn button"); + const showListBtn = await page?.waitForSelector( + ".ui-splitbutton>button" + ); + await showListBtn?.click(); + await page.waitForTimeout(Timeout.shortTimeLoading); - if (options?.type === "meeting") { - // verify add page is closed - try { - await page?.waitForSelector( - `h1:has-text('Add ${options?.teamsAppName} to a team')` - ); - } catch (error) { - await page?.waitForSelector( - `h1:has-text('Add ${options?.teamsAppName} to a meeting')` - ); - } - // TODO: need to add more logic + console.log("click addInMeetingBtn button"); + const addInMeetingBtn = await page?.waitForSelector( + ".ui-popup__content li:has-text('Add to a meeting')" + ); + await addInMeetingBtn?.click(); + await page.waitForTimeout(Timeout.shortTimeLoading); + + console.log("input meeting name in search box"); + const inputBox = await page.waitForSelector( + ".fui-DialogBody .ui-dropdown input.ui-box" + ); + await inputBox.fill("testing"); + await page.waitForTimeout(Timeout.shortTimeLoading); + const testingTab = await page.waitForSelector( + "ul li:has-text('testing')" + ); + await testingTab?.click(); + await page.waitForTimeout(Timeout.shortTimeLoading); + + const setUpBtn = await page?.waitForSelector( + 'button span:has-text("Set up a tab")' + ); + await setUpBtn?.click(); + console.log("click 'set up a tab' button"); + await page.waitForTimeout(Timeout.shortTimeLoading); + await page?.waitForSelector('button span:has-text("Set up a tab")', { + state: "detached", + }); console.log("successful to add teams app!!!"); return; } @@ -527,6 +555,7 @@ export async function initTeamsPage( return page; } catch (error) { + console.log(error); await page.screenshot({ path: getPlaywrightScreenshotPath("error"), fullPage: true, @@ -2955,3 +2984,21 @@ export async function validateRetailDashboard(page: Page) { throw error; } } + +export async function validateMeeting(page: Page, name: string) { + try { + console.log("start to verify meeting"); + const frameElementHandle = await page.waitForSelector( + `iframe[name="embedded-page-container"]` + ); + const frame = await frameElementHandle?.contentFrame(); + await frame?.waitForSelector(`#root>div>p:has-text('${name}')`); + console.log("meeting tab loaded successfully"); + } catch (error) { + await page.screenshot({ + path: getPlaywrightScreenshotPath("error"), + fullPage: true, + }); + throw error; + } +} From 3b58996eaab406334abff8bcf7277ec551f86323 Mon Sep 17 00:00:00 2001 From: Siyuan Chen <67082457+ayachensiyuan@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:09:25 +0800 Subject: [PATCH 20/52] test: fix ui test (#12285) * test: fix ui test --------- Co-authored-by: Ivan_Chen --- ...bug-aiagent-new-azureopenai-bot-py.test.ts | 22 +++++++++++----- ...bug-aiagent-new-azureopenai-bot-ts.test.ts | 22 +++++++++++----- ...edebug-aiagent-new-azureopenai-bot.test.ts | 26 ++++++++++++++----- ...otedebug-aiagent-new-openai-bot-py.test.ts | 1 + ...otedebug-aiagent-new-openai-bot-ts.test.ts | 1 + ...remotedebug-aiagent-new-openai-bot.test.ts | 5 +++- .../sample-remotedebug-bot-sso-docker.test.ts | 1 + .../sample-remotedebug-bot-sso.test.ts | 1 + .../tests/src/utils/playwrightOperation.ts | 1 + packages/tests/src/utils/vscodeOperation.ts | 13 +++++++--- 10 files changed, 69 insertions(+), 24 deletions(-) diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-py.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-py.test.ts index be2d271b83..4b8876b523 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-py.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-py.test.ts @@ -72,6 +72,7 @@ describe("Remote debug Tests", function () { await createNewProject("aiagentnew", appName, { lang: "Python", aiType: "Azure OpenAI", + aiManagement: "Build from Scratch", }); validateFileExist(projectPath, "src/app.py"); const envPath = path.resolve(projectPath, "env", ".env.dev.user"); @@ -114,12 +115,21 @@ describe("Remote debug Tests", function () { expectedReplyMessage: "Remind me to attend the team meeting next Monday", }); - await validateWelcomeAndReplyBot(page, { - hasCommandReplyValidation: true, - botCommand: "Show all tasks", - expectedReplyMessage: "current tasks", - timeout: Timeout.longTimeWait, - }); + try { + await validateWelcomeAndReplyBot(page, { + hasCommandReplyValidation: true, + botCommand: "Show all tasks", + expectedReplyMessage: "task:", + timeout: Timeout.longTimeWait, + }); + } catch (error) { + await validateWelcomeAndReplyBot(page, { + hasCommandReplyValidation: true, + botCommand: "Show all tasks", + expectedReplyMessage: "I'm sorry", + timeout: Timeout.longTimeWait, + }); + } } else { await validateWelcomeAndReplyBot(page, { hasWelcomeMessage: false, diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-ts.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-ts.test.ts index b277e9fb91..7065610df2 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-ts.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot-ts.test.ts @@ -71,6 +71,7 @@ describe("Remote debug Tests", function () { await createNewProject("aiagentnew", appName, { lang: "TypeScript", aiType: "Azure OpenAI", + aiManagement: "Build from Scratch", }); validateFileExist(projectPath, "src/index.ts"); const envPath = path.resolve(projectPath, "env", ".env.dev.user"); @@ -111,12 +112,21 @@ describe("Remote debug Tests", function () { expectedReplyMessage: "Remind me to attend the team meeting next Monday", }); - await validateWelcomeAndReplyBot(page, { - hasCommandReplyValidation: true, - botCommand: "Show all tasks", - expectedReplyMessage: "current tasks", - timeout: Timeout.longTimeWait, - }); + try { + await validateWelcomeAndReplyBot(page, { + hasCommandReplyValidation: true, + botCommand: "Show all tasks", + expectedReplyMessage: "task:", + timeout: Timeout.longTimeWait, + }); + } catch (error) { + await validateWelcomeAndReplyBot(page, { + hasCommandReplyValidation: true, + botCommand: "Show all tasks", + expectedReplyMessage: "I'm sorry", + timeout: Timeout.longTimeWait, + }); + } } else { await validateWelcomeAndReplyBot(page, { hasWelcomeMessage: false, diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot.test.ts index e1a1e8fc6d..cbd60b3396 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-azureopenai-bot.test.ts @@ -68,7 +68,10 @@ describe("Remote debug Tests", function () { }, async function () { const driver = VSBrowser.instance.driver; - await createNewProject("aiagentnew", appName, { aiType: "Azure OpenAI" }); + await createNewProject("aiagentnew", appName, { + aiType: "Azure OpenAI", + aiManagement: "Build from Scratch", + }); validateFileExist(projectPath, "src/index.js"); const envPath = path.resolve(projectPath, "env", ".env.dev.user"); const isRealKey = OpenAiKey.azureOpenAiKey ? true : false; @@ -108,12 +111,21 @@ describe("Remote debug Tests", function () { expectedReplyMessage: "Remind me to attend the team meeting next Monday", }); - await validateWelcomeAndReplyBot(page, { - hasCommandReplyValidation: true, - botCommand: "Show all tasks", - expectedReplyMessage: "current tasks", - timeout: Timeout.longTimeWait, - }); + try { + await validateWelcomeAndReplyBot(page, { + hasCommandReplyValidation: true, + botCommand: "Show all tasks", + expectedReplyMessage: "task:", + timeout: Timeout.longTimeWait, + }); + } catch (error) { + await validateWelcomeAndReplyBot(page, { + hasCommandReplyValidation: true, + botCommand: "Show all tasks", + expectedReplyMessage: "I'm sorry", + timeout: Timeout.longTimeWait, + }); + } } else { await validateWelcomeAndReplyBot(page, { hasWelcomeMessage: false, diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-py.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-py.test.ts index 013ff983d6..1bb333d936 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-py.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-py.test.ts @@ -72,6 +72,7 @@ describe("Remote debug Tests", function () { await createNewProject("aiagentnew", appName, { lang: "Python", aiType: "OpenAI", + aiManagement: "Build from Scratch", }); validateFileExist(projectPath, "src/app.py"); const envPath = path.resolve(projectPath, "env", ".env.dev.user"); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-ts.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-ts.test.ts index 423c7078a2..8506c7df16 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-ts.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot-ts.test.ts @@ -71,6 +71,7 @@ describe("Remote debug Tests", function () { await createNewProject("aiagentnew", appName, { lang: "TypeScript", aiType: "OpenAI", + aiManagement: "Build from Scratch", }); validateFileExist(projectPath, "src/index.ts"); const envPath = path.resolve(projectPath, "env", ".env.dev.user"); diff --git a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot.test.ts b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot.test.ts index 19e2e4a8de..035f75909e 100644 --- a/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot.test.ts +++ b/packages/tests/src/ui-test/remotedebug/remotedebug-aiagent-new-openai-bot.test.ts @@ -68,7 +68,10 @@ describe("Remote debug Tests", function () { }, async function () { const driver = VSBrowser.instance.driver; - await createNewProject("aiagentnew", appName, { aiType: "OpenAI" }); + await createNewProject("aiagentnew", appName, { + aiType: "OpenAI", + aiManagement: "Build from Scratch", + }); validateFileExist(projectPath, "src/index.js"); const envPath = path.resolve(projectPath, "env", ".env.dev.user"); editDotEnvFile(envPath, "SECRET_OPENAI_API_KEY", "fake"); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso-docker.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso-docker.test.ts index b15dc98c5b..5ad3993845 100644 --- a/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso-docker.test.ts +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso-docker.test.ts @@ -16,6 +16,7 @@ class BotSSODockerTestCase extends CaseFactory { return await validateBot(page, { botCommand: "show", expected: Env.displayName, + consentPrompt: true, }); } } diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso.test.ts index ef781b91e6..1b4b7c7bd5 100644 --- a/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso.test.ts +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-bot-sso.test.ts @@ -16,6 +16,7 @@ class BotSSOTestCase extends CaseFactory { return await validateBot(page, { botCommand: "show", expected: Env.displayName, + consentPrompt: true, }); } } diff --git a/packages/tests/src/utils/playwrightOperation.ts b/packages/tests/src/utils/playwrightOperation.ts index 18d81cc295..e2a35af4b7 100644 --- a/packages/tests/src/utils/playwrightOperation.ts +++ b/packages/tests/src/utils/playwrightOperation.ts @@ -2339,6 +2339,7 @@ export async function validateBasicDashboardTab(page: Page) { export async function validateDashboardTab(page: Page) { try { console.log("start to verify dashboard tab"); + await page.waitForTimeout(Timeout.shortTimeLoading); const frameElementHandle = await page.waitForSelector( `iframe[name="embedded-page-container"]` ); diff --git a/packages/tests/src/utils/vscodeOperation.ts b/packages/tests/src/utils/vscodeOperation.ts index cb91ee0832..65597d2217 100644 --- a/packages/tests/src/utils/vscodeOperation.ts +++ b/packages/tests/src/utils/vscodeOperation.ts @@ -547,6 +547,7 @@ export async function createNewProject( lang?: "JavaScript" | "TypeScript" | "Python"; spfxFrameworkType?: "React" | "None" | "Minimal"; aiType?: "Azure OpenAI" | "OpenAI"; + aiManagement?: "Build from Scratch" | "Build with Assistants API"; testRootFolder?: string; appNameCopySuffix?: string; dataOption?: @@ -566,6 +567,9 @@ export async function createNewProject( ? option.testRootFolder : path.resolve(__dirname, "../../resource/"); const aiType = option?.aiType ? option.aiType : "OpenAI"; + const aiManagement = option?.aiManagement + ? option.aiManagement + : "Build with Assistants API"; const spfxFrameworkType = option?.spfxFrameworkType ? option.spfxFrameworkType : "React"; @@ -863,13 +867,14 @@ export async function createNewProject( await driver.sleep(Timeout.input); await input.selectQuickPick("AI Agent"); await driver.sleep(Timeout.input); - await input.selectQuickPick("Build with Assistants API"); + await input.selectQuickPick(aiManagement); await driver.sleep(Timeout.input); // Choose programming language await input.selectQuickPick(lang); await driver.sleep(Timeout.input); - // input fake OpenAI Key - await input.setText("fake"); + await input.setText(aiType); + await driver.sleep(Timeout.input); + await input.confirm(); await driver.sleep(Timeout.input); await input.confirm(); await driver.sleep(Timeout.input); @@ -880,7 +885,7 @@ export async function createNewProject( await driver.sleep(Timeout.input); await input.selectQuickPick("AI Agent"); await driver.sleep(Timeout.input); - await input.selectQuickPick("Build New"); + await input.selectQuickPick(aiManagement); await driver.sleep(Timeout.input); // Choose programming language await input.selectQuickPick(lang); From db09ea669fad5ff9d9f23089bf26e7e4d126005e Mon Sep 17 00:00:00 2001 From: Zhijie Huang Date: Wed, 28 Aug 2024 10:45:30 +0800 Subject: [PATCH 21/52] ci: update template version (#12097) --- templates/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/package.json b/templates/package.json index 76ad166bb9..1d459eb0d4 100644 --- a/templates/package.json +++ b/templates/package.json @@ -1,6 +1,6 @@ { "name": "templates", - "version": "4.2.2", + "version": "4.3.0-alpha", "private": "true", "license": "MIT", "scripts": { From 06c33429ce09adf2e502b24aee22e72d94602206 Mon Sep 17 00:00:00 2001 From: HuihuiWu-Microsoft <73154171+HuihuiWu-Microsoft@users.noreply.github.com> Date: Wed, 28 Aug 2024 14:20:20 +0800 Subject: [PATCH 22/52] ci: add localization pipeline yml file (#12283) --- .azure-pipelines/localization.yml | 81 +++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .azure-pipelines/localization.yml diff --git a/.azure-pipelines/localization.yml b/.azure-pipelines/localization.yml new file mode 100644 index 0000000000..6f5509921d --- /dev/null +++ b/.azure-pipelines/localization.yml @@ -0,0 +1,81 @@ +# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool. +# Please make sure to check all the converted content, it is your team's responsibility to make sure that the pipeline is still valid and functions as expected. +# This pipeline will be extended to the MicroBuild template +trigger: none +resources: + repositories: + - repository: self + type: git + ref: refs/heads/dev + - repository: MicroBuildTemplate + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release +name: $(Date:yyyyMMdd).$(Rev:r) +variables: +- name: 1espt.codesignvalidation.enforced + value: false +- name: GitHubPat + value: +- name: OneLocBuildPat + value: +- name: PipelineClassification_Audited + value: Production +- name: PipelineGovernanceStatus_Audited + value: true +- name: policy_service.build_task_injection.enabled + value: true +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate + parameters: + sdl: + sourceAnalysisPool: + name: VSEngSS-MicroBuild2022-1ES + image: server2022-microbuildVS2022-1es + os: windows + pool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + customBuildTags: + - ES365AIMigrationTooling + stages: + - stage: stage + jobs: + - job: Job_1 + displayName: Agent job 1 + pool: + name: VSEngSS-MicroBuild2022-1ES + templateContext: + outputs: + - output: pipelineArtifact + displayName: 'Publish Artifact: drop' + steps: + - checkout: self + clean: true + fetchTags: false + - task: NuGetAuthenticate@1 + displayName: NuGet Authenticate + inputs: + nuGetServiceConnections: OSSCG Feed - Microsoft approved OSS packages + - task: cesve.one-loc-build.one-loc-build.OneLocBuild@2 + displayName: 'Localization Build: Localize/LocProject.json' + inputs: + isCreatePrSelected: true + repoType: gitHub + isShouldReusePrSelected: true + isAutoCompletePrSelected: false + packageSourceAuth: patAuth + - task: PowerShell@2 + displayName: Copy zh json files for VSC + inputs: + targetType: inline + script: | + # Write your PowerShell commands here. + Write-Host "Copying zh-Hans & zh-Hant to zh-cn & zh-tw under vscode-extension for VS Code" + Set-Location -Path ".\packages\fx-core\resource" + Copy-Item ".\package.nls.zh-Hans.json" -Destination ".\package.nls.zh-cn.json" + Copy-Item ".\package.nls.zh-Hant.json" -Destination ".\package.nls.zh-tw.json" + Set-Location -Path "..\..\vscode-extension" + Copy-Item ".\package.nls.zh-Hans.json" -Destination ".\package.nls.zh-cn.json" + Copy-Item ".\package.nls.zh-Hant.json" -Destination ".\package.nls.zh-tw.json" \ No newline at end of file From 4642e2eb07c3d34dc92cb56314066b0141aa8291 Mon Sep 17 00:00:00 2001 From: anchenyi <162104711+anchenyi@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:11:18 +0800 Subject: [PATCH 23/52] refactor: sync manifest's telemetry and question model (#12282) * refactor: sync manifest's telemetry and question model --- packages/fx-core/src/question/other.ts | 16 +++----- packages/fx-core/tests/core/FxCore.test.ts | 40 +++++++++++++++++++ .../src/handlers/manifestHandlers.ts | 2 +- .../src/telemetry/extTelemetry.ts | 2 + .../src/telemetry/extTelemetryEvents.ts | 1 + .../test/extTelemetry/extTelemetry.test.ts | 5 +++ 6 files changed, 55 insertions(+), 11 deletions(-) diff --git a/packages/fx-core/src/question/other.ts b/packages/fx-core/src/question/other.ts index ac8d5c4665..9794571593 100644 --- a/packages/fx-core/src/question/other.ts +++ b/packages/fx-core/src/question/other.ts @@ -15,6 +15,7 @@ import { SingleSelectQuestion, TextInputQuestion, FolderQuestion, + CLIPlatforms, } from "@microsoft/teamsfx-api"; import fs from "fs-extra"; import * as path from "path"; @@ -44,6 +45,7 @@ import { apiSpecLocationQuestion, } from "./create"; import { UninstallInputs } from "./inputs"; +import * as os from "os"; export function listCollaboratorQuestionNode(): IQTreeNode { const selectTeamsAppNode = selectTeamsAppManifestQuestionNode(); @@ -1080,10 +1082,10 @@ export function syncManifestQuestionNode(): IQTreeNode { title: getLocalizedString("core.syncManifest.projectPath"), cliDescription: "Project Path", placeholder: "./", - default: "./", - }, - condition: () => { - return true; + default: (inputs: Inputs) => + CLIPlatforms.includes(inputs.platform) + ? "./" + : path.join(os.homedir(), ConstantString.RootFolder), }, }, { @@ -1093,9 +1095,6 @@ export function syncManifestQuestionNode(): IQTreeNode { title: getLocalizedString("core.syncManifest.env"), cliDescription: "Target Teams Toolkit Environment", }, - condition: () => { - return true; - }, }, { data: { @@ -1104,9 +1103,6 @@ export function syncManifestQuestionNode(): IQTreeNode { title: getLocalizedString("core.syncManifest.teamsAppId"), cliDescription: "Teams App ID (optional)", }, - condition: () => { - return true; - }, }, ], }; diff --git a/packages/fx-core/tests/core/FxCore.test.ts b/packages/fx-core/tests/core/FxCore.test.ts index 82b278004c..ecd8c0a3c2 100644 --- a/packages/fx-core/tests/core/FxCore.test.ts +++ b/packages/fx-core/tests/core/FxCore.test.ts @@ -10,6 +10,7 @@ import { WarningType, } from "@microsoft/m365-spec-parser"; import { + CLIPlatforms, DeclarativeCopilotManifestSchema, FxError, IQTreeNode, @@ -107,6 +108,9 @@ import * as projMigrator from "../../src/core/middleware/projectMigratorV3"; import { VersionSource, VersionState } from "../../src/common/versionMetadata"; import * as pluginGeneratorHelper from "../../src/component/generator/apiSpec/helper"; import { SyncManifestDriver } from "../../src/component/driver/teamsApp/syncManifest"; +import { ConstantString } from "../../src/common/constants"; +import { SyncManifestArgs } from "../../src/component/driver/teamsApp/interfaces/SyncManifest"; +import { WrapDriverContext } from "../../src/component/driver/util/wrapUtil"; const tools = new MockTools(); @@ -5304,5 +5308,41 @@ describe("addPlugin", async () => { const res = await core.syncManifest(inputs as SyncManifestInputs); assert.isTrue(res.isOk()); }); + it("sync Manifest - default CLI project path", async () => { + const core = new FxCore(tools); + const inputs = { + platform: Platform.CLI_HELP, + env: "dev", + nonInteractive: true, + ignoreLockByUT: true, + }; + const defaultProjectPath = "./"; + sandbox + .stub(SyncManifestDriver.prototype, "sync") + .callsFake(async (args: SyncManifestArgs, context: WrapDriverContext) => { + assert.isTrue(args.projectPath === defaultProjectPath); + return ok(new Map()); + }); + const res = await core.syncManifest(inputs as SyncManifestInputs); + assert.isTrue(res.isOk()); + }); + it("sync Manifest - default VSC project path", async () => { + const core = new FxCore(tools); + const inputs = { + platform: Platform.VSCode, + env: "dev", + nonInteractive: true, + ignoreLockByUT: true, + }; + const defaultProjectPath = path.join(os.homedir(), ConstantString.RootFolder); + sandbox + .stub(SyncManifestDriver.prototype, "sync") + .callsFake(async (args: SyncManifestArgs, context: WrapDriverContext) => { + assert.isTrue(args.projectPath === defaultProjectPath); + return ok(new Map()); + }); + const res = await core.syncManifest(inputs as SyncManifestInputs); + assert.isTrue(res.isOk()); + }); }); }); diff --git a/packages/vscode-extension/src/handlers/manifestHandlers.ts b/packages/vscode-extension/src/handlers/manifestHandlers.ts index fbb8d8868d..56a378a264 100644 --- a/packages/vscode-extension/src/handlers/manifestHandlers.ts +++ b/packages/vscode-extension/src/handlers/manifestHandlers.ts @@ -36,7 +36,7 @@ export async function validateManifestHandler(args?: any[]): Promise> { - ExtTelemetry.sendTelemetryEvent(TelemetryEvent.SyncManifest, getTriggerFromProperty(args)); + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.SyncManifestStart, getTriggerFromProperty(args)); const inputs: SyncManifestInputs = { platform: Platform.VSCode, }; diff --git a/packages/vscode-extension/src/telemetry/extTelemetry.ts b/packages/vscode-extension/src/telemetry/extTelemetry.ts index c0f18efb97..cd5223cabe 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetry.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetry.ts @@ -78,6 +78,8 @@ export namespace ExtTelemetry { return TelemetryEvent.DeployAadManifest; case Stage.copilotPluginAddAPI: return TelemetryEvent.CopilotPluginAddAPI; + case Stage.syncManifest: + return TelemetryEvent.SyncManifest; default: return undefined; } diff --git a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts index 73d9750898..2d42af9517 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts @@ -40,6 +40,7 @@ export enum TelemetryEvent { ValidateManifestStart = "validate-manifest-start", ValidateManifest = "validate-manifest", ValidateApplication = "validate-application", + SyncManifestStart = "sync-manifest-start", SyncManifest = "sync-manifest", UpdatePreviewManifestStart = "update-preview-manifest-start", diff --git a/packages/vscode-extension/test/extTelemetry/extTelemetry.test.ts b/packages/vscode-extension/test/extTelemetry/extTelemetry.test.ts index 42f6f14e25..c9a26a7eb7 100644 --- a/packages/vscode-extension/test/extTelemetry/extTelemetry.test.ts +++ b/packages/vscode-extension/test/extTelemetry/extTelemetry.test.ts @@ -92,6 +92,11 @@ describe("ExtTelemetry", () => { chai.expect(ExtTelemetry.stageToEvent(stage)).equals(TelemetryEvent.CopilotPluginAddAPI); }); + it("Stage.syncManifest", () => { + const stage = Stage.syncManifest; + chai.expect(ExtTelemetry.stageToEvent(stage)).equals(TelemetryEvent.SyncManifest); + }); + it("unknown", () => { const stage = "unknown"; chai.expect(ExtTelemetry.stageToEvent(stage as Stage)).equals(undefined); From e70f211d743b2a0495d91a190b82438c2088e5cf Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Wed, 28 Aug 2024 15:35:24 +0800 Subject: [PATCH 24/52] perf(kiota): update create project in fx-core for TTK integration (#12288) * perf(kiota): update create project in fx-core for TTK integration * docs: update input name and comment --- packages/fx-core/src/common/featureFlags.ts | 5 + .../src/component/generator/apiSpec/helper.ts | 9 +- packages/fx-core/src/question/constants.ts | 1 + packages/fx-core/src/question/create.ts | 3 + .../generator/apiSpecGenerator.test.ts | 62 +++++++++++ .../fx-core/tests/question/create.test.ts | 37 +++++++ packages/spec-parser/src/specParser.ts | 13 ++- packages/spec-parser/test/specParser.test.ts | 100 +++++++++++++++++- 8 files changed, 225 insertions(+), 5 deletions(-) diff --git a/packages/fx-core/src/common/featureFlags.ts b/packages/fx-core/src/common/featureFlags.ts index 56b2f9981a..3babe55cba 100644 --- a/packages/fx-core/src/common/featureFlags.ts +++ b/packages/fx-core/src/common/featureFlags.ts @@ -30,6 +30,7 @@ export class FeatureFlagName { static readonly DevTunnelTest = "TEAMSFX_DEV_TUNNEL_TEST"; static readonly SyncManifest = "TEAMSFX_SYNC_MANIFEST"; static readonly EnvFileFunc = "TEAMSFX_ENV_FILE_FUNC"; + static readonly KiotaIntegration = "TEAMSFX_KIOTA_INTEGRATION"; } export interface FeatureFlag { @@ -89,6 +90,10 @@ export class FeatureFlags { name: FeatureFlagName.EnvFileFunc, defaultValue: "true", // Set it to true for dogfooding. }; + static readonly KiotaIntegration = { + name: FeatureFlagName.KiotaIntegration, + defaultValue: "false", + }; } export function isCopilotExtensionEnabled(): boolean { diff --git a/packages/fx-core/src/component/generator/apiSpec/helper.ts b/packages/fx-core/src/component/generator/apiSpec/helper.ts index 657ea27613..e83ade3c78 100644 --- a/packages/fx-core/src/component/generator/apiSpec/helper.ts +++ b/packages/fx-core/src/component/generator/apiSpec/helper.ts @@ -389,7 +389,11 @@ export async function generateFromApiSpec( projectType: ProjectType, outputFilePath: SpecParserOutputFilePath ): Promise> { - const operations = inputs[QuestionNames.ApiOperation] as string[]; + const operations = + featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration) && + inputs[QuestionNames.ApiPluginManifestPath] + ? (await specParser.list()).APIs.filter((value) => value.isValid).map((value) => value.api) + : (inputs[QuestionNames.ApiOperation] as string[]); const validationRes = await specParser.validate(); const warnings = validationRes.warnings; const operationIdWarning = warnings.find((w) => w.type === WarningType.OperationIdMissing); @@ -432,7 +436,8 @@ export async function generateFromApiSpec( teamsManifestPath, operations, outputFilePath.destinationApiSpecFilePath, - outputFilePath.pluginManifestFilePath! + outputFilePath.pluginManifestFilePath!, + inputs[QuestionNames.ApiPluginManifestPath] ) : await specParser.generate( teamsManifestPath, diff --git a/packages/fx-core/src/question/constants.ts b/packages/fx-core/src/question/constants.ts index f0230fcede..b24a61f518 100644 --- a/packages/fx-core/src/question/constants.ts +++ b/packages/fx-core/src/question/constants.ts @@ -44,6 +44,7 @@ export enum QuestionNames { FromExistingApi = "from-existing-api", // group name for creating an App from existing api ApiSpecLocation = "openapi-spec-location", ApiOperation = "api-operation", + ApiPluginManifestPath = "external-api-plugin-manifest-path", // manifest path for creating project from existing plugin manifest. Use in Kiota integration, etc. MeArchitectureType = "me-architecture", ApiSpecApiKey = "api-key", ApiSpecApiKeyConfirm = "api-key-confirm", diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index 7fe872b696..e0e94eb196 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -1412,6 +1412,9 @@ export function capabilitySubTree(): IQTreeNode { }, { data: apiOperationQuestion(), + condition: (inputs: Inputs) => { + return !inputs[QuestionNames.ApiPluginManifestPath]; + }, }, ], }, diff --git a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts index 5af9a52457..33a9734533 100644 --- a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @@ -1517,6 +1517,7 @@ describe("SpecGenerator", async () => { const tools = new MockTools(); setTools(tools); const sandbox = sinon.createSandbox(); + let mockedEnvRestore: RestoreFn | undefined; const apiOperations: ApiOperation[] = [ { @@ -1540,6 +1541,9 @@ describe("SpecGenerator", async () => { afterEach(async () => { sandbox.restore(); + if (mockedEnvRestore) { + mockedEnvRestore(); + } }); it("API ME success", async function () { @@ -2189,5 +2193,63 @@ describe("SpecGenerator", async () => { assert.isTrue(generateBasedOnSpec.calledOnce); assert.isTrue(addAction.calledOnce); }); + + it("generate for kiota", async function () { + mockedEnvRestore = mockedEnv({ [FeatureFlagName.KiotaIntegration]: "true" }); + const inputs: Inputs = { + platform: Platform.VSCode, + projectPath: "path", + [QuestionNames.AppName]: "test", + [QuestionNames.ProgrammingLanguage]: ProgrammingLanguage.TS, + [QuestionNames.ApiSpecLocation]: "test.yaml", + [QuestionNames.ApiOperation]: ["operation1"], + [QuestionNames.Capabilities]: CapabilityOptions.apiPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, + [QuestionNames.ApiPluginManifestPath]: "test.json", + [QuestionNames.ProjectType]: "copilot-extension-type", + getTemplateInfosState: { + templateName: "api-plugin-existing-api", + isPlugin: true, + uri: "https://test.com", + isYaml: true, + type: ProjectType.Copilot, + }, + }; + const context = createContext(); + sandbox + .stub(SpecParser.prototype, "validate") + .resolves({ status: ValidationStatus.Valid, errors: [], warnings: [] }); + sandbox.stub(SpecParser.prototype, "list").resolves({ + APIs: [ + { + api: "api1", + server: "https://test", + operationId: "get", + auth: { + name: "test", + authScheme: { + type: "http", + scheme: "bearer", + }, + }, + isValid: true, + reason: [], + }, + ], + allAPICount: 1, + validAPICount: 1, + }); + sandbox.stub(fs, "ensureDir").resolves(); + sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(teamsManifest)); + const generateBasedOnSpec = sandbox + .stub(SpecParser.prototype, "generateForCopilot") + .resolves({ allSuccess: true, warnings: [] }); + sandbox.stub(pluginGeneratorHelper, "generateScaffoldingSummary").resolves(""); + + const generator = new SpecGenerator(); + const result = await generator.post(context, inputs, "projectPath"); + assert.isTrue(result.isOk()); + assert.isTrue(generateBasedOnSpec.calledOnce); + }); }); }); diff --git a/packages/fx-core/tests/question/create.test.ts b/packages/fx-core/tests/question/create.test.ts index 8084486786..ea194fdd70 100644 --- a/packages/fx-core/tests/question/create.test.ts +++ b/packages/fx-core/tests/question/create.test.ts @@ -1657,6 +1657,43 @@ describe("scaffold question", () => { ]); }); + it("traverse in vscode Copilot Plugin from Kiota", async () => { + const inputs: Inputs = { + platform: Platform.VSCode, + }; + inputs[QuestionNames.Capabilities] = CapabilityOptions.apiPlugin().id; + inputs[QuestionNames.ApiSpecLocation] = "api-spec-path"; + inputs[QuestionNames.ApiPluginManifestPath] = "api-plugin-manifest-path"; + inputs[QuestionNames.ApiPluginType] = ApiPluginStartOptions.apiSpec().id; + inputs[QuestionNames.ApiOperation] = "api-plugin-manifest-path"; + inputs[QuestionNames.ProjectType] = ProjectTypeOptions.copilotExtension().id; + const questions: string[] = []; + const visitor: QuestionTreeVisitor = async ( + question: Question, + ui: UserInteraction, + inputs: Inputs, + step?: number, + totalSteps?: number + ) => { + questions.push(question.name); + await callFuncs(question, inputs); + if (question.name === QuestionNames.Folder) { + return ok({ type: "success", result: "./" }); + } else if (question.name === QuestionNames.AppName) { + return ok({ type: "success", result: "test001" }); + } + return ok({ type: "success", result: undefined }); + }; + await traverse(createProjectQuestionNode(), inputs, ui, undefined, visitor); + assert.deepEqual(questions, [ + QuestionNames.ProjectType, + QuestionNames.Capabilities, + QuestionNames.ApiSpecLocation, + QuestionNames.Folder, + QuestionNames.AppName, + ]); + }); + it("traverse in vscode Copilot Plugin from new API with API Key authentication", async () => { const inputs: Inputs = { platform: Platform.VSCode, diff --git a/packages/spec-parser/src/specParser.ts b/packages/spec-parser/src/specParser.ts index d2ab9b5434..b7026bee78 100644 --- a/packages/spec-parser/src/specParser.ts +++ b/packages/spec-parser/src/specParser.ts @@ -32,6 +32,7 @@ import { AdaptiveCardGenerator } from "./adaptiveCardGenerator"; import { wrapAdaptiveCard } from "./adaptiveCardWrapper"; import { ValidatorFactory } from "./validators/validatorFactory"; import { Validator } from "./validators/validator"; +import { PluginManifestSchema } from "@microsoft/teams-manifest"; /** * A class that parses an OpenAPI specification file and provides methods to validate, list, and generate artifacts. @@ -284,6 +285,7 @@ export class SpecParser { filter: string[], outputSpecPath: string, pluginFilePath: string, + existingPluginFilePath?: string, signal?: AbortSignal ): Promise { const result: GenerateResult = { @@ -317,7 +319,16 @@ export class SpecParser { result.warnings.push(...warnings); await fs.outputJSON(manifestPath, updatedManifest, { spaces: 4 }); - await fs.outputJSON(pluginFilePath, apiPlugin, { spaces: 4 }); + if (existingPluginFilePath) { + const originPluginManifest = (await fs.readJSON( + existingPluginFilePath + )) as PluginManifestSchema; + // TODO (kiota): refactor to avoid generate apiPlugin + originPluginManifest.functions = apiPlugin.functions; + await fs.outputJSON(pluginFilePath, originPluginManifest, { spaces: 4 }); + } else { + await fs.outputJSON(pluginFilePath, apiPlugin, { spaces: 4 }); + } } catch (err) { if (err instanceof SpecParserError) { throw err; diff --git a/packages/spec-parser/test/specParser.test.ts b/packages/spec-parser/test/specParser.test.ts index ecf6bd18d8..3bbcb7f99a 100644 --- a/packages/spec-parser/test/specParser.test.ts +++ b/packages/spec-parser/test/specParser.test.ts @@ -938,7 +938,14 @@ describe("SpecParser", () => { const pluginFilePath = "ai-plugin.json"; try { - await specParser.generateForCopilot(manifestPath, filter, specPath, pluginFilePath, signal); + await specParser.generateForCopilot( + manifestPath, + filter, + specPath, + pluginFilePath, + undefined, + signal + ); expect.fail("Expected an error to be thrown"); } catch (err) { expect((err as SpecParserError).message).contain(ConstantString.CancelledMessage); @@ -964,7 +971,14 @@ describe("SpecParser", () => { return Promise.resolve(); }); const dereferenceStub = sinon.stub(specParser.parser, "dereference").resolves(spec as any); - await specParser.generateForCopilot(manifestPath, filter, specPath, pluginFilePath, signal); + await specParser.generateForCopilot( + manifestPath, + filter, + specPath, + pluginFilePath, + undefined, + signal + ); expect.fail("Expected an error to be thrown"); } catch (err) { expect((err as SpecParserError).message).contain(ConstantString.CancelledMessage); @@ -1000,6 +1014,7 @@ describe("SpecParser", () => { filter, outputSpecPath, pluginFilePath, + undefined, signal ); @@ -1037,6 +1052,7 @@ describe("SpecParser", () => { filter, outputSpecPath, pluginFilePath, + undefined, signal ); @@ -1136,6 +1152,86 @@ describe("SpecParser", () => { expect(err.message).to.equal("Error: outputFile error"); } }); + + it(" should generate adaptivecard for existing plugin manifest", async () => { + const pluginManifest = { + schema_version: "1", + name_for_human: "test", + description_for_human: "test", + }; + const pluginManifestWithAdaptiveCard = { + schema_version: "1", + name_for_human: "test", + description_for_human: "test", + functions: [ + { + name: "test", + }, + ], + }; + const specParser = new SpecParser("path/to/spec.yaml"); + const spec = { + openapi: "3.0.0", + paths: { + "/hello": { + get: { + responses: { + 200: { + content: { + "application/json": { + schema: { + type: "object", + properties: { + name: { + type: "string", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }; + const parseStub = sinon.stub(specParser.parser, "parse").resolves(spec as any); + const dereferenceStub = sinon.stub(specParser.parser, "dereference").resolves(spec as any); + const specFilterStub = sinon.stub(SpecFilter, "specFilter").returns({} as any); + const outputFileStub = sinon.stub(fs, "outputFile").resolves(); + const outputJSONStub = sinon.stub(fs, "outputJSON").callsFake((path, data) => { + if (path === "pluginFilePath") { + expect(data.function).to.not.be.undefined; + expect(data.function[0].name).to.equal("test"); + } + }); + const JsyamlSpy = sinon.spy(jsyaml, "dump"); + sinon.stub(fs, "readJSON").resolves(pluginManifest); + + const updateManifestWithAiPluginStub = sinon + .stub(ManifestUpdater, "updateManifestWithAiPlugin") + .resolves([{}, pluginManifestWithAdaptiveCard, []] as any); + + const filter = ["get /hello"]; + + const outputSpecPath = "path/to/output.yaml"; + const pluginFilePath = "ai-plugin.json"; + const result = await specParser.generateForCopilot( + "path/to/manifest.json", + filter, + outputSpecPath, + pluginFilePath, + "existingPluginManifest" + ); + + expect(result.allSuccess).to.be.true; + expect(JsyamlSpy.calledOnce).to.be.true; + expect(specFilterStub.calledOnce).to.be.true; + expect(outputFileStub.calledOnce).to.be.true; + expect(updateManifestWithAiPluginStub.calledOnce).to.be.true; + expect(outputFileStub.firstCall.args[0]).to.equal(outputSpecPath); + expect(outputJSONStub.calledTwice).to.be.true; + }); }); describe("generate", () => { From 9837ec0a6c9c746a6ad9977318b7ed4a284097c2 Mon Sep 17 00:00:00 2001 From: HuihuiWu-Microsoft <73154171+HuihuiWu-Microsoft@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:24:37 +0800 Subject: [PATCH 25/52] fix: appstudio api telemetry url property (#12289) * fix: appstudio api telemetry url property * test: add ut * fix: coverage --- .../fx-core/src/common/wrappedAxiosClient.ts | 31 +++++++++++---- .../src/component/constant/commonConstant.ts | 1 + .../component/driver/teamsApp/constants.ts | 1 + .../tests/common/wrappedAxiosClient.test.ts | 38 ++++++++++++++++++- 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/packages/fx-core/src/common/wrappedAxiosClient.ts b/packages/fx-core/src/common/wrappedAxiosClient.ts index d05409289f..88d7ea248c 100644 --- a/packages/fx-core/src/common/wrappedAxiosClient.ts +++ b/packages/fx-core/src/common/wrappedAxiosClient.ts @@ -188,21 +188,25 @@ export class WrappedAxiosClient { return APP_STUDIO_API_NAMES.UPDATE_PUBLISHED_APP; } if (fullPath.match(new RegExp("/api/publishing/.*"))) { - if (method.toUpperCase() === HttpMethod.GET) { - return APP_STUDIO_API_NAMES.GET_PUBLISHED_APP; - } - if (method.toUpperCase() === HttpMethod.POST) { - return APP_STUDIO_API_NAMES.PUBLISH_APP; - } + return APP_STUDIO_API_NAMES.GET_PUBLISHED_APP; + } + if (fullPath.match(new RegExp("/api/publishing"))) { + return APP_STUDIO_API_NAMES.PUBLISH_APP; + } + if (fullPath.match(new RegExp("/api/usersettings/mtUserAppPolicy"))) { + return APP_STUDIO_API_NAMES.CHECK_SIDELOADING_STATUS; } if (fullPath.match(new RegExp("/api/v1.0/apiSecretRegistrations/.*"))) { if (method.toUpperCase() === HttpMethod.GET) { return APP_STUDIO_API_NAMES.GET_API_KEY; } - if (method.toUpperCase() === HttpMethod.POST) { - return APP_STUDIO_API_NAMES.CREATE_API_KEY; + if (method.toUpperCase() === HttpMethod.PATCH) { + return APP_STUDIO_API_NAMES.UPDATE_API_KEY; } } + if (fullPath.match(new RegExp("/api/v1.0/apiSecretRegistrations"))) { + return APP_STUDIO_API_NAMES.CREATE_API_KEY; + } if ( fullPath.match( new RegExp( @@ -249,6 +253,17 @@ export class WrappedAxiosClient { ) { return APP_STUDIO_API_NAMES.GET_APP_VALIDATION_RESULT; } + if (fullPath.match(new RegExp("/api/v1.0/oAuthConfigurations/.*"))) { + if (method.toUpperCase() === HttpMethod.GET) { + return APP_STUDIO_API_NAMES.GET_OAUTH; + } + if (method.toUpperCase() === HttpMethod.PATCH) { + return APP_STUDIO_API_NAMES.UPDATE_OAUTH; + } + } + if (fullPath.match(new RegExp("/api/v1.0/oAuthConfigurations"))) { + return APP_STUDIO_API_NAMES.CREATE_OAUTH; + } } if ( fullPath.match( diff --git a/packages/fx-core/src/component/constant/commonConstant.ts b/packages/fx-core/src/component/constant/commonConstant.ts index 751a21ed6c..c4e5d447d0 100644 --- a/packages/fx-core/src/component/constant/commonConstant.ts +++ b/packages/fx-core/src/component/constant/commonConstant.ts @@ -20,6 +20,7 @@ export class HttpMethod { public static readonly POST = "POST"; public static readonly GET = "GET"; public static readonly DELETE = "DELETE"; + public static readonly PATCH = "PATCH"; } export class TelemetryConstant { diff --git a/packages/fx-core/src/component/driver/teamsApp/constants.ts b/packages/fx-core/src/component/driver/teamsApp/constants.ts index ed3a70eeeb..07fc99bb93 100644 --- a/packages/fx-core/src/component/driver/teamsApp/constants.ts +++ b/packages/fx-core/src/component/driver/teamsApp/constants.ts @@ -345,6 +345,7 @@ export class APP_STUDIO_API_NAMES { public static readonly GET_OAUTH = "get-oauth"; public static readonly CREATE_OAUTH = "create-oauth"; public static readonly UPDATE_OAUTH = "update-oauth"; + public static readonly CHECK_SIDELOADING_STATUS = "check-sideloading-status"; } /** diff --git a/packages/fx-core/tests/common/wrappedAxiosClient.test.ts b/packages/fx-core/tests/common/wrappedAxiosClient.test.ts index dbaf404f3f..1208d2c3ce 100644 --- a/packages/fx-core/tests/common/wrappedAxiosClient.test.ts +++ b/packages/fx-core/tests/common/wrappedAxiosClient.test.ts @@ -335,7 +335,7 @@ describe("Wrapped Axios Client Test", () => { chai.assert.equal(apiName, APP_STUDIO_API_NAMES.GET_PUBLISHED_APP); apiName = WrappedAxiosClient.convertUrlToApiName( - getAppStudioEndpoint() + `/api/publishing/${fakeId}`, + getAppStudioEndpoint() + `/api/publishing`, "POST" ); chai.assert.equal(apiName, APP_STUDIO_API_NAMES.PUBLISH_APP); @@ -346,6 +346,12 @@ describe("Wrapped Axios Client Test", () => { ); chai.assert.equal(apiName, APP_STUDIO_API_NAMES.UPDATE_PUBLISHED_APP); + apiName = WrappedAxiosClient.convertUrlToApiName( + getAppStudioEndpoint() + `/api/usersettings/mtUserAppPolicy`, + "GET" + ); + chai.assert.equal(apiName, APP_STUDIO_API_NAMES.CHECK_SIDELOADING_STATUS); + apiName = WrappedAxiosClient.convertUrlToApiName( getAppStudioEndpoint() + `/api/v1.0/apiSecretRegistrations/${fakeId}`, "GET" @@ -354,6 +360,12 @@ describe("Wrapped Axios Client Test", () => { apiName = WrappedAxiosClient.convertUrlToApiName( getAppStudioEndpoint() + `/api/v1.0/apiSecretRegistrations/${fakeId}`, + "PATCH" + ); + chai.assert.equal(apiName, APP_STUDIO_API_NAMES.UPDATE_API_KEY); + + apiName = WrappedAxiosClient.convertUrlToApiName( + getAppStudioEndpoint() + `/api/v1.0/apiSecretRegistrations`, "POST" ); chai.assert.equal(apiName, APP_STUDIO_API_NAMES.CREATE_API_KEY); @@ -407,6 +419,30 @@ describe("Wrapped Axios Client Test", () => { ); chai.assert.equal(apiName, APP_STUDIO_API_NAMES.GET_APP_VALIDATION_RESULT); + apiName = WrappedAxiosClient.convertUrlToApiName( + getAppStudioEndpoint() + `/api/v1.0/oAuthConfigurations`, + "POST" + ); + chai.assert.equal(apiName, APP_STUDIO_API_NAMES.CREATE_OAUTH); + + apiName = WrappedAxiosClient.convertUrlToApiName( + getAppStudioEndpoint() + `/api/v1.0/oAuthConfigurations/${fakeId}`, + "GET" + ); + chai.assert.equal(apiName, APP_STUDIO_API_NAMES.GET_OAUTH); + + apiName = WrappedAxiosClient.convertUrlToApiName( + getAppStudioEndpoint() + `/api/v1.0/oAuthConfigurations/${fakeId}`, + "PATCH" + ); + chai.assert.equal(apiName, APP_STUDIO_API_NAMES.UPDATE_OAUTH); + + apiName = WrappedAxiosClient.convertUrlToApiName( + getAppStudioEndpoint() + `/api/v1.0/oAuthConfigurations/${fakeId}`, + "" + ); + chai.assert.notEqual(apiName, APP_STUDIO_API_NAMES.UPDATE_OAUTH); + apiName = WrappedAxiosClient.convertUrlToApiName(getAppStudioEndpoint() + `unknown`, "GET"); chai.assert.equal(apiName, (getAppStudioEndpoint() + `unknown`).replace(/\//g, `-`)); From 4f8b80a215221d229300fc6c9ebaea18465322aa Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:25:39 +0800 Subject: [PATCH 26/52] feat: add existing plugin (#12281) * refactor: draft add plugin refactor: cycle dependency refactor: more * refactor: more refactor: more refactor: more refactor: more * test: ut fix * test: ut fix test: ut fix test: ut fix test: ut fix refactor: string comment test: ut * refactor: string comment * refactor: string comment --- packages/api/src/constants.ts | 4 + packages/api/src/qm/question.ts | 16 ++ packages/api/src/qm/ui.ts | 16 ++ packages/fx-core/resource/package.nls.json | 16 +- packages/fx-core/src/common/constants.ts | 1 + packages/fx-core/src/common/telemetry.ts | 9 + packages/fx-core/src/common/utils.ts | 22 ++ .../teamsApp/utils/CopilotGptManifestUtils.ts | 34 +++ .../teamsApp/utils/PluginManifestUtils.ts | 23 ++ .../component/generator/apiSpec/generator.ts | 28 +-- .../src/component/generator/apiSpec/helper.ts | 68 +++--- .../generator/copilotExtension/generator.ts | 49 +++- .../generator/copilotExtension/helper.ts | 174 ++++++++++++++ packages/fx-core/src/core/FxCore.ts | 28 +-- packages/fx-core/src/error/common.ts | 11 + packages/fx-core/src/question/constants.ts | 31 ++- packages/fx-core/src/question/create.ts | 151 +++++++++++- .../question/inputs/CreateProjectInputs.ts | 10 +- .../question/options/CreateProjectOptions.ts | 12 +- packages/fx-core/src/ui/visitor.ts | 13 + .../teamsApp/copilotGptManifest.test.ts | 89 +++++++ .../teamsApp/pluginManifestUtils.test.ts | 44 +++- .../generator/apiSpecGenerator.test.ts | 32 +-- .../copilotExtensionGenerator.test.ts | 224 +++++++++++++++++- packages/fx-core/tests/core/FxCore.test.ts | 2 + .../fx-core/tests/question/create.test.ts | 180 +++++++++++++- packages/fx-core/tests/ui/qm.visitor.test.ts | 20 +- packages/vscode-ui/src/ui.ts | 14 +- packages/vscode-ui/src/visitor.ts | 11 + packages/vscode-ui/tests/qm.test.ts | 19 +- 30 files changed, 1243 insertions(+), 108 deletions(-) create mode 100644 packages/fx-core/src/component/generator/copilotExtension/helper.ts diff --git a/packages/api/src/constants.ts b/packages/api/src/constants.ts index 217f46a0c4..08e4ee19f3 100644 --- a/packages/api/src/constants.ts +++ b/packages/api/src/constants.ts @@ -12,6 +12,10 @@ export const AutoGeneratedReadme = "README-auto-generated.md"; export const DefaultReadme = "README.md"; export const SettingsFolderName = "teamsfx"; export const ManifestTemplateFileName = "manifest.json"; +export const DefaultApiSpecFolderName = "apiSpecificationFile"; +export const DefaultApiSpecYamlFileName = "openapi.yaml"; +export const DefaultApiSpecJsonFileName = "openapi.json"; +export const DefaultPluginManifestFileName = "ai-plugin.json"; /** * questions for VS and CLI_HELP platforms are static question which don't depend on project context diff --git a/packages/api/src/qm/question.ts b/packages/api/src/qm/question.ts index f9d116b3ed..9b2c7b87ca 100644 --- a/packages/api/src/qm/question.ts +++ b/packages/api/src/qm/question.ts @@ -78,6 +78,17 @@ export interface BaseQuestion { */ totalSteps?: number; + /** + * `innerStep` and `innerTotalStep` are used to describe the inner step of a group of questions + * `innerStep` is the sequence number of the current question in the group. + * VSC will display the innerStep and innerTotalStep in the question title. + */ + innerStep?: number; + /** + * `innerTotalStep` is the number of questions in the group in total + */ + innerTotalStep?: number; + /** * if true, the toolkit will not remember the value as default value */ @@ -394,6 +405,11 @@ export interface SingleFileQuestion extends UserInputQuestion { * ``` */ filters?: { [name: string]: string[] }; + + /** + * Default Uri when open file selector window. + */ + defaultFolder?: string | LocalFunc; } export interface MultiFileQuestion extends UserInputQuestion { diff --git a/packages/api/src/qm/ui.ts b/packages/api/src/qm/ui.ts index 1b10f2e680..f0cf786b81 100644 --- a/packages/api/src/qm/ui.ts +++ b/packages/api/src/qm/ui.ts @@ -58,6 +58,17 @@ export interface UIConfig { * @param `command` is the command name that will be executed when current action triggered */ buttons?: { icon: string; tooltip: string; command: string }[]; + + /** + * `innerStep` and `innerTotalStep` are used to describe the inner step of a group of questions + * `innerStep` is the sequence number of the current question in the group. + * VSC will display the innerStep and innerTotalStep in the question title. + */ + innerStep?: number; + /** + * `innerTotalStep` is the number of questions in the group in total + */ + innerTotalStep?: number; } export interface ConfirmConfig extends UIConfig { @@ -171,6 +182,11 @@ export type SelectFileConfig = UIConfig & { label: string; description?: string; }[]; + + /** + * Default Uri when open file selector window. + */ + defaultFolder?: string | (() => Promise); }; /** diff --git a/packages/fx-core/resource/package.nls.json b/packages/fx-core/resource/package.nls.json index 9f0b654ef2..29b1f85337 100644 --- a/packages/fx-core/resource/package.nls.json +++ b/packages/fx-core/resource/package.nls.json @@ -174,6 +174,7 @@ "error.FailedToParseResourceIdError": "Unable to get '%s' from resource id: '%s'", "error.NoSubscriptionFound": "Unable to find a subscription.", "error.TrustCertificateCancelError": "User canceled. For Teams to trust the self-signed SSL certificate used by the toolkit, add the certificate to your certificate store.", + "error.UnsupportedFileFormat": "Invalid file. Supported format: \"%s\"", "error.VideoFilterAppNotRemoteSupported": "Teams Toolkit doesn't support video filter app in remote. Check the README.md file in project root folder.", "error.appstudio.teamsAppRequiredPropertyMissing": "Missing required property \"%s\" in \"%s\"", "error.appstudio.teamsAppCreateFailed": "Unable to create Teams app in Teams Developer Portal due to %s", @@ -363,6 +364,8 @@ "core.createProjectQuestion.llmService.azureOpenAIDeploymentName.title": "Azure OpenAI Deployment Name", "core.createProjectQuestion.llmService.azureOpenAIEndpoint.placeholder": "Input Azure OpenAI service endpoint now or set it later in the project", "core.createProjectQuestion.llmService.azureOpenAIDeploymentName.placeholder": "Input Azure OpenAI deployment name now or set it later in the project", + "core.createProjectQuestion.apiPlugin.importPlugin.label": "Import from existing plugin", + "core.createProjectQuestion.apiPlugin.importPlugin.detail": "Import from existing API plugin file", "core.createProjectQuestion.apiSpec.title": "OpenAPI Description Document", "core.createProjectQuestion.apiSpec.placeholder": "Enter OpenAPI Description Document URL", "core.createProjectQuestion.apiSpecInputUrl.label": "Enter OpenAPI Description Document Location", @@ -385,16 +388,23 @@ "core.createProjectQuestion.apiSpec.operation.placeholder.skipExisting": "Methods defined in manifest.json are not listed", "core.createProjectQuestion.apiSpec.multipleValidationErrors.message": "Incompatible OpenAPI description document. Check output panel for details.", "core.createProjectQuestion.apiSpec.multipleValidationErrors.vscode.message": "Incompatible OpenAPI description document. Check [output panel](command:fx-extension.showOutputChannel) for details.", - "core.createProjectQuestion.meArchitecture.title": "Architecture of Search Based Message Extension", - "core.createProjectQuestion.declarativeCopilot.title": "Create Declarative Copilot", + "core.createProjectQuestion.meArchitecture.title": "Architecture of search based message extension", + "core.createProjectQuestion.declarativeCopilot.title": "Create declarative copilot", "core.createProjectQuestion.declarativeCopilot.placeholder": "Add API plugin to your declarative Copilot", "core.createProjectQuestion.createApiPlugin.title": "Create API Plugin", - "core.createProjectQuestion.addApiPlugin.title": "Add API Plugin", + "core.createProjectQuestion.addApiPlugin.title": "Add API plugin", "core.createProjectQuestion.addApiPlugin.placeholder": "Select how to add plugin", "core.createProjectQuestion.noPlugin.label": "No plugin", "core.createProjectQuestion.noPlugin.detail": "Create declarative Copilot only", "core.createProjectQuestion.addPlugin.label": "Add plugin", "core.createProjectQuestion.addPlugin.detail": "Create declarative Copilot with API plugin", + "core.createProjectQuestion.addExistingPlugin.pluginManifest.title": "Import manifest file", + "core.createProjectQuestion.addExistingPlugin.apiSpec.title": "Import OpenAPI description document", + "core.createProjectQuestion.addExistingPlugin.pluginManifest.placeholder": "Select your plugin manifest file", + "core.createProjectQuestion.addExistingPlugin.openApiSpec.placeholder": "Select OpenAPI description document used for your API plugin", + "core.createProjectQuestion.addPlugin.MissingRequiredProperty": "Invalid plugin manifest. Missing \"%s\"", + "core.createProjectQuestion.addPlugin.pluginManifestMissingApiSpec": "Invalid plugin manifest. Ensure the manifest has a runtime of \"%s\" and references a valid API description document.", + "core.createProjectQuestion.addPlugin.pluginManifestMultipleApiSpec": "Found multiple OpenAPI description documents: \"%s\".", "core.aiAssistantBotOption.label": "AI Agent Bot", "core.aiAssistantBotOption.detail": "A custom AI Agent bot in Teams using Teams AI library and OpenAI Assistants API", "core.aiBotOption.label": "AI Chat Bot", diff --git a/packages/fx-core/src/common/constants.ts b/packages/fx-core/src/common/constants.ts index bd1f1d54ac..1b1d083bd4 100644 --- a/packages/fx-core/src/common/constants.ts +++ b/packages/fx-core/src/common/constants.ts @@ -77,3 +77,4 @@ export const GraphReadUserScopes = ["https://graph.microsoft.com/User.ReadBasic. export const SPFxScopes = (tenant: string) => [`${tenant}/Sites.FullControl.All`]; export const AzureScopes = ["https://management.core.windows.net/user_impersonation"]; export const AppStudioScopes = [`${getAppStudioEndpoint()}/AppDefinitions.ReadWrite`]; +export const SpecParserSource = "SpecParser"; diff --git a/packages/fx-core/src/common/telemetry.ts b/packages/fx-core/src/common/telemetry.ts index 04282d46cd..113629bb10 100644 --- a/packages/fx-core/src/common/telemetry.ts +++ b/packages/fx-core/src/common/telemetry.ts @@ -230,6 +230,15 @@ export enum ProjectMigratorGuideStatus { Cancel = "cancel", } +export enum ApiSpecTelemetryPropertis { + SpecNotValidDetails = "spec-not-valid-details", + InvalidApiSpec = "invalid-api-spec", +} + +export function getQuestionValidationErrorEventName(questionName: string) { + return `invalid-${questionName}`; +} + export function sendTelemetryEvent( component: string, eventName: string, diff --git a/packages/fx-core/src/common/utils.ts b/packages/fx-core/src/common/utils.ts index e2a6156dc1..e226a1c0bc 100644 --- a/packages/fx-core/src/common/utils.ts +++ b/packages/fx-core/src/common/utils.ts @@ -3,6 +3,8 @@ import { Context, InputsWithProjectPath } from "@microsoft/teamsfx-api"; import { DriverContext } from "../component/driver/interface/commonArgs"; +import axios from "axios"; +import fs from "fs-extra"; export async function waitSeconds(second: number): Promise { return new Promise((resolve) => setTimeout(resolve, second * 1000)); @@ -20,3 +22,23 @@ export function generateDriverContext(ctx: Context, inputs: InputsWithProjectPat platform: inputs.platform, }; } + +export async function isJsonSpecFile(filePath: string): Promise { + const specPath = filePath.toLowerCase(); + if (specPath.endsWith(".yaml") || specPath.endsWith(".yml")) { + return false; + } else if (specPath.endsWith(".json")) { + return true; + } + const isRemoteFile = specPath.startsWith("http:") || specPath.startsWith("https:"); + const fileContent = isRemoteFile + ? (await axios.get(specPath)).data + : await fs.readFile(specPath, "utf-8"); + + try { + JSON.parse(fileContent); + return true; + } catch (error) { + return false; + } +} diff --git a/packages/fx-core/src/component/driver/teamsApp/utils/CopilotGptManifestUtils.ts b/packages/fx-core/src/component/driver/teamsApp/utils/CopilotGptManifestUtils.ts index 9f8cecc05f..3f8a33622a 100644 --- a/packages/fx-core/src/component/driver/teamsApp/utils/CopilotGptManifestUtils.ts +++ b/packages/fx-core/src/component/driver/teamsApp/utils/CopilotGptManifestUtils.ts @@ -11,6 +11,7 @@ import { IDeclarativeCopilot, Platform, Colors, + DefaultPluginManifestFileName, } from "@microsoft/teamsfx-api"; import fs from "fs-extra"; import { FileNotFoundError, JSONSyntaxError, WriteFileError } from "../../../../error/common"; @@ -28,6 +29,7 @@ import { SummaryConstant } from "../../../configManager/constant"; import { EOL } from "os"; import { ManifestType } from "../../../utils/envFunctionUtils"; import { DriverContext } from "../../interface/commonArgs"; +import { manifestUtils } from "./ManifestUtils"; export class CopilotGptManifestUtils { public async readCopilotGptManifestFile( @@ -144,6 +146,28 @@ export class CopilotGptManifestUtils { } } + public async getManifestPath(teamsManifestPath: string): Promise> { + const teamsManifestRes = await manifestUtils._readAppManifest(teamsManifestPath); + + if (teamsManifestRes.isErr()) { + return err(teamsManifestRes.error); + } + const filePath = teamsManifestRes.value.copilotExtensions?.declarativeCopilots?.[0].file; + if (!filePath) { + return err( + AppStudioResultFactory.UserError( + AppStudioError.TeamsAppRequiredPropertyMissingError.name, + AppStudioError.TeamsAppRequiredPropertyMissingError.message( + "copilotExtensions.declarativeCopilots.file", + teamsManifestPath + ) + ) + ); + } else { + return ok(path.resolve(path.dirname(teamsManifestPath), filePath)); + } + } + public async addAction( copilotGptPath: string, id: string, @@ -261,6 +285,16 @@ export class CopilotGptManifestUtils { return outputMessage; } } + + public async getDefaultNextAvailablePluginManifestPath(folder: string) { + const pluginManifestNamePrefix = DefaultPluginManifestFileName.split(".")[0]; + let pluginFileNameSuffix = 1; + let pluginManifestName = `${pluginManifestNamePrefix}_${pluginFileNameSuffix}.json`; + while (await fs.pathExists(path.join(folder, pluginManifestName))) { + pluginManifestName = `${pluginManifestNamePrefix}_${++pluginFileNameSuffix}.json`; + } + return path.join(folder, pluginManifestName); + } } export const copilotGptManifestUtils = new CopilotGptManifestUtils(); diff --git a/packages/fx-core/src/component/driver/teamsApp/utils/PluginManifestUtils.ts b/packages/fx-core/src/component/driver/teamsApp/utils/PluginManifestUtils.ts index b6275bcc92..85694a90d8 100644 --- a/packages/fx-core/src/component/driver/teamsApp/utils/PluginManifestUtils.ts +++ b/packages/fx-core/src/component/driver/teamsApp/utils/PluginManifestUtils.ts @@ -3,6 +3,8 @@ import { Colors, + DefaultApiSpecJsonFileName, + DefaultApiSpecYamlFileName, FxError, IPlugin, ManifestUtil, @@ -27,6 +29,7 @@ import { SummaryConstant } from "../../../configManager/constant"; import { EOL } from "os"; import { ManifestType } from "../../../utils/envFunctionUtils"; import { DriverContext } from "../../interface/commonArgs"; +import { isJsonSpecFile } from "../../../../common/utils"; export class PluginManifestUtils { public async readPluginManifestFile( @@ -170,6 +173,26 @@ export class PluginManifestUtils { } } + public async getDefaultNextAvailableApiSpecPath(apiSpecPath: string, apiSpecFolder: string) { + let isYaml = false; + try { + isYaml = !(await isJsonSpecFile(apiSpecPath)); + } catch (e) {} + + let openApiSpecFileName = isYaml ? DefaultApiSpecYamlFileName : DefaultApiSpecJsonFileName; + const openApiSpecFileNamePrefix = openApiSpecFileName.split(".")[0]; + const openApiSpecFileType = openApiSpecFileName.split(".")[1]; + let apiSpecFileNameSuffix = 1; + openApiSpecFileName = `${openApiSpecFileNamePrefix}_${apiSpecFileNameSuffix}.${openApiSpecFileType}`; + + while (await fs.pathExists(path.join(apiSpecFolder, openApiSpecFileName))) { + openApiSpecFileName = `${openApiSpecFileNamePrefix}_${++apiSpecFileNameSuffix}.${openApiSpecFileType}`; + } + const openApiSpecFilePath = path.join(apiSpecFolder, openApiSpecFileName); + + return openApiSpecFilePath; + } + async getApiSpecFilePathFromPlugin( plugin: PluginManifestSchema, pluginPath: string diff --git a/packages/fx-core/src/component/generator/apiSpec/generator.ts b/packages/fx-core/src/component/generator/apiSpec/generator.ts index 5ac0c538ce..0f3b4355fb 100644 --- a/packages/fx-core/src/component/generator/apiSpec/generator.ts +++ b/packages/fx-core/src/component/generator/apiSpec/generator.ts @@ -15,6 +15,10 @@ import { AppPackageFolderName, AuthInfo, Context, + DefaultApiSpecFolderName, + DefaultApiSpecJsonFileName, + DefaultApiSpecYamlFileName, + DefaultPluginManifestFileName, FxError, GeneratorResult, Inputs, @@ -48,19 +52,15 @@ import { DefaultTemplateGenerator } from "../templates/templateGenerator"; import { TemplateInfo } from "../templates/templateInfo"; import { convertSpecParserErrorToFxError, - defaultApiSpecFolderName, - defaultApiSpecJsonFileName, - defaultApiSpecYamlFileName, - defaultPluginManifestFileName, generateFromApiSpec, generateScaffoldingSummary, getEnvName, getParserOptions, - isYamlSpecFile, updateForCustomApi, } from "./helper"; import { copilotGptManifestUtils } from "../../driver/teamsApp/utils/CopilotGptManifestUtils"; import { declarativeCopilotInstructionFileName } from "../constant"; +import { isJsonSpecFile } from "../../../common/utils"; const defaultDeclarativeCopilotActionId = "action_1"; // const fromApiSpecComponentName = "copilot-plugin-existing-api"; @@ -185,12 +185,12 @@ export class SpecGenerator extends DefaultTemplateGenerator { : ProjectType.SME; try { - getTemplateInfosState.isYaml = await isYamlSpecFile(getTemplateInfosState.url); + getTemplateInfosState.isYaml = !(await isJsonSpecFile(getTemplateInfosState.url)); } catch (e) {} const openapiSpecFileName = getTemplateInfosState.isYaml - ? defaultApiSpecYamlFileName - : defaultApiSpecJsonFileName; + ? DefaultApiSpecYamlFileName + : DefaultApiSpecJsonFileName; const llmService: string | undefined = inputs[QuestionNames.LLMService]; const openAIKey: string | undefined = inputs[QuestionNames.OpenAIKey]; const azureOpenAIKey: string | undefined = inputs[QuestionNames.AzureOpenAIKey]; @@ -214,7 +214,7 @@ export class SpecGenerator extends DefaultTemplateGenerator { { authName: authData.authName, openapiSpecPath: normalizePath( - path.join(AppPackageFolderName, defaultApiSpecFolderName, openapiSpecFileName) + path.join(AppPackageFolderName, DefaultApiSpecFolderName, openapiSpecFileName) ), registrationIdEnvName: envName, authType: authData.authType, @@ -282,11 +282,11 @@ export class SpecGenerator extends DefaultTemplateGenerator { const apiSpecFolderPath = path.join( destinationPath, AppPackageFolderName, - defaultApiSpecFolderName + DefaultApiSpecFolderName ); const openapiSpecFileName = getTemplateInfosState.isYaml - ? defaultApiSpecYamlFileName - : defaultApiSpecJsonFileName; + ? DefaultApiSpecYamlFileName + : DefaultApiSpecJsonFileName; const openapiSpecPath = path.join(apiSpecFolderPath, openapiSpecFileName); await fs.ensureDir(apiSpecFolderPath); @@ -294,7 +294,7 @@ export class SpecGenerator extends DefaultTemplateGenerator { let warnings: WarningResult[]; const pluginManifestPath = getTemplateInfosState.type === ProjectType.Copilot - ? path.join(destinationPath, AppPackageFolderName, defaultPluginManifestFileName) + ? path.join(destinationPath, AppPackageFolderName, DefaultPluginManifestFileName) : undefined; const responseTemplateFolder = getTemplateInfosState.type === ProjectType.SME @@ -330,7 +330,7 @@ export class SpecGenerator extends DefaultTemplateGenerator { const addAcionResult = await copilotGptManifestUtils.addAction( gptManifestPath, defaultDeclarativeCopilotActionId, - defaultPluginManifestFileName + DefaultPluginManifestFileName ); if (addAcionResult.isErr()) { return err(addAcionResult.error); diff --git a/packages/fx-core/src/component/generator/apiSpec/helper.ts b/packages/fx-core/src/component/generator/apiSpec/helper.ts index e83ade3c78..38953c1832 100644 --- a/packages/fx-core/src/component/generator/apiSpec/helper.ts +++ b/packages/fx-core/src/component/generator/apiSpec/helper.ts @@ -55,14 +55,17 @@ import { import { SummaryConstant } from "../../configManager/constant"; import { manifestUtils } from "../../driver/teamsApp/utils/ManifestUtils"; import { pluginManifestUtils } from "../../driver/teamsApp/utils/PluginManifestUtils"; -import { sendTelemetryErrorEvent, TelemetryProperty } from "../../../common/telemetry"; +import { + ApiSpecTelemetryPropertis, + sendTelemetryErrorEvent, + TelemetryProperty, +} from "../../../common/telemetry"; import * as util from "util"; -import axios from "axios"; +import { SpecParserSource } from "../../../common/constants"; const enum telemetryProperties { validationStatus = "validation-status", validationErrors = "validation-errors", - specNotValidDetails = "spec-not-valid-details", validationWarnings = "validation-warnings", validApisCount = "valid-apis-count", allApisCount = "all-apis-count", @@ -72,6 +75,7 @@ const enum telemetryProperties { isFromAddingApi = "is-from-adding-api", failedReason = "failed-reason", generateType = "generate-type", + projectType = "project-type", } const enum telemetryEvents { @@ -121,11 +125,6 @@ export const specParserGenerateResultWarningsTelemetryProperty = "warnings"; export const invalidApiSpecErrorName = "invalid-api-spec"; const apiSpecNotUsedInPlugin = "api-spec-not-used-in-plugin"; -export const defaultApiSpecFolderName = "apiSpecificationFile"; -export const defaultApiSpecYamlFileName = "openapi.yaml"; -export const defaultApiSpecJsonFileName = "openapi.json"; -export const defaultPluginManifestFileName = "ai-plugin.json"; - export interface ErrorResult { /** * The type of error. @@ -165,6 +164,7 @@ export async function listOperations( validationRes.errors = formatValidationErrors(validationRes.errors, inputs); logValidationResults( + projectType, validationRes.errors, validationRes.warnings, context, @@ -255,7 +255,15 @@ export async function listOperations( inputs ); - logValidationResults(errors, [], context, true, false, existingCorrelationId); + logValidationResults( + projectType, + errors, + [], + context, + true, + false, + existingCorrelationId + ); return err(errors); } @@ -273,7 +281,15 @@ export async function listOperations( ], inputs ); - logValidationResults(errors, [], context, true, false, existingCorrelationId); + logValidationResults( + projectType, + errors, + [], + context, + true, + false, + existingCorrelationId + ); return err(errors); } } else { @@ -419,7 +435,7 @@ export async function generateFromApiSpec( } if (validationRes.status === ValidationStatus.Error) { - logValidationResults(validationRes.errors, warnings, context, false, true); + logValidationResults(projectType, validationRes.errors, warnings, context, false, true); const errorMessage = inputs.platform === Platform.VSCode ? getLocalizedString( @@ -478,6 +494,7 @@ export async function generateFromApiSpec( } export function logValidationResults( + projectType: ProjectType, errors: ErrorResult[], warnings: WarningResult[], context: Context, @@ -495,11 +512,12 @@ export function logValidationResults( [telemetryProperties.validationWarnings]: warnings .map((warn: WarningResult) => formatTelemetryValidationProperty(warn)) .join(";"), + [telemetryProperties.projectType]: projectType.toString(), }; const specNotValidError = errors.find((error) => error.type === ErrorType.SpecNotValid); if (specNotValidError) { - properties[telemetryProperties.specNotValidDetails] = specNotValidError.content; + properties[ApiSpecTelemetryPropertis.SpecNotValidDetails] = specNotValidError.content; } if (existingCorrelationId) { @@ -829,26 +847,12 @@ function formatLengthExceedingErrorMessage(field: string, limit: number): string } export function convertSpecParserErrorToFxError(error: SpecParserError): FxError { - return new SystemError("SpecParser", error.errorType.toString(), error.message, error.message); -} - -export async function isYamlSpecFile(specPath: string): Promise { - if (specPath.endsWith(".yaml") || specPath.endsWith(".yml")) { - return true; - } else if (specPath.endsWith(".json")) { - return false; - } - const isRemoteFile = specPath.startsWith("http:") || specPath.startsWith("https:"); - const fileContent = isRemoteFile - ? (await axios.get(specPath)).data - : await fs.readFile(specPath, "utf-8"); - - try { - JSON.parse(fileContent); - return false; - } catch (error) { - return true; - } + return new SystemError( + SpecParserSource, + error.errorType.toString(), + error.message, + error.message + ); } export function formatValidationErrors( diff --git a/packages/fx-core/src/component/generator/copilotExtension/generator.ts b/packages/fx-core/src/component/generator/copilotExtension/generator.ts index beb88336d7..4688ea31a4 100644 --- a/packages/fx-core/src/component/generator/copilotExtension/generator.ts +++ b/packages/fx-core/src/component/generator/copilotExtension/generator.ts @@ -5,7 +5,17 @@ * @author yuqzho@microsoft.com */ -import { Context, FxError, GeneratorResult, Inputs, ok, Result } from "@microsoft/teamsfx-api"; +import { + AppPackageFolderName, + Context, + err, + FxError, + GeneratorResult, + Inputs, + ManifestTemplateFileName, + ok, + Result, +} from "@microsoft/teamsfx-api"; import { DefaultTemplateGenerator } from "../templates/templateGenerator"; import { ApiAuthOptions, @@ -21,6 +31,9 @@ import { TemplateNames } from "../templates/templateNames"; import { TemplateInfo } from "../templates/templateInfo"; import { featureFlagManager, FeatureFlags } from "../../../common/featureFlags"; import { declarativeCopilotInstructionFileName } from "../constant"; +import { addExistingPlugin } from "./helper"; +import path from "path"; +import { copilotGptManifestUtils } from "../../driver/teamsApp/utils/CopilotGptManifestUtils"; const enum telemetryProperties { templateName = "template-name", @@ -112,13 +125,43 @@ export class CopilotExtensionGenerator extends DefaultTemplateGenerator { ); } - public post( + public async post( context: Context, inputs: Inputs, destinationPath: string, actionContext?: ActionContext ): Promise> { - return Promise.resolve(ok({})); + const isAddingFromExistingPlugin = + inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.existingPlugin().id; + if (isAddingFromExistingPlugin) { + const teamsManifestPath = path.join( + destinationPath, + AppPackageFolderName, + ManifestTemplateFileName + ); + const declarativeCopilotManifestPathRes = await copilotGptManifestUtils.getManifestPath( + teamsManifestPath + ); + if (declarativeCopilotManifestPathRes.isErr()) { + return err(declarativeCopilotManifestPathRes.error); + } + const addPluginRes = await addExistingPlugin( + declarativeCopilotManifestPathRes.value, + inputs[QuestionNames.PluginManifestFilePath], + inputs[QuestionNames.PluginOpenApiSpecFilePath], + "action_1", + context, + this.componentName + ); + + if (addPluginRes.isErr()) { + return err(addPluginRes.error); + } else { + return ok({}); + } + } else { + return ok({}); + } } } diff --git a/packages/fx-core/src/component/generator/copilotExtension/helper.ts b/packages/fx-core/src/component/generator/copilotExtension/helper.ts new file mode 100644 index 0000000000..81782262a2 --- /dev/null +++ b/packages/fx-core/src/component/generator/copilotExtension/helper.ts @@ -0,0 +1,174 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +import { + Context, + DefaultApiSpecFolderName, + err, + FxError, + ok, + PluginManifestSchema, + Result, + UserError, +} from "@microsoft/teamsfx-api"; +import { copilotGptManifestUtils } from "../../driver/teamsApp/utils/CopilotGptManifestUtils"; +import { pluginManifestUtils } from "../../driver/teamsApp/utils/PluginManifestUtils"; +import path from "path"; +import fs from "fs-extra"; +import { normalizePath } from "../../driver/teamsApp/utils/utils"; +import { getDefaultString, getLocalizedString } from "../../../common/localizeUtils"; + +export async function addExistingPlugin( + declarativeCopilotManifestPath: string, + fromPluginManifestPath: string, + fromApiSpecPath: string, + actionId: string, + context: Context, + source: string +): Promise> { + const pluginManifestRes = await pluginManifestUtils.readPluginManifestFile( + fromPluginManifestPath + ); + if (pluginManifestRes.isErr()) { + return err(pluginManifestRes.error); + } + const pluginManifest = pluginManifestRes.value; + + // prerequiste check + const checkRes = validateSourcePluginManifest(pluginManifest, source); + if (checkRes.isErr()) { + return err(checkRes.error); + } + const runtimes = pluginManifest.runtimes!; // have validated that the value exists. + const destinationApiSpecRelativePath = runtimes.find((runtime) => runtime.type === "OpenApi")! + .spec.url as string; // have validated that the value exists. + + const outputFolder = path.dirname(declarativeCopilotManifestPath); + + // Copy OpenAPI spec + const originalDestApiSPecRelativePath = path.resolve( + outputFolder, + destinationApiSpecRelativePath + ); + let destinationApiSpecPath = originalDestApiSPecRelativePath; + const needUpdatePluginManifest = + (await fs.pathExists(originalDestApiSPecRelativePath)) || + path.relative(outputFolder, originalDestApiSPecRelativePath).startsWith(".."); + + if (needUpdatePluginManifest) { + destinationApiSpecPath = await pluginManifestUtils.getDefaultNextAvailableApiSpecPath( + fromApiSpecPath, + path.join(outputFolder, DefaultApiSpecFolderName) + ); + } + await fs.ensureFile(destinationApiSpecPath); + await fs.copyFile(fromApiSpecPath, destinationApiSpecPath); + + // Save plugin manifest + if (needUpdatePluginManifest) { + const runtimeSpecUrl = normalizePath(path.relative(outputFolder, destinationApiSpecPath), true); + for (const runtime of runtimes) { + if (runtime.type === "OpenApi" && runtime.spec?.url) { + runtime.spec.url = runtimeSpecUrl; + } + } + } + + const destinationPluginManifestPath = + await copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath(outputFolder); + await fs.ensureFile(destinationPluginManifestPath); + const pluginManifestContent = JSON.stringify(pluginManifest, undefined, 4); + await fs.writeFile(destinationPluginManifestPath, pluginManifestContent); + + // Update declarative copilot plugin manifest + const addActionRes = await copilotGptManifestUtils.addAction( + declarativeCopilotManifestPath, + actionId, + normalizePath(path.relative(outputFolder, destinationPluginManifestPath), true) + ); + if (addActionRes.isErr()) { + return err(addActionRes.error); + } + return ok(undefined); +} + +export function validateSourcePluginManifest( + manifest: PluginManifestSchema, + source: string +): Result { + if (!manifest.schema_version) { + return err( + new UserError( + source, + "MissingSchemaVersion", + getDefaultString( + "core.createProjectQuestion.addPlugin.MissingRequiredProperty", + "schema_version" + ), + getLocalizedString( + "core.createProjectQuestion.addPlugin.MissingRequiredProperty", + "schema_version" + ) + ) + ); + } + + if (!manifest.runtimes) { + return err( + new UserError( + source, + "MissingRuntimes", + getDefaultString( + "core.createProjectQuestion.addPlugin.MissingRequiredProperty", + "runtimes" + ), + getLocalizedString( + "core.createProjectQuestion.addPlugin.MissingRequiredProperty", + "runtimes" + ) + ) + ); + } + + const apiSpecPaths = new Set(); + for (const runtime of manifest.runtimes) { + if (runtime.type === "OpenApi" && runtime.spec?.url) { + apiSpecPaths.add(runtime.spec.url); + } + } + + if (apiSpecPaths.size === 0) { + return err( + new UserError( + source, + "MissingApiSpec", + getDefaultString( + "core.createProjectQuestion.addPlugin.pluginManifestMissingApiSpec", + "OpenApi" + ), + getLocalizedString( + "core.createProjectQuestion.addPlugin.pluginManifestMissingApiSpec", + "OpenApi" + ) + ) + ); + } + + if (apiSpecPaths.size > 1) { + return err( + new UserError( + source, + "MultipleApiSpecInPluginManifest", + getDefaultString( + "core.createProjectQuestion.addPlugin.pluginManifestMultipleApiSpec", + Array.from(apiSpecPaths).join(", ") + ), + getLocalizedString( + "core.createProjectQuestion.addPlugin.pluginManifestMultipleApiSpec", + Array.from(apiSpecPaths).join(", ") + ) + ) + ); + } + + return ok(undefined); +} diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index 4e8c889cdf..6405f91f83 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -18,6 +18,10 @@ import { CreateProjectInputs, CreateProjectResult, CryptoProvider, + DefaultApiSpecFolderName, + DefaultApiSpecJsonFileName, + DefaultApiSpecYamlFileName, + DefaultPluginManifestFileName, Func, FxError, IGenerator, @@ -99,14 +103,9 @@ import "../component/feature/sso"; import { SSO } from "../component/feature/sso"; import { convertSpecParserErrorToFxError, - defaultApiSpecFolderName, - defaultApiSpecJsonFileName, - defaultApiSpecYamlFileName, - defaultPluginManifestFileName, generateFromApiSpec, generateScaffoldingSummary, getParserOptions, - isYamlSpecFile, listOperations, listPluginExistingOperations, } from "../component/generator/apiSpec/helper"; @@ -166,7 +165,7 @@ import { MosServiceEndpoint, MosServiceScope } from "../component/m365/serviceCo import { teamsDevPortalClient } from "../client/teamsDevPortalClient"; import { SyncManifestArgs } from "../component/driver/teamsApp/interfaces/SyncManifest"; import { SyncManifestDriver } from "../component/driver/teamsApp/syncManifest"; -import { generateDriverContext } from "../common/utils"; +import { generateDriverContext, isJsonSpecFile } from "../common/utils"; export class FxCore { constructor(tools: Tools) { @@ -1858,7 +1857,7 @@ export class FxCore { const url = inputs[QuestionNames.ApiSpecLocation]; const manifestPath = inputs[QuestionNames.ManifestPath]; const appPackageFolder = path.dirname(manifestPath); - const apiSpecFolder = path.join(appPackageFolder, defaultApiSpecFolderName); + const apiSpecFolder = path.join(appPackageFolder, DefaultApiSpecFolderName); const needAddAction = inputs[QuestionNames.PluginAvailability] === PluginAvailabilityOptions.action().id || inputs[QuestionNames.PluginAvailability] === @@ -1917,15 +1916,13 @@ export class FxCore { } // generate file path - let isYaml: boolean; + let isYaml = false; try { - isYaml = await isYamlSpecFile(url); - } catch (e) { - isYaml = false; - } + isYaml = !(await isJsonSpecFile(url)); + } catch (e) {} await fs.ensureDir(apiSpecFolder); - let openApiSpecFileName = isYaml ? defaultApiSpecYamlFileName : defaultApiSpecJsonFileName; + let openApiSpecFileName = isYaml ? DefaultApiSpecYamlFileName : DefaultApiSpecJsonFileName; const openApiSpecFileNamePrefix = openApiSpecFileName.split(".")[0]; const openApiSpecFileType = openApiSpecFileName.split(".")[1]; let apiSpecFileNameSuffix = 1; @@ -1936,10 +1933,9 @@ export class FxCore { } const openApiSpecFilePath = path.join(apiSpecFolder, openApiSpecFileName); - let pluginManifestName = defaultPluginManifestFileName; - const pluginManifestNamePrefix = defaultPluginManifestFileName.split(".")[0]; + const pluginManifestNamePrefix = DefaultPluginManifestFileName.split(".")[0]; let pluginFileNameSuffix = 1; - pluginManifestName = `${pluginManifestNamePrefix}_${pluginFileNameSuffix}.json`; + let pluginManifestName = `${pluginManifestNamePrefix}_${pluginFileNameSuffix}.json`; while (await fs.pathExists(path.join(appPackageFolder, pluginManifestName))) { pluginManifestName = `${pluginManifestNamePrefix}_${++pluginFileNameSuffix}.json`; } diff --git a/packages/fx-core/src/error/common.ts b/packages/fx-core/src/error/common.ts index a1185e3d23..a08a851b8c 100644 --- a/packages/fx-core/src/error/common.ts +++ b/packages/fx-core/src/error/common.ts @@ -654,4 +654,15 @@ export class NpmInstallError extends SystemError { } } +export class FileNotSupportError extends UserError { + constructor(source: string, validFormat: string) { + super( + "Core", + "FailedToParseResourceIdError", + getDefaultString("error.UnsupportedFileFormat", validFormat), + getLocalizedString("error.UnsupportedFileFormat", validFormat) + ); + } +} + export const CoreSource = "Core"; diff --git a/packages/fx-core/src/question/constants.ts b/packages/fx-core/src/question/constants.ts index b24a61f518..fc406df53f 100644 --- a/packages/fx-core/src/question/constants.ts +++ b/packages/fx-core/src/question/constants.ts @@ -103,6 +103,9 @@ export enum QuestionNames { SyncManifest = "sync-manifest", ApiPluginType = "api-plugin-type", WithPlugin = "with-plugin", + ImportPlugin = "import-plugin", + PluginManifestFilePath = "plugin-manifest-path", + PluginOpenApiSpecFilePath = "plugin-opeanapi-spec-path", } export const AppNamePattern = @@ -1269,7 +1272,31 @@ export class ApiPluginStartOptions { }; } - static all(): OptionItem[] { - return [ApiPluginStartOptions.newApi(), ApiPluginStartOptions.apiSpec()]; + static existingPlugin(): OptionItem { + return { + id: "existing-plugin", + label: getLocalizedString("core.createProjectQuestion.apiPlugin.importPlugin.label"), + detail: getLocalizedString("core.createProjectQuestion.apiPlugin.importPlugin.detail"), + }; + } + + static staticAll(): OptionItem[] { + return [ + ApiPluginStartOptions.newApi(), + ApiPluginStartOptions.apiSpec(), + ApiPluginStartOptions.existingPlugin(), + ]; + } + + static all(inputs: Inputs): OptionItem[] { + if (inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id) { + return [ + ApiPluginStartOptions.newApi(), + ApiPluginStartOptions.apiSpec(), + ApiPluginStartOptions.existingPlugin(), + ]; + } else { + return [ApiPluginStartOptions.newApi(), ApiPluginStartOptions.apiSpec()]; + } } } diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index e0e94eb196..3302a7449f 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -11,17 +11,19 @@ import { OptionItem, Platform, SingleFileOrInputQuestion, + SingleFileQuestion, SingleSelectQuestion, Stage, StaticOptions, TextInputQuestion, + UserError, } from "@microsoft/teamsfx-api"; import fs from "fs-extra"; import * as jsonschema from "jsonschema"; import { cloneDeep } from "lodash"; import * as os from "os"; import * as path from "path"; -import { ConstantString } from "../common/constants"; +import { ConstantString, SpecParserSource } from "../common/constants"; import { Correlator } from "../common/correlator"; import { FeatureFlags, @@ -43,7 +45,7 @@ import { needTabAndBotCode, needTabCode, } from "../component/driver/teamsApp/utils/utils"; -import { listOperations } from "../component/generator/apiSpec/helper"; +import { getParserOptions, listOperations } from "../component/generator/apiSpec/helper"; import { IOfficeAddinHostConfig, OfficeAddinProjectConfig, @@ -51,7 +53,13 @@ import { import { DevEnvironmentSetupError } from "../component/generator/spfx/error"; import { Constants } from "../component/generator/spfx/utils/constants"; import { Utils } from "../component/generator/spfx/utils/utils"; -import { EmptyOptionError, FileNotFoundError, assembleError } from "../error"; +import { + CoreSource, + EmptyOptionError, + FileNotFoundError, + FileNotSupportError, + assembleError, +} from "../error"; import { ApiAuthOptions, ApiPluginStartOptions, @@ -71,6 +79,14 @@ import { capabilitiesHavePythonOption, getRuntime, } from "./constants"; +import { ErrorType, ProjectType, SpecParser } from "@microsoft/m365-spec-parser"; +import { pluginManifestUtils } from "../component/driver/teamsApp/utils/PluginManifestUtils"; +import { validateSourcePluginManifest } from "../component/generator/copilotExtension/helper"; +import { + ApiSpecTelemetryPropertis, + getQuestionValidationErrorEventName, + sendTelemetryErrorEvent, +} from "../common/telemetry"; export function projectTypeQuestion(): SingleSelectQuestion { const staticOptions: StaticOptions = [ @@ -1303,11 +1319,118 @@ function apiPluginStartQuestion(): SingleSelectQuestion { : getLocalizedString("core.createProjectQuestion.projectType.copilotExtension.placeholder"); }, cliDescription: "API plugin type.", - staticOptions: ApiPluginStartOptions.all(), + staticOptions: ApiPluginStartOptions.staticAll(), + dynamicOptions: (inputs: Inputs) => { + return ApiPluginStartOptions.all(inputs); + }, default: ApiPluginStartOptions.newApi().id, }; } +export function pluginManifestQuestion(): SingleFileQuestion { + return { + type: "singleFile", + name: QuestionNames.PluginManifestFilePath, + title: getLocalizedString("core.createProjectQuestion.addExistingPlugin.pluginManifest.title"), + placeholder: getLocalizedString( + "core.createProjectQuestion.addExistingPlugin.pluginManifest.placeholder" + ), + cliDescription: "Plugin manifest path.", + filters: { + files: ["json"], + }, + defaultFolder: (inputs: Inputs) => + CLIPlatforms.includes(inputs.platform) ? "./" : os.homedir(), + validation: { + validFunc: async (input: string) => { + const manifestRes = await pluginManifestUtils.readPluginManifestFile(input.trim()); + if (manifestRes.isErr()) { + return (manifestRes.error as UserError).displayMessage; + } else { + const manifest = manifestRes.value; + + const checkRes = validateSourcePluginManifest( + // TODO: telemetry + manifest, + QuestionNames.PluginManifestFilePath + ); + if (checkRes.isErr()) { + return checkRes.error.displayMessage; + } + } + }, + }, + }; +} + +export function pluginApiSpecQuestion(): SingleFileQuestion { + const correlationId = Correlator.getId(); + return { + type: "singleFile", + name: QuestionNames.PluginOpenApiSpecFilePath, + title: getLocalizedString("core.createProjectQuestion.addExistingPlugin.apiSpec.title"), + placeholder: getLocalizedString( + "core.createProjectQuestion.addExistingPlugin.openApiSpec.placeholder" + ), + cliDescription: "OpenAPI description document used for your API plugin.", + filters: { + files: ["json", "yml", "yaml"], + }, + defaultFolder: (inputs: Inputs) => + CLIPlatforms.includes(inputs.platform) + ? "./" + : path.dirname(inputs[QuestionNames.PluginManifestFilePath] as string), + validation: { + validFunc: async (input: string, inputs?: Inputs) => { + if (!inputs) { + throw new Error("inputs is undefined"); // should never happen + } + const filePath = input.trim(); + + const ext = path.extname(filePath).toLowerCase(); + if (![".json", ".yml", ".yaml"].includes(ext)) { + const error = new FileNotSupportError(CoreSource, ["json", "yml", "yaml"].join(", ")); + sendTelemetryErrorEvent( + CoreSource, + getQuestionValidationErrorEventName(QuestionNames.PluginOpenApiSpecFilePath), + error, + { + "correlation-id": correlationId, + } + ); + return error.displayMessage; + } + + const specParser = new SpecParser(filePath, getParserOptions(ProjectType.Copilot)); + const validationRes = await specParser.validate(); + const invalidSpecError = validationRes.errors.find( + (o) => o.type === ErrorType.SpecNotValid + ); + + if (invalidSpecError) { + const error = new UserError( + SpecParserSource, + ApiSpecTelemetryPropertis.InvalidApiSpec, + invalidSpecError.content, + invalidSpecError.content + ); + sendTelemetryErrorEvent( + CoreSource, + getQuestionValidationErrorEventName(QuestionNames.PluginOpenApiSpecFilePath), + error, + { + "correlation-id": correlationId, + [ApiSpecTelemetryPropertis.SpecNotValidDetails]: invalidSpecError.content, + } + ); + } + + return invalidSpecError?.content; + }, + }, + }; +} + export function capabilitySubTree(): IQTreeNode { const node: IQTreeNode = { data: capabilityQuestion(), @@ -1375,12 +1498,26 @@ export function capabilitySubTree(): IQTreeNode { { condition: (inputs: Inputs) => { return ( - inputs[QuestionNames.Capabilities] == CapabilityOptions.apiPlugin().id || - inputs[QuestionNames.WithPlugin] == DeclarativeCopilotTypeOptions.withPlugin().id + inputs[QuestionNames.Capabilities] === CapabilityOptions.apiPlugin().id || + inputs[QuestionNames.WithPlugin] === DeclarativeCopilotTypeOptions.withPlugin().id ); }, data: apiPluginStartQuestion(), }, + { + condition: (inputs: Inputs) => { + return inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.existingPlugin().id; + }, + data: { type: "group", name: QuestionNames.ImportPlugin }, + children: [ + { + data: pluginManifestQuestion(), + }, + { + data: pluginApiSpecQuestion(), + }, + ], + }, { condition: (inputs: Inputs) => { return ( @@ -1434,6 +1571,7 @@ export function capabilitySubTree(): IQTreeNode { (!!inputs[QuestionNames.Capabilities] && inputs[QuestionNames.WithPlugin] !== DeclarativeCopilotTypeOptions.noPlugin().id && inputs[QuestionNames.ApiPluginType] !== ApiPluginStartOptions.apiSpec().id && + inputs[QuestionNames.ApiPluginType] !== ApiPluginStartOptions.existingPlugin().id && inputs[QuestionNames.MeArchitectureType] !== MeArchitectureOptions.apiSpec().id && inputs[QuestionNames.Capabilities] !== CapabilityOptions.officeAddinImport().id && inputs[QuestionNames.Capabilities] !== CapabilityOptions.outlookAddinImport().id) || @@ -1582,6 +1720,7 @@ export function createProjectCliHelpNode(): IQTreeNode { if (!isCopilotExtensionEnabled()) { deleteNames.push(QuestionNames.ApiPluginType); deleteNames.push(QuestionNames.WithPlugin); + deleteNames.push(QuestionNames.ImportPlugin); } trimQuestionTreeForCliHelp(node, deleteNames); return node; diff --git a/packages/fx-core/src/question/inputs/CreateProjectInputs.ts b/packages/fx-core/src/question/inputs/CreateProjectInputs.ts index 823aa2a93c..626b3ccc62 100644 --- a/packages/fx-core/src/question/inputs/CreateProjectInputs.ts +++ b/packages/fx-core/src/question/inputs/CreateProjectInputs.ts @@ -57,12 +57,16 @@ export interface CreateProjectInputs extends Inputs { "spfx-webpart-name"?: string; /** @description SPFx solution folder */ "spfx-folder"?: string; - /** @description Architecture of Search Based Message Extension */ + /** @description Architecture of search based message extension */ "me-architecture"?: "new-api" | "api-spec" | "bot-plugin" | "bot"; - /** @description Create Declarative Copilot */ + /** @description Create declarative copilot */ "with-plugin"?: "no" | "yes"; /** @description Create API Plugin */ - "api-plugin-type"?: "new-api" | "api-spec"; + "api-plugin-type"?: "new-api" | "api-spec" | "existing-plugin"; + /** @description Import manifest file */ + "plugin-manifest-path"?: string; + /** @description Import OpenAPI description document */ + "plugin-opeanapi-spec-path"?: string; /** @description Authentication Type */ "api-auth"?: "none" | "api-key" | "microsoft-entra" | "oauth"; /** @description Chat With Your Data */ diff --git a/packages/fx-core/src/question/options/CreateProjectOptions.ts b/packages/fx-core/src/question/options/CreateProjectOptions.ts index fafc762c52..f25ab5d572 100644 --- a/packages/fx-core/src/question/options/CreateProjectOptions.ts +++ b/packages/fx-core/src/question/options/CreateProjectOptions.ts @@ -121,7 +121,17 @@ export const CreateProjectOptions: CLICommandOption[] = [ type: "string", description: "API plugin type.", default: "new-api", - choices: ["new-api", "api-spec"], + choices: ["new-api", "api-spec", "existing-plugin"], + }, + { + name: "plugin-manifest-path", + type: "string", + description: "Plugin manifest path.", + }, + { + name: "plugin-opeanapi-spec-path", + type: "string", + description: "OpenAPI description document used for your API plugin.", }, { name: "api-auth", diff --git a/packages/fx-core/src/ui/visitor.ts b/packages/fx-core/src/ui/visitor.ts index 4798d6f60b..d4e2e96431 100644 --- a/packages/fx-core/src/ui/visitor.ts +++ b/packages/fx-core/src/ui/visitor.ts @@ -257,6 +257,16 @@ export const questionVisitor: QuestionTreeVisitor = async function ( const validationFunc = question.validation ? getValidationFunction(question.validation, inputs) : undefined; + let defaultFolder; + if (question.defaultFolder) { + if (typeof question.defaultFolder === "function") { + defaultFolder = async () => { + return await (question as any).defaultFolder(inputs); + }; + } else { + defaultFolder = question.defaultFolder; + } + } return await ui.selectFile({ name: question.name, title: title, @@ -267,6 +277,9 @@ export const questionVisitor: QuestionTreeVisitor = async function ( totalSteps: totalSteps, validation: validationFunc, filters: question.filters, + innerStep: question.innerStep, + innerTotalStep: question.innerTotalStep, + defaultFolder, }); } else if (question.type === "folder") { const validationFunc = question.validation diff --git a/packages/fx-core/tests/component/driver/teamsApp/copilotGptManifest.test.ts b/packages/fx-core/tests/component/driver/teamsApp/copilotGptManifest.test.ts index f25f8df80a..c5008765d6 100644 --- a/packages/fx-core/tests/component/driver/teamsApp/copilotGptManifest.test.ts +++ b/packages/fx-core/tests/component/driver/teamsApp/copilotGptManifest.test.ts @@ -13,6 +13,7 @@ import { ok, err, Colors, + UserError, } from "@microsoft/teamsfx-api"; import { copilotGptManifestUtils } from "../../../../src/component/driver/teamsApp/utils/CopilotGptManifestUtils"; import { @@ -29,6 +30,8 @@ import { WrapDriverContext } from "../../../../src/component/driver/util/wrapUti import { createContext, setTools } from "../../../../src/common/globalVars"; import { generateDriverContext } from "../../../../src/common/utils"; import { MockTools } from "../../../core/utils"; +import { manifestUtils } from "../../../../src/component/driver/teamsApp/utils/ManifestUtils"; +import path from "path"; describe("copilotGptManifestUtils", () => { const sandbox = sinon.createSandbox(); @@ -393,4 +396,90 @@ describe("copilotGptManifestUtils", () => { chai.assert.isTrue(res.find((item) => item.content.includes("errorAction1")) !== undefined); }); }); + + describe("getManifestPath", async () => { + setTools(new MockTools()); + const context = generateDriverContext(createContext(), { + platform: Platform.VSCode, + projectPath: "", + }); + + it("get manifest success", async () => { + sandbox.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + copilotExtensions: { + declarativeCopilots: [ + { + file: "test", + id: "1", + }, + ], + }, + } as any) + ); + sandbox.stub(path, "dirname").returns("testFolder"); + sandbox.stub(path, "resolve").returns("testFolder/test"); + + const res = await copilotGptManifestUtils.getManifestPath("testPath"); + + chai.assert.isTrue(res.isOk()); + if (res.isOk()) { + chai.assert.equal(res.value, "testFolder/test"); + } + }); + + it("read Teams manifest error", async () => { + sandbox + .stub(manifestUtils, "_readAppManifest") + .resolves(err(new UserError("readError", "readError", "", ""))); + + const res = await copilotGptManifestUtils.getManifestPath("testPath"); + + chai.assert.isTrue(res.isErr()); + if (res.isErr()) { + chai.assert.equal(res.error.name, "readError"); + } + }); + + it("missing file property", async () => { + sandbox.stub(manifestUtils, "_readAppManifest").resolves( + ok({ + copilotExtensions: { + declarativeCopilots: [ + { + id: "1", + }, + ], + }, + } as any) + ); + + const res = await copilotGptManifestUtils.getManifestPath("testPath"); + + chai.assert.isTrue(res.isErr()); + if (res.isErr()) { + chai.assert.equal(res.error.name, AppStudioError.TeamsAppRequiredPropertyMissingError.name); + } + }); + }); + + describe("getDefaultNextAvailablePluginManifestPath", async () => { + setTools(new MockTools()); + const context = generateDriverContext(createContext(), { + platform: Platform.VSCode, + projectPath: "", + }); + + it("Success on second try", async () => { + sandbox.stub(fs, "pathExists").onFirstCall().resolves(true).onSecondCall().resolves(false); + const res = await copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath("test"); + chai.assert.equal(res, path.join("test", "ai-plugin_2.json")); + }); + + it("Success on first try", async () => { + sandbox.stub(fs, "pathExists").onFirstCall().resolves(false); + const res = await copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath("test"); + chai.assert.equal(res, path.join("test", "ai-plugin_1.json")); + }); + }); }); diff --git a/packages/fx-core/tests/component/driver/teamsApp/pluginManifestUtils.test.ts b/packages/fx-core/tests/component/driver/teamsApp/pluginManifestUtils.test.ts index f083977956..1a9921a2b0 100644 --- a/packages/fx-core/tests/component/driver/teamsApp/pluginManifestUtils.test.ts +++ b/packages/fx-core/tests/component/driver/teamsApp/pluginManifestUtils.test.ts @@ -27,7 +27,7 @@ import { PluginManifestValidationResult } from "../../../../src/component/driver import mockedEnv, { RestoreFn } from "mocked-env"; import { MockedLogProvider, MockedTelemetryReporter } from "../../../plugins/solution/util"; import { createContext, setTools } from "../../../../src/common/globalVars"; -import { generateDriverContext } from "../../../../src/common/utils"; +import * as commonUtils from "../../../../src/common/utils"; import { WrapDriverContext } from "../../../../src/component/driver/util/wrapUtil"; import { MockTools } from "../../../core/utils"; @@ -323,7 +323,7 @@ describe("pluginManifestUtils", () => { describe("getManifest", async () => { setTools(new MockTools()); - const context = generateDriverContext(createContext(), { + const context = commonUtils.generateDriverContext(createContext(), { platform: Platform.VSCode, projectPath: "", }); @@ -451,4 +451,44 @@ describe("pluginManifestUtils", () => { chai.assert.isTrue(res.isErr()); }); }); + + describe("getDefaultNextAvailableApiSpecPath", async () => { + it("Json file: success on second try", async () => { + sandbox.stub(fs, "pathExists").onFirstCall().resolves(true).onSecondCall().resolves(false); + + const res = await pluginManifestUtils.getDefaultNextAvailableApiSpecPath( + "testPath.json", + "test" + ); + + chai.assert.equal(res, path.join("test", "openapi_2.json")); + }); + + it("Yaml file: success on first try", async () => { + sandbox.stub(fs, "pathExists").onFirstCall().resolves(false); + + const res = await pluginManifestUtils.getDefaultNextAvailableApiSpecPath( + "testPath.yaml", + "test" + ); + + chai.assert.equal(res, path.join("test", "openapi_1.yaml")); + }); + + it("success on third try with ", async () => { + sandbox.stub(commonUtils, "isJsonSpecFile").throws("fail"); + sandbox + .stub(fs, "pathExists") + .onFirstCall() + .resolves(true) + .onSecondCall() + .resolves(true) + .onThirdCall() + .resolves(false); + + const res = await pluginManifestUtils.getDefaultNextAvailableApiSpecPath("testPath", "test"); + + chai.assert.equal(res, path.join("test", "openapi_3.json")); + }); + }); }); diff --git a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts index 33a9734533..c1e0ada5c0 100644 --- a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @@ -42,7 +42,6 @@ import * as CopilotPluginHelper from "../../../src/component/generator/apiSpec/h import { formatValidationErrors, generateScaffoldingSummary, - isYamlSpecFile, listPluginExistingOperations, } from "../../../src/component/generator/apiSpec/helper"; import { @@ -60,6 +59,7 @@ import { copilotGptManifestUtils } from "../../../src/component/driver/teamsApp/ import * as pluginGeneratorHelper from "../../../src/component/generator/apiSpec/helper"; import mockedEnv, { RestoreFn } from "mocked-env"; import { FeatureFlagName } from "../../../src/common/featureFlags"; +import * as commonUtils from "../../../src/common/utils"; const teamsManifest: TeamsAppManifest = { name: { @@ -327,36 +327,36 @@ describe("generateScaffoldingSummary", async () => { }); }); -describe("isYamlFile", () => { +describe("isJsonSpecFile", () => { afterEach(() => { sinon.restore(); }); - it("should return false for a valid JSON file", async () => { - const result = await isYamlSpecFile("test.json"); - expect(result).to.be.false; + it("should return true for a valid JSON file", async () => { + const result = await commonUtils.isJsonSpecFile("test.json"); + expect(result).to.be.true; }); - it("should return true for an yaml file", async () => { - const result = await isYamlSpecFile("test.yaml"); - expect(result).to.be.true; + it("should return false for an yaml file", async () => { + const result = await commonUtils.isJsonSpecFile("test.yaml"); + expect(result).to.be.false; }); it("should handle local json files", async () => { const readFileStub = sinon.stub(fs, "readFile").resolves('{"name": "test"}' as any); - const result = await isYamlSpecFile("path/to/localfile"); - expect(result).to.be.false; + const result = await commonUtils.isJsonSpecFile("path/to/localfile"); + expect(result).to.be.true; }); it("should handle remote files", async () => { const axiosStub = sinon.stub(axios, "get").resolves({ data: '{"name": "test"}' }); - const result = await isYamlSpecFile("http://example.com/remotefile"); - expect(result).to.be.false; + const result = await commonUtils.isJsonSpecFile("http://example.com/remotefile"); + expect(result).to.be.true; }); - it("should return true if it is a yaml file", async () => { + it("should return false if it is a yaml file", async () => { const readFileStub = sinon.stub(fs, "readFile").resolves("openapi: 3.0.0" as any); - const result = await isYamlSpecFile("path/to/localfile"); - expect(result).to.be.true; + const result = await commonUtils.isJsonSpecFile("path/to/localfile"); + expect(result).to.be.false; }); }); @@ -1502,7 +1502,7 @@ describe("SpecGenerator", async () => { }; inputs[QuestionNames.ApiSpecLocation] = "test.yaml"; inputs.apiAuthData = { serverUrl: "https://test.com", authName: "test", authType: "apiKey" }; - sandbox.stub(CopilotPluginHelper, "isYamlSpecFile").throws(); + sandbox.stub(commonUtils, "isJsonSpecFile").throws(); const res = await generator.getTemplateInfos(context, inputs, ".", { telemetryProps: {} }); assert.isTrue(res.isOk()); if (res.isOk()) { diff --git a/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts b/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts index a611e78a17..5e5e320112 100644 --- a/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts @@ -5,7 +5,7 @@ * @author yuqzho@microsoft.com */ -import { Inputs, Platform } from "@microsoft/teamsfx-api"; +import { err, Inputs, ok, Platform, PluginManifestSchema, UserError } from "@microsoft/teamsfx-api"; import { assert } from "chai"; import "mocha"; import { createContext } from "../../../src/common/globalVars"; @@ -21,6 +21,11 @@ import { TemplateNames } from "../../../src/component/generator/templates/templa import mockedEnv, { RestoreFn } from "mocked-env"; import sinon from "sinon"; import { FeatureFlagName } from "../../../src/common/featureFlags"; +import { copilotGptManifestUtils } from "../../../src/component/driver/teamsApp/utils/CopilotGptManifestUtils"; +import * as generatorHelper from "../../../src/component/generator/copilotExtension/helper"; +import { pluginManifestUtils } from "../../../src/component/driver/teamsApp/utils/PluginManifestUtils"; +import fs from "fs-extra"; +import path from "path"; describe("copilotExtension", async () => { let mockedEnvRestore: RestoreFn | undefined; @@ -142,4 +147,221 @@ describe("copilotExtension", async () => { } }); }); + + describe("post", async () => { + it("add plugin success", async () => { + const generator = new CopilotExtensionGenerator(); + const context = createContext(); + const inputs: Inputs = { + platform: Platform.CLI, + projectPath: "./", + [QuestionNames.Capabilities]: CapabilityOptions.apiPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.existingPlugin().id, + [QuestionNames.AppName]: "app", + }; + + sandbox + .stub(copilotGptManifestUtils, "getManifestPath") + .resolves(ok("declarativeCopilot.json")); + sandbox.stub(generatorHelper, "addExistingPlugin").resolves(ok(undefined)); + + const res = await generator.post(context, inputs, ""); + assert.isTrue(res.isOk()); + }); + it("get manifest path error", async () => { + const generator = new CopilotExtensionGenerator(); + const context = createContext(); + const inputs: Inputs = { + platform: Platform.CLI, + projectPath: "./", + [QuestionNames.Capabilities]: CapabilityOptions.apiPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.existingPlugin().id, + [QuestionNames.AppName]: "app", + }; + + sandbox + .stub(copilotGptManifestUtils, "getManifestPath") + .resolves(err(new UserError("fakeError", "fakeError", "fakeError", "fakeError"))); + + const res = await generator.post(context, inputs, ""); + assert.isTrue(res.isErr() && res.error.name === "fakeError"); + }); + + it("add plugin errror", async () => { + const generator = new CopilotExtensionGenerator(); + const context = createContext(); + const inputs: Inputs = { + platform: Platform.CLI, + projectPath: "./", + [QuestionNames.Capabilities]: CapabilityOptions.apiPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.existingPlugin().id, + [QuestionNames.AppName]: "app", + }; + + sandbox + .stub(copilotGptManifestUtils, "getManifestPath") + .resolves(ok("declarativeCopilot.json")); + sandbox + .stub(generatorHelper, "addExistingPlugin") + .resolves(err(new UserError("fakeError", "fakeError", "fakeError", "fakeError"))); + + const res = await generator.post(context, inputs, ""); + assert.isTrue(res.isErr() && res.error.name === "fakeError"); + }); + }); +}); + +describe("helper", async () => { + let mockedEnvRestore: RestoreFn | undefined; + const sandbox = sinon.createSandbox(); + afterEach(() => { + sandbox.restore(); + if (mockedEnvRestore) { + mockedEnvRestore(); + } + }); + const context = createContext(); + + describe("addExistingPlugin", async () => { + it("success: need to update plugin manifest", async () => { + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v1", + name_for_human: "test", + runtimes: [{ type: "OpenApi", spec: { url: "test.json" } }], + } as any) + ); + sandbox.stub(copilotGptManifestUtils, "addAction").resolves(ok({} as any)); + const getApiSpecPath = sandbox + .stub(pluginManifestUtils, "getDefaultNextAvailableApiSpecPath") + .resolves("nextApiSpec.json"); + sandbox + .stub(copilotGptManifestUtils, "getDefaultNextAvailablePluginManifestPath") + .resolves("nextPluginManifest.json"); + sandbox.stub(fs, "pathExists").resolves(true); + sandbox.stub(fs, "ensureFile").resolves(); + sandbox.stub(fs, "copyFile").resolves(); + sandbox.stub(fs, "writeFile").resolves(); + const res = await generatorHelper.addExistingPlugin( + "test.json", + "originalManifest.json", + "originalManifest.yaml", + "id", + context, + "source" + ); + assert.isTrue(res.isOk()); + assert.isTrue(getApiSpecPath.calledOnce); + }); + + it("success: no need to update plugin manifest", async () => { + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v1", + name_for_human: "test", + runtimes: [{ type: "OpenApi", spec: { url: "test.json" } }], + } as any) + ); + sandbox.stub(copilotGptManifestUtils, "addAction").resolves(ok({} as any)); + const getApiSpecPath = sandbox + .stub(pluginManifestUtils, "getDefaultNextAvailableApiSpecPath") + .resolves("nextApiSpec.json"); + sandbox + .stub(copilotGptManifestUtils, "getDefaultNextAvailablePluginManifestPath") + .resolves("nextPluginManifest.json"); + sandbox.stub(fs, "pathExists").resolves(false); + sandbox.stub(path, "relative").returns("test"); + sandbox.stub(fs, "ensureFile").resolves(); + sandbox.stub(fs, "copyFile").resolves(); + sandbox.stub(fs, "writeFile").resolves(); + const res = await generatorHelper.addExistingPlugin( + "test.json", + "originalManifest.json", + "originalManifest.yaml", + "id", + context, + "source" + ); + assert.isTrue(res.isOk()); + assert.isTrue(getApiSpecPath.notCalled); + }); + + it("error: readPluginManifestFile Error", async () => { + sandbox + .stub(pluginManifestUtils, "readPluginManifestFile") + .resolves(err(new UserError("fakeError", "fakeError", "fakeError", "fakeError"))); + + const res = await generatorHelper.addExistingPlugin( + "test.json", + "originalManifest.json", + "originalManifest.yaml", + "id", + context, + "source" + ); + assert.isTrue(res.isErr() && res.error.name === "fakeError"); + }); + + it("error: add action error", async () => { + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v1", + name_for_human: "test", + runtimes: [{ type: "OpenApi", spec: { url: "test.json" } }], + } as any) + ); + sandbox + .stub(copilotGptManifestUtils, "addAction") + .resolves(err(new UserError("fakeError", "fakeError", "fakeError", "fakeError"))); + const getApiSpecPath = sandbox + .stub(pluginManifestUtils, "getDefaultNextAvailableApiSpecPath") + .resolves("nextApiSpec.json"); + sandbox + .stub(copilotGptManifestUtils, "getDefaultNextAvailablePluginManifestPath") + .resolves("nextPluginManifest.json"); + sandbox.stub(fs, "pathExists").resolves(true); + sandbox.stub(fs, "ensureFile").resolves(); + sandbox.stub(fs, "copyFile").resolves(); + sandbox.stub(fs, "writeFile").resolves(); + const res = await generatorHelper.addExistingPlugin( + "test.json", + "originalManifest.json", + "originalManifest.yaml", + "id", + context, + "source" + ); + assert.isTrue(res.isErr() && res.error.name === "fakeError"); + }); + }); + + describe("validateSourcePluginManifest", () => { + it("Invalid manist", () => { + const manifest: PluginManifestSchema = { + schema_version: "", + name_for_human: "test", + } as any; + manifest.runtimes = [{ type: "OpenApi", spec: { url: "test.json" } }]; + + let res = generatorHelper.validateSourcePluginManifest(manifest as any, "source"); + assert.isTrue(res.isErr() && res.error.name === "MissingSchemaVersion"); + + manifest.schema_version = "v1"; + delete manifest.runtimes; + res = generatorHelper.validateSourcePluginManifest(manifest as any, "source"); + + assert.isTrue(res.isErr() && res.error.name === "MissingRuntimes"); + + manifest.runtimes = [ + { type: "OpenApi", spec: { url: "test.json" } }, + { type: "OpenApi", spec: { url: "test2.json" } }, + ]; + res = generatorHelper.validateSourcePluginManifest(manifest as any, "source"); + assert.isTrue(res.isErr() && res.error.name === "MultipleApiSpecInPluginManifest"); + + manifest.runtimes = [{ type: "OpenApi" } as any]; + res = generatorHelper.validateSourcePluginManifest(manifest as any, "source"); + assert.isTrue(res.isErr() && res.error.name === "MissingApiSpec"); + }); + }); }); diff --git a/packages/fx-core/tests/core/FxCore.test.ts b/packages/fx-core/tests/core/FxCore.test.ts index ecd8c0a3c2..6b85a968c6 100644 --- a/packages/fx-core/tests/core/FxCore.test.ts +++ b/packages/fx-core/tests/core/FxCore.test.ts @@ -2089,6 +2089,8 @@ describe("getQuestions", async () => { "me-architecture", "with-plugin", "api-plugin-type", + "plugin-manifest-path", + "plugin-opeanapi-spec-path", "api-auth", "custom-copilot-rag", "openapi-spec-location", diff --git a/packages/fx-core/tests/question/create.test.ts b/packages/fx-core/tests/question/create.test.ts index ea194fdd70..176f0507c3 100644 --- a/packages/fx-core/tests/question/create.test.ts +++ b/packages/fx-core/tests/question/create.test.ts @@ -12,8 +12,11 @@ import { OptionItem, Platform, Question, + SingleFileQuestion, SingleSelectQuestion, + UserError, UserInteraction, + err, ok, } from "@microsoft/teamsfx-api"; import { assert, expect } from "chai"; @@ -58,6 +61,8 @@ import { getLanguageOptions, getSolutionName, officeAddinFrameworkQuestion, + pluginApiSpecQuestion, + pluginManifestQuestion, programmingLanguageQuestion, projectTypeQuestion, } from "../../src/question"; @@ -1626,7 +1631,7 @@ describe("scaffold question", () => { } else if (question.name === QuestionNames.ApiPluginType) { const select = question as SingleSelectQuestion; const options = select.staticOptions; - assert.isTrue(options.length === 2); + assert.isTrue(options.length === 3); return ok({ type: "success", result: ApiPluginStartOptions.newApi().id }); } else if (question.name === QuestionNames.ApiAuth) { const select = question as SingleSelectQuestion; @@ -3052,7 +3057,7 @@ describe("scaffold question", () => { }); }); - describe("customize GPT", () => { + describe("declarative copilot", () => { let mockedEnvRestore: RestoreFn; const tools = new MockTools(); setTools(tools); @@ -3068,7 +3073,7 @@ describe("scaffold question", () => { } }); - it("customize GPT without plugin", async () => { + it("declarative copilot without plugin", async () => { const inputs: Inputs = { platform: Platform.VSCode, }; @@ -3119,7 +3124,7 @@ describe("scaffold question", () => { ]); }); - it("customize GPT with plugin from scratch", async () => { + it("declarative copilot with plugin from scratch", async () => { const inputs: Inputs = { platform: Platform.VSCode, }; @@ -3171,6 +3176,173 @@ describe("scaffold question", () => { QuestionNames.AppName, ]); }); + + it("declarative copilot with existing plugin", async () => { + const inputs: Inputs = { + platform: Platform.VSCode, + }; + const questions: string[] = []; + const visitor: QuestionTreeVisitor = async ( + question: Question, + ui: UserInteraction, + inputs: Inputs, + step?: number, + totalSteps?: number + ) => { + questions.push(question.name); + + await callFuncs(question, inputs); + + if (question.name === QuestionNames.ProjectType) { + const select = question as SingleSelectQuestion; + const options = await select.dynamicOptions!(inputs); + return ok({ type: "success", result: ProjectTypeOptions.copilotExtension().id }); + } else if (question.name === QuestionNames.Capabilities) { + const select = question as SingleSelectQuestion; + const options = await select.dynamicOptions!(inputs); + const title = + typeof question.title === "function" ? await question.title(inputs) : question.title; + assert.equal( + title, + getLocalizedString("core.createProjectQuestion.projectType.copilotExtension.title") + ); + return ok({ type: "success", result: CapabilityOptions.declarativeCopilot().id }); + } else if (question.name === QuestionNames.WithPlugin) { + return ok({ type: "success", result: DeclarativeCopilotTypeOptions.withPlugin().id }); + } else if (question.name === QuestionNames.ApiPluginType) { + return ok({ type: "success", result: ApiPluginStartOptions.existingPlugin().id }); + } else if (question.name === QuestionNames.PluginManifestFilePath) { + const select = question as SingleFileQuestion; + const title = select.title; + assert.isNotEmpty(title); + + const defaultFolderFunc = select.defaultFolder as LocalFunc; + let defaultFolder = await defaultFolderFunc(inputs); + assert.notEqual(defaultFolder, "./"); + defaultFolder = await defaultFolderFunc({ ...inputs, platform: Platform.CLI }); + assert.equal(defaultFolder, "./"); + + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v2.0", + name_for_human: "test", + runtimes: [ + { + type: "OpenApi", + spec: { + url: "test.json", + }, + }, + ], + } as any) + ); + const validationFunc = question.validation as FuncValidation; + const validationRes = await validationFunc.validFunc!("", inputs); + assert.isUndefined(validationRes); + + return ok({ type: "success", result: "c://testFolder/test.json" }); + } else if (question.name === QuestionNames.PluginOpenApiSpecFilePath) { + const select = question as SingleFileQuestion; + const title = select.title; + assert.isNotEmpty(title); + + const defaultFolderFunc = select.defaultFolder as LocalFunc; + let defaultFolder = await defaultFolderFunc(inputs); + assert.isTrue(defaultFolder.endsWith("testFolder")); + defaultFolder = await defaultFolderFunc({ ...inputs, platform: Platform.CLI }); + + assert.equal(defaultFolder, "./"); + + sandbox.stub(SpecParser.prototype, "validate").resolves({ + status: ValidationStatus.Valid, + errors: [], + warnings: [], + }); + const validationFunc = question.validation as FuncValidation; + const validationRes = await validationFunc.validFunc!("test.json", inputs); + assert.isUndefined(validationRes); + + return ok({ type: "success", result: "test.json" }); + } else if (question.name === QuestionNames.AppName) { + return ok({ type: "success", result: "test001" }); + } else if (question.name === QuestionNames.Folder) { + return ok({ type: "success", result: "./" }); + } + return ok({ type: "success", result: undefined }); + }; + await traverse(createProjectQuestionNode(), inputs, ui, undefined, visitor); + assert.deepEqual(questions, [ + QuestionNames.ProjectType, + QuestionNames.Capabilities, + QuestionNames.WithPlugin, + QuestionNames.ApiPluginType, + QuestionNames.PluginManifestFilePath, + QuestionNames.PluginOpenApiSpecFilePath, + QuestionNames.Folder, + QuestionNames.AppName, + ]); + }); + + it("pluginManifestQuestion: Invalid due to read manifest error ", async () => { + const question = pluginManifestQuestion(); + const inputs: Inputs = { + platform: Platform.VSCode, + }; + sandbox + .stub(pluginManifestUtils, "readPluginManifestFile") + .resolves(err(new UserError("source", "name", "fakeError", "fakeError"))); + const validationFunc = question.validation as FuncValidation; + const validationRes = await validationFunc.validFunc!("", inputs); + assert.equal(validationRes, "fakeError"); + }); + + it("pluginManifestQuestion: Invalid due to missing runtime", async () => { + const question = pluginManifestQuestion(); + const inputs: Inputs = { + platform: Platform.VSCode, + }; + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v2.0", + name_for_human: "test", + runtimes: [], + } as any) + ); + const validationFunc = question.validation as FuncValidation; + const validationRes = await validationFunc.validFunc!("", inputs); + assert.isTrue(validationRes?.includes("OpenApi")); + }); + + it("pluginApiSpecQuestion: invalid file format", async () => { + const question = pluginApiSpecQuestion(); + const inputs: Inputs = { + platform: Platform.VSCode, + }; + + const validationFunc = question.validation as FuncValidation; + const validationRes = await validationFunc.validFunc!("test.txt", inputs); + assert.isTrue(validationRes?.includes("json, yml, yaml")); + }); + + it("pluginApiSpecQuestion: invalid spec ", async () => { + const question = pluginApiSpecQuestion(); + const inputs: Inputs = { + platform: Platform.VSCode, + }; + sandbox.stub(SpecParser.prototype, "validate").resolves({ + status: ValidationStatus.Error, + errors: [ + { + type: ErrorType.SpecNotValid, + content: "invalidFile", + }, + ], + warnings: [], + }); + const validationFunc = question.validation as FuncValidation; + const validationRes = await validationFunc.validFunc!("test.json", inputs); + assert.equal(validationRes, "invalidFile"); + }); }); }); diff --git a/packages/fx-core/tests/ui/qm.visitor.test.ts b/packages/fx-core/tests/ui/qm.visitor.test.ts index f6b50ad348..709c1a3a95 100644 --- a/packages/fx-core/tests/ui/qm.visitor.test.ts +++ b/packages/fx-core/tests/ui/qm.visitor.test.ts @@ -819,17 +819,33 @@ describe("Question Model - Visitor Test", () => { assert.isTrue(res.isOk() && res.value.type === "success"); }); it("selectFile", async () => { - sandbox.stub(tools.ui, "selectFile").resolves(ok({ type: "success", result: "a" })); + const uiStub = sandbox + .stub(tools.ui, "selectFile") + .resolves(ok({ type: "success", result: "a" })); const question: SingleFileQuestion = { type: "singleFile", name: "test", title: "test", + innerStep: 1, + innerTotalStep: 2, + defaultFolder: "./", }; const inputs: Inputs = { platform: Platform.VSCode, }; - const res = await questionVisitor(question, tools.ui, inputs); + let res = await questionVisitor(question, tools.ui, inputs); + assert.isTrue(uiStub.args[0][0].defaultFolder === "./"); assert.isTrue(res.isOk() && res.value.type === "success"); + + question.defaultFolder = (inputs: Inputs) => { + return "test"; + }; + res = await questionVisitor(question, tools.ui, inputs); + assert.isTrue(res.isOk() && res.value.type === "success"); + assert.isTrue( + typeof uiStub.args[1][0].defaultFolder === "function" && + (await uiStub.args[1][0].defaultFolder()) === "test" + ); }); it("selectFolder", async () => { sandbox.stub(tools.ui, "selectFolder").resolves(ok({ type: "success", result: "a" })); diff --git a/packages/vscode-ui/src/ui.ts b/packages/vscode-ui/src/ui.ts index acaa611426..0e13f40383 100644 --- a/packages/vscode-ui/src/ui.ts +++ b/packages/vscode-ui/src/ui.ts @@ -765,6 +765,9 @@ export class VSCodeUI implements UserInteraction { //TODO quick workaround solution, which will blocking the UI popup config.default = await config.default(); } + if (config.defaultFolder && typeof config.defaultFolder === "function") { + config.defaultFolder = await config.defaultFolder(); + } return this.selectFileInQuickPick(config, "file", config.default as string); } @@ -798,6 +801,7 @@ export class VSCodeUI implements UserInteraction { label: string; description?: string; }[]; + defaultFolder?: string; }, type: "file" | "files", defaultValue?: string @@ -823,6 +827,10 @@ export class VSCodeUI implements UserInteraction { if (config.step && config.step > 1) { quickPick.buttons = [QuickInputButtons.Back]; } + if (!!config.innerStep && !!config.innerTotalStep) { + quickPick.totalSteps = config.innerTotalStep; + quickPick.step = config.innerStep; + } quickPick.ignoreFocusOut = true; quickPick.placeholder = config.placeholder; quickPick.matchOnDescription = false; @@ -859,7 +867,11 @@ export class VSCodeUI implements UserInteraction { } else if (item.id === "browse") { fileSelectorIsOpen = true; const uriList: Uri[] | undefined = await window.showOpenDialog({ - defaultUri: config.default ? Uri.file(config.default as string) : undefined, + defaultUri: config.defaultFolder + ? Uri.file(config.defaultFolder) + : config.default + ? Uri.file(config.default as string) + : undefined, canSelectFiles: true, canSelectFolders: false, canSelectMany: type === "files", diff --git a/packages/vscode-ui/src/visitor.ts b/packages/vscode-ui/src/visitor.ts index a4ea59aae1..98be7f68d5 100644 --- a/packages/vscode-ui/src/visitor.ts +++ b/packages/vscode-ui/src/visitor.ts @@ -228,6 +228,16 @@ export class QuestionModelEngine { const validationFunc = question.validation ? getValidationFunction(question.validation, inputs) : undefined; + let defaultFolder; + if (question.defaultFolder) { + if (typeof question.defaultFolder === "function") { + defaultFolder = async () => { + return await (question as any).defaultFolder(inputs); + }; + } else { + defaultFolder = question.defaultFolder; + } + } return await ui.selectFile({ name: question.name, title: title, @@ -238,6 +248,7 @@ export class QuestionModelEngine { totalSteps: totalSteps, validation: validationFunc, filters: question.filters, + defaultFolder, }); } else if (question.type === "folder") { const validationFunc = question.validation diff --git a/packages/vscode-ui/tests/qm.test.ts b/packages/vscode-ui/tests/qm.test.ts index 9107589d6b..dab676b38b 100644 --- a/packages/vscode-ui/tests/qm.test.ts +++ b/packages/vscode-ui/tests/qm.test.ts @@ -975,17 +975,32 @@ describe("Question Model - Visitor Test", () => { assert.isTrue(res.isOk() && res.value.type === "success"); }); it("selectFile", async () => { - sandbox.stub(mockUI, "selectFile").resolves(ok({ type: "success", result: "a" })); + const uiStub = sandbox + .stub(mockUI, "selectFile") + .resolves(ok({ type: "success", result: "a" })); const question: SingleFileQuestion = { type: "singleFile", name: "test", title: "test", + innerStep: 1, + innerTotalStep: 2, + defaultFolder: "./", }; const inputs: Inputs = { platform: Platform.VSCode, }; - const res = await engine.defaultVisotor(question, mockUI, inputs); + let res = await engine.defaultVisotor(question, mockUI, inputs); assert.isTrue(res.isOk() && res.value.type === "success"); + + question.defaultFolder = (inputs: Inputs) => { + return "test"; + }; + res = await engine.defaultVisotor(question, mockUI, inputs); + assert.isTrue(res.isOk() && res.value.type === "success"); + assert.isTrue( + typeof uiStub.args[1][0].defaultFolder === "function" && + (await uiStub.args[1][0].defaultFolder()) === "test" + ); }); it("selectFolder", async () => { sandbox.stub(mockUI, "selectFolder").resolves(ok({ type: "success", result: "a" })); From ea60fdfe96a17d96abaafd433295c2a3f4b7f60d Mon Sep 17 00:00:00 2001 From: HuihuiWu-Microsoft <73154171+HuihuiWu-Microsoft@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:45:46 +0800 Subject: [PATCH 27/52] ci: update localization pipeline to use persistCredential instead of PAT (#12294) * fix: add targetpath * fix: enable persistCredentials * fix: feed name * fix: feed * fix: feed * fix: feed --- .azure-pipelines/localization.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.azure-pipelines/localization.yml b/.azure-pipelines/localization.yml index 6f5509921d..09950841de 100644 --- a/.azure-pipelines/localization.yml +++ b/.azure-pipelines/localization.yml @@ -15,16 +15,14 @@ name: $(Date:yyyyMMdd).$(Rev:r) variables: - name: 1espt.codesignvalidation.enforced value: false -- name: GitHubPat - value: -- name: OneLocBuildPat - value: - name: PipelineClassification_Audited value: Production - name: PipelineGovernanceStatus_Audited value: true - name: policy_service.build_task_injection.enabled value: true +- name: TeamName + value: 'TeamsFx' extends: template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate parameters: @@ -50,10 +48,16 @@ extends: outputs: - output: pipelineArtifact displayName: 'Publish Artifact: drop' + targetPath: '$(Build.ArtifactStagingDirectory)\loc' + artifactName: drop + artifactType: Container + condition: succeeded() + sbomEnabled: false steps: - checkout: self clean: true fetchTags: false + persistCredentials: true - task: NuGetAuthenticate@1 displayName: NuGet Authenticate inputs: @@ -66,6 +70,8 @@ extends: isShouldReusePrSelected: true isAutoCompletePrSelected: false packageSourceAuth: patAuth + patVariable: '$(System.AccessToken)' + dependencyPackageSource: https://devdiv.pkgs.visualstudio.com/DevDiv/_packaging/TeamsFx/nuget/v3/index.json - task: PowerShell@2 displayName: Copy zh json files for VSC inputs: From a2601d8e9ed906d083c98499a8f45f7f83640f16 Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Thu, 29 Aug 2024 13:45:39 +0800 Subject: [PATCH 28/52] perf(kiota): add new command handler for kiota (#12297) * perf(kiota): add new command handler for kiota * fix: remove useless code * perf: update command name * fix: fix comment --- packages/vscode-extension/package.nls.json | 3 +- packages/vscode-extension/src/extension.ts | 10 +++ .../createPluginWithManifestHandler.ts | 74 +++++++++++++++++++ .../src/telemetry/extTelemetryEvents.ts | 3 + .../createPluginWithManifestHandler.test.ts | 74 +++++++++++++++++++ 5 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts create mode 100644 packages/vscode-extension/test/handlers/createPluginWithManifestHandler.test.ts diff --git a/packages/vscode-extension/package.nls.json b/packages/vscode-extension/package.nls.json index 7b64153997..e834166399 100644 --- a/packages/vscode-extension/package.nls.json +++ b/packages/vscode-extension/package.nls.json @@ -551,5 +551,6 @@ "teamstoolkit.walkthroughs.buildIntelligentApps.intelligentAppResources.title": "Intelligent App Resources", "teamstoolkit.walkthroughs.buildIntelligentApps.intelligentAppResources.description": "Explore these resources to build intelligent apps and enhance your development projects\n🗒️ [Generative AI for Beginners](https://github.com/microsoft/generative-ai-for-beginners/tree/main)\n✨ [Retrieval Augmented Generation (RAG)](https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview)\n📚 [AI Learning and Community Hub](https://learn.microsoft.com/en-us/ai/)", - "teamstoolkit.m365.needSignIn.message": "You need to sign in your Microsoft 365 account." + "teamstoolkit.m365.needSignIn.message": "You need to sign in your Microsoft 365 account.", + "teamstoolkit.handler.createPluginWithManifest.error.missingParameter": "Missing parameter in the createPluginWithManifest command. Usage: createPluginWithManifest(API_SPEC_PATH:string, PLUGIN_MANIFEST_PATH: string, SCAFFOLD_NEW: boolean)." } diff --git a/packages/vscode-extension/src/extension.ts b/packages/vscode-extension/src/extension.ts index f42c6a73dc..d087a132f5 100644 --- a/packages/vscode-extension/src/extension.ts +++ b/packages/vscode-extension/src/extension.ts @@ -199,6 +199,7 @@ import { ReleaseNote } from "./utils/releaseNote"; import { ExtensionSurvey } from "./utils/survey"; import { getSettingsVersion, projectVersionCheck } from "./utils/telemetryUtils"; import { isVSCodeInsiderVersion } from "./utils/versionUtil"; +import { createPluginWithManifest } from "./handlers/createPluginWithManifestHandler"; export async function activate(context: vscode.ExtensionContext) { const value = @@ -532,6 +533,15 @@ function registerInternalCommands(context: vscode.ExtensionContext) { context.subscriptions.push(validatePrerequisitesCmd); registerInCommandController(context, CommandKeys.SigninAzure, signinAzureCallback); + + // Register createPluginWithManifest command + if (featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration)) { + const createPluginWithManifestCommand = vscode.commands.registerCommand( + "fx-extension.createPluginFromManifest", + createPluginWithManifest + ); + context.subscriptions.push(createPluginWithManifestCommand); + } } /** diff --git a/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts b/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts new file mode 100644 index 0000000000..e43c9d1faa --- /dev/null +++ b/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { + CreateProjectResult, + err, + FxError, + ok, + Result, + Stage, + UserError, +} from "@microsoft/teamsfx-api"; +import { getSystemInputs } from "../utils/systemEnvUtils"; +import { + ApiPluginStartOptions, + CapabilityOptions, + ProjectTypeOptions, + QuestionNames, +} from "@microsoft/teamsfx-core"; +import { runCommand } from "./sharedOpts"; +import * as vscode from "vscode"; +import { openFolder } from "../utils/workspaceUtils"; +import { ExtensionSource } from "../error/error"; +import { ExtTelemetry } from "../telemetry/extTelemetry"; +import { getTriggerFromProperty } from "../utils/telemetryUtils"; +import { + TelemetryEvent, + TelemetryProperty, + TelemetrySuccess, +} from "../telemetry/extTelemetryEvents"; +import { localize } from "../utils/localizeUtils"; + +export async function createPluginWithManifest(args?: any[]): Promise> { + ExtTelemetry.sendTelemetryEvent( + TelemetryEvent.CreatePluginWithManifestStart, + getTriggerFromProperty(args) + ); + if (!args || args.length < 2) { + const error = new UserError( + ExtensionSource, + "missingParameter", + localize("teamstoolkit.handler.createPluginWithManifest.error.missingParameter") + ); + ExtTelemetry.sendTelemetryErrorEvent(TelemetryEvent.CreatePluginWithManifest, error); + return err(error); + } + + const specPath = args[0]; + const pluginManifestPath = args[1]; + const scaffoldNew = args.length > 2 ? args[2] : true; + + const inputs = getSystemInputs(); + inputs.capabilities = CapabilityOptions.apiPlugin().id; + inputs[QuestionNames.ApiSpecLocation] = specPath; + inputs[QuestionNames.ApiPluginManifestPath] = pluginManifestPath; + inputs[QuestionNames.ApiPluginType] = ApiPluginStartOptions.apiSpec().id; + inputs[QuestionNames.ApiOperation] = pluginManifestPath; + inputs[QuestionNames.ProjectType] = ProjectTypeOptions.copilotExtension().id; + // TODO (kiota): handle scaffold directly scenario + const result = await runCommand(Stage.create, inputs); + + if (result.isErr()) { + ExtTelemetry.sendTelemetryErrorEvent(TelemetryEvent.CreatePluginWithManifest, result.error); + return err(result.error); + } + + const res = result.value as CreateProjectResult; + const projectPathUri = vscode.Uri.file(res.projectPath); + await openFolder(projectPathUri, true, res.warnings); + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.CreatePluginWithManifest, { + [TelemetryProperty.Success]: TelemetrySuccess.Yes, + }); + return ok({}); +} diff --git a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts index 2d42af9517..bd7a85b48a 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts @@ -289,6 +289,9 @@ export enum TelemetryEvent { stopAddInDebug = "stop-office-addin-debug", generateAddInGUID = "generate-addin-guid", openNewOfficeAddInProject = "open-new-office-addin-project", + + CreatePluginWithManifestStart = "create-plugin-with-manifest-start", + CreatePluginWithManifest = "create-plugin-with-manifest", } export enum TelemetryProperty { diff --git a/packages/vscode-extension/test/handlers/createPluginWithManifestHandler.test.ts b/packages/vscode-extension/test/handlers/createPluginWithManifestHandler.test.ts new file mode 100644 index 0000000000..8762d97345 --- /dev/null +++ b/packages/vscode-extension/test/handlers/createPluginWithManifestHandler.test.ts @@ -0,0 +1,74 @@ +import * as sinon from "sinon"; +import * as chai from "chai"; +import fs from "fs-extra"; +import * as globalVariables from "../../src/globalVariables"; +import * as vsc_ui from "../../src/qm/vsc_ui"; +import * as vscode from "vscode"; +import * as projectSettingsHelper from "@microsoft/teamsfx-core/build/common/projectSettingsHelper"; +import * as localizeUtils from "@microsoft/teamsfx-core/build/common/localizeUtils"; +import { ExtTelemetry } from "../../src/telemetry/extTelemetry"; +import { MockCore } from "../mocks/mockCore"; +import { createPluginWithManifest } from "../../src/handlers/createPluginWithManifestHandler"; +import * as workspaceUtils from "../../src/utils/workspaceUtils"; +import { err, UserError } from "@microsoft/teamsfx-api"; + +describe("createPluginWithManifestHandler", () => { + const sandbox = sinon.createSandbox(); + + beforeEach(() => { + sandbox.stub(ExtTelemetry, "sendTelemetryErrorEvent"); + sandbox.stub(ExtTelemetry, "sendTelemetryEvent"); + }); + + afterEach(() => { + sandbox.restore(); + }); + + it("happy path: successfullly create plugin project", async () => { + const core = new MockCore(); + sandbox.stub(globalVariables, "core").value(core); + const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); + const res = await createPluginWithManifest(["specPath", "pluginManifestPath", true]); + chai.assert.isTrue(res.isOk()); + chai.assert.isTrue(openFolder.calledOnce); + }); + + it("should throw error if args length is less than 2", async () => { + const core = new MockCore(); + sandbox.stub(globalVariables, "core").value(core); + const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); + const res = await createPluginWithManifest(["specPath"]); + chai.assert.isTrue(res.isErr()); + chai.assert.isTrue(openFolder.notCalled); + if (res.isErr()) { + chai.assert.equal(res.error.name, "missingParameter"); + } + }); + + it("should throw error if args is empty", async () => { + const core = new MockCore(); + sandbox.stub(globalVariables, "core").value(core); + const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); + const res = await createPluginWithManifest([]); + chai.assert.isTrue(res.isErr()); + chai.assert.isTrue(openFolder.notCalled); + if (res.isErr()) { + chai.assert.equal(res.error.name, "missingParameter"); + } + }); + + it("should throw error if core return error", async () => { + const core = new MockCore(); + sandbox.stub(globalVariables, "core").value(core); + sandbox + .stub(globalVariables.core, "createProject") + .resolves(err(new UserError("core", "fakeError", "fakeErrorMessage"))); + const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); + const res = await createPluginWithManifest(["specPath", "pluginManifestPath", true]); + chai.assert.isTrue(res.isErr()); + chai.assert.isTrue(openFolder.notCalled); + if (res.isErr()) { + chai.assert.equal(res.error.name, "fakeError"); + } + }); +}); From a00b095da950a213ac031305284158edd7801662 Mon Sep 17 00:00:00 2001 From: Yiqing Zhao Date: Thu, 29 Aug 2024 14:41:26 +0800 Subject: [PATCH 29/52] fix: fix axios vulnerability (#12301) Co-authored-by: Yiqing Zhao --- packages/sdk/package.json | 2 +- packages/sdk/pnpm-lock.yaml | 27 +++++++++------------------ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 54a1b76ee2..1aab36f5dd 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -51,7 +51,7 @@ "adaptivecards-templating": "^2.3.1", "adaptive-expressions": "^4.22.3", "@microsoft/microsoft-graph-client": "^3.0.7", - "axios": "^1.6.8", + "axios": "^1.7.5", "botbuilder": "^4.22.3", "botbuilder-dialogs": "^4.22.3", "botframework-connector": "^4.22.3", diff --git a/packages/sdk/pnpm-lock.yaml b/packages/sdk/pnpm-lock.yaml index dd30951adb..ba8b54455a 100644 --- a/packages/sdk/pnpm-lock.yaml +++ b/packages/sdk/pnpm-lock.yaml @@ -27,8 +27,8 @@ dependencies: specifier: ^2.3.1 version: 2.3.1(adaptive-expressions@4.22.3) axios: - specifier: ^1.6.8 - version: 1.6.8 + specifier: ^1.7.5 + version: 1.7.5 botbuilder: specifier: ^4.22.3 version: 4.22.3(supports-color@9.4.0) @@ -120,7 +120,7 @@ devDependencies: version: 2.0.0 axios-mock-adapter: specifier: ^1.20.0 - version: 1.20.0(axios@1.6.8) + version: 1.20.0(axios@1.7.5) botbuilder-core: specifier: ^4.22.3 version: 4.22.3(supports-color@9.4.0) @@ -1953,28 +1953,19 @@ packages: engines: {node: '>= 0.4'} dev: true - /axios-mock-adapter@1.20.0(axios@1.6.8): + /axios-mock-adapter@1.20.0(axios@1.7.5): resolution: {integrity: sha512-shZRhTjLP0WWdcvHKf3rH3iW9deb3UdKbdnKUoHmmsnBhVXN3sjPJM6ZvQ2r/ywgvBVQrMnjrSyQab60G1sr2w==} peerDependencies: axios: '>= 0.9.0' dependencies: - axios: 1.6.8 + axios: 1.7.5 fast-deep-equal: 3.1.3 is-blob: 2.1.0 is-buffer: 2.0.5 dev: true - /axios@1.6.8: - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - /axios@1.7.2: - resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + /axios@1.7.5: + resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -2096,7 +2087,7 @@ packages: dependencies: '@azure/core-http': 3.0.4 '@azure/msal-node': 1.18.4 - axios: 1.7.2 + axios: 1.7.5 botbuilder-core: 4.22.3(supports-color@9.4.0) botbuilder-stdlib: 4.22.3-internal botframework-connector: 4.22.3(supports-color@9.4.0) @@ -2123,7 +2114,7 @@ packages: '@azure/identity': 2.1.0(supports-color@9.4.0) '@azure/msal-node': 1.18.4 '@types/jsonwebtoken': 8.3.5 - axios: 1.7.2 + axios: 1.7.5 base64url: 3.0.1 botbuilder-stdlib: 4.22.3-internal botframework-schema: 4.22.3 From 5d0324fccdebdbbb11b8c61ba69951db210e463f Mon Sep 17 00:00:00 2001 From: Hui Miao Date: Thu, 29 Aug 2024 16:25:49 +0800 Subject: [PATCH 30/52] refactor: add a new ends pattern for vite (#12304) --- templates/ts/dashboard-tab/.vscode/tasks.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/ts/dashboard-tab/.vscode/tasks.json b/templates/ts/dashboard-tab/.vscode/tasks.json index 72413ddb7b..7272ec795e 100644 --- a/templates/ts/dashboard-tab/.vscode/tasks.json +++ b/templates/ts/dashboard-tab/.vscode/tasks.json @@ -75,7 +75,7 @@ "background": { "activeOnStart": true, "beginsPattern": ".*", - "endsPattern": "Compiled|Failed|compiled|failed" + "endsPattern": "Compiled|Failed|compiled|failed|ready" } } } From b09e10319f990261cb4ed89ab7faf228b364f400 Mon Sep 17 00:00:00 2001 From: Huajie Zhang Date: Fri, 30 Aug 2024 10:42:33 +0800 Subject: [PATCH 31/52] fix: remove axios for api package (#12305) * fix: remove axios for api package * fix: pmpm-lock --- packages/api/package.json | 1 - packages/api/pnpm-lock.yaml | 1116 ++++++++++++++++++----------------- 2 files changed, 571 insertions(+), 546 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 42155ca50e..9cc7bc9037 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -64,7 +64,6 @@ "dependencies": { "@azure/core-auth": "^1.4.0", "@microsoft/teams-manifest": "workspace:*", - "axios": "^1.6.8", "chai": "^4.3.4", "jsonschema": "^1.4.0", "neverthrow": "^3.2.0", diff --git a/packages/api/pnpm-lock.yaml b/packages/api/pnpm-lock.yaml index f1d8cfb47e..87d43851fb 100644 --- a/packages/api/pnpm-lock.yaml +++ b/packages/api/pnpm-lock.yaml @@ -11,9 +11,6 @@ dependencies: '@microsoft/teams-manifest': specifier: workspace:* version: link:../manifest - axios: - specifier: ^1.6.8 - version: 1.6.8 chai: specifier: ^4.3.4 version: 4.3.4 @@ -124,17 +121,12 @@ devDependencies: packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@apidevtools/json-schema-ref-parser@9.0.9: @@ -164,38 +156,38 @@ packages: /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - '@babel/highlight': 7.23.4 + '@babel/highlight': 7.24.7 dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.5 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -203,158 +195,133 @@ packages: - supports-color dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.25.5: + resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@babel/types': 7.25.4 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + '@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.22.15 - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 + '@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.4 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@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.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} + /@babel/helpers@7.25.0: + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.1 dev: true - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.25.4: + resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 dev: true - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.25.4: + resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@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.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.5 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.25.4: + resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: true @@ -363,7 +330,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.6 espree: 7.3.1 globals: 13.24.0 ignore: 4.0.6 @@ -405,34 +372,34 @@ packages: engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} dev: true - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jsdevtools/ono@7.1.3: @@ -517,7 +484,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + fastq: 1.17.1 dev: true /@rushstack/node-core-library@3.39.1: @@ -597,11 +564,11 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true - /@sinonjs/text-encoding@0.7.2: - resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + /@sinonjs/text-encoding@0.7.3: + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} dev: true /@types/argparse@1.0.38: @@ -645,8 +612,8 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/lodash@4.17.7: + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} dev: true /@types/minimatch@5.1.2: @@ -709,12 +676,12 @@ packages: '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@5.0.4) '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 4.19.0 - debug: 4.3.4 + debug: 4.3.6 eslint: 7.29.0 functional-red-black-tree: 1.0.1 lodash: 4.17.21 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: @@ -752,7 +719,7 @@ packages: '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 '@typescript-eslint/typescript-estree': 4.19.0(typescript@5.0.4) - debug: 4.3.4 + debug: 4.3.6 eslint: 7.29.0 typescript: 5.0.4 transitivePeerDependencies: @@ -783,10 +750,10 @@ packages: dependencies: '@typescript-eslint/types': 4.19.0 '@typescript-eslint/visitor-keys': 4.19.0 - debug: 4.3.4 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: @@ -844,13 +811,13 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 dev: true /ansi-colors@4.1.1: @@ -926,21 +893,23 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -953,23 +922,24 @@ packages: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /arrify@1.0.1: @@ -990,31 +960,19 @@ packages: engines: {node: '>=8'} dev: true - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - dev: true - - /axios@1.6.8: - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false + possible-typed-array-names: 1.0.0 + dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -1025,26 +983,26 @@ packages: concat-map: 0.0.1 dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 dev: true /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.645 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) dev: true /buffer-from@1.1.2: @@ -1061,12 +1019,15 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.2.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 dev: true /call-me-maybe@1.0.2: @@ -1098,8 +1059,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} dev: true /chai-as-promised@7.1.1(chai@4.3.4): @@ -1129,7 +1090,7 @@ packages: deep-eql: 3.0.1 get-func-name: 2.0.2 pathval: 1.1.1 - type-detect: 4.0.8 + type-detect: 4.1.0 /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1158,7 +1119,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -1180,15 +1141,15 @@ packages: escape-string-regexp: 5.0.0 dev: true - /cli-color@2.0.3: - resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} + /cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} engines: {node: '>=0.10'} dependencies: - d: 1.0.1 - es5-ext: 0.10.62 + d: 1.0.2 + es5-ext: 0.10.64 es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 + memoizee: 0.4.17 + timers-ext: 0.1.8 dev: true /cli-cursor@3.1.0: @@ -1252,13 +1213,6 @@ packages: engines: {node: '>=0.1.90'} dev: true - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} requiresBuild: true @@ -1348,7 +1302,7 @@ packages: cp-file: 9.1.0 globby: 13.2.2 junk: 4.0.1 - micromatch: 4.0.5 + micromatch: 4.0.8 nested-error-stacks: 2.1.1 p-filter: 3.0.0 p-map: 5.5.0 @@ -1367,11 +1321,39 @@ packages: which: 2.0.2 dev: true - /d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} dependencies: - es5-ext: 0.10.62 - type: 1.2.0 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 dev: true /debug@2.6.9: @@ -1409,8 +1391,8 @@ packages: supports-color: 8.1.1 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1452,7 +1434,7 @@ packages: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: - type-detect: 4.0.8 + type-detect: 4.1.0 /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1465,29 +1447,24 @@ packages: strip-bom: 4.0.0 dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -1519,8 +1496,8 @@ packages: esutils: 2.0.3 dev: true - /electron-to-chromium@1.4.645: - resolution: {integrity: sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==} + /electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} dev: true /emoji-regex@8.0.0: @@ -1547,64 +1524,90 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + 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.1 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -1616,13 +1619,14 @@ packages: is-symbol: 1.0.4 dev: true - /es5-ext@0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + /es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} requiresBuild: true dependencies: es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 next-tick: 1.1.0 dev: true @@ -1633,29 +1637,30 @@ packages: /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-symbol: 3.1.3 + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 dev: true - /es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} dependencies: - d: 1.0.1 + d: 1.0.2 ext: 1.7.0 dev: true /es6-weak-map@2.0.3: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} dependencies: - d: 1.0.1 - es5-ext: 0.10.62 + d: 1.0.2 + es5-ext: 0.10.64 es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -1678,14 +1683,14 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.2(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0): + resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1732,18 +1737,18 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@5.0.4) - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 debug: 2.6.9 doctrine: 2.1.0 eslint: 7.29.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0) has: 1.0.4 - is-core-module: 2.13.1 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.7 + object.values: 1.2.0 resolve: 1.22.8 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -1812,7 +1817,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.6 doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -1820,7 +1825,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 @@ -1837,19 +1842,29 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.6.3 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 - table: 6.8.1 + table: 6.8.2 text-table: 0.2.0 v8-compile-cache: 2.4.0 transitivePeerDependencies: - supports-color dev: true + /esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + dev: true + /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1865,8 +1880,8 @@ packages: hasBin: true dev: 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 @@ -1897,8 +1912,8 @@ packages: /event-emitter@0.3.5: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} dependencies: - d: 1.0.1 - es5-ext: 0.10.62 + d: 1.0.2 + es5-ext: 0.10.64 dev: true /execa@4.1.0: @@ -1919,7 +1934,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.2 + type: 2.7.3 dev: true /fast-deep-equal@3.1.3: @@ -1938,7 +1953,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 dev: true /fast-json-stable-stringify@2.1.0: @@ -1949,8 +1964,12 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + /fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -1962,8 +1981,8 @@ packages: flat-cache: 3.2.0 dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -1998,7 +2017,7 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -2008,20 +2027,10 @@ packages: hasBin: true dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -2036,15 +2045,6 @@ packages: signal-exit: 3.0.7 dev: true - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - /fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} dev: true @@ -2078,9 +2078,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -2105,13 +2105,15 @@ packages: /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 dev: true /get-own-enumerable-property-symbols@3.0.2: @@ -2135,12 +2137,13 @@ packages: pump: 3.0.0 dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true /glob-parent@5.1.2: @@ -2162,17 +2165,19 @@ packages: /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.0.4 once: 1.4.0 path-is-absolute: 1.0.1 dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2194,11 +2199,12 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: true /globby@11.1.0: @@ -2208,7 +2214,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -2219,7 +2225,7 @@ packages: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 dev: true @@ -2227,7 +2233,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /graceful-fs@4.2.11: @@ -2258,14 +2264,14 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true @@ -2274,8 +2280,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -2294,8 +2300,8 @@ packages: type-fest: 0.8.1 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -2327,8 +2333,8 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true @@ -2362,6 +2368,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -2371,21 +2378,21 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -2402,15 +2409,15 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-callable@1.2.7: @@ -2418,17 +2425,25 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.0 + is-typed-array: 1.1.13 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-extglob@2.1.1: @@ -2448,8 +2463,8 @@ packages: is-extglob: 2.1.1 dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -2457,7 +2472,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -2488,8 +2503,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-regexp@1.0.0: @@ -2497,10 +2512,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-stream@2.0.1: @@ -2512,7 +2528,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -2522,11 +2538,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /is-typedarray@1.0.0: @@ -2541,7 +2557,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-windows@1.0.2: @@ -2581,7 +2597,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -2614,15 +2630,15 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 @@ -2688,9 +2704,9 @@ packages: hasBin: true dependencies: '@types/json-schema': 7.0.15 - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.7 '@types/prettier': 2.7.3 - cli-color: 2.0.3 + cli-color: 2.0.4 get-stdin: 8.0.0 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) @@ -2783,13 +2799,13 @@ packages: cli-truncate: 2.1.0 commander: 6.2.1 cosmiconfig: 7.1.0 - debug: 4.3.4 + debug: 4.3.6 dedent: 0.7.0 enquirer: 2.4.1 execa: 4.1.0 listr2: 3.14.0(enquirer@2.4.1) log-symbols: 4.1.0 - micromatch: 4.0.5 + micromatch: 4.0.8 normalize-path: 3.0.0 please-upgrade-node: 3.2.0 string-argv: 0.3.1 @@ -2812,7 +2828,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.1 + rfdc: 1.4.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -2890,7 +2906,7 @@ packages: /lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} dependencies: - es5-ext: 0.10.62 + es5-ext: 0.10.64 dev: true /make-dir@3.1.0: @@ -2904,7 +2920,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -2921,17 +2937,18 @@ packages: engines: {node: '>=8'} dev: true - /memoizee@0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + /memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} dependencies: - d: 1.0.1 - es5-ext: 0.10.62 + d: 1.0.2 + es5-ext: 0.10.64 es6-weak-map: 2.0.3 event-emitter: 0.3.5 is-promise: 2.2.2 lru-queue: 0.1.0 next-tick: 1.1.0 - timers-ext: 0.1.7 + timers-ext: 0.1.8 dev: true /meow@10.1.5: @@ -2961,26 +2978,14 @@ packages: engines: {node: '>= 8'} dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -3100,7 +3105,7 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 '@sinonjs/fake-timers': 6.0.1 - '@sinonjs/text-encoding': 0.7.2 + '@sinonjs/text-encoding': 0.7.3 just-extend: 4.2.1 path-to-regexp: 1.8.0 dev: true @@ -3112,8 +3117,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true /noms@0.0.0: @@ -3128,8 +3133,8 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.1 - semver: 7.5.4 + is-core-module: 2.15.1 + semver: 7.6.3 validate-npm-package-license: 3.0.4 dev: true @@ -3166,7 +3171,7 @@ packages: istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -3186,8 +3191,9 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} dev: true /object-keys@1.1.1: @@ -3199,19 +3205,19 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /once@1.4.0: @@ -3227,16 +3233,16 @@ packages: mimic-fn: 2.1.0 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /p-event@4.2.0: @@ -3340,7 +3346,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -3379,8 +3385,8 @@ packages: /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} dev: true /picomatch@2.3.1: @@ -3401,6 +3407,11 @@ packages: semver-compare: 1.0.0 dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3435,10 +3446,6 @@ packages: engines: {node: '>=0.4.0'} dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: @@ -3521,13 +3528,14 @@ packages: strip-indent: 4.0.0 dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 dev: true /regexpp@3.2.0: @@ -3575,7 +3583,7 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 dev: true @@ -3583,7 +3591,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -3601,12 +3609,13 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} dev: true /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 @@ -3624,12 +3633,12 @@ packages: tslib: 2.3.1 dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -3642,12 +3651,12 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -3668,12 +3677,10 @@ packages: lru-cache: 6.0.0 dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: true /serialize-javascript@6.0.0: @@ -3686,24 +3693,26 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /shebang-command@2.0.0: @@ -3718,12 +3727,14 @@ packages: engines: {node: '>=8'} dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 dev: true /signal-exit@3.0.7: @@ -3799,22 +3810,22 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.20 dev: true - /spdx-exceptions@2.4.0: - resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.4.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 dev: true - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} dev: true /sprintf-js@1.0.3: @@ -3840,29 +3851,31 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /string_decoder@0.10.31: @@ -3944,11 +3957,11 @@ packages: engines: {node: '>= 0.4'} dev: true - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.12.0 + ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -3992,10 +4005,11 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + /timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} dependencies: - es5-ext: 0.10.62 + es5-ext: 0.10.64 next-tick: 1.1.0 dev: true @@ -4078,6 +4092,11 @@ packages: /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + dev: true + + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} @@ -4099,50 +4118,52 @@ packages: engines: {node: '>=10'} dev: true - /type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: true - - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + /type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray-to-buffer@3.1.5: @@ -4166,7 +4187,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -4182,15 +4203,15 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 dev: true /uri-js@4.4.1: @@ -4219,8 +4240,8 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /validator@13.11.0: - resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + /validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} engines: {node: '>= 0.10'} dev: true @@ -4243,15 +4264,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@2.0.2: @@ -4262,6 +4283,11 @@ packages: isexe: 2.0.0 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /workerpool@6.2.0: resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} dev: true @@ -4374,7 +4400,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -4410,7 +4436,7 @@ packages: dependencies: lodash.get: 4.4.2 lodash.isequal: 4.5.0 - validator: 13.11.0 + validator: 13.12.0 optionalDependencies: commander: 9.5.0 dev: true From 94e8ea5180ed864745a20132d64a5081b3dff957 Mon Sep 17 00:00:00 2001 From: Chaoyi Yuan Date: Fri, 30 Aug 2024 10:55:14 +0800 Subject: [PATCH 32/52] feat: enforce service management reference for certain tenant (#12273) --- packages/fx-core/resource/package.nls.json | 1 + .../src/component/driver/aad/create.ts | 26 +++-- .../missingServiceManagamentReferenceError.ts | 21 ++++ .../component/driver/aad/utility/constants.ts | 2 + .../src/component/driver/botAadApp/create.ts | 23 ++-- .../tests/component/driver/aad/create.test.ts | 88 +++++++++++++++ .../component/driver/botAadApp/create.test.ts | 102 ++++++++++++++++++ 7 files changed, 249 insertions(+), 14 deletions(-) create mode 100644 packages/fx-core/src/component/driver/aad/error/missingServiceManagamentReferenceError.ts diff --git a/packages/fx-core/resource/package.nls.json b/packages/fx-core/resource/package.nls.json index 29b1f85337..3390fc40ea 100644 --- a/packages/fx-core/resource/package.nls.json +++ b/packages/fx-core/resource/package.nls.json @@ -676,6 +676,7 @@ "driver.aadApp.error.appNameTooLong": "The name for this Microsoft Entra app is too long. The maximum length is 120.", "driver.aadApp.error.credentialInvalidLifetimeAsPerAppPolicy": "The client secret lifetime is too long for your tenant. Use a shorter value with the clientSecretExpireDays parameter.", "driver.aadApp.error.credentialTypeNotAllowedAsPerAppPolicy": "Your tenant doesn't allow creating a client secret for Microsoft Entra app. Create and configure the app manually.", + "driver.aadApp.error.MissingServiceManagementReference": "Service management reference is required when creating Microsoft Entra app in Microsoft tenant. Please refer to the help link to provide a valid service management reference.", "driver.aadApp.progressBar.createAadAppTitle": "Creating Microsoft Entra application...", "driver.aadApp.progressBar.updateAadAppTitle": "Updating Microsoft Entra application...", "driver.aadApp.log.startExecuteDriver": "Executing action %s", diff --git a/packages/fx-core/src/component/driver/aad/create.ts b/packages/fx-core/src/component/driver/aad/create.ts index 2682e84de5..db9b64e412 100644 --- a/packages/fx-core/src/component/driver/aad/create.ts +++ b/packages/fx-core/src/component/driver/aad/create.ts @@ -32,6 +32,7 @@ import { telemetryKeys, } from "./utility/constants"; import { AadSet } from "../../../common/globalVars"; +import { MissingServiceManagementReferenceError } from "./error/missingServiceManagamentReferenceError"; const actionName = "aadApp/create"; // DO NOT MODIFY the name const helpLink = "https://aka.ms/teamsfx-actions/aadapp-create"; @@ -79,14 +80,30 @@ export class CreateAadAppDriver implements StepDriver { ) ); context.addTelemetryProperties({ [telemetryKeys.newAadApp]: "true" }); + + const tokenJson = await context.m365TokenProvider.getJsonObject({ scopes: GraphScopes }); + const isMsftAccount = + tokenJson.isOk() && + tokenJson.value.unique_name && + (tokenJson.value.unique_name as string).endsWith("@microsoft.com"); + // Create new Microsoft Entra app if no client id exists const signInAudience = args.signInAudience ? args.signInAudience : SignInAudience.AzureADMyOrg; + + // This hidden environment variable is for internal use only. + const serviceManagementReference = + args.serviceManagementReference || process.env.TTK_DEFAULT_SERVICE_MANAGEMENT_REFERENCE; + + if (isMsftAccount && !serviceManagementReference) { + throw new MissingServiceManagementReferenceError(actionName); + } + const aadApp = await aadAppClient.createAadApp( args.name, signInAudience, - args.serviceManagementReference + serviceManagementReference ); aadAppState.clientId = aadApp.appId!; aadAppState.objectId = aadApp.id!; @@ -95,12 +112,7 @@ export class CreateAadAppDriver implements StepDriver { outputs = mapStateToEnv(aadAppState, outputEnvVarNames, [OutputKeys.clientSecret]); let summary = getLocalizedString(logMessageKeys.successCreateAadApp, aadApp.id); - const tokenJson = await context.m365TokenProvider.getJsonObject({ scopes: GraphScopes }); - if ( - tokenJson.isOk() && - tokenJson.value.unique_name && - (tokenJson.value.unique_name as string).includes("@microsoft.com") - ) { + if (isMsftAccount) { summary += getLocalizedString(logMessageKeys.deleteAadAfterDebugging); } context.logProvider?.info(summary); diff --git a/packages/fx-core/src/component/driver/aad/error/missingServiceManagamentReferenceError.ts b/packages/fx-core/src/component/driver/aad/error/missingServiceManagamentReferenceError.ts new file mode 100644 index 0000000000..46cf520b9d --- /dev/null +++ b/packages/fx-core/src/component/driver/aad/error/missingServiceManagamentReferenceError.ts @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { UserError } from "@microsoft/teamsfx-api"; +import { getDefaultString, getLocalizedString } from "../../../../common/localizeUtils"; +import { constants } from "../utility/constants"; + +const errorCode = "MissingServiceManagementReference"; +const messageKey = "driver.aadApp.error.MissingServiceManagementReference"; + +export class MissingServiceManagementReferenceError extends UserError { + constructor(actionName: string) { + super({ + source: actionName, + name: errorCode, + message: getDefaultString(messageKey), + displayMessage: getLocalizedString(messageKey), + helpLink: constants.missingServiceManagementReferenceHelpLink, + }); + } +} diff --git a/packages/fx-core/src/component/driver/aad/utility/constants.ts b/packages/fx-core/src/component/driver/aad/utility/constants.ts index 7fde0fc01f..bac04dfc67 100644 --- a/packages/fx-core/src/component/driver/aad/utility/constants.ts +++ b/packages/fx-core/src/component/driver/aad/utility/constants.ts @@ -39,6 +39,8 @@ export const constants = { aadAppPasswordDisplayName: "default", oauthAuthorityPrefix: "https://login.microsoftonline.com", defaultHelpLink: "https://aka.ms/teamsfx-actions/aadapp-create", + missingServiceManagementReferenceHelpLink: + "https://aka.ms/teamsfx/missing-service-management-reference-help", }; export const telemetryKeys = { diff --git a/packages/fx-core/src/component/driver/botAadApp/create.ts b/packages/fx-core/src/component/driver/botAadApp/create.ts index baee8d424b..c4f9ac642b 100644 --- a/packages/fx-core/src/component/driver/botAadApp/create.ts +++ b/packages/fx-core/src/component/driver/botAadApp/create.ts @@ -28,6 +28,7 @@ import { CreateBotAadAppOutput } from "./interface/createBotAadAppOutput"; import { logMessageKeys, progressBarKeys } from "./utility/constants"; import { GraphScopes } from "../../../common/constants"; import { AadSet } from "../../../common/globalVars"; +import { MissingServiceManagementReferenceError } from "../aad/error/missingServiceManagamentReferenceError"; const actionName = "botAadApp/create"; // DO NOT MODIFY the name const helpLink = "https://aka.ms/teamsfx-actions/botaadapp-create"; @@ -98,12 +99,25 @@ export class CreateBotAadAppDriver implements StepDriver { throw new UnexpectedEmptyBotPasswordError(actionName, helpLink); } + const tokenJson = await context.m365TokenProvider.getJsonObject({ scopes: GraphScopes }); + const isMsftAccount = + tokenJson.isOk() && + tokenJson.value.unique_name && + (tokenJson.value.unique_name as string).endsWith("@microsoft.com"); + const startTime = performance.now(); if (!botAadAppState.botId) { context.logProvider?.info(getLocalizedString(logMessageKeys.startCreateBotAadApp)); + + // This hidden environment variable is for internal use only. + const serviceManagementReference = process.env.TTK_DEFAULT_SERVICE_MANAGEMENT_REFERENCE; + if (isMsftAccount && !serviceManagementReference) { + throw new MissingServiceManagementReferenceError(actionName); + } const aadApp = await aadAppClient.createAadApp( args.name, - SignInAudience.AzureADMultipleOrgs + SignInAudience.AzureADMultipleOrgs, + serviceManagementReference ); botAadAppState.botId = aadApp.appId!; AadSet.add(aadApp.appId!); @@ -120,12 +134,7 @@ export class CreateBotAadAppDriver implements StepDriver { logMessageKeys.successCreateBotAad, botAadAppState.botId ); - const tokenJson = await context.m365TokenProvider.getJsonObject({ scopes: GraphScopes }); - if ( - tokenJson.isOk() && - tokenJson.value.unique_name && - (tokenJson.value.unique_name as string).includes("@microsoft.com") - ) { + if (isMsftAccount) { successCreateBotAadLog += getLocalizedString(logMessageKeys.deleteAadAfterDebugging); } const useExistingBotAadLog = getLocalizedString( diff --git a/packages/fx-core/tests/component/driver/aad/create.test.ts b/packages/fx-core/tests/component/driver/aad/create.test.ts index 38c2a541da..82e79eb814 100644 --- a/packages/fx-core/tests/component/driver/aad/create.test.ts +++ b/packages/fx-core/tests/component/driver/aad/create.test.ts @@ -24,6 +24,7 @@ import { err, ok, UserError } from "@microsoft/teamsfx-api"; import { OutputEnvironmentVariableUndefinedError } from "../../../../src/component/driver/error/outputEnvironmentVariableUndefinedError"; import { AadAppNameTooLongError } from "../../../../src/component/driver/aad/error/aadAppNameTooLongError"; import { SignInAudience } from "../../../../src/component/driver/aad/interface/signInAudience"; +import { MissingServiceManagementReferenceError } from "../../../../src/component/driver/aad/error/missingServiceManagamentReferenceError"; chai.use(chaiAsPromised); const expect = chai.expect; @@ -129,6 +130,92 @@ describe("aadAppCreate", async () => { expect(result.result._unsafeUnwrapErr()).is.instanceOf(OutputEnvironmentVariableUndefinedError); }); + it("should throw error if serviceManagementReference is missing when using microsoft.com account", async () => { + sinon + .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") + .resolves(ok({ unique_name: "test@microsoft.com" })); + + const args: any = { + name: "test", + generateClientSecret: true, + }; + + const result = await createAadAppDriver.execute(args, mockedDriverContext, outputEnvVarNames); + expect(result.result.isErr()).to.be.true; + expect(result.result._unsafeUnwrapErr()).is.instanceOf(MissingServiceManagementReferenceError); + }); + + it("should not throw error if serviceManagementReference is missing when not using microsoft.com account", async () => { + sinon + .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") + .resolves(ok({ unique_name: "test@example.com" })); + + sinon.stub(AadAppClient.prototype, "createAadApp").resolves({ + id: expectedObjectId, + displayName: expectedDisplayName, + appId: expectedClientId, + } as AADApplication); + + sinon.stub(AadAppClient.prototype, "generateClientSecret").resolves(expectedSecretText); + + const args: any = { + name: "test", + generateClientSecret: true, + }; + + const result = await createAadAppDriver.execute(args, mockedDriverContext, outputEnvVarNames); + expect(result.result.isOk()).to.be.true; + }); + + it("should not throw MissingServiceManagementReferenceError when clientId already exists", async () => { + sinon + .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") + .resolves(ok({ unique_name: "test@microsoft.com" })); + + envRestore = mockedEnv({ + [outputKeys.clientId]: "existing value", + [outputKeys.objectId]: "existing value", + }); + + const args: any = { + name: "test", + generateClientSecret: false, + }; + + const result = await createAadAppDriver.execute(args, mockedDriverContext, outputEnvVarNames); + + expect(result.result.isOk()).to.be.true; + }); + + it("should use service management reference value from environment variable when parameter not set", async () => { + // This functionality is for internal use only. + const expectedServiceManagementReference = "00000000-0000-0000-0000-000000000000"; + + envRestore = mockedEnv({ + TTK_DEFAULT_SERVICE_MANAGEMENT_REFERENCE: expectedServiceManagementReference, + }); + + sinon + .stub(AadAppClient.prototype, "createAadApp") + .callsFake(async (displayName, signInAudience, serviceManagementReference) => { + expect(serviceManagementReference).to.equal(expectedServiceManagementReference); + return { + id: expectedObjectId, + displayName: expectedDisplayName, + appId: expectedClientId, + } as AADApplication; + }); + + const args: any = { + name: "test", + generateClientSecret: false, + }; + + const result = await createAadAppDriver.execute(args, mockedDriverContext, outputEnvVarNames); + + expect(result.result.isOk()).to.be.true; + }); + it("should create new Microsoft Entra app and client secret with empty .env", async () => { sinon.stub(AadAppClient.prototype, "createAadApp").resolves({ id: expectedObjectId, @@ -729,6 +816,7 @@ describe("aadAppCreate", async () => { const args: any = { name: "test", generateClientSecret: true, + serviceManagementReference: "00000000-0000-0000-0000-000000000000", }; const outputEnvVarNames = new Map( Object.entries({ diff --git a/packages/fx-core/tests/component/driver/botAadApp/create.test.ts b/packages/fx-core/tests/component/driver/botAadApp/create.test.ts index b4bcf2e672..028be18e98 100644 --- a/packages/fx-core/tests/component/driver/botAadApp/create.test.ts +++ b/packages/fx-core/tests/component/driver/botAadApp/create.test.ts @@ -24,6 +24,7 @@ import { AadAppClient } from "../../../../src/component/driver/aad/utility/aadAp import { AADApplication } from "../../../../src/component/driver/aad/interface/AADApplication"; import { OutputEnvironmentVariableUndefinedError } from "../../../../src/component/driver/error/outputEnvironmentVariableUndefinedError"; import { AadAppNameTooLongError } from "../../../../src/component/driver/aad/error/aadAppNameTooLongError"; +import { MissingServiceManagementReferenceError } from "../../../../src/component/driver/aad/error/missingServiceManagamentReferenceError"; chai.use(chaiAsPromised); const expect = chai.expect; @@ -235,6 +236,102 @@ describe("botAadAppCreate", async () => { .and.is.instanceOf(UserError); }); + it("should throw MissingServiceManagementReferenceError when using microsoft.com account", async () => { + sinon + .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") + .resolves(ok({ unique_name: "test@microsoft.com" })); + + const args: any = { + name: expectedDisplayName, + }; + + await expect( + createBotAadAppDriver.handler(args, mockedDriverContext, outputEnvVarNames) + ).to.be.rejected.then((error) => { + expect(error instanceof MissingServiceManagementReferenceError).to.be.true; + }); + }); + + it("should not throw MissingServiceManagementReferenceError when not using microsoft.com account", async () => { + sinon + .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") + .resolves(ok({ unique_name: "test@example.com" })); + + const args: any = { + name: expectedDisplayName, + }; + + sinon.stub(AadAppClient.prototype, "createAadApp").resolves({ + id: expectedObjectId, + displayName: expectedDisplayName, + appId: expectedClientId, + } as AADApplication); + + sinon.stub(AadAppClient.prototype, "generateClientSecret").resolves(expectedSecretText); + + const result = await createBotAadAppDriver.execute( + args, + mockedDriverContext, + outputEnvVarNames + ); + expect(result.result.isOk()).to.be.true; + }); + + it("should not throw MissingServiceManagementReferenceError when botId already exists", async () => { + envRestore = mockedEnv({ + [outputKeys.botId]: expectedClientId, + [outputKeys.botPassword]: expectedSecretText, + }); + + sinon + .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") + .resolves(ok({ unique_name: "test@microsoft.com" })); + + const args: any = { + name: expectedDisplayName, + }; + + const result = await createBotAadAppDriver.execute( + args, + mockedDriverContext, + outputEnvVarNames + ); + expect(result.result.isOk()).to.be.true; + }); + + it("should use service management reference value from environment variable when set", async () => { + // This functionality is for internal use only. + const expectedServiceManagementReference = "00000000-0000-0000-0000-000000000000"; + + envRestore = mockedEnv({ + TTK_DEFAULT_SERVICE_MANAGEMENT_REFERENCE: expectedServiceManagementReference, + }); + + const args: any = { + name: expectedDisplayName, + }; + + sinon + .stub(AadAppClient.prototype, "createAadApp") + .callsFake(async (displayName, signInAudience, serviceManagementReference) => { + expect(serviceManagementReference).to.equal(expectedServiceManagementReference); + return { + id: expectedObjectId, + displayName: expectedDisplayName, + appId: expectedClientId, + } as AADApplication; + }); + + sinon.stub(AadAppClient.prototype, "generateClientSecret").resolves(expectedSecretText); + + const result = await createBotAadAppDriver.execute( + args, + mockedDriverContext, + outputEnvVarNames + ); + expect(result.result.isOk()).to.be.true; + }); + it("should be good when reusing existing bot in env", async () => { envRestore = mockedEnv({ [outputKeys.botId]: expectedClientId, @@ -318,6 +415,11 @@ describe("botAadAppCreate", async () => { }); it("should output delete aad information when using microsoft tenant", async () => { + // Set default service management reference to avoid MissingServiceManagementReferenceError + envRestore = mockedEnv({ + TTK_DEFAULT_SERVICE_MANAGEMENT_REFERENCE: "00000000-0000-0000-0000-000000000000", + }); + sinon .stub(mockedDriverContext.m365TokenProvider, "getJsonObject") .resolves(ok({ unique_name: "test@microsoft.com" })); From a0ba3cf28742e30737029aa6a1426a21cc4b3a61 Mon Sep 17 00:00:00 2001 From: Zhaofeng Xu Date: Fri, 30 Aug 2024 10:57:58 +0800 Subject: [PATCH 33/52] feat: rag customize template for csharp (#12303) --- .../custom-copilot-rag-customize/.gitignore | 30 +++++ .../.{{NewProjectTypeName}}/README.md.tpl | 90 +++++++++++++ .../launchSettings.json.tpl | 25 ++++ ...rojectTypeName}}.{{NewProjectTypeExt}}.tpl | 6 + ...tTypeName}}.{{NewProjectTypeExt}}.user.tpl | 14 ++ .../{{ProjectName}}.slnLaunch.user.tpl | 78 +++++++++++ .../AdapterWithErrorHandler.cs.tpl | 34 +++++ .../Config.cs.tpl | 38 ++++++ .../Controllers/BotController.cs.tpl | 26 ++++ .../MyDataSource.cs.tpl | 71 ++++++++++ .../Program.cs.tpl | 122 ++++++++++++++++++ .../Prompts/chat/config.json | 22 ++++ .../Prompts/chat/skprompt.txt | 1 + .../Properties/launchSettings.json.tpl | 96 ++++++++++++++ .../appPackage/color.png | Bin 0 -> 5117 bytes .../appPackage/manifest.json.tpl | 46 +++++++ .../appPackage/outline.png | Bin 0 -> 492 bytes .../appsettings.Development.json.tpl | 26 ++++ .../appsettings.TestTool.json.tpl | 24 ++++ .../appsettings.json.tpl | 26 ++++ .../Contoso Electronics_PerkPlus_Program.md | 36 ++++++ .../Contoso_Electronics_Company_Overview.md | 48 +++++++ .../data/Contoso_Electronics_Plan_Benefits.md | 37 ++++++ .../custom-copilot-rag-customize/env/.env.dev | 15 +++ .../env/.env.dev.user.tpl | 11 ++ .../env/.env.local | 10 ++ .../env/.env.local.user.tpl | 12 ++ .../infra/azure.bicep.tpl | 122 ++++++++++++++++++ .../infra/azure.parameters.json.tpl | 31 +++++ .../infra/botRegistration/azurebot.bicep | 42 ++++++ .../infra/botRegistration/readme.md | 1 + .../teamsapp.local.yml.tpl | 113 ++++++++++++++++ .../teamsapp.yml.tpl | 101 +++++++++++++++ .../{{ProjectName}}.csproj.tpl | 34 +++++ 34 files changed, 1388 insertions(+) create mode 100644 templates/csharp/custom-copilot-rag-customize/.gitignore create mode 100644 templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/README.md.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/launchSettings.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.user.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{ProjectName}}.slnLaunch.user.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/AdapterWithErrorHandler.cs.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/Config.cs.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/Controllers/BotController.cs.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/MyDataSource.cs.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/Program.cs.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/Prompts/chat/config.json create mode 100644 templates/csharp/custom-copilot-rag-customize/Prompts/chat/skprompt.txt create mode 100644 templates/csharp/custom-copilot-rag-customize/Properties/launchSettings.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/appPackage/color.png create mode 100644 templates/csharp/custom-copilot-rag-customize/appPackage/manifest.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/appPackage/outline.png create mode 100644 templates/csharp/custom-copilot-rag-customize/appsettings.Development.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/appsettings.TestTool.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/appsettings.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/data/Contoso Electronics_PerkPlus_Program.md create mode 100644 templates/csharp/custom-copilot-rag-customize/data/Contoso_Electronics_Company_Overview.md create mode 100644 templates/csharp/custom-copilot-rag-customize/data/Contoso_Electronics_Plan_Benefits.md create mode 100644 templates/csharp/custom-copilot-rag-customize/env/.env.dev create mode 100644 templates/csharp/custom-copilot-rag-customize/env/.env.dev.user.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/env/.env.local create mode 100644 templates/csharp/custom-copilot-rag-customize/env/.env.local.user.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/infra/azure.bicep.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/infra/azure.parameters.json.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/infra/botRegistration/azurebot.bicep create mode 100644 templates/csharp/custom-copilot-rag-customize/infra/botRegistration/readme.md create mode 100644 templates/csharp/custom-copilot-rag-customize/teamsapp.local.yml.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/teamsapp.yml.tpl create mode 100644 templates/csharp/custom-copilot-rag-customize/{{ProjectName}}.csproj.tpl diff --git a/templates/csharp/custom-copilot-rag-customize/.gitignore b/templates/csharp/custom-copilot-rag-customize/.gitignore new file mode 100644 index 0000000000..0755b1d291 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/.gitignore @@ -0,0 +1,30 @@ +# TeamsFx files +build +appPackage/build +env/.env.*.user +env/.env.local +appsettings.Development.json +appsettings.TestTool.json +.deployment + +# User-specific files +*.user + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Notification local store +.notification.localstore.json +.notification.testtoolstore.json + +# devTools +devTools/ \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/README.md.tpl b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/README.md.tpl new file mode 100644 index 0000000000..3c414ebe2b --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/README.md.tpl @@ -0,0 +1,90 @@ +# Overview of the Chat With Your Data (Custom Data Source) template + +This app template showcases how to build one of the most powerful applications enabled by LLM - sophisticated question-answering (Q&A) chat bots that can answer questions about specific source information right in the Microsoft Teams. +This app template also demonstrates usage of techniques like: +- [Retrieval Augmented Generation](https://python.langchain.com/docs/use_cases/question_answering/#what-is-rag), or RAG. +- [Teams AI Library](https://learn.microsoft.com/microsoftteams/platform/bots/how-to/teams%20conversational%20ai/teams-conversation-ai-overview) + +## Get started with the template + +> **Prerequisites** +> +> To run the template in your local dev machine, you will need: +> +{{#useOpenAI}} +> - an account with [OpenAI](https://platform.openai.com). +{{/useOpenAI}} +{{#useAzureOpenAI}} +> - [Azure OpenAI](https://aka.ms/oai/access) resource +{{/useAzureOpenAI}} + +### Debug bot app in Teams Web Client + +{{#useOpenAI}} +1. Fill in your OpenAI API Key in `env/.env.local.user` + ``` + SECRET_OPENAI_API_KEY="" + ``` +{{/useOpenAI}} +{{#useAzureOpenAI}} +1. Fill in your Azure OpenAI settings in `env/.env.local.user` + ``` + SECRET_AZURE_OPENAI_API_KEY="" + AZURE_OPENAI_ENDPOINT="" + AZURE_OPENAI_DEPLOYMENT_NAME="" + ``` +{{/useAzureOpenAI}} +1. In the debug dropdown menu, select Dev Tunnels > Create A Tunnel (set authentication type to Public) or select an existing public dev tunnel +2. Right-click your project and select Teams Toolkit > Prepare Teams App Dependencies +3. If prompted, sign in with a Microsoft 365 account for the Teams organization you want +to install the app to +1. Press F5, or select the Debug > Start Debugging menu in Visual Studio +2. In the launched browser, select the Add button to load the app in Teams +3. In the chat bar, type and send anything to your bot to trigger a response + +> For local debugging using Teams Toolkit CLI, you need to do some extra steps described in [Set up your Teams Toolkit CLI for local debugging](https://aka.ms/teamsfx-cli-debugging). + +### Debug bot app in Teams App Test Tool +{{#useOpenAI}} +1. Fill in your OpenAI API Key in `appsettings.TestTool.json` + ``` + "OpenAI": { + "ApiKey": "" + } + ``` +{{/useOpenAI}} +{{#useAzureOpenAI}} +1. Fill in your Azure OpenAI settings in `appsettings.TestTool.json` + ``` + "Azure": { + "OpenAIApiKey": "", + "OpenAIEndpoint": "", + "OpenAIDeploymentName": "" + + } + ``` +{{/useAzureOpenAI}} +1. Select `Teams App Test Tool (browser)` in debug dropdown menu +2. Press F5, or select the Debug > Start Debugging menu in Visual Studio +3. In Teams App Test Tool from the launched browser, type and send anything to your bot to trigger a response + +**Congratulations**! You are running an application that can now interact with users in Teams App Test Tool: + +![RAG Bot](https://github.com/OfficeDev/TeamsFx/assets/13211513/f56e7602-a5d3-436a-ae01-78546d61717d) + +## Extend the template + +- Follow [Build a Basic AI Chatbot in Teams](https://aka.ms/teamsfx-basic-ai-chatbot) to extend the template with more AI capabilities. +- Understand more about [build your own data ingestion](https://aka.ms/teamsfx-rag-bot#build-your-own-data-ingestion). + +## Additional information and references + +- [Teams Toolkit Documentations](https://docs.microsoft.com/microsoftteams/platform/toolkit/teams-toolkit-fundamentals) +- [Teams Toolkit CLI](https://aka.ms/teamsfx-toolkit-cli) +- [Teams Toolkit Samples](https://github.com/OfficeDev/TeamsFx-Samples) + +## Report an issue + +Select Visual Studio > Help > Send Feedback > Report a Problem. +Or, you can create an issue directly in our GitHub repository: +https://github.com/OfficeDev/TeamsFx/issues. diff --git a/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/launchSettings.json.tpl b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/launchSettings.json.tpl new file mode 100644 index 0000000000..515f8764dc --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/launchSettings.json.tpl @@ -0,0 +1,25 @@ +{ + "profiles": { +{{#enableTestToolByDefault}} + // Launch project within Teams App Test Tool + "Teams App Test Tool (browser)": { + "commandName": "Project", + "launchTestTool": true, + "launchUrl": "http://localhost:56150", + }, +{{/enableTestToolByDefault}} + // Launch project within Teams + "Microsoft Teams (browser)": { + "commandName": "Project", + "launchUrl": "https://teams.microsoft.com/l/app/${{TEAMS_APP_ID}}?installAppPackage=true&webjoin=true&appTenantId=${{TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}", + }, +{{^enableTestToolByDefault}} + // Launch project within Teams App Test Tool + "Teams App Test Tool (browser)": { + "commandName": "Project", + "launchTestTool": true, + "launchUrl": "http://localhost:56150", + }, +{{/enableTestToolByDefault}} + } +} \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.tpl b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.tpl new file mode 100644 index 0000000000..a31df153ea --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.tpl @@ -0,0 +1,6 @@ + + + + + + diff --git a/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.user.tpl b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.user.tpl new file mode 100644 index 0000000000..541a09bd78 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{NewProjectTypeName}}.{{NewProjectTypeExt}}.user.tpl @@ -0,0 +1,14 @@ + + + + ProjectDebugger + + +{{#enableTestToolByDefault}} + Teams App Test Tool (browser) +{{/enableTestToolByDefault}} +{{^enableTestToolByDefault}} + Microsoft Teams (browser) +{{/enableTestToolByDefault}} + + \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{ProjectName}}.slnLaunch.user.tpl b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{ProjectName}}.slnLaunch.user.tpl new file mode 100644 index 0000000000..b069676f95 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/.{{NewProjectTypeName}}/{{ProjectName}}.slnLaunch.user.tpl @@ -0,0 +1,78 @@ +[ +{{#enableTestToolByDefault}} + { + "Name": "Teams App Test Tool (browser)", + "Projects": [ + { + "Path": "{{NewProjectTypeName}}\\{{NewProjectTypeName}}.{{NewProjectTypeExt}}", + "Name": "{{NewProjectTypeName}}\\{{NewProjectTypeName}}.{{NewProjectTypeExt}}", + "Action": "StartWithoutDebugging", + "DebugTarget": "Teams App Test Tool (browser)" + }, + { +{{#PlaceProjectFileInSolutionDir}} + "Path": "{{ProjectName}}.csproj", + "Name": "{{ProjectName}}.csproj", +{{/PlaceProjectFileInSolutionDir}} +{{^PlaceProjectFileInSolutionDir}} + "Path": "{{ProjectName}}\\{{ProjectName}}.csproj", + "Name": "{{ProjectName}}\\{{ProjectName}}.csproj", +{{/PlaceProjectFileInSolutionDir}} + "Action": "Start", + "DebugTarget": "Teams App Test Tool" + } + ] + }, +{{/enableTestToolByDefault}} + { + "Name": "Microsoft Teams (browser)", + "Projects": [ + { + "Path": "{{NewProjectTypeName}}\\{{NewProjectTypeName}}.{{NewProjectTypeExt}}", + "Name": "{{NewProjectTypeName}}\\{{NewProjectTypeName}}.{{NewProjectTypeExt}}", + "Action": "StartWithoutDebugging", + "DebugTarget": "Microsoft Teams (browser)" + }, + { +{{#PlaceProjectFileInSolutionDir}} + "Path": "{{ProjectName}}.csproj", + "Name": "{{ProjectName}}.csproj", +{{/PlaceProjectFileInSolutionDir}} +{{^PlaceProjectFileInSolutionDir}} + "Path": "{{ProjectName}}\\{{ProjectName}}.csproj", + "Name": "{{ProjectName}}\\{{ProjectName}}.csproj", +{{/PlaceProjectFileInSolutionDir}} + "Action": "Start", + "DebugTarget": "Start Project" + } + ] +{{#enableTestToolByDefault}} + } +{{/enableTestToolByDefault}} +{{^enableTestToolByDefault}} + }, + { + "Name": "Teams App Test Tool (browser)", + "Projects": [ + { + "Path": "{{NewProjectTypeName}}\\{{NewProjectTypeName}}.{{NewProjectTypeExt}}", + "Name": "{{NewProjectTypeName}}\\{{NewProjectTypeName}}.{{NewProjectTypeExt}}", + "Action": "StartWithoutDebugging", + "DebugTarget": "Teams App Test Tool (browser)" + }, + { +{{#PlaceProjectFileInSolutionDir}} + "Path": "{{ProjectName}}.csproj", + "Name": "{{ProjectName}}.csproj", +{{/PlaceProjectFileInSolutionDir}} +{{^PlaceProjectFileInSolutionDir}} + "Path": "{{ProjectName}}\\{{ProjectName}}.csproj", + "Name": "{{ProjectName}}\\{{ProjectName}}.csproj", +{{/PlaceProjectFileInSolutionDir}} + "Action": "Start", + "DebugTarget": "Teams App Test Tool" + } + ] + } +{{/enableTestToolByDefault}} +] \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/AdapterWithErrorHandler.cs.tpl b/templates/csharp/custom-copilot-rag-customize/AdapterWithErrorHandler.cs.tpl new file mode 100644 index 0000000000..6456467fef --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/AdapterWithErrorHandler.cs.tpl @@ -0,0 +1,34 @@ +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; + +namespace {{SafeProjectName}} +{ + public class AdapterWithErrorHandler : CloudAdapter + { + public AdapterWithErrorHandler(BotFrameworkAuthentication auth, ILogger logger) + : base(auth, logger) + { + OnTurnError = async (turnContext, exception) => + { + // Log any leaked exception from the application. + // NOTE: In production environment, you should consider logging this to + // Azure Application Insights. Visit https://aka.ms/bottelemetry to see how + // to add telemetry capture to your bot. + logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + // Only send error message for user messages, not for other message types so the bot doesn't spam a channel or chat. + if (turnContext.Activity.Type == ActivityTypes.Message) + { + // Send a message to the user + await turnContext.SendActivityAsync($"The bot encountered an unhandled error: {exception.Message}"); + await turnContext.SendActivityAsync("To continue to run this bot, please fix the bot source code."); + + // Send a trace activity + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.Message, "https://www.botframework.com/schemas/error", "TurnError"); + } + }; + } + } +} \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/Config.cs.tpl b/templates/csharp/custom-copilot-rag-customize/Config.cs.tpl new file mode 100644 index 0000000000..723df72f15 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/Config.cs.tpl @@ -0,0 +1,38 @@ +namespace {{SafeProjectName}} +{ + public class ConfigOptions + { + public string BOT_ID { get; set; } + public string BOT_PASSWORD { get; set; } + public string BOT_TYPE { get; set; } + public string BOT_TENANT_ID { get; set; } +{{#useOpenAI}} + public OpenAIConfigOptions OpenAI { get; set; } +{{/useOpenAI}} +{{#useAzureOpenAI}} + public AzureConfigOptions Azure { get; set; } +{{/useAzureOpenAI}} + } + +{{#useOpenAI}} + /// + /// Options for Open AI + /// + public class OpenAIConfigOptions + { + public string ApiKey { get; set; } + public string DefaultModel = "gpt-3.5-turbo"; + } +{{/useOpenAI}} +{{#useAzureOpenAI}} + /// + /// Options for Azure OpenAI and Azure Content Safety + /// + public class AzureConfigOptions + { + public string OpenAIApiKey { get; set; } + public string OpenAIEndpoint { get; set; } + public string OpenAIDeploymentName { get; set; } + } +{{/useAzureOpenAI}} +} diff --git a/templates/csharp/custom-copilot-rag-customize/Controllers/BotController.cs.tpl b/templates/csharp/custom-copilot-rag-customize/Controllers/BotController.cs.tpl new file mode 100644 index 0000000000..3a737fffc7 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/Controllers/BotController.cs.tpl @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; + +namespace {{SafeProjectName}}.Controllers +{ + [Route("api/messages")] + [ApiController] + public class BotController : ControllerBase + { + private readonly CloudAdapter Adapter; + private readonly IBot Bot; + + public BotController(CloudAdapter adapter, IBot bot) + { + Adapter = adapter; + Bot = bot; + } + + [HttpPost] + public async Task PostAsync(CancellationToken cancellationToken = default) + { + await Adapter.ProcessAsync(Request, Response, Bot, cancellationToken); + } + } +} \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/MyDataSource.cs.tpl b/templates/csharp/custom-copilot-rag-customize/MyDataSource.cs.tpl new file mode 100644 index 0000000000..a992a209ee --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/MyDataSource.cs.tpl @@ -0,0 +1,71 @@ +using Microsoft.Bot.Builder; +using Microsoft.Teams.AI.AI.DataSources; +using Microsoft.Teams.AI.AI.Prompts.Sections; +using Microsoft.Teams.AI.AI.Tokenizers; +using Microsoft.Teams.AI.State; + +namespace {{SafeProjectName}} +{ + public class MyDataSource : IDataSource + { + public string Name { get; } + private List _data = new List(); + public MyDataSource(string name) + { + Name = name; + Init(); + } + public async Task> RenderDataAsync(ITurnContext context, IMemory memory, ITokenizer tokenizer, int maxTokens, CancellationToken cancellationToken) + { + string? query = memory.GetValue("temp.input") as string; + + if (query == null) + { + return new RenderedPromptSection(string.Empty, 0); + } + + foreach (var data in _data) + { + if (data.Contains(query)) + { + //Console.WriteLine($"return rag data for data contains {query}"); + return new RenderedPromptSection(formatDocument(data), data.Length); + } + } + if (query.ToLower().Contains("perksplus")) + { + //Console.WriteLine("return rag data for query contains perksplus"); + return new RenderedPromptSection(formatDocument(_data[0]), _data[0].Length); + } + else if (query.ToLower().Contains("company")) + { + //Console.WriteLine("return rag data for query contains company"); + return new RenderedPromptSection(formatDocument(_data[1]), _data[1].Length); + } + else if (query.ToLower().Contains("northwind")) + { + //Console.WriteLine("return rag data for query contains northwind"); + return new RenderedPromptSection(formatDocument(_data[2]), _data[2].Length); + } + + return new RenderedPromptSection(string.Empty, 0); + } + private void Init() + { + string[] Documents = Directory.GetFiles("data"); + + int i = 0; + foreach (string doc in Documents) + { + string readText = File.ReadAllText(doc); + _data.Add(readText); + } + return; + } + + private string formatDocument(string result) + { + return $"{result}"; + } + } +} diff --git a/templates/csharp/custom-copilot-rag-customize/Program.cs.tpl b/templates/csharp/custom-copilot-rag-customize/Program.cs.tpl new file mode 100644 index 0000000000..10cb40add7 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/Program.cs.tpl @@ -0,0 +1,122 @@ +using {{SafeProjectName}}; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Teams.AI; +using Microsoft.Teams.AI.AI.Models; +using Microsoft.Teams.AI.AI.Planners; +using Microsoft.Teams.AI.AI.Prompts; +using Microsoft.Teams.AI.State; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddControllers(); +builder.Services.AddHttpClient("WebClient", client => client.Timeout = TimeSpan.FromSeconds(600)); +builder.Services.AddHttpContextAccessor(); + +// Prepare Configuration for ConfigurationBotFrameworkAuthentication +var config = builder.Configuration.Get(); +builder.Configuration["MicrosoftAppType"] = config.BOT_TYPE; +builder.Configuration["MicrosoftAppId"] = config.BOT_ID; +builder.Configuration["MicrosoftAppPassword"] = config.BOT_PASSWORD; +builder.Configuration["MicrosoftAppTenantId"] = config.BOT_TENANT_ID; +// Create the Bot Framework Authentication to be used with the Bot Adapter. +builder.Services.AddSingleton(); + +// Create the Cloud Adapter with error handling enabled. +// Note: some classes expect a BotAdapter and some expect a BotFrameworkHttpAdapter, so +// register the same adapter instance for both types. +builder.Services.AddSingleton(); +builder.Services.AddSingleton(sp => sp.GetService()); +builder.Services.AddSingleton(sp => sp.GetService()); + +builder.Services.AddSingleton(); + +{{#useOpenAI}} +builder.Services.AddSingleton(sp => new( + new OpenAIModelOptions(config.OpenAI.ApiKey, config.OpenAI.DefaultModel) + { + LogRequests = true + }, + sp.GetService() +)); +{{/useOpenAI}} +{{#useAzureOpenAI}} +builder.Services.AddSingleton(sp => new( + new AzureOpenAIModelOptions( + config.Azure.OpenAIApiKey, + config.Azure.OpenAIDeploymentName, + config.Azure.OpenAIEndpoint + ) + { + LogRequests = true + }, + sp.GetService() +)); +{{/useAzureOpenAI}} + +MyDataSource myDataSource = new MyDataSource("my-ai-search"); + +// Create the bot as transient. In this case the ASP Controller is expecting an IBot. +builder.Services.AddTransient(sp => +{ + // Create loggers + ILoggerFactory loggerFactory = sp.GetService(); + + // Create Prompt Manager + PromptManager prompts = new(new() + { + PromptFolder = "./Prompts" + }); + prompts.AddDataSource("my-ai-search", myDataSource); + + // Create ActionPlanner + ActionPlanner planner = new( + options: new( + model: sp.GetService(), + prompts: prompts, + defaultPrompt: async (context, state, planner) => + { + PromptTemplate template = prompts.GetPrompt("Chat"); + return await Task.FromResult(template); + } + ) + { LogRepairs = true }, + loggerFactory: loggerFactory + ); + + Application app = new ApplicationBuilder() + .WithAIOptions(new(planner)) + .WithStorage(sp.GetService()) + .Build(); + + app.OnConversationUpdate("membersAdded", async (turnContext, turnState, cancellationToken) => + { + var welcomeText = "How can I help you today?"; + foreach (var member in turnContext.Activity.MembersAdded) + { + if (member.Id != turnContext.Activity.Recipient.Id) + { + await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText), cancellationToken); + } + } + }); + + return app; +}); + +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseDeveloperExceptionPage(); +} + +app.UseStaticFiles(); +app.UseRouting(); +app.UseEndpoints(endpoints => +{ + endpoints.MapControllers(); +}); + +app.Run(); \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/Prompts/chat/config.json b/templates/csharp/custom-copilot-rag-customize/Prompts/chat/config.json new file mode 100644 index 0000000000..d2ffed26ec --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/Prompts/chat/config.json @@ -0,0 +1,22 @@ +{ + "schema": 1.1, + "description": "Chat with Teams RAG.", + "type": "completion", + "completion": { + "completion_type": "chat", + "include_history": true, + "include_input": true, + "max_input_tokens": 5000, + "max_tokens": 1000, + "temperature": 0.9, + "top_p": 0.0, + "presence_penalty": 0.6, + "frequency_penalty": 0.0, + "stop_sequences": [] + }, + "augmentation": { + "data_sources": { + "my-ai-search": 1200 + } + } +} \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/Prompts/chat/skprompt.txt b/templates/csharp/custom-copilot-rag-customize/Prompts/chat/skprompt.txt new file mode 100644 index 0000000000..89358c35e5 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/Prompts/chat/skprompt.txt @@ -0,0 +1 @@ +You are an AI bot that can chat with users. \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/Properties/launchSettings.json.tpl b/templates/csharp/custom-copilot-rag-customize/Properties/launchSettings.json.tpl new file mode 100644 index 0000000000..823a6c4155 --- /dev/null +++ b/templates/csharp/custom-copilot-rag-customize/Properties/launchSettings.json.tpl @@ -0,0 +1,96 @@ +{ + "profiles": { +{{^isNewProjectTypeEnabled}} +{{#enableTestToolByDefault}} + // Debug project within Teams App Test Tool + "Teams App Test Tool (browser)": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchTestTool": true, + "launchUrl": "http://localhost:56150", + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "TestTool", + "TEAMSFX_NOTIFICATION_STORE_FILENAME": ".notification.testtoolstore.json" + }, + "hotReloadProfile": "aspnetcore" + }, +{{/enableTestToolByDefault}} + // Debug project within Teams + "Microsoft Teams (browser)": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "https://teams.microsoft.com/l/app/${{TEAMS_APP_ID}}?installAppPackage=true&webjoin=true&appTenantId=${{TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}", + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "hotReloadProfile": "aspnetcore" + }, +{{^enableTestToolByDefault}} + // Debug project within Teams App Test Tool + "Teams App Test Tool (browser)": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchTestTool": true, + "launchUrl": "http://localhost:56150", + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "TestTool", + "TEAMSFX_NOTIFICATION_STORE_FILENAME": ".notification.testtoolstore.json" + }, + "hotReloadProfile": "aspnetcore" + }, +{{/enableTestToolByDefault}} + //// Uncomment following profile to debug project only (without launching Teams) + //, + //"Start Project (not in Teams)": { + // "commandName": "Project", + // "dotnetRunMessages": true, + // "applicationUrl": "https://localhost:7130;http://localhost:5130", + // "environmentVariables": { + // "ASPNETCORE_ENVIRONMENT": "Development" + // }, + // "hotReloadProfile": "aspnetcore" + //} +{{/isNewProjectTypeEnabled}} +{{#isNewProjectTypeEnabled}} +{{#enableTestToolByDefault}} + "Teams App Test Tool": { + "commandName": "Project", + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "TestTool", + "TEAMSFX_NOTIFICATION_STORE_FILENAME": ".notification.testtoolstore.json" + }, + "hotReloadProfile": "aspnetcore" + }, +{{/enableTestToolByDefault}} + "Start Project": { + "commandName": "Project", + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "hotReloadProfile": "aspnetcore" + }, +{{^enableTestToolByDefault}} + "Teams App Test Tool": { + "commandName": "Project", + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "TestTool", + "TEAMSFX_NOTIFICATION_STORE_FILENAME": ".notification.testtoolstore.json" + }, + "hotReloadProfile": "aspnetcore" + }, +{{/enableTestToolByDefault}} +{{/isNewProjectTypeEnabled}} + } +} \ No newline at end of file diff --git a/templates/csharp/custom-copilot-rag-customize/appPackage/color.png b/templates/csharp/custom-copilot-rag-customize/appPackage/color.png new file mode 100644 index 0000000000000000000000000000000000000000..01aa37e347d0841d18728d51ee7519106f0ed81e GIT binary patch literal 5117 zcmdT|`#;l<|9y>Z&8;RvbJkV`JZ47uM)M6PqELPD;&L{sk9 z+(Q(S&D_QepWgq)_xrwkbj|4pN5 z=VSkf%}v|F0{}R9{sRa|&lLD4f;^10G=TCxp_P9N*g;)a9RMm5IGA=20N_cwbwl06 z2eg(ol`u1Qw{r|*Pavm8@vy0IeTJUrio9YdcrNJVF>ba}?2AO~S6CFrP5OkYiS|06 zx{fzU?6R7Fo(eA2%!^k4qFLf?HR19`sdTa~&baugKe=zZFSCjbU{I1{cMET*n)L#%LrE`i2_>yDQEDf1?RT znZ&`cB?#^y1N8spgI*BauT4c!%WZ*ig*o^8__URv;@MQk!-OiSLaXA{^yJ3q zxpL@0j<`;1lK^}Wmr+OXI~tEV>+^T$BkMJTouA)B^(qFTz_A#DUtX8adQ7K zOEz?@!dYXM8zdtYH$TJpA-S_Uaivvh_w2&h{Xu9mSe^|L5S zy~F9d8#Ygb$sQx;0{0qeLaq_KOMQu_K z(AbA>Gd18K8TnH~JTwU55 z74bMm{C48jl6yRHvVNkmSz*P?EyruCF8HOI2RvYBA!4qh^aTAaIzUn7xB7CEbwcG- z9nIK(2p`ScIx21Dw)eB)0Q>yKLPMvaf<-Oq4*$IhuIkTww;CcU zKvB6_!`j4fb$T?Q?b!42#5JmN>CXW4H?obQ8?}ZSMR<@NaOus$w3n`ctGNGm%89v0 zn>tl_jbblXxj&NOcU7+VjHe+;-18+9-ieOjOoHx~ykrry&eKlVh3Hy5ylXWE$IBj+ z#v<4E1>$?}okfTJdBgV3b&Ckl9 z1cmPLv57nQ{N9Siva&bnh}V!6=lAs5c^bD*xYp(i32A%shd)EJ^;l2mds?04_`<*o zDNH7!qqD)4IYTGES1uSdt4zr2SMzaYp(>OQ=qt9-ng=LQb5PiK+kK183eY>a?>Bw4 z`s~UlV9S<9c(?jKSZT9r@_}97A=%J}InsV)INMOo=6Wz|+HEc7VvSt00vO`n1HTV@ zVX`o_*(Rc^)EdzS6{xyoyC^z90Qu8<4c{&*F7*a>ikxmO?kh__Q1$t6i|_|pDaij< zyL3b~TsQW^M5Ncloc_z+ak~ENF-DuNY(JtLfgjgvj=Zo``yk|uguX)G;Oek`vzw0# zSw9m~#hHMviTjD+G5)--NT(`KCGjuFn!$B4y1}oV4L}$JDr9{DIfUi<@H7$-p#|SWK52*!dj_$r9bo!hh?Z z=>0M=y(F)3NmUmXw04Dxz;d`P7DcAjeP0n1vz06oMtNo^SRX@OIQB}-->oDto||L& z*t=`?s!O2r&C+1+IK5THFj!D}G_OimWcstGnlTgZ=Pj&Q!DB8CeQHAWc8F{?spl+U zTiH7`AE+GUSU&q95)km`WEb$O1f(<99ow92YO4!kA=&+0BUd;VeCJL%+$UU>4k}QT zmf~map`VML1nF$Qi9XGbGjTPL3l0<8`1Yuqg(f4Vi&vuljfn?oevL*fUQ1@^QXz?c zha9wXD?@X{I;{9GM9i}%pE=lMP2wgYPr!@xFXRf>B_aS~(ANY;!Wsu}uuZhbGlkH& z5@xYQVJ;_oDG2z=Jas4Hk^R_(98o9<7*DWyk5r{TmmGmdlv$eMNMXRs%PEaeRHyJn zz1bg`ivXk60Pjp>lGnJIYy5$K3zI1e3+t$nsnLR0@;mbf`5VAk9HDL#{qbZXfX^PoV&{*B}9p^muB^0Y>7TvcE7D~wK&Bl=v;=0$$YgG za?>g1ZgiA(4|Q-9aj4ki7@3fjPJFkSH%I`bffj^ayiD0hTtf9Rq`VHt;3$hr>O~ux4XhPWgk$X#@8$h^+<08SR^7gR*UitH8`HjQMV!}hd!IGF9O zYV7@2XsvI}6cMS9rOVmOIXtS*ym60NzWX#V0vufS*92hEztF`g>udch->ZG|-H~HOGj~K@r7+S*e}UeWC)Z}) zII;&EcF%xqGOlB`@Gm*4Gx~{YkHuvM;U0!J_#*dfCtIO)L2`*I7woRKB}tZu#`Y!W z^kevopxW6z5!v-A=WlGaK!Hd^q>gaV-u_$tqI>)hnUgn10p5?VdA-RgoVxIyzPr!# z&4r@hf=WsQk}9F^S(|| zsSRPuj%Z|vIRZ9}kkwEqM0#8C{^r<_0QBOa ztxiQFp-A(_ch}jq8hG|K4*|@fr}BZ12p9rGW%F4tOtE6u&I18L&KD`hu9V7o!+?5| z(VY!r%Q2&nB|<iX<0kWA@XE84qe1vfyS605xBrh^8J^%Lg`X93AQS+S!EgQe`XB;1E$J_3@U~Bb) zW|(=SQhUlN1isM&kAeLk$oP5W(aLe$XicJlDZ&%*zn?tUXI?8=&JFC8pF&-YkC-%0 zU3gOAH5y)ew!tW;tL(r@`eliBgm>!V;z#M<3zndR>>pXC^8QCin}%cE5xh*Mv2RhL z4X>XKYwX43Hzr+%2n8u!(Gl1}iD_#=M?4*7o%1re{BJWc+`uS-8!!8!_g>7I2Bag@ znW&GC3!_{vIpsIK7t6HZzV{TDr_%1*f2rDhYZhVzmz`EscVRX@jXqry{Dg8+v1qHV zyH!HC0!iJLiOiyA{M{gyIXuXDe!B+OHh#C7YBihQDjf%NEc#~=N|u|7bxP9R?1#&E zevA=yrTw3FX^_zUg_+;VhesO{(-wk+vGZOL%`*iL zTZWz0%vw25(656o0(-ljzrpW6B(Ejht}*2I8|^ao@RO7MXcIt@XVSlT)w#J}^TSN8 z4$N;0T8*-k=yHh_L&O>+a~TI#6S6A58(++*;ZJC-P|$$Mnf;Zx*KF#lSptCM)zTp^ z>#wVbe1+zS6o2PDk&!CMz5L4VHX?1wy>i%Z`0?(cW%;@8J4cY#%aSq+Nfpe90*UC5 zQCxqaeV)zka&AfZVkgxsolEMz&U=a8`6ZeDSdLHy3@CW??R5VszB*0sUdn0#sn0D& z99Z5Bm~w+!bb|ApEW8s~%5AhRb_>s(xak?r`W+eR=Oq`+!RuEOCWTsx1hTW(vsMbA z%jl8Q@fn}G1e{L}Lpv7z~1IBj#3%SW` z!8xoi@uA(qVEh*#tsaVfCeoXwWqB1z)gLC`##}`v+qhygQwB z{+T0i`?*~3+lzODd_z1O_t5BqA62w3H6J0oXMzSqNT)Ag9hB6x!iWli7x)znBIDbT z_B&A>&jycZK%&mmyrD18H*7g|a|7Ye2A}DTpJLp4A!ebqar=Pu>`{3BYXqOf6ib#= zj}>cZ6stLm6K&kn-Cs-2FKt3SFHzSVVLI8RVNen)!yz z)rrRABNAWDWnTg{D@d}51{PP*E4>GFd> zz-_dSx{vm_AO4LJe70#^_}F@T9%t)?{Ygnj7X!ykJHl4O zw#CW;8}6?Wm8t$eM{@NR#x&_+71LoApFVLZ!#J$4s&@(D!KQ*ov;H)#vM|i@?(5<0 za_)a|G;_Z&U*3-Vdj{p;nd5Z0ZnHbvxZaml>ADd(Zlx+HR0a$GzR`;vg5v) z5J4!uQ&7}tT~u%LVt2J~nOns9T=zgghQKvJ{P1@6);4pOiaC&Ee!pB*W@Z2%C-7_M z-`P>SMtEnhoG0()=Pzr`B_Wf+`^Y1nzhPmiRC>@-mb^FlL)d8F{OqGH@?|TfHLvl5 zJ?ppK>tVYAM|=5b!IoV58qk5n1iqvBa${z9_tQ%}9ptp9YTB&(Dy#GZ31r0po0{3G ze$#q+i>PQ!0;TYlb!->Drt?$XRJ%v=6&|7XoFZlA&2;+hE{pX|4^E4TgC?5 zHKIqHp2X#dHuU{<@aC8FQZ=e9JRTYB;_y&W>kGy<4fxPq&wl)*-kv`K*gK|cM>D(6 z3>Ui}l#Ji9tkY%RN^vR|ZaoM!ENf-g`lFr7o2Gt->E)?X|B>IZzi}ooeBw}PEh)Q` zt6}75vnWx?*nRSHZY;_NVF|0484u!cb^ctNu8CR`^MW+5)Mr?J9pfw-LB}vO()?p4 z-u;n^HSPzuFHxYQh!>}eAsEdIJNI=gtVPmxwFQ~o`oiH$9qYzjd_kzc>ZdJG>UB2% lfBU27kFLW*ueRj?yLQv24`q)3Yv};s)=j+|fQ-;iK$xI(f`$oT17L!(LFfcz168`nA*Cc%I0atv-RTUm zZ2wkd832qx#F%V@dJ3`^u!1Jbu|MA-*zqXsjx6)|^3FfFwG`kef*{y-Ind7Q&tc211>U&A`hY=1aJl9Iuetm z$}wv*0hFK%+BrvIsvN?C7pA3{MC8=uea7593GXf-z|+;_E5i;~j+ukPpM7$AJ + + + {{TargetFramework}} + enable + + +{{^isNewProjectTypeEnabled}} + + + + + + + + + + + + +{{/isNewProjectTypeEnabled}} + + + + + + + + + PreserveNewest + PreserveNewest + + + From ff616a6230790133770a3d55cad43d77d780b5a2 Mon Sep 17 00:00:00 2001 From: Huajie Zhang Date: Fri, 30 Aug 2024 13:07:32 +0800 Subject: [PATCH 34/52] fix: upgrade axios 1.7.5 (#12306) * fix: remove axios for api package * fix: pmpm-lock * fix: fx-core axios * fix: compile error * fix: ut * fix: error * fix: upgrade typescript 4.7 axios 1.7.5 --- packages/fx-core/package.json | 6 +- packages/fx-core/pnpm-lock.yaml | 1573 +++---- .../src/component/generator/generator.ts | 2 +- packages/fx-core/src/index.ts | 1 - .../component/generator/generator.test.ts | 10 +- .../generator/officeAddinGenerator.test.ts | 4 +- .../component/generator/spfxGenerator.test.ts | 2 +- .../middleware/ConcurrentLockerMW.test.ts | 12 +- .../migration/projectMigrationV3.test.ts | 8 +- packages/fx-core/tsconfig.json | 1 + packages/server/package.json | 2 +- packages/server/pnpm-lock.yaml | 1448 ++++--- packages/vscode-extension/package.json | 6 +- packages/vscode-extension/pnpm-lock.yaml | 3597 +++++++++-------- .../src/debug/localTelemetryReporter.ts | 6 +- .../taskTerminal/baseTunnelTaskTerminal.ts | 2 +- .../src/debug/teamsfxTaskHandler.ts | 2 +- .../vscode-extension/test/mocks/vsc/uri.ts | 2 +- packages/vscode-extension/tsconfig.json | 1 + 19 files changed, 3532 insertions(+), 3153 deletions(-) diff --git a/packages/fx-core/package.json b/packages/fx-core/package.json index 0f3df30658..8368d40424 100644 --- a/packages/fx-core/package.json +++ b/packages/fx-core/package.json @@ -101,7 +101,7 @@ "@microsoft/teamsfx-api": "workspace:*", "adm-zip": "^0.5.10", "ajv": "^8.5.0", - "axios": "^1.6.8", + "axios": "^1.7.5", "axios-retry": "^3.3.1", "comment-json": "^4.2.3", "cryptr": "^6.0.2", @@ -207,9 +207,9 @@ "tmp": "^0.2.1", "ts-loader": "^8.0.3", "ts-morph": "^19.0.0", - "ts-node": "^9.1.1", + "ts-node": "^10.9.2", "tslib": "^2.3.1", - "typescript": "4.3.5", + "typescript": "4.7.4", "webpack": "^5.61.0" }, "files": [ diff --git a/packages/fx-core/pnpm-lock.yaml b/packages/fx-core/pnpm-lock.yaml index 540bc29bdf..3a500f2bdf 100644 --- a/packages/fx-core/pnpm-lock.yaml +++ b/packages/fx-core/pnpm-lock.yaml @@ -54,8 +54,8 @@ dependencies: specifier: ^8.5.0 version: 8.5.0 axios: - specifier: ^1.6.8 - version: 1.6.8(debug@4.3.4) + specifier: ^1.7.5 + version: 1.7.5(debug@4.3.6) axios-retry: specifier: ^3.3.1 version: 3.3.1 @@ -168,7 +168,7 @@ dependencies: devDependencies: '@istanbuljs/nyc-config-typescript': specifier: ^1.0.1 - version: 1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@9.1.1) + version: 1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@10.9.2) '@types/adm-zip': specifier: ^0.5.5 version: 0.5.5 @@ -195,7 +195,7 @@ devDependencies: version: 5.5.0 '@types/fs-extra': specifier: ^9.0.9 - version: 9.0.10 + version: 9.0.9 '@types/glob': specifier: ^7.1.3 version: 7.1.3 @@ -273,16 +273,16 @@ devDependencies: version: 0.4.11 '@typescript-eslint/eslint-plugin': specifier: ^4.19.0 - version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.3.5) + version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.7.4) '@typescript-eslint/parser': specifier: ^4.19.0 - version: 4.19.0(eslint@7.29.0)(typescript@4.3.5) + version: 4.19.0(eslint@7.29.0)(typescript@4.7.4) ahocorasick: specifier: ^1.0.2 version: 1.0.2 axios-mock-adapter: specifier: ^1.20.0 - version: 1.20.0(axios@1.6.8) + version: 1.20.0(axios@1.7.5) chai: specifier: ^4.2.0 version: 4.2.0 @@ -294,7 +294,7 @@ devDependencies: version: 1.0.0(chai@4.2.0) copy-webpack-plugin: specifier: ^6.4.1 - version: 6.4.1(webpack@5.62.1) + version: 6.4.1(webpack@5.61.0) eslint: specifier: ^7.29.0 version: 7.29.0 @@ -357,36 +357,31 @@ devDependencies: version: 0.2.1 ts-loader: specifier: ^8.0.3 - version: 8.0.3(typescript@4.3.5) + version: 8.0.3(typescript@4.7.4) ts-morph: specifier: ^19.0.0 version: 19.0.0 ts-node: - specifier: ^9.1.1 - version: 9.1.1(typescript@4.3.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@14.14.21)(typescript@4.7.4) tslib: specifier: ^2.3.1 - version: 2.6.1 + version: 2.3.1 typescript: - specifier: 4.3.5 - version: 4.3.5 + specifier: 4.7.4 + version: 4.7.4 webpack: specifier: ^5.61.0 - version: 5.62.1 + version: 5.61.0 packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@apidevtools/json-schema-ref-parser@9.0.6: @@ -415,8 +410,8 @@ packages: '@apidevtools/openapi-schemas': 2.1.0 '@apidevtools/swagger-methods': 3.0.2 '@jsdevtools/ono': 7.1.3 - ajv: 8.12.0 - ajv-draft-04: 1.0.0(ajv@8.12.0) + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) call-me-maybe: 1.0.2 openapi-types: 7.2.3 dev: false @@ -425,14 +420,14 @@ packages: resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} dependencies: - tslib: 2.6.1 + tslib: 2.3.1 dev: false /@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.7.0 dev: false /@azure/arm-appservice@13.0.0: @@ -441,11 +436,11 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.3 - '@azure/core-lro': 2.5.4 - '@azure/core-paging': 1.5.0 - '@azure/core-rest-pipeline': 1.13.0 - tslib: 2.6.1 + '@azure/core-client': 1.9.2 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + tslib: 2.3.1 transitivePeerDependencies: - supports-color dev: false @@ -456,11 +451,11 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.3 - '@azure/core-lro': 2.5.4 - '@azure/core-paging': 1.5.0 - '@azure/core-rest-pipeline': 1.13.0 - tslib: 2.6.1 + '@azure/core-client': 1.9.2 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + tslib: 2.3.1 transitivePeerDependencies: - supports-color dev: false @@ -471,11 +466,11 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.3 - '@azure/core-lro': 2.5.4 - '@azure/core-paging': 1.5.0 - '@azure/core-rest-pipeline': 1.13.0 - tslib: 2.6.1 + '@azure/core-client': 1.9.2 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + tslib: 2.3.1 transitivePeerDependencies: - supports-color dev: false @@ -486,11 +481,11 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.3 - '@azure/core-lro': 2.5.4 - '@azure/core-paging': 1.5.0 - '@azure/core-rest-pipeline': 1.13.0 - tslib: 2.6.1 + '@azure/core-client': 1.9.2 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + tslib: 2.3.1 transitivePeerDependencies: - supports-color dev: false @@ -500,7 +495,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.6.1 + tslib: 2.3.1 dev: false /@azure/core-auth@1.7.2: @@ -508,21 +503,21 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.6.1 - tslib: 2.6.2 + '@azure/core-util': 1.9.2 + tslib: 2.7.0 dev: false - /@azure/core-client@1.7.3: - resolution: {integrity: sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==} - engines: {node: '>=14.0.0'} + /@azure/core-client@1.9.2: + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 + '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.4.0 - '@azure/core-rest-pipeline': 1.13.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - tslib: 2.6.1 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false @@ -534,15 +529,15 @@ packages: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 '@azure/core-tracing': 1.0.0-preview.13 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 '@types/node-fetch': 2.6.9 '@types/tunnel': 0.0.3 form-data: 4.0.0 node-fetch: 2.7.0 process: 0.11.10 - tough-cookie: 4.1.3 - tslib: 2.6.1 + tough-cookie: 4.1.4 + tslib: 2.3.1 tunnel: 0.0.6 uuid: 8.3.2 xml2js: 0.5.0 @@ -550,35 +545,35 @@ packages: - encoding dev: false - /@azure/core-lro@2.5.4: - resolution: {integrity: sha512-3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q==} - engines: {node: '>=14.0.0'} + /@azure/core-lro@2.7.2: + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - tslib: 2.6.1 + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.7.0 dev: false - /@azure/core-paging@1.5.0: - resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} - engines: {node: '>=14.0.0'} + /@azure/core-paging@1.6.2: + resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.1 + tslib: 2.7.0 dev: false - /@azure/core-rest-pipeline@1.13.0: - resolution: {integrity: sha512-a62aP/wppgmnfIkJLfcB4ssPBcH94WzrzPVJ3tlJt050zX4lfmtnvy95D3igDo3f31StO+9BgPrzvkj4aOxnoA==} + /@azure/core-rest-pipeline@1.16.3: + resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 + '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.4.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - tslib: 2.6.1 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false @@ -587,23 +582,23 @@ packages: resolution: {integrity: sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==} engines: {node: '>=12.0.0'} dependencies: - '@opentelemetry/api': 1.7.0 - tslib: 2.6.1 + '@opentelemetry/api': 1.9.0 + tslib: 2.3.1 dev: false - /@azure/core-tracing@1.0.1: - resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} - engines: {node: '>=12.0.0'} + /@azure/core-tracing@1.1.2: + resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.1 + tslib: 2.7.0 dev: false - /@azure/core-util@1.6.1: - resolution: {integrity: sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==} - engines: {node: '>=16.0.0'} + /@azure/core-util@1.9.2: + resolution: {integrity: sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - tslib: 2.6.1 + '@azure/abort-controller': 2.1.2 + tslib: 2.7.0 dev: false /@azure/identity@4.1.0: @@ -612,43 +607,43 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 - '@azure/core-client': 1.7.3 - '@azure/core-rest-pipeline': 1.13.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - '@azure/msal-browser': 3.13.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 3.22.0 '@azure/msal-node': 2.6.6 events: 3.3.0 jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 - tslib: 2.6.1 + tslib: 2.3.1 transitivePeerDependencies: - supports-color dev: false - /@azure/logger@1.0.4: - resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} - engines: {node: '>=14.0.0'} + /@azure/logger@1.1.4: + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.1 + tslib: 2.7.0 dev: false - /@azure/msal-browser@3.13.0: - resolution: {integrity: sha512-fD906nmJei3yE7la6DZTdUtXKvpwzJURkfsiz9747Icv4pit77cegSm6prJTKLQ1fw4iiZzrrWwxnhMLrTf5gQ==} + /@azure/msal-browser@3.22.0: + resolution: {integrity: sha512-ZkL2Z0zffsBIE3ovhMwa0rVrPeKV2GHhDWFgWiIcKiPt82b21YLijK3c/rNjTHkME+6FCjMIa/5Nul+ZjH197w==} engines: {node: '>=0.8.0'} dependencies: - '@azure/msal-common': 14.9.0 + '@azure/msal-common': 14.14.2 dev: false - /@azure/msal-common@14.8.1: - resolution: {integrity: sha512-9HfBMDTIgtFFkils+o6gO/aGEoLLuc4z+QLLfhy/T1bTNPiVsX/9CjaBPMZGnMltN/IlMkU5SGGNggGh55p5xA==} + /@azure/msal-common@14.14.2: + resolution: {integrity: sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog==} engines: {node: '>=0.8.0'} dev: false - /@azure/msal-common@14.9.0: - resolution: {integrity: sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==} + /@azure/msal-common@14.8.1: + resolution: {integrity: sha512-9HfBMDTIgtFFkils+o6gO/aGEoLLuc4z+QLLfhy/T1bTNPiVsX/9CjaBPMZGnMltN/IlMkU5SGGNggGh55p5xA==} engines: {node: '>=0.8.0'} dev: false @@ -667,12 +662,12 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-http': 2.3.2 - '@azure/core-lro': 2.5.4 - '@azure/core-paging': 1.5.0 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 '@azure/core-tracing': 1.0.0-preview.13 - '@azure/logger': 1.0.4 + '@azure/logger': 1.1.4 events: 3.3.0 - tslib: 2.6.1 + tslib: 2.3.1 transitivePeerDependencies: - encoding dev: false @@ -680,38 +675,38 @@ packages: /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - '@babel/highlight': 7.23.4 + '@babel/highlight': 7.24.7 dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@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 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -719,174 +714,156 @@ packages: - supports-color dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + '@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.22.15 - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 + '@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 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@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.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.1 dev: true - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.6 dev: true - /@babel/runtime@7.23.8: - resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + /@babel/runtime@7.25.6: + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: false - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 dev: true - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@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.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4(supports-color@8.1.1) + '@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 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: true + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} 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.6 espree: 7.3.1 globals: 13.24.0 ignore: 4.0.6 @@ -914,9 +891,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.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -924,6 +902,7 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead dev: true /@isaacs/cliui@8.0.2: @@ -949,7 +928,7 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/nyc-config-typescript@1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@9.1.1): + /@istanbuljs/nyc-config-typescript@1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@10.9.2): resolution: {integrity: sha512-/gz6LgVpky205LuoOfwEZmnUtaSmdk0QIMcNFj9OvxhiMhPpKftMgZmGN7jNj7jR+lr8IB1Yks3QSSSNSxfoaQ==} engines: {node: '>=8'} peerDependencies: @@ -960,7 +939,7 @@ packages: '@istanbuljs/schema': 0.1.3 nyc: 15.1.0 source-map-support: 0.5.19 - ts-node: 9.1.1(typescript@4.3.5) + ts-node: 10.9.2(@types/node@14.14.21)(typescript@4.7.4) dev: true /@istanbuljs/schema@0.1.3: @@ -968,36 +947,43 @@ packages: engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -1007,7 +993,7 @@ packages: resolution: {integrity: sha512-OayhehwI+CnO0Wr53e29ZJZWGsNA5yVG7r54qmZSLc5HxA5Cozk4hP7EbYDCXkxh4NbQoT1dhTzC8bkRo+wWXw==} dependencies: buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color @@ -1017,24 +1003,26 @@ packages: resolution: {integrity: sha512-wGuFEzvRiWZmDxQMGKEjOKhEIVnLiG6vRUuM9Hwqxpe/kbiyA2WiUyEVpniNPaaw8gDHTf9zJHnPNNj0JiL5mA==} dependencies: '@microsoft/dev-tunnels-contracts': 1.1.9 - axios: 1.6.8(debug@4.3.4) + axios: 1.7.5(debug@4.3.6) buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color dev: false - /@microsoft/teams-manifest@0.1.3: - resolution: {integrity: sha512-S73NHbTelqc1EbG2+uw/mnwFTbNK8HYuRWQEF+stj6L9fDIgVtc4fOLylMl75AAmHzRde1SoXIWY3R055qDgyg==} + /@microsoft/teams-manifest@0.1.5: + resolution: {integrity: sha512-ITt7mXSZjcrriwtn0Gg0zUnJcRac3feX3AY6MVAaF4uVf58jx5/GlFrWgABaBS30HBF05hhH1dYn2IoCby/StA==} dependencies: '@types/fs-extra': 11.0.4 - ajv: 8.12.0 - ajv-draft-04: 1.0.0(ajv@8.12.0) - axios: 1.6.8(debug@4.3.4) + '@types/node-fetch': 2.6.9 + ajv: 8.5.0 + ajv-draft-04: 1.0.0(ajv@8.5.0) + ajv-formats: 3.0.1(ajv@8.5.0) fs-extra: 9.1.0 + node-fetch: 2.7.0 transitivePeerDependencies: - - debug + - encoding dev: false /@nodelib/fs.scandir@2.1.5: @@ -1055,14 +1043,14 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + fastq: 1.17.1 dev: true /@npmcli/fs@1.1.1: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.4 + semver: 7.5.2 dev: true /@npmcli/move-file@1.1.2: @@ -1074,8 +1062,8 @@ packages: rimraf: 3.0.2 dev: true - /@opentelemetry/api@1.7.0: - resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==} + /@opentelemetry/api@1.9.0: + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} dev: false @@ -1110,18 +1098,13 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true - /@sinonjs/text-encoding@0.7.2: - resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + /@sinonjs/text-encoding@0.7.3: + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} dev: true - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: false - /@ts-morph/common@0.20.0: resolution: {integrity: sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q==} dependencies: @@ -1131,6 +1114,22 @@ packages: path-browserify: 1.0.1 dev: true + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + /@types/adm-zip@0.5.5: resolution: {integrity: sha512-YCGstVMjc4LTY5uK9/obvxBya93axZOVOyf2GSUulADzmLhYE45u2nAssCs/fWBs1Ifq5Vat75JTPwd5XZoPJw==} dependencies: @@ -1168,12 +1167,12 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.2 + '@types/eslint': 9.6.1 '@types/estree': 0.0.50 dev: true - /@types/eslint@8.56.2: - resolution: {integrity: sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==} + /@types/eslint@9.6.1: + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} dependencies: '@types/estree': 0.0.50 '@types/json-schema': 7.0.15 @@ -1194,8 +1193,8 @@ packages: '@types/node': 14.14.21 dev: false - /@types/fs-extra@9.0.10: - resolution: {integrity: sha512-O9T2LLkRDiTlalOBdjEkcnT0MRdT2+wglCl7pJUJ3mkWkR8hX4K+5bg2raQNJcLv4V8zGuTXe7Ud3wSqkTyuyQ==} + /@types/fs-extra@9.0.9: + resolution: {integrity: sha512-5TqDycCl0oMzwzd1cIjSJWMKMvLCDVErle4ZTjU4EmHDURR/+yZghe6GDHMCpHtcVfq0x0gMoOM546/5TbYHrg==} dependencies: '@types/node': 14.14.21 dev: true @@ -1359,7 +1358,7 @@ packages: '@types/node': 14.14.21 dev: true - /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.3.5): + /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.7.4): resolution: {integrity: sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1370,22 +1369,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@4.3.5) - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.3.5) + '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) '@typescript-eslint/scope-manager': 4.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 eslint: 7.29.0 functional-red-black-tree: 1.0.1 lodash: 4.17.21 regexpp: 3.2.0 semver: 7.5.2 - tsutils: 3.21.0(typescript@4.3.5) - typescript: 4.3.5 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@4.19.0(eslint@7.29.0)(typescript@4.3.5): + /@typescript-eslint/experimental-utils@4.19.0(eslint@7.29.0)(typescript@4.7.4): resolution: {integrity: sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1394,7 +1393,7 @@ packages: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.3.5) + '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.7.4) eslint: 7.29.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -1403,7 +1402,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser@4.19.0(eslint@7.29.0)(typescript@4.3.5): + /@typescript-eslint/parser@4.19.0(eslint@7.29.0)(typescript@4.7.4): resolution: {integrity: sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1415,10 +1414,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.3.5) - debug: 4.3.4(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.7.4) + debug: 4.3.6 eslint: 7.29.0 - typescript: 4.3.5 + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true @@ -1436,7 +1435,7 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree@4.19.0(typescript@4.3.5): + /@typescript-eslint/typescript-estree@4.19.0(typescript@4.7.4): resolution: {integrity: sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1447,12 +1446,12 @@ packages: dependencies: '@typescript-eslint/types': 4.19.0 '@typescript-eslint/visitor-keys': 4.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.2 - tsutils: 3.21.0(typescript@4.3.5) - typescript: 4.3.5 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true @@ -1584,12 +1583,12 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /acorn-import-assertions@1.9.0(acorn@8.11.3): + /acorn-import-assertions@1.9.0(acorn@8.12.1): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.11.3 + acorn: 8.12.1 dev: true /acorn-jsx@5.3.2(acorn@7.4.1): @@ -1600,14 +1599,21 @@ packages: acorn: 7.4.1 dev: true + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -1621,11 +1627,11 @@ packages: engines: {node: '>=6.0'} dev: false - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -1642,7 +1648,7 @@ packages: resolution: {integrity: sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==} dev: true - /ajv-draft-04@1.0.0(ajv@8.12.0): + /ajv-draft-04@1.0.0(ajv@8.17.1): resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: ajv: ^8.5.0 @@ -1650,7 +1656,29 @@ packages: ajv: optional: true dependencies: - ajv: 8.12.0 + ajv: 8.17.1 + dev: false + + /ajv-draft-04@1.0.0(ajv@8.5.0): + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.5.0 + dev: false + + /ajv-formats@3.0.1(ajv@8.5.0): + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.5.0 dev: false /ajv-keywords@3.5.2(ajv@6.12.6): @@ -1670,13 +1698,14 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 + dev: false /ajv@8.5.0: resolution: {integrity: sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==} @@ -1685,7 +1714,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: false /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} @@ -1769,21 +1797,23 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -1800,23 +1830,24 @@ packages: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /assertion-error@1.1.0: @@ -1851,17 +1882,19 @@ packages: engines: {node: '>= 4.0.0'} dev: false - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true - /axios-mock-adapter@1.20.0(axios@1.6.8): + /axios-mock-adapter@1.20.0(axios@1.7.5): resolution: {integrity: sha512-shZRhTjLP0WWdcvHKf3rH3iW9deb3UdKbdnKUoHmmsnBhVXN3sjPJM6ZvQ2r/ywgvBVQrMnjrSyQab60G1sr2w==} peerDependencies: axios: '>= 0.9.0' dependencies: - axios: 1.6.8(debug@4.3.4) + axios: 1.7.5(debug@4.3.6) fast-deep-equal: 3.1.3 is-blob: 2.1.0 is-buffer: 2.0.5 @@ -1870,14 +1903,14 @@ packages: /axios-retry@3.3.1: resolution: {integrity: sha512-RohAUQTDxBSWLFEnoIG/6bvmy8l3TfpkclgStjl5MDCMBDgapAWCmr1r/9harQfWC8bzLC8job6UcL1A1Yc+/Q==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.6 is-retry-allowed: 2.2.0 dev: false - /axios@1.6.8(debug@4.3.4): - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + /axios@1.7.5(debug@4.3.6): + resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.6) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -1894,8 +1927,8 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -1911,26 +1944,26 @@ packages: balanced-match: 1.0.2 dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 dev: true /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.645 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) dev: true /buffer-equal-constant-time@1.0.1: @@ -1967,7 +2000,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.2.0 + tar: 6.2.1 unique-filename: 1.1.1 transitivePeerDependencies: - bluebird @@ -1983,12 +2016,15 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.2.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 dev: true /call-me-maybe@1.0.2: @@ -2010,8 +2046,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} dev: true /chai-as-promised@7.1.1(chai@4.2.0): @@ -2041,7 +2077,7 @@ packages: deep-eql: 3.0.1 get-func-name: 2.0.2 pathval: 1.1.1 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /chalk@2.4.2: @@ -2083,7 +2119,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -2098,8 +2134,8 @@ packages: engines: {node: '>=10'} dev: true - /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 @@ -2242,7 +2278,7 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /copy-webpack-plugin@6.4.1(webpack@5.62.1): + /copy-webpack-plugin@6.4.1(webpack@5.61.0): resolution: {integrity: sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -2258,7 +2294,7 @@ packages: p-limit: 3.1.0 schema-utils: 3.3.0 serialize-javascript: 5.0.1 - webpack: 5.62.1 + webpack: 5.61.0 webpack-sources: 1.4.3 transitivePeerDependencies: - bluebird @@ -2299,6 +2335,33 @@ packages: resolution: {integrity: sha512-1TRHI4bmuLIB8WgkH9eeYXzhEg1T4tonO4vVaMBKKde8Dre51J68nAgTVXTwMYXAf7+mV2gBCkm/9wksjSb2sA==} dev: false + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -2343,6 +2406,18 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true + + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -2366,7 +2441,7 @@ packages: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /deep-is@0.1.4: @@ -2380,13 +2455,13 @@ packages: strip-bom: 4.0.0 dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 dev: true /define-lazy-prop@2.0.0: @@ -2398,8 +2473,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -2478,8 +2553,8 @@ packages: safe-buffer: 5.2.1 dev: false - /electron-to-chromium@1.4.645: - resolution: {integrity: sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==} + /electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} dev: true /emitter-listener@1.1.2: @@ -2515,8 +2590,8 @@ packages: tapable: 1.1.3 dev: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -2544,68 +2619,94 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + 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.1 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} dev: true /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -2625,8 +2726,8 @@ packages: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: false - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} /escape-string-regexp@1.0.5: @@ -2642,14 +2743,14 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.2(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0): + resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2669,7 +2770,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.3.5) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) debug: 3.2.7 eslint: 7.29.0 eslint-import-resolver-node: 0.3.9 @@ -2695,19 +2796,19 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.3.5) - array-includes: 3.1.7 + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + array-includes: 3.1.8 array.prototype.flat: 1.3.2 debug: 2.6.9 doctrine: 2.1.0 eslint: 7.29.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0) has: 1.0.4 - is-core-module: 2.13.1 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.7 + object.values: 1.2.0 resolve: 1.22.8 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -2776,7 +2877,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.6 doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -2784,7 +2885,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 @@ -2801,13 +2902,13 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.5.2 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 - table: 6.8.1 + table: 6.8.2 text-table: 0.2.0 v8-compile-cache: 2.4.0 transitivePeerDependencies: @@ -2825,7 +2926,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.6 doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -2833,7 +2934,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 @@ -2850,13 +2951,13 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.5.2 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 - table: 6.8.1 + table: 6.8.2 text-table: 0.2.0 v8-compile-cache: 2.4.0 transitivePeerDependencies: @@ -2877,8 +2978,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 @@ -2953,7 +3054,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 dev: true /fast-json-stable-stringify@2.1.0: @@ -2968,8 +3069,12 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: false - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + /fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + dev: false + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -2996,8 +3101,8 @@ packages: merge-descriptors: 1.0.3 dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -3018,7 +3123,7 @@ packages: dependencies: chalk: 4.1.2 commander: 5.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: true @@ -3043,7 +3148,7 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -3053,11 +3158,11 @@ packages: hasBin: true dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /follow-redirects@1.15.6(debug@4.3.4): + /follow-redirects@1.15.6(debug@4.3.6): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: @@ -3066,7 +3171,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -3082,8 +3187,8 @@ packages: signal-exit: 3.0.7 dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -3147,9 +3252,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -3174,13 +3279,15 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 dev: true /get-own-enumerable-property-symbols@3.0.2: @@ -3199,12 +3306,13 @@ packages: pump: 3.0.0 dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true /glob-parent@5.1.2: @@ -3218,20 +3326,21 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.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 + path-scurry: 1.11.1 dev: true /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3242,6 +3351,7 @@ packages: /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3263,11 +3373,12 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: true /globby@11.1.0: @@ -3277,7 +3388,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -3285,7 +3396,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /graceful-fs@4.2.11: @@ -3301,7 +3412,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 + uglify-js: 3.19.3 dev: false /has-bigints@1.0.2: @@ -3321,14 +3432,14 @@ packages: engines: {node: '>=8'} dev: false - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true @@ -3337,8 +3448,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -3357,8 +3468,8 @@ packages: type-fest: 0.8.1 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -3373,13 +3484,12 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + agent-base: 7.1.1 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -3388,12 +3498,12 @@ packages: resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} dev: false - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + agent-base: 7.1.1 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -3431,8 +3541,8 @@ packages: engines: {node: '>= 4'} dev: false - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true @@ -3460,6 +3570,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -3490,21 +3601,21 @@ packages: through: 2.3.8 dev: false - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -3521,7 +3632,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-blob@2.1.0: @@ -3533,8 +3644,8 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-buffer@1.1.6: @@ -3551,17 +3662,25 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.0 + is-typed-array: 1.1.13 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-docker@2.2.1: @@ -3586,8 +3705,8 @@ packages: is-extglob: 2.1.1 dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -3595,7 +3714,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -3621,8 +3740,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-regexp@1.0.0: @@ -3635,10 +3754,11 @@ packages: engines: {node: '>=10'} dev: false - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-stream@2.0.1: @@ -3650,7 +3770,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -3660,11 +3780,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /is-typedarray@1.0.0: @@ -3679,7 +3799,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-windows@1.0.2: @@ -3726,7 +3846,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -3759,24 +3879,23 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -3893,7 +4012,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.3 dev: false /just-extend@4.2.1: @@ -3967,13 +4086,13 @@ packages: cli-truncate: 2.1.0 commander: 6.2.1 cosmiconfig: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 dedent: 0.7.0 enquirer: 2.4.1 execa: 4.1.0 listr2: 3.14.0(enquirer@2.4.1) log-symbols: 4.1.0 - micromatch: 4.0.5 + micromatch: 4.0.8 normalize-path: 3.0.0 please-upgrade-node: 3.2.0 string-argv: 0.3.1 @@ -3996,7 +4115,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.1 + rfdc: 1.4.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -4104,9 +4223,8 @@ packages: wrap-ansi: 6.2.0 dev: true - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} dev: true /lru-cache@5.1.1: @@ -4132,7 +4250,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -4168,11 +4286,11 @@ packages: engines: {node: '>= 8'} dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 dev: true @@ -4215,8 +4333,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -4258,8 +4376,8 @@ packages: engines: {node: '>=8'} dev: true - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -4368,7 +4486,7 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 '@sinonjs/fake-timers': 6.0.1 - '@sinonjs/text-encoding': 0.7.2 + '@sinonjs/text-encoding': 0.7.3 just-extend: 4.2.1 path-to-regexp: 1.8.0 dev: true @@ -4410,8 +4528,8 @@ packages: es6-promise: 3.3.1 dev: false - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true /normalize-path@3.0.0: @@ -4451,7 +4569,7 @@ packages: istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -4508,8 +4626,9 @@ packages: yaml: 1.10.2 dev: false - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} dev: true /object-keys@1.1.1: @@ -4521,19 +4640,19 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /office-addin-manifest-converter@0.3.1: @@ -4542,25 +4661,24 @@ packages: dependencies: '@xmldom/xmldom': 0.8.10 commander: 9.5.0 - terser: 5.30.4 + terser: 5.31.6 dev: false /office-addin-manifest@1.13.1: resolution: {integrity: sha512-uIYpEE3tLr3grchqx9GOIHl3P+/4EqQ/Mrx4u5y7EsFzB5YqSIjwsvw6/x6OLrEhD5+0qtEh4fcAJVtfMPSpmw==} hasBin: true dependencies: - '@microsoft/teams-manifest': 0.1.3 + '@microsoft/teams-manifest': 0.1.5 adm-zip: 0.5.10 chalk: 2.4.2 commander: 6.2.1 fs-extra: 7.0.1 node-fetch: 2.7.0 - office-addin-usage-data: 1.6.10 + office-addin-usage-data: 1.6.12 path: 0.12.7 uuid: 8.3.2 xml2js: 0.5.0 transitivePeerDependencies: - - debug - encoding dev: false @@ -4574,15 +4692,14 @@ packages: inquirer: 7.3.3 office-addin-manifest: 1.13.1 office-addin-manifest-converter: 0.3.1 - office-addin-usage-data: 1.6.10 + office-addin-usage-data: 1.6.12 path: 0.12.7 transitivePeerDependencies: - - debug - encoding dev: false - /office-addin-usage-data@1.6.10: - resolution: {integrity: sha512-QCHaZO8ONLcbLH/9ABEp0t15VDd4vzH+z6CJtqTEgCSxmc2sGU0wZFyWK47j9aBoksLcDEzC8kW4SsJr40OjaQ==} + /office-addin-usage-data@1.6.12: + resolution: {integrity: sha512-K9Ii5Jsc6Vuf6LrBvo5BycMzTmDwTkk3g5W2zS4PLffvvQYeI/RO3oYpGpOT6z7Pa8oh5gQ2QMDUgmjQGQZ7PA==} hasBin: true dependencies: applicationinsights: 1.8.10 @@ -4619,16 +4736,16 @@ packages: resolution: {integrity: sha512-olbaNxz12R27+mTyJ/ZAFEfUruauHH27AkeQHDHRq5AF0LdNkK1SSV7EourXQDK+4aX7dv2HtyirAGK06WMAsA==} dev: false - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /os-tmpdir@1.0.2: @@ -4693,6 +4810,10 @@ packages: release-zalgo: 1.0.0 dev: true + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + dev: true + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4704,7 +4825,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4732,12 +4853,12 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 + lru-cache: 10.4.3 + minipass: 7.1.2 dev: true /path-to-regexp@1.8.0: @@ -4762,8 +4883,8 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} dev: true /picomatch@2.3.1: @@ -4784,6 +4905,11 @@ packages: semver-compare: 1.0.0 dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4932,13 +5058,14 @@ packages: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: false - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 dev: true /regexpp@3.2.0: @@ -4988,7 +5115,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -5018,12 +5145,13 @@ packages: - supports-color dev: true - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} dev: true /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.1.6 @@ -5034,7 +5162,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.10 + glob: 10.4.5 dev: true /run-async@2.4.1: @@ -5058,15 +5186,15 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.3.1 dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -5078,12 +5206,12 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -5091,8 +5219,8 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: false - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: false /schema-utils@3.3.0: @@ -5125,12 +5253,10 @@ packages: dependencies: lru-cache: 6.0.0 - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 /serialize-javascript@5.0.1: resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} @@ -5154,24 +5280,26 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /shebang-command@2.0.0: @@ -5232,12 +5360,14 @@ packages: should-util: 1.0.1 dev: false - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 dev: true /signal-exit@3.0.7: @@ -5358,29 +5488,31 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /string_decoder@1.1.1: @@ -5447,6 +5579,7 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -5472,11 +5605,11 @@ packages: - encoding dev: false - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.12.0 + ajv: 8.5.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -5493,8 +5626,8 @@ packages: engines: {node: '>=6'} dev: true - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -5505,7 +5638,7 @@ packages: yallist: 4.0.0 dev: true - /terser-webpack-plugin@5.3.10(webpack@5.62.1): + /terser-webpack-plugin@5.3.10(webpack@5.61.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -5521,35 +5654,23 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.27.0 - webpack: 5.62.1 - dev: true - - /terser@5.27.0: - resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.3 - commander: 2.20.3 - source-map-support: 0.5.21 + terser: 5.31.6 + webpack: 5.61.0 dev: true - /terser@5.30.4: - resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} + /terser@5.31.6: + resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.3 + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 - dev: false /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -5593,8 +5714,8 @@ packages: is-number: 7.0.0 dev: true - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -5607,7 +5728,7 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false - /ts-loader@8.0.3(typescript@4.3.5): + /ts-loader@8.0.3(typescript@4.7.4): resolution: {integrity: sha512-wsqfnVdB7xQiqhqbz2ZPLGHLPZbHVV5Qn/MNFZkCFxRU1miDyxKORucDGxKtsQJ63Rfza0udiUxWF5nHY6bpdQ==} engines: {node: '>=10.0.0'} peerDependencies: @@ -5616,9 +5737,9 @@ packages: chalk: 2.4.2 enhanced-resolve: 4.5.0 loader-utils: 1.4.2 - micromatch: 4.0.5 + micromatch: 4.0.8 semver: 6.3.1 - typescript: 4.3.5 + typescript: 4.7.4 dev: true /ts-morph@19.0.0: @@ -5628,19 +5749,34 @@ packages: code-block-writer: 12.0.0 dev: true - /ts-node@9.1.1(typescript@4.3.5): - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} + /ts-node@10.9.2(@types/node@14.14.21)(typescript@4.7.4): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 14.14.21 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - source-map-support: 0.5.19 - typescript: 4.3.5 + typescript: 4.7.4 + v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -5656,20 +5792,21 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + /tslib@2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + dev: false - /tsutils@3.21.0(typescript@4.3.5): + /tsutils@3.21.0(typescript@4.7.4): 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: 4.3.5 + typescript: 4.7.4 dev: true /tunnel@0.0.6: @@ -5689,6 +5826,11 @@ packages: engines: {node: '>=4'} dev: true + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -5703,42 +5845,48 @@ packages: engines: {node: '>=8'} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray-to-buffer@3.1.5: @@ -5751,14 +5899,14 @@ packages: resolution: {integrity: sha512-v3UJF8xm68BBj6AF4oQML3ikrfK2c9EmZUyLOfShpJuItAqVBHWP/KtpGinkSsIiP6EZyyb6Z3NXyW9dgS9X1w==} dev: false - /typescript@4.3.5: - resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} + /typescript@4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + /uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true @@ -5768,7 +5916,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -5801,15 +5949,15 @@ packages: engines: {node: '>= 10.0.0'} dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.0.1 dev: true /uri-js@4.4.1: @@ -5838,6 +5986,10 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} dev: true @@ -5852,8 +6004,8 @@ packages: engines: {node: '>=8.0.0 || >=10.0.0'} dev: false - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + /watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -5876,8 +6028,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.62.1: - resolution: {integrity: sha512-jNLtnWChS2CMZ7vqWtztv0G6fYB5hz11Zsadp5tE7e4/66zVDj7/KUeQZOsOl8Hz5KrLJH1h2eIDl6AnlyE12Q==} + /webpack@5.61.0: + resolution: {integrity: sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -5891,11 +6043,11 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.22.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) + browserslist: 4.23.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 @@ -5907,8 +6059,8 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.62.1) - watchpack: 2.4.0 + terser-webpack-plugin: 5.3.10(webpack@5.61.0) + watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -5937,15 +6089,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@2.0.2: @@ -5956,6 +6108,11 @@ packages: isexe: 2.0.0 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: false @@ -6006,7 +6163,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: false @@ -6089,7 +6246,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -6102,7 +6259,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/packages/fx-core/src/component/generator/generator.ts b/packages/fx-core/src/component/generator/generator.ts index ee00092be2..9f5089ee68 100644 --- a/packages/fx-core/src/component/generator/generator.ts +++ b/packages/fx-core/src/component/generator/generator.ts @@ -229,7 +229,7 @@ export async function sampleDefaultOnActionError( context.logProvider.error(error.message); if (error instanceof BaseComponentInnerError) throw error.toFxError(); if (await fs.pathExists(context.destination)) { - await fs.rm(context.destination, { recursive: true }); + await fs.remove(context.destination); } switch (action.name) { case GeneratorActionName.FetchSampleInfo: diff --git a/packages/fx-core/src/index.ts b/packages/fx-core/src/index.ts index ca53237f3f..5aa28119e7 100644 --- a/packages/fx-core/src/index.ts +++ b/packages/fx-core/src/index.ts @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -"use strict"; /** * File structure of this package: diff --git a/packages/fx-core/tests/component/generator/generator.test.ts b/packages/fx-core/tests/component/generator/generator.test.ts index eba81d2074..7b971eb018 100644 --- a/packages/fx-core/tests/component/generator/generator.test.ts +++ b/packages/fx-core/tests/component/generator/generator.test.ts @@ -107,7 +107,7 @@ describe("Generator utils", () => { afterEach(async () => { sandbox.restore(); if (await fs.pathExists(tmpDir)) { - await fs.rm(tmpDir, { recursive: true }); + await fs.remove(tmpDir); } mockedEnvRestore(); }); @@ -521,7 +521,7 @@ describe("Generator error", async () => { afterEach(async () => { if (await fs.pathExists(tmpDir)) { - await fs.rm(tmpDir, { recursive: true }); + await fs.remove(tmpDir); } sandbox.restore(); }); @@ -784,7 +784,7 @@ describe("render template", () => { afterEach(async () => { sandbox.restore(); if (await fs.pathExists(tmpDir)) { - await fs.rm(tmpDir, { recursive: true }); + await fs.remove(tmpDir); } mockedEnvRestore(); }); @@ -1181,7 +1181,7 @@ describe("Generate sample using download directory", () => { sandbox.restore(); mockedEnvRestore(); if (await fs.pathExists(tmpDir)) { - await fs.rm(tmpDir, { recursive: true }); + await fs.remove(tmpDir); } }); @@ -1250,7 +1250,7 @@ describe("Generate sample using download directory", () => { }); it("clean up if downloading failed", async () => { - const rmStub = sandbox.stub(fs, "rm").resolves(); + const rmStub = sandbox.stub(fs, "remove").resolves(); const existsStub = sandbox.stub(fs, "pathExists").resolves(true); sandbox.stub(generatorUtils, "downloadDirectory").rejects(); const result = await Generator.generateSample(ctx, tmpDir, "test"); diff --git a/packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts b/packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts index f3e0c8fab0..bfe714ae44 100644 --- a/packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts @@ -334,7 +334,7 @@ describe("OfficeAddinGenerator for Outlook Addin", function () { sinon.restore(); mockedEnvRestore(); if (await fse.pathExists(testFolder)) { - await fse.rm(testFolder, { recursive: true }); + await fse.remove(testFolder); } }); @@ -845,7 +845,7 @@ describe("OfficeAddinGenerator for Office Addin", function () { sinon.restore(); mockedEnvRestore(); if (await fse.pathExists(testFolder)) { - await fse.rm(testFolder, { recursive: true }); + await fse.remove(testFolder); } }); diff --git a/packages/fx-core/tests/component/generator/spfxGenerator.test.ts b/packages/fx-core/tests/component/generator/spfxGenerator.test.ts index 59cbe88827..b8470fbee6 100644 --- a/packages/fx-core/tests/component/generator/spfxGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/spfxGenerator.test.ts @@ -97,7 +97,7 @@ describe("SPFxGenerator", function () { mockedEnvRestore(); } if (await fs.pathExists(testFolder)) { - await fs.rm(testFolder, { recursive: true }); + await fs.remove(testFolder); } }); diff --git a/packages/fx-core/tests/core/middleware/ConcurrentLockerMW.test.ts b/packages/fx-core/tests/core/middleware/ConcurrentLockerMW.test.ts index db5151291e..9bdfa5a3ee 100644 --- a/packages/fx-core/tests/core/middleware/ConcurrentLockerMW.test.ts +++ b/packages/fx-core/tests/core/middleware/ConcurrentLockerMW.test.ts @@ -61,7 +61,7 @@ describe("Middleware - ConcurrentLockerMW", () => { const exist = await fs.pathExists(lockfilePath); assert.isFalse(exist); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); @@ -102,7 +102,7 @@ describe("Middleware - ConcurrentLockerMW", () => { await my.methodReturnOK(inputs); assert.isTrue(my.count === 2); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); @@ -117,7 +117,7 @@ describe("Middleware - ConcurrentLockerMW", () => { } catch (e) { assert.isTrue(e instanceof UserCancelError); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); @@ -148,7 +148,7 @@ describe("Middleware - ConcurrentLockerMW", () => { const res = await my.methodReturnOK(inputs); assert.isTrue(res.isErr() && res.error instanceof InvalidProjectError); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } assert.isTrue(my.count === 0); }); @@ -164,7 +164,7 @@ describe("Middleware - ConcurrentLockerMW", () => { await fs.ensureDir(path.join(inputs.projectPath, `${SettingsFolderName}`)); await my.methodCallSelf(inputs); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } assert.isTrue(my.count === 1); }); @@ -204,7 +204,7 @@ describe("Middleware - ConcurrentLockerMW", () => { expect(d).eql(1); expect(functionName).eql("myMethod"); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); }); diff --git a/packages/fx-core/tests/core/middleware/migration/projectMigrationV3.test.ts b/packages/fx-core/tests/core/middleware/migration/projectMigrationV3.test.ts index 98c82d2a75..5a625cd884 100644 --- a/packages/fx-core/tests/core/middleware/migration/projectMigrationV3.test.ts +++ b/packages/fx-core/tests/core/middleware/migration/projectMigrationV3.test.ts @@ -117,7 +117,7 @@ describe("ProjectMigratorMW", () => { const res = await my.other(inputs); assert.isTrue(res.isOk()); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); @@ -145,7 +145,7 @@ describe("ProjectMigratorMW", () => { const res = await my.other(inputs); assert.isTrue(res.isErr()); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); @@ -218,7 +218,7 @@ describe("ProjectMigratorMW", () => { assert.isTrue(res.isErr()); assert.instanceOf((res as any).error, NotAllowedMigrationError); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); }); @@ -264,7 +264,7 @@ describe("ProjectMigratorMW with no TEAMSFX_V3", () => { const res = await my.other(inputs); assert.isTrue(res.isErr()); } finally { - await fs.rmdir(inputs.projectPath!, { recursive: true }); + await fs.remove(inputs.projectPath!); } }); }); diff --git a/packages/fx-core/tsconfig.json b/packages/fx-core/tsconfig.json index ef92db875e..c4e785f9e2 100644 --- a/packages/fx-core/tsconfig.json +++ b/packages/fx-core/tsconfig.json @@ -15,6 +15,7 @@ "sourceMap": true, "declarationMap": true, "strict": true, + "useUnknownInCatchVariables": false, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "resolveJsonModule": true, diff --git a/packages/server/package.json b/packages/server/package.json index f7fc73df52..8c75403fc1 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -85,7 +85,7 @@ "terser-webpack-plugin": "^5.1.2", "ts-loader": "^9.2.2", "ts-node": "^10.9.1", - "typescript": "4.3.5", + "typescript": "4.7.4", "umd-compat-loader": "^2.1.2", "url-loader": "^4.1.1", "uuid": "^8.3.2", diff --git a/packages/server/pnpm-lock.yaml b/packages/server/pnpm-lock.yaml index 79aa052596..ccc68065de 100644 --- a/packages/server/pnpm-lock.yaml +++ b/packages/server/pnpm-lock.yaml @@ -101,10 +101,10 @@ devDependencies: version: 8.2.0 '@typescript-eslint/eslint-plugin': specifier: ^4.19.0 - version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.3.5) + version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.7.4) '@typescript-eslint/parser': specifier: ^4.19.0 - version: 4.19.0(eslint@7.29.0)(typescript@4.3.5) + version: 4.19.0(eslint@7.29.0)(typescript@4.7.4) chai: specifier: ^4.2.0 version: 4.2.0 @@ -191,13 +191,13 @@ devDependencies: version: 5.1.2(webpack@5.76.0) ts-loader: specifier: ^9.2.2 - version: 9.2.2(typescript@4.3.5)(webpack@5.76.0) + version: 9.2.2(typescript@4.7.4)(webpack@5.76.0) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@14.14.21)(typescript@4.3.5) + version: 10.9.1(@types/node@14.14.21)(typescript@4.7.4) typescript: - specifier: 4.3.5 - version: 4.3.5 + specifier: 4.7.4 + version: 4.7.4 umd-compat-loader: specifier: ^2.1.2 version: 2.1.2 @@ -216,31 +216,26 @@ devDependencies: packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@azure/abort-controller@1.1.0: resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: false /@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.7.0 dev: false /@azure/core-auth@1.4.0: @@ -248,7 +243,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.6.2 + tslib: 2.7.0 dev: false /@azure/core-auth@1.7.2: @@ -256,54 +251,54 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.6.1 - tslib: 2.6.2 + '@azure/core-util': 1.9.2 + tslib: 2.7.0 dev: false - /@azure/core-client@1.7.3: - resolution: {integrity: sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==} - engines: {node: '>=14.0.0'} + /@azure/core-client@1.9.2: + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.7.2 - '@azure/core-rest-pipeline': 1.13.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - tslib: 2.6.2 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.4.0 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false - /@azure/core-rest-pipeline@1.13.0: - resolution: {integrity: sha512-a62aP/wppgmnfIkJLfcB4ssPBcH94WzrzPVJ3tlJt050zX4lfmtnvy95D3igDo3f31StO+9BgPrzvkj4aOxnoA==} + /@azure/core-rest-pipeline@1.16.3: + resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.7.2 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - tslib: 2.6.2 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.4.0 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false - /@azure/core-tracing@1.0.1: - resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} - engines: {node: '>=12.0.0'} + /@azure/core-tracing@1.1.2: + resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: false - /@azure/core-util@1.6.1: - resolution: {integrity: sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==} - engines: {node: '>=16.0.0'} + /@azure/core-util@1.9.2: + resolution: {integrity: sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - tslib: 2.6.2 + '@azure/abort-controller': 2.1.2 + tslib: 2.7.0 dev: false /@azure/identity@4.1.0: @@ -312,46 +307,51 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 - '@azure/core-client': 1.7.3 - '@azure/core-rest-pipeline': 1.13.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - '@azure/msal-browser': 3.13.0 - '@azure/msal-node': 2.7.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 3.22.0 + '@azure/msal-node': 2.13.0 events: 3.3.0 jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 - tslib: 2.6.2 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false - /@azure/logger@1.0.4: - resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} - engines: {node: '>=14.0.0'} + /@azure/logger@1.1.4: + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: false - /@azure/msal-browser@3.13.0: - resolution: {integrity: sha512-fD906nmJei3yE7la6DZTdUtXKvpwzJURkfsiz9747Icv4pit77cegSm6prJTKLQ1fw4iiZzrrWwxnhMLrTf5gQ==} + /@azure/msal-browser@3.22.0: + resolution: {integrity: sha512-ZkL2Z0zffsBIE3ovhMwa0rVrPeKV2GHhDWFgWiIcKiPt82b21YLijK3c/rNjTHkME+6FCjMIa/5Nul+ZjH197w==} engines: {node: '>=0.8.0'} dependencies: - '@azure/msal-common': 14.9.0 + '@azure/msal-common': 14.14.2 + dev: false + + /@azure/msal-common@14.14.1: + resolution: {integrity: sha512-2Q3tqNz/PZLfSr8BvcHZVpRRfSn4MjGSqjj9J+HlBsmbf1Uu4P0WeXnemjTJwwx9KrmplsrN3UkZ/LPOR720rw==} + engines: {node: '>=0.8.0'} dev: false - /@azure/msal-common@14.9.0: - resolution: {integrity: sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==} + /@azure/msal-common@14.14.2: + resolution: {integrity: sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog==} engines: {node: '>=0.8.0'} dev: false - /@azure/msal-node@2.7.0: - resolution: {integrity: sha512-wXD8LkUvHICeSWZydqg6o8Yvv+grlBEcmLGu+QEI4FcwFendbTEZrlSygnAXXSOCVaGAirWLchca35qrgpO6Jw==} + /@azure/msal-node@2.13.0: + resolution: {integrity: sha512-DhP97ycs7qlCVzzzWGzJiwAFyFj5okno74E4FUZ61oCLfKh4IxA1kxirqzrWuYZWpBe9HVPL6GA4NvmlEOBN5Q==} engines: {node: '>=16'} dependencies: - '@azure/msal-common': 14.9.0 + '@azure/msal-common': 14.14.1 jsonwebtoken: 9.0.2 uuid: 8.3.2 dev: false @@ -359,38 +359,38 @@ packages: /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - '@babel/highlight': 7.23.4 + '@babel/highlight': 7.24.7 dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.5 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -403,119 +403,97 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.19.0 - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 jsesc: 2.5.2 dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.25.5: + resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@babel/types': 7.25.4 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + '@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.22.15 - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 + '@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.4 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@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.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} + /@babel/helpers@7.25.0: + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.1 dev: true /@babel/parser@7.18.4: @@ -526,36 +504,33 @@ packages: '@babel/types': 7.19.0 dev: true - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.25.4: + resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 dev: true - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.25.4: + resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@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.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4(supports-color@8.1.1) + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.5 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -565,17 +540,17 @@ packages: resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.25.4: + resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: true @@ -596,7 +571,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.6 espree: 7.3.1 globals: 13.24.0 ignore: 4.0.6 @@ -642,7 +617,7 @@ packages: '@istanbuljs/schema': 0.1.3 nyc: 15.1.0 source-map-support: 0.5.19 - ts-node: 10.9.1(@types/node@14.14.21)(typescript@4.3.5) + ts-node: 10.9.1(@types/node@14.14.21)(typescript@4.7.4) dev: true /@istanbuljs/schema@0.1.3: @@ -650,48 +625,48 @@ packages: engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} dev: true - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@malept/cross-spawn-promise@1.1.1: @@ -705,7 +680,7 @@ packages: resolution: {integrity: sha512-OayhehwI+CnO0Wr53e29ZJZWGsNA5yVG7r54qmZSLc5HxA5Cozk4hP7EbYDCXkxh4NbQoT1dhTzC8bkRo+wWXw==} dependencies: buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color @@ -729,7 +704,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + fastq: 1.17.1 dev: true /@pkgjs/parseargs@0.11.0: @@ -763,20 +738,15 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true - /@sinonjs/text-encoding@0.7.2: - resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + /@sinonjs/text-encoding@0.7.3: + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} dev: true - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: false - - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true /@tsconfig/node12@1.0.11: @@ -829,12 +799,12 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.2 + '@types/eslint': 9.6.1 '@types/estree': 0.0.51 dev: true - /@types/eslint@8.56.2: - resolution: {integrity: sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==} + /@types/eslint@9.6.1: + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} dependencies: '@types/estree': 0.0.51 '@types/json-schema': 7.0.15 @@ -844,11 +814,11 @@ packages: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/express-serve-static-core@4.17.41: - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 14.14.21 - '@types/qs': 6.9.11 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -857,9 +827,9 @@ packages: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.11 - '@types/serve-static': 1.15.5 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 dev: true /@types/fs-extra@8.0.1: @@ -912,10 +882,6 @@ packages: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true - /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true @@ -932,8 +898,8 @@ packages: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: true - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true /@types/range-parser@1.2.7: @@ -947,12 +913,12 @@ packages: '@types/node': 14.14.21 dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 '@types/node': 14.14.21 + '@types/send': 0.17.4 dev: true /@types/sinon@9.0.10: @@ -989,7 +955,7 @@ packages: '@types/node': 14.14.21 dev: true - /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.3.5): + /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.7.4): resolution: {integrity: sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1000,22 +966,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@4.3.5) - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.3.5) + '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) '@typescript-eslint/scope-manager': 4.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 eslint: 7.29.0 functional-red-black-tree: 1.0.1 lodash: 4.17.21 regexpp: 3.2.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.3.5) - typescript: 4.3.5 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@4.19.0(eslint@7.29.0)(typescript@4.3.5): + /@typescript-eslint/experimental-utils@4.19.0(eslint@7.29.0)(typescript@4.7.4): resolution: {integrity: sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1024,7 +990,7 @@ packages: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.3.5) + '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.7.4) eslint: 7.29.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -1033,7 +999,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser@4.19.0(eslint@7.29.0)(typescript@4.3.5): + /@typescript-eslint/parser@4.19.0(eslint@7.29.0)(typescript@4.7.4): resolution: {integrity: sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1045,10 +1011,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.3.5) - debug: 4.3.4(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.7.4) + debug: 4.3.6 eslint: 7.29.0 - typescript: 4.3.5 + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true @@ -1066,7 +1032,7 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree@4.19.0(typescript@4.3.5): + /@typescript-eslint/typescript-estree@4.19.0(typescript@4.7.4): resolution: {integrity: sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1077,12 +1043,12 @@ packages: dependencies: '@typescript-eslint/types': 4.19.0 '@typescript-eslint/visitor-keys': 4.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.3.5) - typescript: 4.3.5 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true @@ -1216,7 +1182,7 @@ packages: peerDependencies: webpack-cli: 4.x.x dependencies: - envinfo: 7.11.0 + envinfo: 7.13.0 webpack-cli: 4.7.2(webpack@5.76.0) dev: true @@ -1240,12 +1206,12 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /acorn-import-assertions@1.9.0(acorn@8.11.3): + /acorn-import-assertions@1.9.0(acorn@8.12.1): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.11.3 + acorn: 8.12.1 dev: true /acorn-jsx@5.3.2(acorn@7.4.1): @@ -1256,9 +1222,11 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 dev: true /acorn@7.4.1: @@ -1267,8 +1235,8 @@ packages: hasBin: true dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -1277,9 +1245,19 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 transitivePeerDependencies: - supports-color + dev: true + + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + dev: false /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} @@ -1306,13 +1284,13 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 dev: true /ansi-colors@4.1.1: @@ -1390,6 +1368,7 @@ packages: /are-we-there-yet@1.1.7: resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} + deprecated: This package is no longer supported. requiresBuild: true dependencies: delegates: 1.0.0 @@ -1409,21 +1388,23 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -1436,23 +1417,24 @@ packages: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /assertion-error@1.1.0: @@ -1478,9 +1460,11 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true /balanced-match@1.0.2: @@ -1494,8 +1478,8 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -1523,26 +1507,26 @@ packages: balanced-match: 1.0.2 dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 dev: true /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.645 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) dev: true /buffer-equal-constant-time@1.0.1: @@ -1569,12 +1553,15 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.2.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 dev: true /callsites@3.1.0: @@ -1586,7 +1573,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /camelcase@5.3.1: @@ -1599,8 +1586,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} dev: true /chai-as-promised@7.1.1(chai@4.2.0): @@ -1630,7 +1617,7 @@ packages: deep-eql: 3.0.1 get-func-name: 2.0.2 pathval: 1.1.1 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /chalk@2.4.2: @@ -1665,7 +1652,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -1678,8 +1665,8 @@ packages: /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - /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 @@ -1883,16 +1870,16 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.33) + icss-utils: 5.1.0(postcss@8.4.41) loader-utils: 2.0.4 - postcss: 8.4.33 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.33) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.33) - postcss-modules-scope: 3.1.1(postcss@8.4.33) - postcss-modules-values: 4.0.0(postcss@8.4.33) + postcss: 8.4.41 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.41) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.41) + postcss-modules-scope: 3.2.0(postcss@8.4.41) + postcss-modules-values: 4.0.0(postcss@8.4.41) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 - semver: 7.5.4 + semver: 7.6.3 webpack: 5.76.0(webpack-cli@4.7.2) dev: true @@ -1917,6 +1904,33 @@ packages: hasBin: true dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -1950,6 +1964,18 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true + + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -1983,13 +2009,12 @@ packages: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - requiresBuild: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2002,13 +2027,13 @@ packages: strip-bom: 4.0.0 dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 dev: true /define-lazy-prop@2.0.0: @@ -2020,8 +2045,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -2035,8 +2060,8 @@ packages: hasBin: true requiresBuild: true - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} dev: true @@ -2108,7 +2133,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /eastasianwidth@0.2.0: @@ -2121,8 +2146,8 @@ packages: safe-buffer: 5.2.1 dev: false - /electron-to-chromium@1.4.645: - resolution: {integrity: sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==} + /electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} dev: true /emoji-regex@8.0.0: @@ -2143,8 +2168,8 @@ packages: dependencies: once: 1.4.0 - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -2163,8 +2188,8 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true - /envinfo@7.11.0: - resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} + /envinfo@7.13.0: + resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} engines: {node: '>=4'} hasBin: true dev: true @@ -2175,68 +2200,94 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + 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.1 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} dev: true /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -2252,8 +2303,8 @@ packages: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -2271,14 +2322,14 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.2(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0): + resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2298,7 +2349,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.3.5) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) debug: 3.2.7 eslint: 7.29.0 eslint-import-resolver-node: 0.3.9 @@ -2324,19 +2375,19 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.3.5) - array-includes: 3.1.7 + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + array-includes: 3.1.8 array.prototype.flat: 1.3.2 debug: 2.6.9 doctrine: 2.1.0 eslint: 7.29.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@4.19.0)(eslint-import-resolver-node@0.3.9)(eslint@7.29.0) has: 1.0.4 - is-core-module: 2.13.1 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.7 + object.values: 1.2.0 resolve: 1.22.8 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -2405,7 +2456,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.6 doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -2413,7 +2464,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 @@ -2430,13 +2481,13 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.6.3 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 - table: 6.8.1 + table: 6.8.2 text-table: 0.2.0 v8-compile-cache: 2.4.0 transitivePeerDependencies: @@ -2464,8 +2515,8 @@ packages: hasBin: true dev: 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 @@ -2547,7 +2598,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 dev: true /fast-json-stable-stringify@2.1.0: @@ -2558,13 +2609,17 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + dev: true + /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} dev: true - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -2576,8 +2631,8 @@ packages: flat-cache: 3.2.0 dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -2612,7 +2667,7 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -2622,8 +2677,8 @@ packages: hasBin: true dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true /for-each@0.3.3: @@ -2640,8 +2695,8 @@ packages: signal-exit: 3.0.7 dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -2691,9 +2746,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -2707,6 +2762,7 @@ packages: /gauge@2.7.4: resolution: {integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==} + deprecated: This package is no longer supported. requiresBuild: true dependencies: aproba: 1.2.0 @@ -2732,13 +2788,15 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 dev: true /get-own-enumerable-property-symbols@3.0.2: @@ -2762,12 +2820,13 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true /github-from-package@0.0.0: @@ -2791,20 +2850,21 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.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 + path-scurry: 1.11.1 dev: true /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2816,6 +2876,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2837,11 +2898,12 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: true /globby@11.1.0: @@ -2851,7 +2913,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -2859,7 +2921,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /graceful-fs@4.2.11: @@ -2877,15 +2939,16 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true @@ -2894,8 +2957,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -2918,8 +2981,8 @@ packages: type-fest: 0.8.1 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -2971,13 +3034,12 @@ packages: entities: 2.2.0 dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + agent-base: 7.1.1 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -2987,9 +3049,20 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.6 transitivePeerDependencies: - supports-color + dev: false /human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} @@ -3001,13 +3074,13 @@ packages: engines: {node: '>=10.17.0'} dev: true - /icss-utils@5.1.0(postcss@8.4.33): + /icss-utils@5.1.0(postcss@8.4.41): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.33 + postcss: 8.4.41 dev: true /ieee754@1.2.1: @@ -3018,8 +3091,8 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true @@ -3031,8 +3104,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: @@ -3052,6 +3125,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -3062,15 +3136,14 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - requiresBuild: true - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true /interpret@2.2.0: @@ -3086,12 +3159,12 @@ packages: p-is-promise: 3.0.0 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -3108,15 +3181,15 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-buffer@1.1.6: @@ -3128,10 +3201,11 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /is-core-module@2.9.0: @@ -3140,11 +3214,18 @@ packages: has: 1.0.4 dev: true + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-docker@2.2.1: @@ -3176,8 +3257,8 @@ packages: is-extglob: 2.1.1 dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -3185,7 +3266,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -3214,8 +3295,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-regexp@1.0.0: @@ -3223,10 +3304,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-stream@2.0.1: @@ -3238,7 +3320,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -3248,11 +3330,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /is-typedarray@1.0.0: @@ -3267,7 +3349,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-windows@1.0.2: @@ -3317,7 +3399,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -3350,24 +3432,23 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -3474,7 +3555,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.3 dev: false /just-extend@4.2.1: @@ -3554,13 +3635,13 @@ packages: cli-truncate: 2.1.0 commander: 6.2.1 cosmiconfig: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6 dedent: 0.7.0 enquirer: 2.4.1 execa: 4.1.0 listr2: 3.14.0(enquirer@2.4.1) log-symbols: 4.1.0 - micromatch: 4.0.5 + micromatch: 4.0.8 normalize-path: 3.0.0 please-upgrade-node: 3.2.0 string-argv: 0.3.1 @@ -3583,7 +3664,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.1 + rfdc: 1.4.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -3695,12 +3776,11 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} dev: true /lru-cache@5.1.1: @@ -3709,12 +3789,6 @@ packages: yallist: 3.1.1 dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -3726,7 +3800,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -3750,11 +3824,11 @@ packages: engines: {node: '>= 8'} dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 dev: true @@ -3798,8 +3872,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -3808,8 +3882,8 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -3917,7 +3991,7 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 '@sinonjs/fake-timers': 6.0.1 - '@sinonjs/text-encoding': 0.7.2 + '@sinonjs/text-encoding': 0.7.3 just-extend: 4.2.1 path-to-regexp: 1.8.0 dev: true @@ -3926,7 +4000,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /node-abi@2.30.1: @@ -3935,11 +4009,11 @@ packages: dependencies: semver: 5.7.2 - /node-abi@3.54.0: - resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} + /node-abi@3.67.0: + resolution: {integrity: sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 dev: true /node-addon-api@3.2.1: @@ -3965,8 +4039,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true /noms@0.0.0: @@ -3990,6 +4064,7 @@ packages: /npmlog@4.1.2: resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} + deprecated: This package is no longer supported. requiresBuild: true dependencies: are-we-there-yet: 1.1.7 @@ -4029,7 +4104,7 @@ packages: istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -4049,8 +4124,9 @@ packages: engines: {node: '>=0.10.0'} requiresBuild: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} dev: true /object-keys@1.1.1: @@ -4062,19 +4138,19 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /once@1.4.0: @@ -4098,16 +4174,16 @@ packages: is-wsl: 2.2.0 dev: false - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /p-is-promise@3.0.0: @@ -4172,11 +4248,15 @@ packages: release-zalgo: 1.0.0 dev: true + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + dev: true + /param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /parent-module@1.0.1: @@ -4190,7 +4270,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4200,7 +4280,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /path-browserify@1.0.1: @@ -4226,12 +4306,12 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 + lru-cache: 10.4.3 + minipass: 7.1.2 dev: true /path-to-regexp@1.8.0: @@ -4249,8 +4329,8 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} dev: true /picomatch@2.3.1: @@ -4274,7 +4354,7 @@ packages: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 progress: 2.0.3 - semver: 7.5.4 + semver: 7.6.3 tar-fs: 2.1.1 yargs: 16.2.0 transitivePeerDependencies: @@ -4316,49 +4396,54 @@ packages: semver-compare: 1.0.0 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.33): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss-modules-extract-imports@3.1.0(postcss@8.4.41): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.33 + postcss: 8.4.41 dev: true - /postcss-modules-local-by-default@4.0.4(postcss@8.4.33): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + /postcss-modules-local-by-default@4.0.5(postcss@8.4.41): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-selector-parser: 6.0.15 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.1(postcss@8.4.33): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + /postcss-modules-scope@3.2.0(postcss@8.4.41): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.0.15 + postcss: 8.4.41 + postcss-selector-parser: 6.1.2 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.33): + /postcss-modules-values@4.0.0(postcss@8.4.41): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -4369,13 +4454,13 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + /postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 + picocolors: 1.0.1 + source-map-js: 1.2.0 dev: true /prebuild-install@6.1.4: @@ -4403,13 +4488,13 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - detect-libc: 2.0.2 + detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.54.0 + node-abi: 3.67.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -4551,13 +4636,14 @@ packages: resolve: 1.22.8 dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 dev: true /regexpp@3.2.0: @@ -4622,7 +4708,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -4640,12 +4726,13 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} dev: true /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 @@ -4656,7 +4743,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.10 + glob: 10.4.5 dev: true /run-parallel@1.2.0: @@ -4668,15 +4755,15 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -4687,12 +4774,12 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -4740,12 +4827,10 @@ packages: hasBin: true dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 /serialize-javascript@5.0.1: resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} @@ -4768,24 +4853,26 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /shallow-clone@3.0.1: @@ -4807,12 +4894,14 @@ packages: engines: {node: '>=8'} dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 dev: true /signal-exit@3.0.7: @@ -4878,8 +4967,8 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true @@ -4966,29 +5055,31 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /string_decoder@0.10.31: @@ -5052,7 +5143,6 @@ packages: /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - requiresBuild: true /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -5089,17 +5179,18 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.12.0 + ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -5140,7 +5231,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 5.0.1 source-map: 0.6.1 - terser: 5.27.0 + terser: 5.31.6 webpack: 5.76.0(webpack-cli@4.7.2) dev: true @@ -5160,11 +5251,11 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.27.0 + terser: 5.31.6 webpack: 5.76.0(webpack-cli@4.7.2) dev: true @@ -5173,19 +5264,19 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - acorn: 8.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map: 0.6.1 source-map-support: 0.5.19 dev: true - /terser@5.27.0: - resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} + /terser@5.31.6: + resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.3 + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -5230,7 +5321,7 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-loader@9.2.2(typescript@4.3.5)(webpack@5.76.0): + /ts-loader@9.2.2(typescript@4.7.4)(webpack@5.76.0): resolution: {integrity: sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5238,14 +5329,14 @@ packages: webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.15.0 - micromatch: 4.0.5 - semver: 7.5.4 - typescript: 4.3.5 + enhanced-resolve: 5.17.1 + micromatch: 4.0.8 + semver: 7.6.3 + typescript: 4.7.4 webpack: 5.76.0(webpack-cli@4.7.2) dev: true - /ts-node@10.9.1(@types/node@14.14.21)(typescript@4.3.5): + /ts-node@10.9.1(@types/node@14.14.21)(typescript@4.7.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -5260,18 +5351,18 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 14.14.21 - acorn: 8.11.3 - acorn-walk: 8.3.2 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.3.5 + typescript: 4.7.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -5289,17 +5380,17 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsutils@3.21.0(typescript@4.3.5): + /tsutils@3.21.0(typescript@4.7.4): 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: 4.3.5 + typescript: 4.7.4 dev: true /tunnel-agent@0.6.0: @@ -5319,6 +5410,11 @@ packages: engines: {node: '>=4'} dev: true + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -5334,42 +5430,48 @@ packages: engines: {node: '>=8'} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray-to-buffer@3.1.5: @@ -5378,8 +5480,8 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@4.3.5: - resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} + /typescript@4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -5395,7 +5497,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -5414,15 +5516,15 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 dev: true /uri-js@4.4.1: @@ -5481,8 +5583,8 @@ packages: engines: {node: '>=8.0.0 || >=10.0.0'} dev: false - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + /watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -5521,7 +5623,7 @@ packages: commander: 7.2.0 execa: 5.1.1 fastest-levenshtein: 1.0.16 - import-local: 3.1.0 + import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 v8-compile-cache: 2.4.0 @@ -5558,11 +5660,11 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.22.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) + browserslist: 4.23.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 @@ -5575,7 +5677,7 @@ packages: schema-utils: 3.3.0 tapable: 2.2.1 terser-webpack-plugin: 5.3.10(webpack@5.76.0) - watchpack: 2.4.0 + watchpack: 2.4.2 webpack-cli: 4.7.2(webpack@5.76.0) webpack-sources: 3.2.3 transitivePeerDependencies: @@ -5605,15 +5707,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@2.0.2: @@ -5634,6 +5736,11 @@ packages: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true @@ -5712,9 +5819,6 @@ packages: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -5770,7 +5874,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index 10fe59f082..0737ea44c7 100644 --- a/packages/vscode-extension/package.json +++ b/packages/vscode-extension/package.json @@ -1676,10 +1676,10 @@ "sinon": "^9.2.2", "svgtofont": "^3.23.1", "ts-loader": "^8.0.3", - "ts-node": "^9.1.1", + "ts-node": "^10.9.2", "ts-sinon": "^2.0.2", "typemoq": "^1.3.1", - "typescript": "4.3.2", + "typescript": "4.7.4", "uuid": "^8.3.2", "vite": "^5.3.3", "vite-plugin-svgr": "^4.2.0" @@ -1702,7 +1702,7 @@ "@vscode/extension-telemetry": "^0.6.2", "@vscode/webview-ui-toolkit": "^1.2.2", "async-mutex": "^0.3.1", - "axios": "^1.6.8", + "axios": "^1.7.5", "dotenv": "^8.2.0", "dree": "^4.7.0", "express": "^4.19.2", diff --git a/packages/vscode-extension/pnpm-lock.yaml b/packages/vscode-extension/pnpm-lock.yaml index c8467c7e65..1e4b5aac23 100644 --- a/packages/vscode-extension/pnpm-lock.yaml +++ b/packages/vscode-extension/pnpm-lock.yaml @@ -49,7 +49,7 @@ dependencies: version: 1.0.1 '@vscode/extension-telemetry': specifier: ^0.6.2 - version: 0.6.2(tslib@2.6.2) + version: 0.6.2(tslib@2.7.0) '@vscode/webview-ui-toolkit': specifier: ^1.2.2 version: 1.2.2(react@17.0.2) @@ -57,8 +57,8 @@ dependencies: specifier: ^0.3.1 version: 0.3.1 axios: - specifier: ^1.6.8 - version: 1.6.8(debug@4.3.4) + specifier: ^1.7.5 + version: 1.7.5(debug@4.3.6) dotenv: specifier: ^8.2.0 version: 8.2.0 @@ -76,7 +76,7 @@ dependencies: version: 10.0.0 jscodeshift: specifier: ^0.14.0 - version: 0.14.0(@babel/preset-env@7.23.8) + version: 0.14.0(@babel/preset-env@7.25.4) jsonc-parser: specifier: ^3.0.0 version: 3.0.0 @@ -88,7 +88,7 @@ dependencies: version: 1.1.1 office-addin-manifest: specifier: ^1.13.1 - version: 1.13.2 + version: 1.13.1 query-string: specifier: 6.14.1 version: 6.14.1 @@ -103,13 +103,13 @@ dependencies: version: 15.5.0(react@17.0.2) semver: specifier: ^7.5.2 - version: 7.5.4 + version: 7.5.2 string-similarity: specifier: ^4.0.4 version: 4.0.4 tmp: specifier: ^0.2.1 - version: 0.2.3 + version: 0.2.1 validator: specifier: ^13.7.0 version: 13.7.0 @@ -177,7 +177,7 @@ devDependencies: version: 15.5.5 '@types/semver': specifier: ^7.3.4 - version: 7.5.8 + version: 7.3.4 '@types/sinon': specifier: ^9.0.9 version: 9.0.9 @@ -186,7 +186,7 @@ devDependencies: version: 4.0.2 '@types/tmp': specifier: ^0.2.0 - version: 0.2.6 + version: 0.2.0 '@types/uuid': specifier: ^8.3.0 version: 8.3.0 @@ -198,10 +198,10 @@ devDependencies: version: 1.66.0 '@typescript-eslint/eslint-plugin': specifier: ^5.0.0 - version: 5.0.0(@typescript-eslint/parser@5.0.0)(eslint@8.1.0)(typescript@4.3.2) + version: 5.0.0(@typescript-eslint/parser@5.0.0)(eslint@8.1.0)(typescript@4.7.4) '@typescript-eslint/parser': specifier: ^5.0.0 - version: 5.0.0(eslint@8.1.0)(typescript@4.3.2) + version: 5.0.0(eslint@8.1.0)(typescript@4.7.4) '@vitejs/plugin-react': specifier: ^4.3.1 version: 4.3.1(vite@5.3.3) @@ -279,7 +279,7 @@ devDependencies: version: 17.0.2(react@17.0.2) react-intl: specifier: ^5.13.5 - version: 5.13.5(react@17.0.2)(typescript@4.3.2) + version: 5.13.5(react@17.0.2)(typescript@4.7.4) react-router-dom: specifier: ^5.2.0 version: 5.2.0(react@17.0.2) @@ -300,10 +300,10 @@ devDependencies: version: 3.23.1 ts-loader: specifier: ^8.0.3 - version: 8.0.3(typescript@4.3.2) + version: 8.0.3(typescript@4.7.4) ts-node: - specifier: ^9.1.1 - version: 9.1.1(typescript@4.3.2) + specifier: ^10.9.2 + version: 10.9.2(@types/node@14.14.21)(typescript@4.7.4) ts-sinon: specifier: ^2.0.2 version: 2.0.2 @@ -311,8 +311,8 @@ devDependencies: specifier: ^1.3.1 version: 1.3.1 typescript: - specifier: 4.3.2 - version: 4.3.2 + specifier: 4.7.4 + version: 4.7.4 uuid: specifier: ^8.3.2 version: 8.3.2 @@ -321,44 +321,38 @@ devDependencies: version: 5.3.3(@types/node@14.14.21)(sass@1.77.6) vite-plugin-svgr: specifier: ^4.2.0 - version: 4.2.0(typescript@4.3.2)(vite@5.3.3) + version: 4.2.0(typescript@4.7.4)(vite@5.3.3) packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 /@azure/abort-controller@1.1.0: resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 /@azure/abort-controller@2.1.2: resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 - dev: false + tslib: 2.7.0 /@azure/arm-resources-subscriptions@2.1.0: resolution: {integrity: sha512-vKiu/3Yh84IV3IuJJ+0Fgs/ZQpvuGzoZ3dAoBksIV++Uu/Qz9RcQVz7pj+APWYIuODuR9I0eGKswZvzynzekug==} engines: {node: '>=14.0.0'} dependencies: '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.3 - '@azure/core-paging': 1.5.0 - '@azure/core-rest-pipeline': 1.13.0 - tslib: 2.6.2 + '@azure/core-client': 1.9.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false @@ -369,11 +363,11 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.3 - '@azure/core-lro': 2.5.4 - '@azure/core-paging': 1.5.0 - '@azure/core-rest-pipeline': 1.13.0 - tslib: 2.6.2 + '@azure/core-client': 1.9.2 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: true @@ -383,74 +377,74 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.6.2 + tslib: 2.7.0 /@azure/core-auth@1.7.2: resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.6.1 - tslib: 2.6.2 + '@azure/core-util': 1.9.2 + tslib: 2.7.0 dev: false - /@azure/core-client@1.7.3: - resolution: {integrity: sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==} - engines: {node: '>=14.0.0'} + /@azure/core-client@1.9.2: + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 + '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.4.0 - '@azure/core-rest-pipeline': 1.13.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - tslib: 2.6.2 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.7.0 transitivePeerDependencies: - supports-color - /@azure/core-lro@2.5.4: - resolution: {integrity: sha512-3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q==} - engines: {node: '>=14.0.0'} + /@azure/core-lro@2.7.2: + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - tslib: 2.6.2 + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.7.0 dev: true - /@azure/core-paging@1.5.0: - resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} - engines: {node: '>=14.0.0'} + /@azure/core-paging@1.6.2: + resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 - /@azure/core-rest-pipeline@1.13.0: - resolution: {integrity: sha512-a62aP/wppgmnfIkJLfcB4ssPBcH94WzrzPVJ3tlJt050zX4lfmtnvy95D3igDo3f31StO+9BgPrzvkj4aOxnoA==} + /@azure/core-rest-pipeline@1.16.3: + resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 + '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.4.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - tslib: 2.6.2 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + tslib: 2.7.0 transitivePeerDependencies: - supports-color - /@azure/core-tracing@1.0.1: - resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} - engines: {node: '>=12.0.0'} + /@azure/core-tracing@1.1.2: + resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 - /@azure/core-util@1.6.1: - resolution: {integrity: sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==} - engines: {node: '>=16.0.0'} + /@azure/core-util@1.9.2: + resolution: {integrity: sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ==} + engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 1.1.0 - tslib: 2.6.2 + '@azure/abort-controller': 2.1.2 + tslib: 2.7.0 /@azure/identity@4.1.0: resolution: {integrity: sha512-BhYkF8Xr2gXjyDxocm0pc9RI5J5a1jw8iW0dw6Bx95OGdYbuMyFZrrwNw4eYSqQ2BB6FZOqpJP3vjsAqRcvDhw==} @@ -458,46 +452,46 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 - '@azure/core-client': 1.7.3 - '@azure/core-rest-pipeline': 1.13.0 - '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.6.1 - '@azure/logger': 1.0.4 - '@azure/msal-browser': 3.13.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 3.22.0 '@azure/msal-node': 2.6.6 events: 3.3.0 jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 - tslib: 2.6.2 + tslib: 2.7.0 transitivePeerDependencies: - supports-color dev: false - /@azure/logger@1.0.4: - resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} - engines: {node: '>=14.0.0'} + /@azure/logger@1.1.4: + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} + engines: {node: '>=18.0.0'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 /@azure/ms-rest-azure-env@2.0.0: resolution: {integrity: sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw==} dev: false - /@azure/msal-browser@3.13.0: - resolution: {integrity: sha512-fD906nmJei3yE7la6DZTdUtXKvpwzJURkfsiz9747Icv4pit77cegSm6prJTKLQ1fw4iiZzrrWwxnhMLrTf5gQ==} + /@azure/msal-browser@3.22.0: + resolution: {integrity: sha512-ZkL2Z0zffsBIE3ovhMwa0rVrPeKV2GHhDWFgWiIcKiPt82b21YLijK3c/rNjTHkME+6FCjMIa/5Nul+ZjH197w==} engines: {node: '>=0.8.0'} dependencies: - '@azure/msal-common': 14.9.0 + '@azure/msal-common': 14.14.2 dev: false - /@azure/msal-common@14.8.1: - resolution: {integrity: sha512-9HfBMDTIgtFFkils+o6gO/aGEoLLuc4z+QLLfhy/T1bTNPiVsX/9CjaBPMZGnMltN/IlMkU5SGGNggGh55p5xA==} + /@azure/msal-common@14.14.2: + resolution: {integrity: sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog==} engines: {node: '>=0.8.0'} dev: false - /@azure/msal-common@14.9.0: - resolution: {integrity: sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==} + /@azure/msal-common@14.8.1: + resolution: {integrity: sha512-9HfBMDTIgtFFkils+o6gO/aGEoLLuc4z+QLLfhy/T1bTNPiVsX/9CjaBPMZGnMltN/IlMkU5SGGNggGh55p5xA==} engines: {node: '>=0.8.0'} dev: false @@ -510,420 +504,240 @@ packages: uuid: 8.3.2 dev: false - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.0 - - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} + picocolors: 1.0.1 - /@babel/compat-data@7.24.7: - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - /@babel/core@7.24.7: - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/generator': 7.25.5 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 - jsesc: 2.5.2 - /@babel/generator@7.24.7: - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + /@babel/generator@7.25.5: + resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.4 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/helper-annotate-as-pure@7.24.7: + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 dev: false - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + '@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 - /@babel/helper-compilation-targets@7.24.7: - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} + /@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.4 semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + /@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): - resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.4(supports-color@8.1.1) + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.6(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.7): - resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + /@babel/helper-member-expression-to-functions@7.24.8: + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.4(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.8 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - - /@babel/helper-environment-visitor@7.24.7: - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - - /@babel/helper-function-name@7.24.7: - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - - /@babel/helper-hoist-variables@7.24.7: - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 transitivePeerDependencies: - supports-color - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - /@babel/helper-module-transforms@7.24.7(@babel/core@7.23.7): - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.4 transitivePeerDependencies: - supports-color - dev: false - /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + /@babel/helper-optimise-call-expression@7.24.7: + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 dev: false - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.8: + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-plugin-utils@7.24.7: - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + /@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.22.20 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + /@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - /@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.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 transitivePeerDependencies: - supports-color - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - - /@babel/helper-split-export-declaration@7.24.7: - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - - /@babel/helper-string-parser@7.24.7: - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-option@7.24.7: - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: false - - /@babel/helpers@7.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} + /@babel/helper-wrap-function@7.25.0: + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 transitivePeerDependencies: - supports-color + dev: false - /@babel/helpers@7.24.7: - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: true - - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/helpers@7.25.0: + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} @@ -932,1019 +746,1085 @@ packages: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.25.4: + resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 - /@babel/parser@7.24.7: - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2): + resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.7): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.25.2): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.7): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.25.2): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) dev: false - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.7): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.25.2): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + /@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + /@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + /@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} + /@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + /@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + /@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): - resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} + /@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) - '@babel/helper-split-export-declaration': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.4 globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/template': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 dev: false - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + /@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: false + + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + /@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + /@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2): + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.4 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + /@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + /@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + /@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.4 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) dev: false - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + /@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + /@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.24.7): + /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.7): + /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 dev: false - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + /@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + /@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7): - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + /@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + /@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/preset-env@7.23.8(@babel/core@7.23.7): - resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} + /@babel/preset-env@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7) - core-js-compat: 3.35.1 + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.24.7(@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-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-flow@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} + /@babel/preset-flow@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.25.2) dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.25.4 esutils: 2.0.3 dev: false - /@babel/preset-typescript@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + /@babel/preset-typescript@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false - /@babel/register@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} + /@babel/register@7.24.6(@babel/core@7.25.2): + resolution: {integrity: sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -1956,75 +1836,39 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: false - /@babel/runtime@7.23.8: - resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + /@babel/runtime@7.25.4: + resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - - /@babel/template@7.24.7: - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@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.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - /@babel/traverse@7.24.7: - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + /@babel/traverse@7.25.4: + resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.4(supports-color@8.1.1) + '@babel/generator': 7.25.5 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 + debug: 4.3.6(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.25.4: + resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - /@babel/types@7.24.7: - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 @@ -2032,6 +1876,13 @@ packages: resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} dev: true + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@esbuild/aix-ppc64@0.21.5: resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -2460,10 +2311,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.6(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2472,111 +2323,111 @@ packages: - supports-color dev: true - /@fluentui/date-time-utilities@8.5.16: - resolution: {integrity: sha512-l+mLfJ2VhdHjBpELLLPDaWgT7GMLynm2aqR7SttbEb6Jh7hc/7ck1MWm93RTb3gYVHYai8SENqimNcvIxHt/zg==} + /@fluentui/date-time-utilities@8.6.9: + resolution: {integrity: sha512-dgOlVm4nXBWDLqijmvn4iAtyv1hVpQZjN6p0So74BW+7ASUTkQGe3lf8PHV/OjBiXfZa4qwONvmTQBGCheNU0w==} dependencies: - '@fluentui/set-version': 8.2.14 - tslib: 2.6.2 + '@fluentui/set-version': 8.2.23 + tslib: 2.7.0 dev: true - /@fluentui/dom-utilities@2.2.14: - resolution: {integrity: sha512-+4DVm5sNfJh+l8fM+7ylpOkGNZkNr4X1z1uKQPzRJ1PRhlnvc6vLpWNNicGwpjTbgufSrVtGKXwP5sf++r81lg==} + /@fluentui/dom-utilities@2.3.7: + resolution: {integrity: sha512-AaTR9BhJEF0i042NS1Ju8l95f24p2tBMq6jVVbUEDtYnKaxWnpv8R9eYjOwy8SDniQc1ino+BkolIgCVXXvDmw==} dependencies: - '@fluentui/set-version': 8.2.14 - tslib: 2.6.2 + '@fluentui/set-version': 8.2.23 + tslib: 2.7.0 dev: true - /@fluentui/font-icons-mdl2@8.5.31(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-jioHZ9XUfR9vUT5XnxdCrJ+hoC9TpYim+4YdtlUE/euI8kdW1tDZ5zqlSNk1GLDR34n03R09yWj5gVDCcMJbyQ==} + /@fluentui/font-icons-mdl2@8.5.50(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-04pRRmuBf9r/3cnBlIedF+SFk2UW7GdRQvdfKxoMuL4dDMLPqo4ruPkI/dz8Mp3EDERQU01XDWtBx11w9obmFQ==} dependencies: - '@fluentui/set-version': 8.2.14 - '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) - tslib: 2.6.2 + '@fluentui/set-version': 8.2.23 + '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + tslib: 2.7.0 transitivePeerDependencies: - '@types/react' - react dev: true - /@fluentui/foundation-legacy@8.2.51(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-z/jrp1imV66/D2MGpN/55LGk/Istymk5tN+XUFHDENDi+9zyb2MgSxFshp774DJIrg3vVlyuS8oo+dBuTM3UbQ==} + /@fluentui/foundation-legacy@8.4.16(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-01/uQPQ2pEkQ6nUUF+tXaYeOG8UssfoEgAVLPolYXr1DC4tT66hPi7Smgsh6tzUkt/Ljy0nw9TIMRoHDHlfRyg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.5.15 - '@fluentui/set-version': 8.2.14 - '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.6.13 + '@fluentui/set-version': 8.2.23 + '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/keyboard-key@0.4.14: - resolution: {integrity: sha512-XzZHcyFEM20H23h3i15UpkHi2AhRBriXPGAHq0Jm98TKFppXehedjjEFuUsh+CyU5JKBhDalWp8TAQ1ArpNzow==} + /@fluentui/keyboard-key@0.4.23: + resolution: {integrity: sha512-9GXeyUqNJUdg5JiQUZeGPiKnRzMRi9YEUn1l9zq6X/imYdMhxHrxpVZS12129cBfgvPyxt9ceJpywSfmLWqlKA==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/merge-styles@8.5.15: - resolution: {integrity: sha512-4CdKwo4k1Un2QLulpSVIz/KMgLNBMgin4NPyapmKDMVuO1OOxJUqfocubRGNO5x9mKgAMMYwBKGO9i0uxMMpJw==} + /@fluentui/merge-styles@8.6.13: + resolution: {integrity: sha512-IWgvi2CC+mcQ7/YlCvRjsmHL2+PUz7q+Pa2Rqk3a+QHN0V1uBvgIbKk5y/Y/awwDXy1yJHiqMCcDHjBNmS1d4A==} dependencies: - '@fluentui/set-version': 8.2.14 - tslib: 2.6.2 + '@fluentui/set-version': 8.2.23 + tslib: 2.7.0 dev: true - /@fluentui/react-focus@8.8.39(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-7PnI+3e37jxt0PlWykNfbCbPdnKroJY+olOxZDHkXfI/ANr8lm4YuyLAYNAtyapfnkf+FBoO6vxU51P8hNk7tQ==} + /@fluentui/react-focus@8.9.13(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-oUtY4F+tp0RmV0Wr30CoYFdTQEqHWKjU3/dYHPbI0xKH4emLrf8+sc0FAHJdeHH2rx4T1XSA807pm7YB4CQqWw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/keyboard-key': 0.4.14 - '@fluentui/merge-styles': 8.5.15 - '@fluentui/set-version': 8.2.14 - '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + '@fluentui/keyboard-key': 0.4.23 + '@fluentui/merge-styles': 8.6.13 + '@fluentui/set-version': 8.2.23 + '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/react-hooks@8.6.36(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-kI0Z4Q4xHUs4SOmmI5n5OH5fPckqMSCovTRpiuxzCO2TNzLmfC861+nqf4Ygw/ChqNm2gWNZZfUADfnNAEsq+Q==} + /@fluentui/react-hooks@8.8.12(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-lplre6x5dONjd12D0BWs4LKq4lX++o0w07pIk2XhxikOW1e4Xfjn6VM52WSdtx+tU4rbLUoCA8drN2y/wDvhGg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-window-provider': 2.2.18(@types/react@17.0.3)(react@17.0.2) - '@fluentui/set-version': 8.2.14 - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-window-provider': 2.2.28(@types/react@17.0.3)(react@17.0.2) + '@fluentui/set-version': 8.2.23 + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/react-portal-compat-context@9.0.11(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-ubvW/ej0O+Pago9GH3mPaxzUgsNnBoqvghNamWjyKvZIViyaXUG6+sgcAl721R+qGAFac+A20akI5qDJz/xtdg==} + /@fluentui/react-portal-compat-context@9.0.12(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-5AVXWX9GnbvwnJZYUb4LSIF7BsI/N8oTI6+7Yn0w6B3yaWykA8Menlz757X5tgVBjouEj4Eom+AoVvA7u8gPDA==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' react: '>=16.14.0 <19.0.0' dependencies: - '@swc/helpers': 0.5.3 + '@swc/helpers': 0.5.12 '@types/react': 17.0.3 react: 17.0.2 dev: true - /@fluentui/react-window-provider@2.2.18(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-nBKqxd0P8NmIR0qzFvka1urE2LVbUm6cse1I1T7TcOVNYa5jDf5BrO06+JRZfwbn00IJqOnIVoP0qONqceypWQ==} + /@fluentui/react-window-provider@2.2.28(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-YdZ74HTaoDwlvLDzoBST80/17ExIl93tLJpTxnqK5jlJOAUVQ+mxLPF2HQEJq+SZr5IMXHsQ56w/KaZVRn72YA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/set-version': 8.2.14 + '@fluentui/set-version': 8.2.23 '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /@fluentui/react@8.106.1(@types/react-dom@17.0.2)(@types/react@17.0.3)(react-dom@17.0.2)(react@17.0.2): @@ -2587,95 +2438,96 @@ packages: react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/date-time-utilities': 8.5.16 - '@fluentui/font-icons-mdl2': 8.5.31(@types/react@17.0.3)(react@17.0.2) - '@fluentui/foundation-legacy': 8.2.51(@types/react@17.0.3)(react@17.0.2) - '@fluentui/merge-styles': 8.5.15 - '@fluentui/react-focus': 8.8.39(@types/react@17.0.3)(react@17.0.2) - '@fluentui/react-hooks': 8.6.36(@types/react@17.0.3)(react@17.0.2) - '@fluentui/react-portal-compat-context': 9.0.11(@types/react@17.0.3)(react@17.0.2) - '@fluentui/react-window-provider': 2.2.18(@types/react@17.0.3)(react@17.0.2) - '@fluentui/set-version': 8.2.14 - '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) - '@fluentui/theme': 2.6.41(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + '@fluentui/date-time-utilities': 8.6.9 + '@fluentui/font-icons-mdl2': 8.5.50(@types/react@17.0.3)(react@17.0.2) + '@fluentui/foundation-legacy': 8.4.16(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.6.13 + '@fluentui/react-focus': 8.9.13(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-hooks': 8.8.12(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-portal-compat-context': 9.0.12(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-window-provider': 2.2.28(@types/react@17.0.3)(react@17.0.2) + '@fluentui/set-version': 8.2.23 + '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) + '@fluentui/theme': 2.6.59(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) '@microsoft/load-themed-styles': 1.10.295 '@types/react': 17.0.3 '@types/react-dom': 17.0.2 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/set-version@8.2.14: - resolution: {integrity: sha512-f/QWJnSeyfAjGAqq57yjMb6a5ejPlwfzdExPmzFBuEOuupi8hHbV8Yno12XJcTW4I0KXEQGw+PUaM1aOf/j7jw==} + /@fluentui/set-version@8.2.23: + resolution: {integrity: sha512-VPXaBsiaa3Xn/AY40nLU9bvDQ62lpMVnFzFTlQ8CbpdwrjxNlRxDUY5vRToNzp1+Zu5gD/+CgsXqIZGcry5L5w==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/style-utilities@8.10.2(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-ocELtMb/85nBa3rSfiAIwYx6TydN+3rQqv1P0H/L7etYNNtxOfS86JSWfn8zAsHMejbwUKJ1ZsIKs47c598XGQ==} + /@fluentui/style-utilities@8.10.21(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-tqdSQI1MAnNUPtNKKV9LeNqmEhBZL+lpV+m6Ngl6SDuR0aQkMkuo1jA9rPxNRLUf5+pbI8LrNQ4WiCWqYkV/QQ==} dependencies: - '@fluentui/merge-styles': 8.5.15 - '@fluentui/set-version': 8.2.14 - '@fluentui/theme': 2.6.41(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.6.13 + '@fluentui/set-version': 8.2.23 + '@fluentui/theme': 2.6.59(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) '@microsoft/load-themed-styles': 1.10.295 - tslib: 2.6.2 + tslib: 2.7.0 transitivePeerDependencies: - '@types/react' - react dev: true - /@fluentui/theme@2.6.41(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-h9RguEzqzJ0+59ys5Kkp7JtsjhDUxBLmQunu5rpHp5Mp788OtEjI/n1a9FIcOAL/priPSQwXN7RbuDpeP7+aSw==} + /@fluentui/theme@2.6.59(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-o/6UgKgPW6QI/+2OfCXeJfcOCbtzLIwM/3W/DzI2Pjt56ubT98IEcb32NCHoIKB2xkEnJoTjGgN1m+vHAvcQxA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.5.15 - '@fluentui/set-version': 8.2.14 - '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.6.13 + '@fluentui/set-version': 8.2.23 + '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@fluentui/utilities@8.13.24(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-/jo6hWCzTGCx06l2baAMwsjjBZ/dyMouls53uNaQLUGUUhUwXh/DcDDXMqLRJB3MaH9zvgfvRw61iKmm2s9fIA==} + /@fluentui/utilities@8.15.15(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-7GpET/AuWR8aBEQSQj9iO2j+9riAaoK1qBduCB4Ht6353d25vwwsKXreHZGqS8efv+NNIxQTlLWz0Rq73iQFWw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/dom-utilities': 2.2.14 - '@fluentui/merge-styles': 8.5.15 - '@fluentui/set-version': 8.2.14 + '@fluentui/dom-utilities': 2.3.7 + '@fluentui/merge-styles': 8.6.13 + '@fluentui/react-window-provider': 2.2.28(@types/react@17.0.3)(react@17.0.2) + '@fluentui/set-version': 8.2.23 '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /@formatjs/ecma402-abstract@1.6.3: resolution: {integrity: sha512-7ijswObmYXabVy5GvcpKG29jbyJ9rGtFdRBdmdQvoDmMo0PwlOl/L08GtrjA4YWLAZ0j2owb2YrRLGNAvLBk+Q==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true /@formatjs/intl-displaynames@4.0.11: resolution: {integrity: sha512-e3917+HmXStxb2fNP3sOr3R1DMALdWrUteBb3nerA2AKa12mXwmL0lDavrdltwZWqF7/Egh8fF/esB0Z/fqOgQ==} dependencies: '@formatjs/ecma402-abstract': 1.6.3 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /@formatjs/intl-listformat@5.0.12: resolution: {integrity: sha512-xWAndG73lqJ1+ar6SljCpM9nUsi2YoZfKi45F2YZRSxtUx4JbWYkhpbroOwxjCQ8ppZFoPc2mlLZjhPZiTyG7g==} dependencies: '@formatjs/ecma402-abstract': 1.6.3 - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /@formatjs/intl@1.8.4(typescript@4.3.2): + /@formatjs/intl@1.8.4(typescript@4.7.4): resolution: {integrity: sha512-m0/5ZRQZZfzXmeDieoG8kxu3QRvJazv2VbXhROs5khJKfUKu1rz6xfuUrh3gkmydWYtHuwJDIoC9oGR0ik4+/g==} peerDependencies: typescript: ^4.2 @@ -2689,8 +2541,8 @@ packages: fast-memoize: 2.5.2 intl-messageformat: 9.5.3 intl-messageformat-parser: 6.4.3 - tslib: 2.6.2 - typescript: 4.3.2 + tslib: 2.7.0 + typescript: 4.7.4 dev: true /@gar/promisify@1.1.3: @@ -2700,9 +2552,10 @@ packages: /@humanwhocodes/config-array@0.6.0: resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} 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.6(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2710,6 +2563,7 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead dev: true /@istanbuljs/load-nyc-config@1.1.0: @@ -2738,77 +2592,66 @@ packages: engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 - /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - /@microsoft/1ds-core-js@3.2.15(tslib@2.6.2): - resolution: {integrity: sha512-w/35jS80jVl+YBbL69BHg6iTHuIkmmnwSuy8LhfBHm8QDTQny2C73GdwUN8c00BqSClM1ldl2w2bQWW1aMJLTg==} + /@microsoft/1ds-core-js@3.2.18(tslib@2.7.0): + resolution: {integrity: sha512-ytlFv3dfb8OGqvbZP8tSIlNvn3QNYxdsF0k6ikRMWSr6CmBxBi1sliaxc2Q5KuYOuaeWkd8WRm25Rx/UtHcyMg==} dependencies: - '@microsoft/applicationinsights-core-js': 2.8.16(tslib@2.6.2) + '@microsoft/applicationinsights-core-js': 2.8.18(tslib@2.7.0) '@microsoft/applicationinsights-shims': 2.0.2 '@microsoft/dynamicproto-js': 1.1.11 transitivePeerDependencies: - tslib dev: false - /@microsoft/1ds-post-js@3.2.15(tslib@2.6.2): - resolution: {integrity: sha512-SZQdaiLpoPelTFC0G1EVZXnuQxzqPdY3F6tcBHfnmQv+h8aJR3HAIiy65xI+p7u9m9LdV+8Mx5buE0s6NfXnQA==} + /@microsoft/1ds-post-js@3.2.18(tslib@2.7.0): + resolution: {integrity: sha512-Tzjcja4SMyws3UP58kD2edFPNb7BJtx5uCgwf/PWXwDyfbUY1/crsTQdEyR98wy/vorvLDZdQlcL++VMChfYnQ==} dependencies: - '@microsoft/1ds-core-js': 3.2.15(tslib@2.6.2) + '@microsoft/1ds-core-js': 3.2.18(tslib@2.7.0) '@microsoft/applicationinsights-shims': 2.0.2 '@microsoft/dynamicproto-js': 1.1.11 transitivePeerDependencies: - tslib dev: false - /@microsoft/applicationinsights-core-js@2.8.16(tslib@2.6.2): - resolution: {integrity: sha512-pO5rR6UuiPymiHFj8XxNXhQgBSTvyHWygf+gdEVDh0xpUXYFO99bZe0Ux0D0HqYqVkJrRfXzL1Ocru6+S0x53Q==} + /@microsoft/applicationinsights-core-js@2.8.18(tslib@2.7.0): + resolution: {integrity: sha512-yPHRZFLpnEO0uSgFPM1BLMRRwjoten9YBbn4pJRbCT4PigLnj748knmWsMwXIdcehtkRTYz78kPYa/LWP7nvmA==} peerDependencies: tslib: '*' dependencies: '@microsoft/applicationinsights-shims': 2.0.2 '@microsoft/dynamicproto-js': 1.1.11 - tslib: 2.6.2 + tslib: 2.7.0 dev: false /@microsoft/applicationinsights-shims@2.0.2: @@ -2821,14 +2664,14 @@ packages: '@microsoft/dev-tunnels-contracts': 1.1.9 '@microsoft/dev-tunnels-management': 1.1.9 '@microsoft/dev-tunnels-ssh': 3.11.36 - '@microsoft/dev-tunnels-ssh-tcp': 3.11.36 + '@microsoft/dev-tunnels-ssh-tcp': 3.11.38 await-semaphore: 0.1.3 buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) es5-ext: 0.10.53 uuid: 3.4.0 vscode-jsonrpc: 4.0.0 - websocket: 1.0.34 + websocket: 1.0.35 transitivePeerDependencies: - supports-color dev: false @@ -2837,7 +2680,7 @@ packages: resolution: {integrity: sha512-OayhehwI+CnO0Wr53e29ZJZWGsNA5yVG7r54qmZSLc5HxA5Cozk4hP7EbYDCXkxh4NbQoT1dhTzC8bkRo+wWXw==} dependencies: buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color @@ -2847,16 +2690,16 @@ packages: resolution: {integrity: sha512-wGuFEzvRiWZmDxQMGKEjOKhEIVnLiG6vRUuM9Hwqxpe/kbiyA2WiUyEVpniNPaaw8gDHTf9zJHnPNNj0JiL5mA==} dependencies: '@microsoft/dev-tunnels-contracts': 1.1.9 - axios: 1.6.8(debug@4.3.4) + axios: 1.7.5(debug@4.3.6) buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color dev: false - /@microsoft/dev-tunnels-ssh-tcp@3.11.36: - resolution: {integrity: sha512-TAxraYXguA0y3M3MueeLma/dyoyvelyITSHVbHUrnOkgbYobs45LyQHuOzD42F57iJuP9DzpjC45RG+mKW3a/g==} + /@microsoft/dev-tunnels-ssh-tcp@3.11.38: + resolution: {integrity: sha512-GraMSCScu2Pn30oFyzgmw1kAbXJBXBCuzSBQ+q5xIwK1ZpK6D9M/0u2ctsCGw5SwyVVf0hWFqlfZsZlfTX/ifQ==} dependencies: '@microsoft/dev-tunnels-ssh': 3.11.36 transitivePeerDependencies: @@ -2867,7 +2710,7 @@ packages: resolution: {integrity: sha512-j7SlGaavPRs1Aho9a0JFRjL9N1V6UFo1Q2BUq6cpu+CnlWexmjvZmjeZyNQqwnnnEEAAGc5Vkz74cIQ8JHpvSA==} dependencies: buffer: 5.7.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) diffie-hellman: 5.0.3 vscode-jsonrpc: 4.0.0 transitivePeerDependencies: @@ -2878,14 +2721,14 @@ packages: resolution: {integrity: sha512-gNw9z9LbqLV+WadZ6/MMrWwO3e0LuoUH1wve/1iPsBNbgqeVCiB0EZFNNj2lysxS2gkqoF9hmyVaG3MoM1BkxA==} dev: false - /@microsoft/fast-element@1.12.0: - resolution: {integrity: sha512-gQutuDHPKNxUEcQ4pypZT4Wmrbapus+P9s3bR/SEOLsMbNqNoXigGImITygI5zhb+aA5rzflM6O8YWkmRbGkPA==} + /@microsoft/fast-element@1.13.0: + resolution: {integrity: sha512-iFhzKbbD0cFRo9cEzLS3Tdo9BYuatdxmCEKCpZs1Cro/93zNMpZ/Y9/Z7SknmW6fhDZbpBvtO8lLh9TFEcNVAQ==} dev: false - /@microsoft/fast-foundation@2.49.5: - resolution: {integrity: sha512-3PpG1BNmZ5kUM1goYU3SsxjsM2H7Rk0ZmpDJ7mnRhWDgKiM5SzJ02KvALRUqDrJQoeDnkW0Q2Q+r9SkEd68Gpg==} + /@microsoft/fast-foundation@2.49.6: + resolution: {integrity: sha512-DZVr+J/NIoskFC1Y6xnAowrMkdbf2d5o7UyWK6gW5AiQ6S386Ql8dw4KcC4kHaeE1yL2CKvweE79cj6ZhJhTvA==} dependencies: - '@microsoft/fast-element': 1.12.0 + '@microsoft/fast-element': 1.13.0 '@microsoft/fast-web-utilities': 5.4.1 tabbable: 5.3.3 tslib: 1.14.1 @@ -2896,8 +2739,8 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@microsoft/fast-element': 1.12.0 - '@microsoft/fast-foundation': 2.49.5 + '@microsoft/fast-element': 1.13.0 + '@microsoft/fast-foundation': 2.49.6 react: 17.0.2 dev: false @@ -2911,14 +2754,14 @@ packages: resolution: {integrity: sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==} dev: true - /@microsoft/teams-manifest@0.1.4: - resolution: {integrity: sha512-VVFnItrOi2MS7seQC/EkFGyqJNkR2jRASTeSaUhyJ+pdnrUszYPRqyOwBzFw4HmXBmlnOD1WTfRgwdeav/KpgA==} + /@microsoft/teams-manifest@0.1.5: + resolution: {integrity: sha512-ITt7mXSZjcrriwtn0Gg0zUnJcRac3feX3AY6MVAaF4uVf58jx5/GlFrWgABaBS30HBF05hhH1dYn2IoCby/StA==} dependencies: '@types/fs-extra': 11.0.4 '@types/node-fetch': 2.6.11 - ajv: 8.12.0 - ajv-draft-04: 1.0.0(ajv@8.12.0) - ajv-formats: 3.0.1(ajv@8.12.0) + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-formats: 3.0.1(ajv@8.17.1) fs-extra: 9.1.0 node-fetch: 2.7.0 transitivePeerDependencies: @@ -2954,7 +2797,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + fastq: 1.17.1 dev: true /@npmcli/fs@2.1.2: @@ -2962,7 +2805,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.4 + semver: 7.5.2 dev: true /@npmcli/move-file@2.0.1: @@ -2994,128 +2837,128 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.18.0: - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + /@rollup/rollup-android-arm-eabi@4.21.1: + resolution: {integrity: sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.18.0: - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + /@rollup/rollup-android-arm64@4.21.1: + resolution: {integrity: sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.18.0: - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + /@rollup/rollup-darwin-arm64@4.21.1: + resolution: {integrity: sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.18.0: - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + /@rollup/rollup-darwin-x64@4.21.1: + resolution: {integrity: sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.18.0: - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + /@rollup/rollup-linux-arm-gnueabihf@4.21.1: + resolution: {integrity: sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.18.0: - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + /@rollup/rollup-linux-arm-musleabihf@4.21.1: + resolution: {integrity: sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.18.0: - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + /@rollup/rollup-linux-arm64-gnu@4.21.1: + resolution: {integrity: sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.18.0: - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + /@rollup/rollup-linux-arm64-musl@4.21.1: + resolution: {integrity: sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + /@rollup/rollup-linux-powerpc64le-gnu@4.21.1: + resolution: {integrity: sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.18.0: - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + /@rollup/rollup-linux-riscv64-gnu@4.21.1: + resolution: {integrity: sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.18.0: - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + /@rollup/rollup-linux-s390x-gnu@4.21.1: + resolution: {integrity: sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.18.0: - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + /@rollup/rollup-linux-x64-gnu@4.21.1: + resolution: {integrity: sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.18.0: - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + /@rollup/rollup-linux-x64-musl@4.21.1: + resolution: {integrity: sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.18.0: - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + /@rollup/rollup-win32-arm64-msvc@4.21.1: + resolution: {integrity: sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.18.0: - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + /@rollup/rollup-win32-ia32-msvc@4.21.1: + resolution: {integrity: sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.18.0: - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + /@rollup/rollup-win32-x64-msvc@4.21.1: + resolution: {integrity: sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==} cpu: [x64] os: [win32] requiresBuild: true @@ -3146,110 +2989,110 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true - /@sinonjs/text-encoding@0.7.2: - resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + /@sinonjs/text-encoding@0.7.3: + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} dev: true - /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.23.7): + /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.25.2): resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.23.7): + /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.25.2): resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true - /@svgr/babel-preset@8.1.0(@babel/core@7.23.7): + /@svgr/babel-preset@8.1.0(@babel/core@7.25.2): resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.23.7) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.7) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.7) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.23.7) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.23.7) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.23.7) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.23.7) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.25.2) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.25.2) dev: true - /@svgr/core@8.1.0(typescript@4.3.2): + /@svgr/core@8.1.0(typescript@4.7.4): resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} engines: {node: '>=14'} dependencies: - '@babel/core': 7.23.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@4.3.2) + cosmiconfig: 8.3.6(typescript@4.7.4) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -3260,7 +3103,7 @@ packages: resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} engines: {node: '>=14'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 entities: 4.5.0 dev: true @@ -3270,35 +3113,52 @@ packages: peerDependencies: '@svgr/core': '*' dependencies: - '@babel/core': 7.23.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.23.7) - '@svgr/core': 8.1.0(typescript@4.3.2) + '@babel/core': 7.25.2 + '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) + '@svgr/core': 8.1.0(typescript@4.7.4) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color dev: true - /@swc/helpers@0.5.3: - resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + /@swc/helpers@0.5.12: + resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + dev: true /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} dev: true + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -3307,20 +3167,20 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 dev: true /@types/babel__traverse@7.20.6: resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.25.4 dev: true /@types/body-parser@1.19.5: @@ -3386,11 +3246,11 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.17.41: - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 14.14.21 - '@types/qs': 6.9.11 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -3399,9 +3259,9 @@ packages: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.11 - '@types/serve-static': 1.15.5 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 dev: true /@types/fs-extra@11.0.4: @@ -3416,10 +3276,10 @@ packages: '@types/node': 14.14.21 dev: true - /@types/hast@2.3.9: - resolution: {integrity: sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==} + /@types/hast@2.3.10: + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 dev: false /@types/history@4.7.11: @@ -3471,17 +3331,13 @@ packages: /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 dev: true /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true - /@types/mocha@8.0.4: resolution: {integrity: sha512-M4BwiTJjHmLq6kjON7ZoI2JMlBvpY3BYSdiP6s/qCT3jb1s9/DeJF0JELpAxiVSIxXDzfNKe+r7yedMIoLbknQ==} dev: true @@ -3510,12 +3366,12 @@ packages: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: true - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} dev: true - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true /@types/range-parser@1.2.7: @@ -3558,17 +3414,17 @@ packages: /@types/react@17.0.3: resolution: {integrity: sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==} dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 + '@types/prop-types': 15.7.12 + '@types/scheduler': 0.23.0 csstype: 3.1.3 dev: true - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + /@types/scheduler@0.23.0: + resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} dev: true - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + /@types/semver@7.3.4: + resolution: {integrity: sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==} dev: true /@types/send@0.17.4: @@ -3578,12 +3434,12 @@ packages: '@types/node': 14.14.21 dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 '@types/node': 14.14.21 + '@types/send': 0.17.4 dev: true /@types/sinon-chai@3.2.12: @@ -3617,8 +3473,8 @@ packages: '@types/node': 14.14.21 dev: true - /@types/tmp@0.2.6: - resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} + /@types/tmp@0.2.0: + resolution: {integrity: sha512-flgpHJjntpBAdJD43ShRosQvNC0ME97DCfGvZEDlAThQmnerRXrLbX6YgzRBQCZTthET9eAWFAMaYP0m0Y4HzQ==} dev: true /@types/ttf2eot@2.0.2: @@ -3639,8 +3495,8 @@ packages: '@types/node': 14.14.21 dev: true - /@types/unist@2.0.10: - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + /@types/unist@2.0.11: + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} /@types/uuid@8.3.0: resolution: {integrity: sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==} @@ -3654,7 +3510,7 @@ packages: resolution: {integrity: sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==} dev: true - /@typescript-eslint/eslint-plugin@5.0.0(@typescript-eslint/parser@5.0.0)(eslint@8.1.0)(typescript@4.3.2): + /@typescript-eslint/eslint-plugin@5.0.0(@typescript-eslint/parser@5.0.0)(eslint@8.1.0)(typescript@4.7.4): resolution: {integrity: sha512-T6V6fCD2U0YesOedvydTnrNtsC8E+c2QzpawIpDdlaObX0OX5dLo7tLU5c64FhTZvA1Xrdim+cXDI7NPsVx8Cg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3665,22 +3521,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 5.0.0(eslint@8.1.0)(typescript@4.3.2) - '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.3.2) + '@typescript-eslint/experimental-utils': 5.0.0(eslint@8.1.0)(typescript@4.7.4) + '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.7.4) '@typescript-eslint/scope-manager': 5.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) eslint: 8.1.0 functional-red-black-tree: 1.0.1 - ignore: 5.3.0 + ignore: 5.3.2 regexpp: 3.2.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.3.2) - typescript: 4.3.2 + semver: 7.5.2 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@5.0.0(eslint@8.1.0)(typescript@4.3.2): + /@typescript-eslint/experimental-utils@5.0.0(eslint@8.1.0)(typescript@4.7.4): resolution: {integrity: sha512-Dnp4dFIsZcPawD6CT1p5NibNUQyGSEz80sULJZkyhyna8AEqArmfwMwJPbmKzWVo4PabqNVzHYlzmcdLQWk+pg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3689,7 +3545,7 @@ packages: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 5.0.0 '@typescript-eslint/types': 5.0.0 - '@typescript-eslint/typescript-estree': 5.0.0(typescript@4.3.2) + '@typescript-eslint/typescript-estree': 5.0.0(typescript@4.7.4) eslint: 8.1.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.1.0) @@ -3698,7 +3554,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser@5.0.0(eslint@8.1.0)(typescript@4.3.2): + /@typescript-eslint/parser@5.0.0(eslint@8.1.0)(typescript@4.7.4): resolution: {integrity: sha512-B6D5rmmQ14I1fdzs71eL3DAuvnPHTY/t7rQABrL9BLnx/H51Un8ox1xqYAchs0/V2trcoyxB1lMJLlrwrJCDgw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3710,10 +3566,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.0.0 '@typescript-eslint/types': 5.0.0 - '@typescript-eslint/typescript-estree': 5.0.0(typescript@4.3.2) - debug: 4.3.4(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 5.0.0(typescript@4.7.4) + debug: 4.3.6(supports-color@8.1.1) eslint: 8.1.0 - typescript: 4.3.2 + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true @@ -3731,7 +3587,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.0.0(typescript@4.3.2): + /@typescript-eslint/typescript-estree@5.0.0(typescript@4.7.4): resolution: {integrity: sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3742,12 +3598,12 @@ packages: dependencies: '@typescript-eslint/types': 5.0.0 '@typescript-eslint/visitor-keys': 5.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.3.2) - typescript: 4.3.2 + semver: 7.5.2 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true @@ -3770,9 +3626,9 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 vite: 5.3.3(@types/node@14.14.21)(sass@1.77.6) @@ -3784,12 +3640,12 @@ packages: resolution: {integrity: sha512-VdgpnD75swH9hpXjd34VBgQ2w2quK63WljodlUcOoJDPKiV+rPjHrcUc2sjLCNKxhl6oKqmsZgwOWcDAY2GKKQ==} dev: true - /@vscode/extension-telemetry@0.6.2(tslib@2.6.2): + /@vscode/extension-telemetry@0.6.2(tslib@2.7.0): resolution: {integrity: sha512-yb/wxLuaaCRcBAZtDCjNYSisAXz3FWsSqAha5nhHcYxx2ZPdQdWuZqVXGKq0ZpHVndBWWtK6XqtpCN2/HB4S1w==} engines: {vscode: ^1.60.0} dependencies: - '@microsoft/1ds-core-js': 3.2.15(tslib@2.6.2) - '@microsoft/1ds-post-js': 3.2.15(tslib@2.6.2) + '@microsoft/1ds-core-js': 3.2.18(tslib@2.7.0) + '@microsoft/1ds-post-js': 3.2.18(tslib@2.7.0) transitivePeerDependencies: - tslib dev: false @@ -3799,8 +3655,8 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@microsoft/fast-element': 1.12.0 - '@microsoft/fast-foundation': 2.49.5 + '@microsoft/fast-element': 1.13.0 + '@microsoft/fast-foundation': 2.49.6 '@microsoft/fast-react-wrapper': 0.1.48(react@17.0.2) react: 17.0.2 dev: false @@ -3822,30 +3678,46 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.12.1 dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true + + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /adm-zip@0.5.12: - resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} - engines: {node: '>=6.0'} + /adm-zip@0.5.15: + resolution: {integrity: sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==} + engines: {node: '>=12.0'} dev: false /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3864,7 +3736,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-draft-04@1.0.0(ajv@8.12.0): + /ajv-draft-04@1.0.0(ajv@8.17.1): resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: ajv: ^8.5.0 @@ -3872,10 +3744,10 @@ packages: ajv: optional: true dependencies: - ajv: 8.12.0 + ajv: 8.17.1 dev: false - /ajv-formats@3.0.1(ajv@8.12.0): + /ajv-formats@3.0.1(ajv@8.17.1): resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: ajv: ^8.0.0 @@ -3883,7 +3755,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.12.0 + ajv: 8.17.1 dev: false /ajv@6.12.6: @@ -3895,13 +3767,13 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 dev: false /ansi-colors@4.1.1: @@ -3972,6 +3844,7 @@ packages: /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: delegates: 1.0.0 readable-stream: 3.6.2 @@ -4006,25 +3879,27 @@ packages: engines: {node: '>=0.10.0'} dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 dev: true /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -4042,23 +3917,24 @@ packages: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /asn1@0.2.6: @@ -4080,14 +3956,14 @@ packages: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: false /astral-regex@2.0.0: @@ -4113,11 +3989,11 @@ packages: /async-mutex@0.3.1: resolution: {integrity: sha512-vRfQwcqBnJTLzVQo72Sf7KIUbcSUP5hNchx6udI1U6LuPQpfePgdjJzlCe76yFZ8pxlLjn9lwcl/Ya0TSOv0Tw==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: false - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} dev: true /asynckit@0.4.0: @@ -4134,65 +4010,67 @@ packages: hasBin: true dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true /await-semaphore@0.1.3: resolution: {integrity: sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==} dev: false - /axios@1.6.8(debug@4.3.4): - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + /axios@1.7.5(debug@4.3.6): + resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.6) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: false - /babel-core@7.0.0-bridge.0(@babel/core@7.23.7): + /babel-core@7.0.0-bridge.0(@babel/core@7.25.2): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: false - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.7): - resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7) + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): - resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) - core-js-compat: 3.35.1 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.7): - resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color dev: false @@ -4221,8 +4099,8 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -4289,11 +4167,11 @@ packages: - supports-color dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -4303,15 +4181,15 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.645 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) /buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -4319,6 +4197,7 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -4339,7 +4218,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.2 dev: false /bytes@3.1.2: @@ -4367,7 +4246,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.2.0 + tar: 6.2.1 unique-filename: 2.0.1 transitivePeerDependencies: - bluebird @@ -4398,12 +4277,15 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.2.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -4420,8 +4302,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} /chai-as-promised@7.1.1(chai@4.2.0): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} @@ -4450,7 +4332,7 @@ packages: deep-eql: 3.0.1 get-func-name: 2.0.2 pathval: 1.1.1 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /chalk@2.4.2: @@ -4501,17 +4383,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 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 parse5: 7.1.2 parse5-htmlparser2-tree-adapter: 7.0.0 + parse5-parser-stream: 7.1.2 + undici: 6.19.8 + whatwg-mimetype: 4.0.0 dev: true /chokidar@3.5.3: @@ -4519,7 +4405,22 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + 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 + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + 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 @@ -4756,10 +4657,10 @@ packages: toggle-selection: 1.0.6 dev: false - /core-js-compat@3.35.1: - resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} + /core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} dependencies: - browserslist: 4.22.2 + browserslist: 4.23.3 dev: false /core-util-is@1.0.3: @@ -4783,7 +4684,7 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@8.3.6(typescript@4.3.2): + /cosmiconfig@8.3.6(typescript@4.7.4): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -4796,7 +4697,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 4.3.2 + typescript: 4.7.4 dev: true /create-require@1.1.1: @@ -4858,21 +4759,18 @@ packages: resolution: {integrity: sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==} dev: true - /cytoscape-cose-bilkent@4.1.0(cytoscape@3.28.1): + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.2): resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 1.0.3 - cytoscape: 3.28.1 + cytoscape: 3.30.2 dev: true - /cytoscape@3.28.1: - resolution: {integrity: sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==} + /cytoscape@3.30.2: + resolution: {integrity: sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==} engines: {node: '>=0.10'} - dependencies: - heap: 0.2.7 - lodash: 4.17.21 dev: true /d3-array@2.12.1: @@ -5146,11 +5044,12 @@ packages: d3-zoom: 3.0.0 dev: true - /d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} dependencies: - es5-ext: 0.10.53 - type: 1.2.0 + es5-ext: 0.10.64 + type: 2.7.3 dev: false /dagre-d3-es@7.0.10: @@ -5160,13 +5059,40 @@ packages: lodash-es: 4.17.21 dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /date-format@4.0.14: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} engines: {node: '>=4.0'} dev: false - /dayjs@1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + /dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} dev: true /debug@2.6.9: @@ -5201,6 +5127,19 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true + + /debug@4.3.6(supports-color@8.1.1): + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -5226,7 +5165,7 @@ packages: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /deep-is@0.1.4: @@ -5240,13 +5179,13 @@ packages: strip-bom: 4.0.0 dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -5257,8 +5196,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -5352,6 +5291,11 @@ packages: engines: {node: '>=0.3.1'} dev: true + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dev: true + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -5416,7 +5360,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /dotenv@8.2.0: @@ -5428,7 +5372,7 @@ packages: resolution: {integrity: sha512-YDBmkNhQ6pvUY6gDpwmWe+A6Id819eR3RPAVZIhaZfCL1C+F7/0uzXPSjE2DprKruc3kuVhOCMJl2Z/6whLUzQ==} hasBin: true dependencies: - minimatch: 9.0.3 + minimatch: 9.0.5 yargs: 17.7.2 dev: false @@ -5442,19 +5386,19 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.8.7 + jake: 10.9.2 dev: true - /electron-to-chromium@1.4.645: - resolution: {integrity: sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==} + /electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} - /elkjs@0.9.2: - resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} + /elkjs@0.9.3: + resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} dev: true /emitter-listener@1.1.2: @@ -5476,6 +5420,13 @@ packages: engines: {node: '>= 0.8'} dev: false + /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 @@ -5534,64 +5485,88 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + 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.1 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -5607,10 +5582,21 @@ packages: resolution: {integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==} dependencies: es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 next-tick: 1.0.0 dev: false + /es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + dev: false + /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true @@ -5618,15 +5604,16 @@ packages: /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.53 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 dev: false - /es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} dependencies: - d: 1.0.1 + d: 1.0.2 ext: 1.7.0 dev: false @@ -5697,8 +5684,8 @@ packages: '@esbuild/win32-x64': 0.23.0 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} /escape-html@1.0.3: @@ -5718,14 +5705,14 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.2(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0): + resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -5745,7 +5732,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.3.2) + '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.7.4) debug: 3.2.7 eslint: 8.1.0 eslint-import-resolver-node: 0.3.9 @@ -5771,19 +5758,19 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.3.2) - array-includes: 3.1.7 + '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.7.4) + array-includes: 3.1.8 array.prototype.flat: 1.3.2 debug: 2.6.9 doctrine: 2.1.0 eslint: 8.1.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0) has: 1.0.4 - is-core-module: 2.13.1 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.7 + object.values: 1.2.0 resolve: 1.22.8 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -5863,7 +5850,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.6(supports-color@8.1.1) doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -5871,7 +5858,7 @@ packages: eslint-utils: 3.0.0(eslint@8.1.0) 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 @@ -5888,10 +5875,10 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.5.2 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -5900,12 +5887,22 @@ packages: - supports-color dev: true + /esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + dev: false + /espree@9.6.1: 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.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 dev: true @@ -5914,8 +5911,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 @@ -5951,6 +5948,13 @@ packages: engines: {node: '>= 0.6'} dev: false + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + dev: false + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -6036,7 +6040,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.2 + type: 2.7.3 dev: false /extend-shallow@2.0.1: @@ -6085,7 +6089,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 dev: true /fast-json-stable-stringify@2.1.0: @@ -6100,8 +6104,12 @@ packages: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} dev: true - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + /fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + dev: false + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -6139,8 +6147,8 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -6210,7 +6218,7 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -6220,15 +6228,15 @@ packages: hasBin: true dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.227.0: - resolution: {integrity: sha512-nOygtGKcX/siZK/lFzpfdHEfOkfGcTW7rNroR1Zsz6T/JxSahPALXVt5qVHq/fgvMJuv096BTKbgxN3PzVBaDA==} + /flow-parser@0.244.0: + resolution: {integrity: sha512-Dkc88m5k8bx1VvHTO9HEJ7tvMcSb3Zvcv1PY4OHK7pHdtdY2aUjhmPy6vpjVJ2uUUOIybRlb91sXE8g4doChtA==} engines: {node: '>=0.4.0'} dev: false - /follow-redirects@1.15.6(debug@4.3.4): + /follow-redirects@1.15.6(debug@4.3.6): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: @@ -6237,7 +6245,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) dev: false /for-each@0.3.3: @@ -6366,9 +6374,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -6388,6 +6396,7 @@ packages: /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -6411,13 +6420,15 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 /get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} @@ -6433,12 +6444,13 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true /get-value@2.0.6: @@ -6465,13 +6477,14 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 9.0.3 + minimatch: 9.0.5 minipass: 5.0.0 - path-scurry: 1.10.1 + path-scurry: 1.11.1 dev: false /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6483,6 +6496,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6494,6 +6508,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 @@ -6513,11 +6528,12 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: true /globby@11.1.0: @@ -6527,7 +6543,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -6535,7 +6551,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -6552,21 +6568,21 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -6620,8 +6636,8 @@ packages: type-fest: 0.8.1 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -6633,7 +6649,7 @@ packages: /hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.10 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -6645,10 +6661,6 @@ packages: hasBin: true dev: true - /heap@0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} - dev: true - /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false @@ -6656,10 +6668,10 @@ packages: /history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 loose-envify: 1.4.0 resolve-pathname: 3.0.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 tiny-warning: 1.0.3 value-equal: 1.0.1 dev: true @@ -6667,7 +6679,7 @@ packages: /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 dev: true /hoist-non-react-statics@3.3.2: @@ -6680,8 +6692,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 @@ -6710,7 +6722,17 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6719,7 +6741,17 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6744,7 +6776,6 @@ packages: /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - requiresBuild: true dependencies: safer-buffer: 2.1.2 dev: true @@ -6758,8 +6789,8 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true @@ -6767,8 +6798,8 @@ packages: resolution: {integrity: sha512-y0BKZgnoDLRIF2J0Pg/Wa6uhY5i6SqR7Wfagghf0UHRpnWJ5jm1IS0bZjAV5ADOxHAM2zdzYWmw8EbQgEUlvmw==} dev: true - /immutable@4.3.6: - resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} + /immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} dev: true /import-fresh@3.3.0: @@ -6794,6 +6825,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -6805,13 +6837,13 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true /internmap@1.0.1: @@ -6828,7 +6860,7 @@ packages: deprecated: We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser dependencies: '@formatjs/ecma402-abstract': 1.6.3 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /intl-messageformat@9.5.3: @@ -6836,11 +6868,15 @@ packages: dependencies: fast-memoize: 2.5.2 intl-messageformat-parser: 6.4.3 - tslib: 2.6.2 + tslib: 2.7.0 dev: true - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 dev: true /ipaddr.js@1.9.1: @@ -6852,7 +6888,7 @@ packages: resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} engines: {node: '>= 0.10'} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 dev: true /is-alphabetical@1.0.4: @@ -6866,12 +6902,12 @@ packages: is-decimal: 1.0.4 dev: false - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -6888,15 +6924,15 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-buffer@1.1.6: @@ -6908,23 +6944,31 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 /is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-decimal@1.0.4: @@ -6989,8 +7033,8 @@ packages: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -6998,7 +7042,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@3.0.0: @@ -7042,8 +7086,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-regexp@1.0.0: @@ -7051,10 +7095,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-stream@2.0.1: @@ -7066,7 +7111,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -7076,11 +7121,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 dev: true /is-typedarray@1.0.0: @@ -7094,7 +7139,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-windows@1.0.2: @@ -7152,7 +7197,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -7185,27 +7230,27 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + /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 @@ -7229,27 +7274,31 @@ packages: argparse: 2.0.1 dev: true - /jscodeshift@0.14.0(@babel/preset-env@7.23.8): + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true + + /jscodeshift@0.14.0(@babel/preset-env@7.25.4): resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/preset-env': 7.23.8(@babel/core@7.23.7) - '@babel/preset-flow': 7.23.3(@babel/core@7.23.7) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.7) - '@babel/register': 7.23.7(@babel/core@7.23.7) - babel-core: 7.0.0-bridge.0(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/parser': 7.25.4 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/preset-env': 7.25.4(@babel/core@7.25.2) + '@babel/preset-flow': 7.24.7(@babel/core@7.25.2) + '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) + '@babel/register': 7.24.6(@babel/core@7.25.2) + babel-core: 7.0.0-bridge.0(@babel/core@7.25.2) chalk: 4.1.2 - flow-parser: 0.227.0 + flow-parser: 0.244.0 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.8 neo-async: 2.6.2 node-dir: 0.1.17 recast: 0.21.5 @@ -7330,7 +7379,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.3 dev: false /just-extend@4.2.1: @@ -7367,8 +7416,8 @@ packages: safe-buffer: 5.2.1 dev: false - /katex@0.16.10: - resolution: {integrity: sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==} + /katex@0.16.11: + resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true dependencies: commander: 8.3.0 @@ -7431,11 +7480,11 @@ packages: colorette: 1.4.0 commander: 8.3.0 cosmiconfig: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 execa: 5.1.1 listr2: 3.14.0(enquirer@2.4.1) - micromatch: 4.0.5 + micromatch: 4.0.8 normalize-path: 3.0.0 please-upgrade-node: 3.2.0 string-argv: 0.3.1 @@ -7457,7 +7506,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.1 + rfdc: 1.4.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -7569,9 +7618,9 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.4(supports-color@8.1.1) - flatted: 3.2.9 - rfdc: 1.3.1 + debug: 4.3.6(supports-color@8.1.1) + flatted: 3.3.1 + rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: - supports-color @@ -7586,7 +7635,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true /lowlight@1.20.0: @@ -7596,9 +7645,8 @@ packages: highlight.js: 10.7.3 dev: false - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} dev: false /lru-cache@5.1.1: @@ -7641,7 +7689,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -7702,7 +7750,7 @@ packages: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 micromark: 3.2.0 @@ -7763,20 +7811,20 @@ packages: '@braintree/sanitize-url': 6.0.4 '@types/d3-scale': 4.0.8 '@types/d3-scale-chromatic': 3.0.3 - cytoscape: 3.28.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.28.1) + cytoscape: 3.30.2 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.10 - dayjs: 1.11.7 + dayjs: 1.11.13 dompurify: 3.0.6 - elkjs: 0.9.2 - katex: 0.16.10 + elkjs: 0.9.3 + katex: 0.16.11 khroma: 2.1.0 lodash-es: 4.17.21 mdast-util-from-markdown: 1.3.1 non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.3.1 + stylis: 4.3.4 ts-dedent: 2.2.0 uuid: 9.0.1 web-worker: 1.3.0 @@ -7948,7 +7996,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -7989,11 +8037,11 @@ packages: - supports-color dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 /miller-rabin@4.0.1: @@ -8034,7 +8082,7 @@ packages: prop-types: ^15.0.0 react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 prop-types: 15.8.1 react: 17.0.2 tiny-warning: 1.0.3 @@ -8059,8 +8107,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -8155,7 +8203,7 @@ packages: peerDependencies: mocha: '>=3.1.2' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) lodash: 4.17.21 mocha: 10.0.0 transitivePeerDependencies: @@ -8217,8 +8265,8 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /nan@2.18.0: - resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + /nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} dev: true /nanoid@3.3.3: @@ -8268,12 +8316,16 @@ packages: resolution: {integrity: sha512-mc/caHeUcdjnC/boPWJefDr4KUIWQNv+tlnFnJd38QMou86QtxQzBJfxgGRzvx8jazYRqrVlaHarfO72uNxPOg==} dev: false + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: false + /nise@4.1.0: resolution: {integrity: sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==} dependencies: '@sinonjs/commons': 1.8.6 '@sinonjs/fake-timers': 6.0.1 - '@sinonjs/text-encoding': 0.7.2 + '@sinonjs/text-encoding': 0.7.3 just-extend: 4.2.1 path-to-regexp: 1.8.0 dev: true @@ -8282,7 +8334,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /node-dir@0.1.17: @@ -8292,18 +8344,6 @@ packages: minimatch: 3.1.2 dev: false - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -8316,8 +8356,8 @@ packages: whatwg-url: 5.0.0 dev: false - /node-gyp-build@4.8.0: - resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + /node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true dev: false @@ -8334,8 +8374,8 @@ packages: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.5.4 - tar: 6.2.0 + semver: 7.5.2 + tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -8349,8 +8389,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} /node-rsa@1.1.1: resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} @@ -8389,6 +8429,7 @@ packages: /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 @@ -8423,7 +8464,7 @@ packages: istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -8451,8 +8492,9 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /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==} @@ -8470,7 +8512,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -8483,26 +8525,26 @@ packages: isobject: 3.0.1 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true - /office-addin-manifest@1.13.2: - resolution: {integrity: sha512-+IBmcMbgoAsjE7FOO15HeVQD91GbWd3mcdmq43xulFaI5uC5bYhw70TI7XEUUYRrPU1iLFGbdYNHvsjFfNdqzQ==} + /office-addin-manifest@1.13.1: + resolution: {integrity: sha512-uIYpEE3tLr3grchqx9GOIHl3P+/4EqQ/Mrx4u5y7EsFzB5YqSIjwsvw6/x6OLrEhD5+0qtEh4fcAJVtfMPSpmw==} hasBin: true dependencies: - '@microsoft/teams-manifest': 0.1.4 - adm-zip: 0.5.12 + '@microsoft/teams-manifest': 0.1.5 + adm-zip: 0.5.15 chalk: 2.4.2 commander: 6.2.1 fs-extra: 7.0.1 - node-fetch: 2.6.7 - office-addin-usage-data: 1.6.11 + node-fetch: 2.7.0 + office-addin-usage-data: 1.6.12 path: 0.12.7 uuid: 8.3.2 xml2js: 0.5.0 @@ -8510,8 +8552,8 @@ packages: - encoding dev: false - /office-addin-usage-data@1.6.11: - resolution: {integrity: sha512-8n86S1PkAktGFtrM2kYVX8zbgo/i8VyH6RzO3ApX6GeFOeTWJPtYVWmGs7WklkoTlZGTwDjfiR+noB0vWA9Vpg==} + /office-addin-usage-data@1.6.12: + resolution: {integrity: sha512-K9Ii5Jsc6Vuf6LrBvo5BycMzTmDwTkk3g5W2zS4PLffvvQYeI/RO3oYpGpOT6z7Pa8oh5gQ2QMDUgmjQGQZ7PA==} hasBin: true dependencies: applicationinsights: 1.8.10 @@ -8548,16 +8590,16 @@ packages: is-wsl: 2.2.0 dev: false - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /p-limit@2.3.0: @@ -8648,7 +8690,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -8661,6 +8703,12 @@ packages: parse5: 7.1.2 dev: true + /parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + dependencies: + parse5: 7.1.2 + dev: true + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -8699,11 +8747,11 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.1.0 + lru-cache: 10.4.3 minipass: 5.0.0 dev: false @@ -8733,12 +8781,8 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -8779,8 +8823,13 @@ packages: engines: {node: '>=0.10.0'} dev: true - /postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -8899,12 +8948,13 @@ packages: /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + dev: true /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 dev: false /query-string@6.14.1: @@ -8971,7 +9021,7 @@ packages: react: 17.0.2 scheduler: 0.20.2 - /react-intl@5.13.5(react@17.0.2)(typescript@4.3.2): + /react-intl@5.13.5(react@17.0.2)(typescript@4.7.4): resolution: {integrity: sha512-Ym6knnC04k070vwe3UDcRHQUDE2rGn1PNfmYNhDHVPL6vbusuFbefjnt8ZC1GEjnfo29WUHn/tkGd9SMudzD+g==} peerDependencies: react: ^16.3.0 || 17 @@ -8981,7 +9031,7 @@ packages: optional: true dependencies: '@formatjs/ecma402-abstract': 1.6.3 - '@formatjs/intl': 1.8.4(typescript@4.3.2) + '@formatjs/intl': 1.8.4(typescript@4.7.4) '@formatjs/intl-displaynames': 4.0.11 '@formatjs/intl-listformat': 5.0.12 '@types/hoist-non-react-statics': 3.3.5 @@ -8989,8 +9039,8 @@ packages: intl-messageformat: 9.5.3 intl-messageformat-parser: 6.4.3 react: 17.0.2 - tslib: 2.6.2 - typescript: 4.3.2 + tslib: 2.7.0 + typescript: 4.7.4 dev: true /react-is@16.13.1: @@ -9006,13 +9056,13 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 react: 17.0.2 react-router: 5.2.0(react@17.0.2) - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 tiny-warning: 1.0.3 dev: true @@ -9021,7 +9071,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -9030,7 +9080,7 @@ packages: prop-types: 15.8.1 react: 17.0.2 react-is: 16.13.1 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 tiny-warning: 1.0.3 dev: true @@ -9039,7 +9089,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -9105,7 +9155,7 @@ packages: ast-types: 0.14.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /recast@0.21.5: @@ -9115,7 +9165,7 @@ packages: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.6.2 + tslib: 2.7.0 dev: false /reflect-metadata@0.1.13: @@ -9147,7 +9197,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.25.4 dev: false /regex-not@1.0.2: @@ -9158,13 +9208,14 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 dev: true /regexpp@3.2.0: @@ -9244,7 +9295,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -9271,11 +9322,12 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -9283,38 +9335,38 @@ 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 - dev: true /robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: true - /rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + /rollup@4.21.1: + resolution: {integrity: sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.21.1 + '@rollup/rollup-android-arm64': 4.21.1 + '@rollup/rollup-darwin-arm64': 4.21.1 + '@rollup/rollup-darwin-x64': 4.21.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.1 + '@rollup/rollup-linux-arm-musleabihf': 4.21.1 + '@rollup/rollup-linux-arm64-gnu': 4.21.1 + '@rollup/rollup-linux-arm64-musl': 4.21.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.1 + '@rollup/rollup-linux-riscv64-gnu': 4.21.1 + '@rollup/rollup-linux-s390x-gnu': 4.21.1 + '@rollup/rollup-linux-x64-gnu': 4.21.1 + '@rollup/rollup-linux-x64-musl': 4.21.1 + '@rollup/rollup-win32-arm64-msvc': 4.21.1 + '@rollup/rollup-win32-ia32-msvc': 4.21.1 + '@rollup/rollup-win32-x64-msvc': 4.21.1 fsevents: 2.3.3 dev: true @@ -9331,7 +9383,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 dev: true /sade@1.8.1: @@ -9341,12 +9393,12 @@ packages: mri: 1.2.0 dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -9358,12 +9410,12 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -9381,13 +9433,13 @@ packages: engines: {node: '>=14.0.0'} hasBin: true dependencies: - chokidar: 3.5.3 - immutable: 4.3.6 + chokidar: 3.6.0 + immutable: 4.3.7 source-map-js: 1.2.0 dev: true - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} /scheduler@0.20.2: resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} @@ -9408,13 +9460,18 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.5.2: + resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -9458,23 +9515,25 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /set-value@2.0.1: @@ -9514,12 +9573,14 @@ packages: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} dev: false - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -9569,7 +9630,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.7.0 dev: true /snapdragon-node@2.1.1: @@ -9609,17 +9670,17 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - socks: 2.7.1 + debug: 4.3.6(supports-color@8.1.1) + socks: 2.8.3 transitivePeerDependencies: - supports-color dev: true - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} dependencies: - ip: 2.0.0 + ip-address: 9.0.5 smart-buffer: 4.2.0 dev: true @@ -9644,6 +9705,7 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: false /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} @@ -9697,6 +9759,10 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + /ssri@9.0.1: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -9731,7 +9797,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -9760,29 +9826,31 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 dev: true /string_decoder@1.1.1: @@ -9832,8 +9900,8 @@ packages: engines: {node: '>=8'} dev: true - /stylis@4.3.1: - resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} + /stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} dev: true /supports-color@5.5.0: @@ -9886,7 +9954,7 @@ packages: dependencies: commander: 9.5.0 glob: 8.1.0 - sax: 1.3.0 + sax: 1.4.1 svg-pathdata: 6.0.3 dev: true @@ -9901,7 +9969,7 @@ packages: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 + picocolors: 1.0.1 dev: true /svgpath@2.6.0: @@ -9921,11 +9989,11 @@ packages: '@types/ttf2eot': 2.0.2 '@types/ttf2woff': 2.0.4 '@types/ttf2woff2': 2.0.2 - cheerio: 1.0.0-rc.12 + cheerio: 1.0.0 colors-cli: 1.0.33 copy-template-dir: 1.4.0 del: 6.1.1 - ejs: 3.1.9 + ejs: 3.1.10 fs-extra: 11.1.1 image2uri: 1.0.5 move-file: 2.1.0 @@ -9935,7 +10003,7 @@ packages: ttf2eot: 3.1.0 ttf2woff: 3.0.0 ttf2woff2: 5.0.0 - yaml: 2.3.4 + yaml: 2.5.0 yargs: 17.7.2 transitivePeerDependencies: - bluebird @@ -9951,8 +10019,8 @@ packages: engines: {node: '>=6'} dev: true - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -9966,7 +10034,7 @@ packages: /tas-client@0.1.73: resolution: {integrity: sha512-UDdUF9kV2hYdlv+7AgqP2kXarVSUhjK7tg1BUflIRGEgND0/QoNpN64rcEuhEcM8AIbW65yrCopJWqRhLZ3m8w==} dependencies: - axios: 1.6.8(debug@4.3.4) + axios: 1.7.5(debug@4.3.6) transitivePeerDependencies: - debug dev: false @@ -10002,17 +10070,19 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} dev: true /tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: true - /tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} + /tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 dev: false /to-fast-properties@2.0.0: @@ -10068,7 +10138,7 @@ packages: engines: {node: '>=6.10'} dev: true - /ts-loader@8.0.3(typescript@4.3.2): + /ts-loader@8.0.3(typescript@4.7.4): resolution: {integrity: sha512-wsqfnVdB7xQiqhqbz2ZPLGHLPZbHVV5Qn/MNFZkCFxRU1miDyxKORucDGxKtsQJ63Rfza0udiUxWF5nHY6bpdQ==} engines: {node: '>=10.0.0'} peerDependencies: @@ -10077,24 +10147,39 @@ packages: chalk: 2.4.2 enhanced-resolve: 4.5.0 loader-utils: 1.4.2 - micromatch: 4.0.5 + micromatch: 4.0.8 semver: 6.3.1 - typescript: 4.3.2 + typescript: 4.7.4 dev: true - /ts-node@9.1.1(typescript@4.3.2): - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} + /ts-node@10.9.2(@types/node@14.14.21)(typescript@4.7.4): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 14.14.21 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - source-map-support: 0.5.21 - typescript: 4.3.2 + typescript: 4.7.4 + v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -10119,17 +10204,17 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsutils@3.21.0(typescript@4.3.2): + /tsutils@3.21.0(typescript@4.7.4): 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: 4.3.2 + typescript: 4.7.4 dev: true /ttf2eot@3.1.0: @@ -10147,7 +10232,7 @@ packages: dependencies: bindings: 1.5.0 bufferstreams: 3.0.0 - nan: 2.18.0 + nan: 2.20.0 node-gyp: 9.4.1 transitivePeerDependencies: - bluebird @@ -10174,6 +10259,11 @@ packages: engines: {node: '>=4'} dev: true + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -10197,50 +10287,52 @@ packages: mime-types: 2.1.35 dev: false - /type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: false - - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + /type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} dev: false - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray-to-buffer@3.1.5: @@ -10257,8 +10349,8 @@ packages: postinstall-build: 2.1.3 dev: true - /typescript@4.3.2: - resolution: {integrity: sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==} + /typescript@4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -10266,12 +10358,17 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true + /undici@6.19.8: + resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} + engines: {node: '>=18.17'} + dev: true + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -10322,7 +10419,7 @@ packages: /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 dev: true /universalify@0.1.2: @@ -10352,20 +10449,21 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 + dev: true /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} @@ -10382,7 +10480,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.2 dev: false /util-deprecate@1.0.2: @@ -10421,11 +10519,15 @@ packages: hasBin: true dependencies: dequal: 2.0.3 - diff: 5.0.0 + diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 dev: true + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} dev: true @@ -10444,13 +10546,13 @@ packages: engines: {node: '>= 0.8'} dev: false - /vite-plugin-svgr@4.2.0(typescript@4.3.2)(vite@5.3.3): + /vite-plugin-svgr@4.2.0(typescript@4.7.4)(vite@5.3.3): resolution: {integrity: sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==} peerDependencies: vite: ^2.6.0 || 3 || 4 || 5 dependencies: '@rollup/pluginutils': 5.1.0 - '@svgr/core': 8.1.0(typescript@4.3.2) + '@svgr/core': 8.1.0(typescript@4.7.4) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) vite: 5.3.3(@types/node@14.14.21)(sass@1.77.6) transitivePeerDependencies: @@ -10489,8 +10591,8 @@ packages: dependencies: '@types/node': 14.14.21 esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.0 + postcss: 8.4.41 + rollup: 4.21.1 sass: 1.77.6 optionalDependencies: fsevents: 2.3.3 @@ -10518,13 +10620,13 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false - /websocket@1.0.34: - resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} + /websocket@1.0.35: + resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==} engines: {node: '>=4.0.0'} dependencies: bufferutil: 4.0.8 debug: 2.6.9 - es5-ext: 0.10.53 + es5-ext: 0.10.64 typedarray-to-buffer: 3.1.5 utf-8-validate: 5.0.10 yaeti: 0.0.6 @@ -10532,6 +10634,18 @@ packages: - supports-color dev: false + /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==} dependencies: @@ -10553,15 +10667,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@2.0.2: @@ -10578,6 +10692,11 @@ packages: string-width: 4.2.3 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true @@ -10623,7 +10742,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: false @@ -10660,9 +10779,10 @@ packages: engines: {node: '>= 6'} dev: true - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + /yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} + hasBin: true dev: true /yargs-parser@18.1.3: @@ -10678,11 +10798,6 @@ packages: engines: {node: '>=10'} dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -10719,12 +10834,12 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 20.2.4 dev: true /yargs@17.7.2: @@ -10732,7 +10847,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/packages/vscode-extension/src/debug/localTelemetryReporter.ts b/packages/vscode-extension/src/debug/localTelemetryReporter.ts index 96f9d51688..49c52d9c44 100644 --- a/packages/vscode-extension/src/debug/localTelemetryReporter.ts +++ b/packages/vscode-extension/src/debug/localTelemetryReporter.ts @@ -256,7 +256,7 @@ export async function getTaskInfo(): Promise { task?.type === TeamsFxTaskType || (task?.type === "shell" && task?.command && - Object.values(TeamsFxNpmCommands).includes(task?.command)); + Object.values(TeamsFxNpmCommands).includes(task?.command as any)); // Only send the info scaffold by Teams Toolkit. If user changed some property, the value will be "unknown". dependsOnArr.push({ @@ -284,7 +284,9 @@ export async function getTaskInfo(): Promise { const teamsfxTasks = taskJson?.tasks?.filter( (t) => - t?.type === TeamsFxTaskType && t?.command && Object.values(TaskCommand).includes(t?.command) + t?.type === TeamsFxTaskType && + t?.command && + Object.values(TaskCommand).includes(t?.command as any) ); return { diff --git a/packages/vscode-extension/src/debug/taskTerminal/baseTunnelTaskTerminal.ts b/packages/vscode-extension/src/debug/taskTerminal/baseTunnelTaskTerminal.ts index e6898952ec..435ab3ace0 100644 --- a/packages/vscode-extension/src/debug/taskTerminal/baseTunnelTaskTerminal.ts +++ b/packages/vscode-extension/src/debug/taskTerminal/baseTunnelTaskTerminal.ts @@ -106,7 +106,7 @@ export abstract class BaseTunnelTaskTerminal extends BaseTaskTerminal { } if (args.type) { - if (typeof args.type !== "string" || !Object.values(TunnelType).includes(args.type)) { + if (typeof args.type !== "string" || !Object.values(TunnelType).includes(args.type as any)) { throw BaseTaskTerminal.taskDefinitionError("args.type"); } } diff --git a/packages/vscode-extension/src/debug/teamsfxTaskHandler.ts b/packages/vscode-extension/src/debug/teamsfxTaskHandler.ts index 3e499332bf..e135979ecf 100644 --- a/packages/vscode-extension/src/debug/teamsfxTaskHandler.ts +++ b/packages/vscode-extension/src/debug/teamsfxTaskHandler.ts @@ -107,7 +107,7 @@ function isCheckDevProxyTask(task: vscode.Task): boolean { function isTeamsFxTransparentTask(task: vscode.Task): boolean { if (task.definition && task.definition.type === ProductName) { const command = task.definition.command as string; - if (Object.values(TaskCommand).includes(command)) { + if (Object.values(TaskCommand).includes(command as any)) { return true; } } diff --git a/packages/vscode-extension/test/mocks/vsc/uri.ts b/packages/vscode-extension/test/mocks/vsc/uri.ts index 854ca691ac..934adf31d5 100644 --- a/packages/vscode-extension/test/mocks/vsc/uri.ts +++ b/packages/vscode-extension/test/mocks/vsc/uri.ts @@ -424,7 +424,7 @@ export class URI implements UriComponents { static revive(data: UriComponents | URI | undefined | null): URI | undefined | null { if (!data) { - return data; + return data as any; } if (data instanceof URI) { return data; diff --git a/packages/vscode-extension/tsconfig.json b/packages/vscode-extension/tsconfig.json index e056fdfcb5..7b09e35310 100644 --- a/packages/vscode-extension/tsconfig.json +++ b/packages/vscode-extension/tsconfig.json @@ -9,6 +9,7 @@ "resolveJsonModule": true, "skipLibCheck": true, "strict": true /* enable all strict type-checking options */, + "useUnknownInCatchVariables": false, "jsx": "react", "plugins": [], "esModuleInterop": true From e5f51a9fb73a82238f7f134181df739ab99c9902 Mon Sep 17 00:00:00 2001 From: yukun-dong Date: Mon, 2 Sep 2024 10:12:24 +0800 Subject: [PATCH 35/52] fix: upgrade fast-xml-parser dependency (#12290) * fix: update fast-xml-parser dependency * fix: update --- packages/adaptivecards-tools-sdk/package.json | 5 +++++ .../adaptivecards-tools-sdk/pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/adaptivecards-tools-sdk/package.json b/packages/adaptivecards-tools-sdk/package.json index ddee904345..ff634ae20a 100644 --- a/packages/adaptivecards-tools-sdk/package.json +++ b/packages/adaptivecards-tools-sdk/package.json @@ -50,6 +50,11 @@ "markdown-it": "^13.0.2", "react": "^17.0.2" }, + "overrides": { + "adaptive-expressions":{ + "fast-xml-parser": "4.4.1" + } + }, "publishConfig": { "access": "public" }, diff --git a/packages/adaptivecards-tools-sdk/pnpm-lock.yaml b/packages/adaptivecards-tools-sdk/pnpm-lock.yaml index e5b3a4f23f..a674d05b74 100644 --- a/packages/adaptivecards-tools-sdk/pnpm-lock.yaml +++ b/packages/adaptivecards-tools-sdk/pnpm-lock.yaml @@ -7,13 +7,13 @@ settings: dependencies: adaptive-expressions: specifier: ^4.20.0 - version: 4.20.0 + version: 4.22.3 adaptivecards: specifier: ~2.10.0 version: 2.10.0 adaptivecards-templating: specifier: ^2.1.0 - version: 2.1.0(adaptive-expressions@4.20.0) + version: 2.1.0(adaptive-expressions@4.22.3) markdown-it: specifier: ^13.0.2 version: 13.0.2 @@ -495,8 +495,8 @@ packages: hasBin: true dev: true - /adaptive-expressions@4.20.0: - resolution: {integrity: sha512-/m0gXtwb75iK0UBftwoK8La7Ch/TqfrT5doAoLya1VAaeOEIzDzHIbMe1G6B7/N+Nn/waZFMexrqDW7d01lbdA==} + /adaptive-expressions@4.22.3: + resolution: {integrity: sha512-ks2kYbmVIWtYVRV8Sh9snCEDPtoFutL1W1p/AHfKz3Z0VCxCaDYU/QooVUxVFgOvvMOCWi1yYNFW3UlMaNs99g==} dependencies: '@microsoft/recognizers-text-data-types-timex-expression': 1.3.0 '@types/atob-lite': 2.0.2 @@ -511,7 +511,7 @@ packages: btoa-lite: 1.0.0 d3-format: 1.4.5 dayjs: 1.11.10 - fast-xml-parser: 4.3.3 + fast-xml-parser: 4.4.1 jspath: 0.4.0 lodash.isequal: 4.5.0 lru-cache: 5.1.1 @@ -519,12 +519,12 @@ packages: xpath: 0.0.32 dev: false - /adaptivecards-templating@2.1.0(adaptive-expressions@4.20.0): + /adaptivecards-templating@2.1.0(adaptive-expressions@4.22.3): resolution: {integrity: sha512-XrO6PlGHT3Tfi8hlCYmholiwKUMOR5t/Y4pFqtNVKXJn5HUdE9A4LdZMhg9tnwjXqJ51t1XVHGm9nOLEDVICPg==} peerDependencies: adaptive-expressions: ^4.11.0 dependencies: - adaptive-expressions: 4.20.0 + adaptive-expressions: 4.22.3 dev: false /adaptivecards@2.10.0: @@ -1284,8 +1284,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-xml-parser@4.3.3: - resolution: {integrity: sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==} + /fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true dependencies: strnum: 1.0.5 From 06202984ec2dc86e966f35ebca9c13ebe3a7e712 Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Mon, 2 Sep 2024 12:33:35 +0800 Subject: [PATCH 36/52] perf(kiota): update question to call kiota command (#12307) * perf(kiota): update question to call kiota command * fix: update pnpm file --- packages/api/src/types.ts | 1 + .../src/component/coordinator/index.ts | 12 + packages/fx-core/src/question/create.ts | 23 +- .../coordinator/coordinator.create.test.ts | 28 + .../fx-core/tests/question/create.test.ts | 41 + packages/vscode-extension/package.json | 1 + packages/vscode-extension/package.nls.json | 3 +- packages/vscode-extension/pnpm-lock.yaml | 3515 +++++++++-------- .../src/handlers/lifecycleHandlers.ts | 72 +- .../src/telemetry/extTelemetryEvents.ts | 3 + .../test/handlers/lifecycleHandlers.test.ts | 85 + 11 files changed, 2038 insertions(+), 1746 deletions(-) diff --git a/packages/api/src/types.ts b/packages/api/src/types.ts index 6435f6223d..0b7dc5ccca 100644 --- a/packages/api/src/types.ts +++ b/packages/api/src/types.ts @@ -153,6 +153,7 @@ export interface CreateProjectResult { warnings?: Warning[]; shouldInvokeTeamsAgent?: boolean; projectId?: string; + createProjectForKiota?: boolean; } export interface TeamsAppInputs extends InputsWithProjectPath { diff --git a/packages/fx-core/src/component/coordinator/index.ts b/packages/fx-core/src/component/coordinator/index.ts index 792fc78fef..b61f8b7536 100644 --- a/packages/fx-core/src/component/coordinator/index.ts +++ b/packages/fx-core/src/component/coordinator/index.ts @@ -39,6 +39,7 @@ import { } from "../../error/common"; import { LifeCycleUndefinedError } from "../../error/yml"; import { + ApiPluginStartOptions, AppNamePattern, ProjectTypeOptions, QuestionNames, @@ -62,6 +63,7 @@ import { metadataUtil } from "../utils/metadataUtil"; import { pathUtils } from "../utils/pathUtils"; import { settingsUtil } from "../utils/settingsUtil"; import { SummaryReporter } from "./summary"; +import { featureFlagManager, FeatureFlags } from "../../common/featureFlags"; const M365Actions = [ "botAadApp/create", @@ -90,6 +92,16 @@ class Coordinator { inputs: Inputs, actionContext?: ActionContext ): Promise> { + // Handle command redirect to Kiota. Only happens in vscode. + if ( + inputs.platform === Platform.VSCode && + featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration) && + inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.apiSpec().id && + !inputs[QuestionNames.ApiPluginManifestPath] + ) { + return ok({ projectPath: "", createProjectForKiota: true }); + } + let folder = inputs["folder"] as string; if (!folder) { return err(new MissingRequiredInputError("folder")); diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index 3302a7449f..b0c005845b 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -1537,9 +1537,10 @@ export function capabilitySubTree(): IQTreeNode { // from API spec condition: (inputs: Inputs) => { return ( - inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.apiSpec().id || - inputs[QuestionNames.MeArchitectureType] === MeArchitectureOptions.apiSpec().id || - inputs[QuestionNames.CustomCopilotRag] === CustomCopilotRagOptions.customApi().id + !featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration) && + (inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.apiSpec().id || + inputs[QuestionNames.MeArchitectureType] === MeArchitectureOptions.apiSpec().id || + inputs[QuestionNames.CustomCopilotRag] === CustomCopilotRagOptions.customApi().id) ); }, data: { type: "group", name: QuestionNames.FromExistingApi }, @@ -1628,10 +1629,26 @@ export function capabilitySubTree(): IQTreeNode { { // root folder data: folderQuestion(), + condition: (inputs: Inputs) => { + // Only skip this project when need to rediect to Kiota: 1. Feature flag enabled 2. Creating plugin from existing spec 3. No plugin manifest path + return ( + !featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration) || + inputs[QuestionNames.ApiPluginType] !== ApiPluginStartOptions.apiSpec().id || + !!inputs[QuestionNames.ApiPluginManifestPath] + ); + }, }, { // app name data: appNameQuestion(), + condition: (inputs: Inputs) => { + // Only skip this project when need to rediect to Kiota: 1. Feature flag enabled 2. Creating plugin from existing spec 3. No plugin manifest path + return ( + !featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration) || + inputs[QuestionNames.ApiPluginType] !== ApiPluginStartOptions.apiSpec().id || + !!inputs[QuestionNames.ApiPluginManifestPath] + ); + }, }, ], condition: (inputs: Inputs) => { diff --git a/packages/fx-core/tests/component/coordinator/coordinator.create.test.ts b/packages/fx-core/tests/component/coordinator/coordinator.create.test.ts index 4cdcf8459c..855590a7e4 100644 --- a/packages/fx-core/tests/component/coordinator/coordinator.create.test.ts +++ b/packages/fx-core/tests/component/coordinator/coordinator.create.test.ts @@ -32,12 +32,15 @@ import { import { validationUtils } from "../../../src/ui/validationUtils"; import { MockTools, randomAppName } from "../../core/utils"; import { MockedUserInteraction } from "../../plugins/solution/util"; +import mockedEnv, { RestoreFn } from "mocked-env"; +import { FeatureFlagName } from "../../../src/common/featureFlags"; describe("coordinator create", () => { const sandbox = sinon.createSandbox(); const tools = new MockTools(); let generator: sinon.SinonStub; setTools(tools); + let mockedEnvRestore: RestoreFn; beforeEach(() => { sandbox.stub(fs, "ensureDir").resolves(); generator = sandbox @@ -45,6 +48,9 @@ describe("coordinator create", () => { .resolves(ok(undefined)); }); afterEach(() => { + if (mockedEnvRestore) { + mockedEnvRestore(); + } sandbox.restore(); }); @@ -784,5 +790,27 @@ describe("coordinator create", () => { const res = await coordinator.create(v3ctx, inputs); assert.isTrue(res.isErr()); }); + + it("success for kiota integration", async () => { + mockedEnvRestore = mockedEnv({ + [FeatureFlagName.KiotaIntegration]: "true", + }); + sandbox.stub(SPFxGeneratorNew.prototype, "run").resolves(ok({})); + sandbox.stub(fs, "pathExists").resolves(true); + sandbox.stub(coordinator, "ensureTrackingId").resolves(ok("mock-id")); + const inputs: Inputs = { + platform: Platform.VSCode, + [QuestionNames.ProjectType]: ProjectTypeOptions.copilotExtension().id, + [QuestionNames.Capabilities]: CapabilityOptions.apiPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, + }; + const context = createContext(); + const res = await coordinator.create(context, inputs); + assert.isTrue(res.isOk()); + if (res.isOk()) { + assert.equal(res.value.createProjectForKiota, true); + assert.equal(res.value.projectPath, ""); + } + }); }); }); diff --git a/packages/fx-core/tests/question/create.test.ts b/packages/fx-core/tests/question/create.test.ts index 176f0507c3..f841b2db57 100644 --- a/packages/fx-core/tests/question/create.test.ts +++ b/packages/fx-core/tests/question/create.test.ts @@ -1699,6 +1699,47 @@ describe("scaffold question", () => { ]); }); + it("traverse in vscode Copilot Plugin to Kiota", async () => { + mockedEnvRestore = mockedEnv({ + [FeatureFlagName.KiotaIntegration]: "true", + }); + const inputs: Inputs = { + platform: Platform.VSCode, + }; + + const questions: string[] = []; + const visitor: QuestionTreeVisitor = async ( + question: Question, + ui: UserInteraction, + inputs: Inputs, + step?: number, + totalSteps?: number + ) => { + questions.push(question.name); + await callFuncs(question, inputs); + if (question.name === QuestionNames.ProjectType) { + const select = question as SingleSelectQuestion; + const options = await select.dynamicOptions!(inputs); + assert.isTrue(options.length === 6); + return ok({ type: "success", result: ProjectTypeOptions.copilotExtension().id }); + } else if (question.name === QuestionNames.Capabilities) { + const select = question as SingleSelectQuestion; + const options = await select.dynamicOptions!(inputs); + assert.isTrue(options.length === 2); + return ok({ type: "success", result: CapabilityOptions.apiPlugin().id }); + } else if (question.name === QuestionNames.ApiPluginType) { + return ok({ type: "success", result: ApiPluginStartOptions.apiSpec().id }); + } + return ok({ type: "success", result: undefined }); + }; + await traverse(createProjectQuestionNode(), inputs, ui, undefined, visitor); + assert.deepEqual(questions, [ + QuestionNames.ProjectType, + QuestionNames.Capabilities, + QuestionNames.ApiPluginType, + ]); + }); + it("traverse in vscode Copilot Plugin from new API with API Key authentication", async () => { const inputs: Inputs = { platform: Platform.VSCode, diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index 0737ea44c7..be8c64a722 100644 --- a/packages/vscode-extension/package.json +++ b/packages/vscode-extension/package.json @@ -1664,6 +1664,7 @@ "mocha": "^10.0.0", "mocha-multi-reporters": "^1.5.1", "mock-fs": "^5.2.0", + "mocked-env": "^1.3.5", "nyc": "^15.1.0", "prettier": "^2.4.1", "react": "^17.0.2", diff --git a/packages/vscode-extension/package.nls.json b/packages/vscode-extension/package.nls.json index e834166399..e083964e65 100644 --- a/packages/vscode-extension/package.nls.json +++ b/packages/vscode-extension/package.nls.json @@ -552,5 +552,6 @@ "teamstoolkit.walkthroughs.buildIntelligentApps.intelligentAppResources.title": "Intelligent App Resources", "teamstoolkit.walkthroughs.buildIntelligentApps.intelligentAppResources.description": "Explore these resources to build intelligent apps and enhance your development projects\n🗒️ [Generative AI for Beginners](https://github.com/microsoft/generative-ai-for-beginners/tree/main)\n✨ [Retrieval Augmented Generation (RAG)](https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview)\n📚 [AI Learning and Community Hub](https://learn.microsoft.com/en-us/ai/)", "teamstoolkit.m365.needSignIn.message": "You need to sign in your Microsoft 365 account.", - "teamstoolkit.handler.createPluginWithManifest.error.missingParameter": "Missing parameter in the createPluginWithManifest command. Usage: createPluginWithManifest(API_SPEC_PATH:string, PLUGIN_MANIFEST_PATH: string, SCAFFOLD_NEW: boolean)." + "teamstoolkit.handler.createPluginWithManifest.error.missingParameter": "Missing parameter in the createPluginWithManifest command. Usage: createPluginWithManifest(API_SPEC_PATH:string, PLUGIN_MANIFEST_PATH: string, SCAFFOLD_NEW: boolean).", + "teamstoolkit.error.KiotaNotInstalled": "You need to install Microsoft Kiota extension to use this feature." } diff --git a/packages/vscode-extension/pnpm-lock.yaml b/packages/vscode-extension/pnpm-lock.yaml index 1e4b5aac23..863c6bcf49 100644 --- a/packages/vscode-extension/pnpm-lock.yaml +++ b/packages/vscode-extension/pnpm-lock.yaml @@ -49,7 +49,7 @@ dependencies: version: 1.0.1 '@vscode/extension-telemetry': specifier: ^0.6.2 - version: 0.6.2(tslib@2.7.0) + version: 0.6.2(tslib@2.6.2) '@vscode/webview-ui-toolkit': specifier: ^1.2.2 version: 1.2.2(react@17.0.2) @@ -58,7 +58,7 @@ dependencies: version: 0.3.1 axios: specifier: ^1.7.5 - version: 1.7.5(debug@4.3.6) + version: 1.7.5(debug@4.3.4) dotenv: specifier: ^8.2.0 version: 8.2.0 @@ -76,7 +76,7 @@ dependencies: version: 10.0.0 jscodeshift: specifier: ^0.14.0 - version: 0.14.0(@babel/preset-env@7.25.4) + version: 0.14.0(@babel/preset-env@7.23.8) jsonc-parser: specifier: ^3.0.0 version: 3.0.0 @@ -88,7 +88,7 @@ dependencies: version: 1.1.1 office-addin-manifest: specifier: ^1.13.1 - version: 1.13.1 + version: 1.13.2 query-string: specifier: 6.14.1 version: 6.14.1 @@ -103,13 +103,13 @@ dependencies: version: 15.5.0(react@17.0.2) semver: specifier: ^7.5.2 - version: 7.5.2 + version: 7.5.4 string-similarity: specifier: ^4.0.4 version: 4.0.4 tmp: specifier: ^0.2.1 - version: 0.2.1 + version: 0.2.3 validator: specifier: ^13.7.0 version: 13.7.0 @@ -177,7 +177,7 @@ devDependencies: version: 15.5.5 '@types/semver': specifier: ^7.3.4 - version: 7.3.4 + version: 7.5.8 '@types/sinon': specifier: ^9.0.9 version: 9.0.9 @@ -186,7 +186,7 @@ devDependencies: version: 4.0.2 '@types/tmp': specifier: ^0.2.0 - version: 0.2.0 + version: 0.2.6 '@types/uuid': specifier: ^8.3.0 version: 8.3.0 @@ -265,6 +265,9 @@ devDependencies: mock-fs: specifier: ^5.2.0 version: 5.2.0 + mocked-env: + specifier: ^1.3.5 + version: 1.3.5 nyc: specifier: ^15.1.0 version: 15.1.0 @@ -325,34 +328,40 @@ devDependencies: packages: - /@ampproject/remapping@2.3.0: - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.25 /@azure/abort-controller@1.1.0: resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 /@azure/abort-controller@2.1.2: resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 + dev: false /@azure/arm-resources-subscriptions@2.1.0: resolution: {integrity: sha512-vKiu/3Yh84IV3IuJJ+0Fgs/ZQpvuGzoZ3dAoBksIV++Uu/Qz9RcQVz7pj+APWYIuODuR9I0eGKswZvzynzekug==} engines: {node: '>=14.0.0'} dependencies: '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.9.2 - '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.16.3 - tslib: 2.7.0 + '@azure/core-client': 1.7.3 + '@azure/core-paging': 1.5.0 + '@azure/core-rest-pipeline': 1.13.0 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: false @@ -363,11 +372,11 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.9.2 - '@azure/core-lro': 2.7.2 - '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.16.3 - tslib: 2.7.0 + '@azure/core-client': 1.7.3 + '@azure/core-lro': 2.5.4 + '@azure/core-paging': 1.5.0 + '@azure/core-rest-pipeline': 1.13.0 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: true @@ -377,74 +386,74 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.7.0 + tslib: 2.6.2 /@azure/core-auth@1.7.2: resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.9.2 - tslib: 2.7.0 + '@azure/core-util': 1.6.1 + tslib: 2.6.2 dev: false - /@azure/core-client@1.9.2: - resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} - engines: {node: '>=18.0.0'} + /@azure/core-client@1.7.3: + resolution: {integrity: sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==} + engines: {node: '>=14.0.0'} dependencies: - '@azure/abort-controller': 2.1.2 + '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-rest-pipeline': 1.16.3 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.2 - '@azure/logger': 1.1.4 - tslib: 2.7.0 + '@azure/core-rest-pipeline': 1.13.0 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.6.1 + '@azure/logger': 1.0.4 + tslib: 2.6.2 transitivePeerDependencies: - supports-color - /@azure/core-lro@2.7.2: - resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} - engines: {node: '>=18.0.0'} + /@azure/core-lro@2.5.4: + resolution: {integrity: sha512-3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q==} + engines: {node: '>=14.0.0'} dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.9.2 - '@azure/logger': 1.1.4 - tslib: 2.7.0 + '@azure/abort-controller': 1.1.0 + '@azure/core-util': 1.6.1 + '@azure/logger': 1.0.4 + tslib: 2.6.2 dev: true - /@azure/core-paging@1.6.2: - resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} - engines: {node: '>=18.0.0'} + /@azure/core-paging@1.5.0: + resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} + engines: {node: '>=14.0.0'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 - /@azure/core-rest-pipeline@1.16.3: - resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} + /@azure/core-rest-pipeline@1.13.0: + resolution: {integrity: sha512-a62aP/wppgmnfIkJLfcB4ssPBcH94WzrzPVJ3tlJt050zX4lfmtnvy95D3igDo3f31StO+9BgPrzvkj4aOxnoA==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 2.1.2 + '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.4.0 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.2 - '@azure/logger': 1.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - tslib: 2.7.0 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.6.1 + '@azure/logger': 1.0.4 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + tslib: 2.6.2 transitivePeerDependencies: - supports-color - /@azure/core-tracing@1.1.2: - resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} - engines: {node: '>=18.0.0'} + /@azure/core-tracing@1.0.1: + resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} + engines: {node: '>=12.0.0'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 - /@azure/core-util@1.9.2: - resolution: {integrity: sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ==} - engines: {node: '>=18.0.0'} + /@azure/core-util@1.6.1: + resolution: {integrity: sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==} + engines: {node: '>=16.0.0'} dependencies: - '@azure/abort-controller': 2.1.2 - tslib: 2.7.0 + '@azure/abort-controller': 1.1.0 + tslib: 2.6.2 /@azure/identity@4.1.0: resolution: {integrity: sha512-BhYkF8Xr2gXjyDxocm0pc9RI5J5a1jw8iW0dw6Bx95OGdYbuMyFZrrwNw4eYSqQ2BB6FZOqpJP3vjsAqRcvDhw==} @@ -452,46 +461,46 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 - '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.16.3 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.2 - '@azure/logger': 1.1.4 - '@azure/msal-browser': 3.22.0 + '@azure/core-client': 1.7.3 + '@azure/core-rest-pipeline': 1.13.0 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.6.1 + '@azure/logger': 1.0.4 + '@azure/msal-browser': 3.13.0 '@azure/msal-node': 2.6.6 events: 3.3.0 jws: 4.0.0 open: 8.4.2 stoppable: 1.1.0 - tslib: 2.7.0 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: false - /@azure/logger@1.1.4: - resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} - engines: {node: '>=18.0.0'} + /@azure/logger@1.0.4: + resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} + engines: {node: '>=14.0.0'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 /@azure/ms-rest-azure-env@2.0.0: resolution: {integrity: sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw==} dev: false - /@azure/msal-browser@3.22.0: - resolution: {integrity: sha512-ZkL2Z0zffsBIE3ovhMwa0rVrPeKV2GHhDWFgWiIcKiPt82b21YLijK3c/rNjTHkME+6FCjMIa/5Nul+ZjH197w==} + /@azure/msal-browser@3.13.0: + resolution: {integrity: sha512-fD906nmJei3yE7la6DZTdUtXKvpwzJURkfsiz9747Icv4pit77cegSm6prJTKLQ1fw4iiZzrrWwxnhMLrTf5gQ==} engines: {node: '>=0.8.0'} dependencies: - '@azure/msal-common': 14.14.2 + '@azure/msal-common': 14.9.0 dev: false - /@azure/msal-common@14.14.2: - resolution: {integrity: sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog==} + /@azure/msal-common@14.8.1: + resolution: {integrity: sha512-9HfBMDTIgtFFkils+o6gO/aGEoLLuc4z+QLLfhy/T1bTNPiVsX/9CjaBPMZGnMltN/IlMkU5SGGNggGh55p5xA==} engines: {node: '>=0.8.0'} dev: false - /@azure/msal-common@14.8.1: - resolution: {integrity: sha512-9HfBMDTIgtFFkils+o6gO/aGEoLLuc4z+QLLfhy/T1bTNPiVsX/9CjaBPMZGnMltN/IlMkU5SGGNggGh55p5xA==} + /@azure/msal-common@14.9.0: + resolution: {integrity: sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==} engines: {node: '>=0.8.0'} dev: false @@ -504,240 +513,445 @@ packages: uuid: 8.3.2 dev: false + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + picocolors: 1.0.0 - /@babel/compat-data@7.25.4: - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core@7.25.2: - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + /@babel/compat-data@7.24.7: + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.23.7: + resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.3.0 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helpers': 7.23.8 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/core@7.24.7: + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.5 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.4 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/generator@7.25.5: - resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.24.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.24.7: - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.23.6 dev: false - /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.24.7 dev: false - /@babel/helper-compilation-targets@7.25.2: - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-compilation-targets@7.24.7: + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/traverse': 7.25.4 + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - transitivePeerDependencies: - - supports-color dev: false - /@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.24.7): + resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.7): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2): - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.24.7): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.6(supports-color@8.1.1) + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-member-expression-to-functions@7.24.8: - resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} - engines: {node: '>=6.9.0'} + /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.24.7): + resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + debug: 4.3.4(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 transitivePeerDependencies: - supports-color - /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.4 transitivePeerDependencies: - supports-color - /@babel/helper-optimise-call-expression@7.24.7: - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.23.6 dev: false - /@babel/helper-plugin-utils@7.24.8: - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} + dev: false - /@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} + /@babel/helper-plugin-utils@7.24.7: + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + engines: {node: '>=6.9.0'} + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.7): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-wrap-function': 7.25.0 - '@babel/traverse': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-wrap-function': 7.22.20 dev: false - /@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/traverse': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 dev: false + /@babel/helper-replace-supers@7.22.20(@babel/core@7.24.7): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + /@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.4 - '@babel/types': 7.25.4 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 transitivePeerDependencies: - supports-color - /@babel/helper-skip-transparent-expression-wrappers@7.24.7: - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.23.6 dev: false - /@babel/helper-string-parser@7.24.8: - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.24.8: - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.24.7: + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.25.0: - resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.24.7 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + dev: false + + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color - dev: false - /@babel/helpers@7.25.0: - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} + /@babel/helpers@7.24.7: + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} @@ -746,1085 +960,1049 @@ packages: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.0.0 - /@babel/parser@7.25.4: - resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.23.6 - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2): - resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - dev: false + '@babel/types': 7.24.7 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.7) dev: false - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.24.7): + resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.25.2): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.25.2): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) dev: false - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.25.2): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.7): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.24.7 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@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.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@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.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@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.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): 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.8 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@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.24.7): 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.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==} + /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.24.7): + resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/traverse': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.24.7 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.7) transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.24.7): + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) - '@babel/traverse': 7.25.4 + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.7) + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 - transitivePeerDependencies: - - supports-color dev: false - /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/template': 7.25.0 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/template': 7.24.7 dev: false - /@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2): - resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) dev: false - /@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==} + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.24.7): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2): - resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 dev: false - /@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2): - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 dev: false - /@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2): - resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.4 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.7): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/compat-data': 7.24.7 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2): - resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.24.7): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) dev: false - /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2): + /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.24.7): resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2): + /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.7): resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 regenerator-transform: 0.15.2 dev: false - /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2): - resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) dev: false - /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.24.7): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.24.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 dev: false - /@babel/preset-env@7.25.4(@babel/core@7.25.2): - resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==} + /@babel/preset-env@7.23.8(@babel/core@7.24.7): + resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.25.4 - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-syntax-import-attributes': 7.24.7(@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-private-property-in-object': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) - core-js-compat: 3.38.1 + '@babel/compat-data': 7.24.7 + '@babel/core': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.24.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.24.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.24.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.24.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.7) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.24.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.24.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.24.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.24.7) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.24.7) + core-js-compat: 3.35.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-flow@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==} + /@babel/preset-flow@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.25.4 + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/types': 7.24.7 esutils: 2.0.3 dev: false - /@babel/preset-typescript@7.24.7(@babel/core@7.25.2): - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) dev: false - /@babel/register@7.24.6(@babel/core@7.25.2): - resolution: {integrity: sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==} + /@babel/register@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -1836,39 +2014,75 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: false - /@babel/runtime@7.25.4: - resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==} + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.25.0: - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + /@babel/traverse@7.23.7: + resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@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.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color - /@babel/traverse@7.25.4: - resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.5 - '@babel/parser': 7.25.4 - '@babel/template': 7.25.0 - '@babel/types': 7.25.4 - debug: 4.3.6(supports-color@8.1.1) + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.25.4: - resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.8 + '@babel/helper-string-parser': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 @@ -2311,10 +2525,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.2 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2323,111 +2537,111 @@ packages: - supports-color dev: true - /@fluentui/date-time-utilities@8.6.9: - resolution: {integrity: sha512-dgOlVm4nXBWDLqijmvn4iAtyv1hVpQZjN6p0So74BW+7ASUTkQGe3lf8PHV/OjBiXfZa4qwONvmTQBGCheNU0w==} + /@fluentui/date-time-utilities@8.5.16: + resolution: {integrity: sha512-l+mLfJ2VhdHjBpELLLPDaWgT7GMLynm2aqR7SttbEb6Jh7hc/7ck1MWm93RTb3gYVHYai8SENqimNcvIxHt/zg==} dependencies: - '@fluentui/set-version': 8.2.23 - tslib: 2.7.0 + '@fluentui/set-version': 8.2.14 + tslib: 2.6.2 dev: true - /@fluentui/dom-utilities@2.3.7: - resolution: {integrity: sha512-AaTR9BhJEF0i042NS1Ju8l95f24p2tBMq6jVVbUEDtYnKaxWnpv8R9eYjOwy8SDniQc1ino+BkolIgCVXXvDmw==} + /@fluentui/dom-utilities@2.2.14: + resolution: {integrity: sha512-+4DVm5sNfJh+l8fM+7ylpOkGNZkNr4X1z1uKQPzRJ1PRhlnvc6vLpWNNicGwpjTbgufSrVtGKXwP5sf++r81lg==} dependencies: - '@fluentui/set-version': 8.2.23 - tslib: 2.7.0 + '@fluentui/set-version': 8.2.14 + tslib: 2.6.2 dev: true - /@fluentui/font-icons-mdl2@8.5.50(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-04pRRmuBf9r/3cnBlIedF+SFk2UW7GdRQvdfKxoMuL4dDMLPqo4ruPkI/dz8Mp3EDERQU01XDWtBx11w9obmFQ==} + /@fluentui/font-icons-mdl2@8.5.31(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-jioHZ9XUfR9vUT5XnxdCrJ+hoC9TpYim+4YdtlUE/euI8kdW1tDZ5zqlSNk1GLDR34n03R09yWj5gVDCcMJbyQ==} dependencies: - '@fluentui/set-version': 8.2.23 - '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) - tslib: 2.7.0 + '@fluentui/set-version': 8.2.14 + '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) + tslib: 2.6.2 transitivePeerDependencies: - '@types/react' - react dev: true - /@fluentui/foundation-legacy@8.4.16(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-01/uQPQ2pEkQ6nUUF+tXaYeOG8UssfoEgAVLPolYXr1DC4tT66hPi7Smgsh6tzUkt/Ljy0nw9TIMRoHDHlfRyg==} + /@fluentui/foundation-legacy@8.2.51(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-z/jrp1imV66/D2MGpN/55LGk/Istymk5tN+XUFHDENDi+9zyb2MgSxFshp774DJIrg3vVlyuS8oo+dBuTM3UbQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.6.13 - '@fluentui/set-version': 8.2.23 - '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.5.15 + '@fluentui/set-version': 8.2.14 + '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/keyboard-key@0.4.23: - resolution: {integrity: sha512-9GXeyUqNJUdg5JiQUZeGPiKnRzMRi9YEUn1l9zq6X/imYdMhxHrxpVZS12129cBfgvPyxt9ceJpywSfmLWqlKA==} + /@fluentui/keyboard-key@0.4.14: + resolution: {integrity: sha512-XzZHcyFEM20H23h3i15UpkHi2AhRBriXPGAHq0Jm98TKFppXehedjjEFuUsh+CyU5JKBhDalWp8TAQ1ArpNzow==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/merge-styles@8.6.13: - resolution: {integrity: sha512-IWgvi2CC+mcQ7/YlCvRjsmHL2+PUz7q+Pa2Rqk3a+QHN0V1uBvgIbKk5y/Y/awwDXy1yJHiqMCcDHjBNmS1d4A==} + /@fluentui/merge-styles@8.5.15: + resolution: {integrity: sha512-4CdKwo4k1Un2QLulpSVIz/KMgLNBMgin4NPyapmKDMVuO1OOxJUqfocubRGNO5x9mKgAMMYwBKGO9i0uxMMpJw==} dependencies: - '@fluentui/set-version': 8.2.23 - tslib: 2.7.0 + '@fluentui/set-version': 8.2.14 + tslib: 2.6.2 dev: true - /@fluentui/react-focus@8.9.13(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-oUtY4F+tp0RmV0Wr30CoYFdTQEqHWKjU3/dYHPbI0xKH4emLrf8+sc0FAHJdeHH2rx4T1XSA807pm7YB4CQqWw==} + /@fluentui/react-focus@8.8.39(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-7PnI+3e37jxt0PlWykNfbCbPdnKroJY+olOxZDHkXfI/ANr8lm4YuyLAYNAtyapfnkf+FBoO6vxU51P8hNk7tQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/keyboard-key': 0.4.23 - '@fluentui/merge-styles': 8.6.13 - '@fluentui/set-version': 8.2.23 - '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + '@fluentui/keyboard-key': 0.4.14 + '@fluentui/merge-styles': 8.5.15 + '@fluentui/set-version': 8.2.14 + '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/react-hooks@8.8.12(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-lplre6x5dONjd12D0BWs4LKq4lX++o0w07pIk2XhxikOW1e4Xfjn6VM52WSdtx+tU4rbLUoCA8drN2y/wDvhGg==} + /@fluentui/react-hooks@8.6.36(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-kI0Z4Q4xHUs4SOmmI5n5OH5fPckqMSCovTRpiuxzCO2TNzLmfC861+nqf4Ygw/ChqNm2gWNZZfUADfnNAEsq+Q==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-window-provider': 2.2.28(@types/react@17.0.3)(react@17.0.2) - '@fluentui/set-version': 8.2.23 - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-window-provider': 2.2.18(@types/react@17.0.3)(react@17.0.2) + '@fluentui/set-version': 8.2.14 + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/react-portal-compat-context@9.0.12(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-5AVXWX9GnbvwnJZYUb4LSIF7BsI/N8oTI6+7Yn0w6B3yaWykA8Menlz757X5tgVBjouEj4Eom+AoVvA7u8gPDA==} + /@fluentui/react-portal-compat-context@9.0.11(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-ubvW/ej0O+Pago9GH3mPaxzUgsNnBoqvghNamWjyKvZIViyaXUG6+sgcAl721R+qGAFac+A20akI5qDJz/xtdg==} peerDependencies: '@types/react': '>=16.14.0 <19.0.0' react: '>=16.14.0 <19.0.0' dependencies: - '@swc/helpers': 0.5.12 + '@swc/helpers': 0.5.3 '@types/react': 17.0.3 react: 17.0.2 dev: true - /@fluentui/react-window-provider@2.2.28(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-YdZ74HTaoDwlvLDzoBST80/17ExIl93tLJpTxnqK5jlJOAUVQ+mxLPF2HQEJq+SZr5IMXHsQ56w/KaZVRn72YA==} + /@fluentui/react-window-provider@2.2.18(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-nBKqxd0P8NmIR0qzFvka1urE2LVbUm6cse1I1T7TcOVNYa5jDf5BrO06+JRZfwbn00IJqOnIVoP0qONqceypWQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/set-version': 8.2.23 + '@fluentui/set-version': 8.2.14 '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /@fluentui/react@8.106.1(@types/react-dom@17.0.2)(@types/react@17.0.3)(react-dom@17.0.2)(react@17.0.2): @@ -2438,93 +2652,92 @@ packages: react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/date-time-utilities': 8.6.9 - '@fluentui/font-icons-mdl2': 8.5.50(@types/react@17.0.3)(react@17.0.2) - '@fluentui/foundation-legacy': 8.4.16(@types/react@17.0.3)(react@17.0.2) - '@fluentui/merge-styles': 8.6.13 - '@fluentui/react-focus': 8.9.13(@types/react@17.0.3)(react@17.0.2) - '@fluentui/react-hooks': 8.8.12(@types/react@17.0.3)(react@17.0.2) - '@fluentui/react-portal-compat-context': 9.0.12(@types/react@17.0.3)(react@17.0.2) - '@fluentui/react-window-provider': 2.2.28(@types/react@17.0.3)(react@17.0.2) - '@fluentui/set-version': 8.2.23 - '@fluentui/style-utilities': 8.10.21(@types/react@17.0.3)(react@17.0.2) - '@fluentui/theme': 2.6.59(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + '@fluentui/date-time-utilities': 8.5.16 + '@fluentui/font-icons-mdl2': 8.5.31(@types/react@17.0.3)(react@17.0.2) + '@fluentui/foundation-legacy': 8.2.51(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.5.15 + '@fluentui/react-focus': 8.8.39(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-hooks': 8.6.36(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-portal-compat-context': 9.0.11(@types/react@17.0.3)(react@17.0.2) + '@fluentui/react-window-provider': 2.2.18(@types/react@17.0.3)(react@17.0.2) + '@fluentui/set-version': 8.2.14 + '@fluentui/style-utilities': 8.10.2(@types/react@17.0.3)(react@17.0.2) + '@fluentui/theme': 2.6.41(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) '@microsoft/load-themed-styles': 1.10.295 '@types/react': 17.0.3 '@types/react-dom': 17.0.2 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/set-version@8.2.23: - resolution: {integrity: sha512-VPXaBsiaa3Xn/AY40nLU9bvDQ62lpMVnFzFTlQ8CbpdwrjxNlRxDUY5vRToNzp1+Zu5gD/+CgsXqIZGcry5L5w==} + /@fluentui/set-version@8.2.14: + resolution: {integrity: sha512-f/QWJnSeyfAjGAqq57yjMb6a5ejPlwfzdExPmzFBuEOuupi8hHbV8Yno12XJcTW4I0KXEQGw+PUaM1aOf/j7jw==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/style-utilities@8.10.21(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-tqdSQI1MAnNUPtNKKV9LeNqmEhBZL+lpV+m6Ngl6SDuR0aQkMkuo1jA9rPxNRLUf5+pbI8LrNQ4WiCWqYkV/QQ==} + /@fluentui/style-utilities@8.10.2(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-ocELtMb/85nBa3rSfiAIwYx6TydN+3rQqv1P0H/L7etYNNtxOfS86JSWfn8zAsHMejbwUKJ1ZsIKs47c598XGQ==} dependencies: - '@fluentui/merge-styles': 8.6.13 - '@fluentui/set-version': 8.2.23 - '@fluentui/theme': 2.6.59(@types/react@17.0.3)(react@17.0.2) - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.5.15 + '@fluentui/set-version': 8.2.14 + '@fluentui/theme': 2.6.41(@types/react@17.0.3)(react@17.0.2) + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) '@microsoft/load-themed-styles': 1.10.295 - tslib: 2.7.0 + tslib: 2.6.2 transitivePeerDependencies: - '@types/react' - react dev: true - /@fluentui/theme@2.6.59(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-o/6UgKgPW6QI/+2OfCXeJfcOCbtzLIwM/3W/DzI2Pjt56ubT98IEcb32NCHoIKB2xkEnJoTjGgN1m+vHAvcQxA==} + /@fluentui/theme@2.6.41(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-h9RguEzqzJ0+59ys5Kkp7JtsjhDUxBLmQunu5rpHp5Mp788OtEjI/n1a9FIcOAL/priPSQwXN7RbuDpeP7+aSw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.6.13 - '@fluentui/set-version': 8.2.23 - '@fluentui/utilities': 8.15.15(@types/react@17.0.3)(react@17.0.2) + '@fluentui/merge-styles': 8.5.15 + '@fluentui/set-version': 8.2.14 + '@fluentui/utilities': 8.13.24(@types/react@17.0.3)(react@17.0.2) '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /@fluentui/utilities@8.15.15(@types/react@17.0.3)(react@17.0.2): - resolution: {integrity: sha512-7GpET/AuWR8aBEQSQj9iO2j+9riAaoK1qBduCB4Ht6353d25vwwsKXreHZGqS8efv+NNIxQTlLWz0Rq73iQFWw==} + /@fluentui/utilities@8.13.24(@types/react@17.0.3)(react@17.0.2): + resolution: {integrity: sha512-/jo6hWCzTGCx06l2baAMwsjjBZ/dyMouls53uNaQLUGUUhUwXh/DcDDXMqLRJB3MaH9zvgfvRw61iKmm2s9fIA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/dom-utilities': 2.3.7 - '@fluentui/merge-styles': 8.6.13 - '@fluentui/react-window-provider': 2.2.28(@types/react@17.0.3)(react@17.0.2) - '@fluentui/set-version': 8.2.23 + '@fluentui/dom-utilities': 2.2.14 + '@fluentui/merge-styles': 8.5.15 + '@fluentui/set-version': 8.2.14 '@types/react': 17.0.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /@formatjs/ecma402-abstract@1.6.3: resolution: {integrity: sha512-7ijswObmYXabVy5GvcpKG29jbyJ9rGtFdRBdmdQvoDmMo0PwlOl/L08GtrjA4YWLAZ0j2owb2YrRLGNAvLBk+Q==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true /@formatjs/intl-displaynames@4.0.11: resolution: {integrity: sha512-e3917+HmXStxb2fNP3sOr3R1DMALdWrUteBb3nerA2AKa12mXwmL0lDavrdltwZWqF7/Egh8fF/esB0Z/fqOgQ==} dependencies: '@formatjs/ecma402-abstract': 1.6.3 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /@formatjs/intl-listformat@5.0.12: resolution: {integrity: sha512-xWAndG73lqJ1+ar6SljCpM9nUsi2YoZfKi45F2YZRSxtUx4JbWYkhpbroOwxjCQ8ppZFoPc2mlLZjhPZiTyG7g==} dependencies: '@formatjs/ecma402-abstract': 1.6.3 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /@formatjs/intl@1.8.4(typescript@4.7.4): @@ -2541,7 +2754,7 @@ packages: fast-memoize: 2.5.2 intl-messageformat: 9.5.3 intl-messageformat-parser: 6.4.3 - tslib: 2.7.0 + tslib: 2.6.2 typescript: 4.7.4 dev: true @@ -2552,10 +2765,9 @@ packages: /@humanwhocodes/config-array@0.6.0: resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2563,7 +2775,6 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead dev: true /@istanbuljs/load-nyc-config@1.1.0: @@ -2592,66 +2803,78 @@ packages: engines: {node: '>=8'} dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec@1.5.0: - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@microsoft/1ds-core-js@3.2.18(tslib@2.7.0): - resolution: {integrity: sha512-ytlFv3dfb8OGqvbZP8tSIlNvn3QNYxdsF0k6ikRMWSr6CmBxBi1sliaxc2Q5KuYOuaeWkd8WRm25Rx/UtHcyMg==} + /@microsoft/1ds-core-js@3.2.15(tslib@2.6.2): + resolution: {integrity: sha512-w/35jS80jVl+YBbL69BHg6iTHuIkmmnwSuy8LhfBHm8QDTQny2C73GdwUN8c00BqSClM1ldl2w2bQWW1aMJLTg==} dependencies: - '@microsoft/applicationinsights-core-js': 2.8.18(tslib@2.7.0) + '@microsoft/applicationinsights-core-js': 2.8.16(tslib@2.6.2) '@microsoft/applicationinsights-shims': 2.0.2 '@microsoft/dynamicproto-js': 1.1.11 transitivePeerDependencies: - tslib dev: false - /@microsoft/1ds-post-js@3.2.18(tslib@2.7.0): - resolution: {integrity: sha512-Tzjcja4SMyws3UP58kD2edFPNb7BJtx5uCgwf/PWXwDyfbUY1/crsTQdEyR98wy/vorvLDZdQlcL++VMChfYnQ==} + /@microsoft/1ds-post-js@3.2.15(tslib@2.6.2): + resolution: {integrity: sha512-SZQdaiLpoPelTFC0G1EVZXnuQxzqPdY3F6tcBHfnmQv+h8aJR3HAIiy65xI+p7u9m9LdV+8Mx5buE0s6NfXnQA==} dependencies: - '@microsoft/1ds-core-js': 3.2.18(tslib@2.7.0) + '@microsoft/1ds-core-js': 3.2.15(tslib@2.6.2) '@microsoft/applicationinsights-shims': 2.0.2 '@microsoft/dynamicproto-js': 1.1.11 transitivePeerDependencies: - tslib dev: false - /@microsoft/applicationinsights-core-js@2.8.18(tslib@2.7.0): - resolution: {integrity: sha512-yPHRZFLpnEO0uSgFPM1BLMRRwjoten9YBbn4pJRbCT4PigLnj748knmWsMwXIdcehtkRTYz78kPYa/LWP7nvmA==} + /@microsoft/applicationinsights-core-js@2.8.16(tslib@2.6.2): + resolution: {integrity: sha512-pO5rR6UuiPymiHFj8XxNXhQgBSTvyHWygf+gdEVDh0xpUXYFO99bZe0Ux0D0HqYqVkJrRfXzL1Ocru6+S0x53Q==} peerDependencies: tslib: '*' dependencies: '@microsoft/applicationinsights-shims': 2.0.2 '@microsoft/dynamicproto-js': 1.1.11 - tslib: 2.7.0 + tslib: 2.6.2 dev: false /@microsoft/applicationinsights-shims@2.0.2: @@ -2664,14 +2887,14 @@ packages: '@microsoft/dev-tunnels-contracts': 1.1.9 '@microsoft/dev-tunnels-management': 1.1.9 '@microsoft/dev-tunnels-ssh': 3.11.36 - '@microsoft/dev-tunnels-ssh-tcp': 3.11.38 + '@microsoft/dev-tunnels-ssh-tcp': 3.11.36 await-semaphore: 0.1.3 buffer: 5.7.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) es5-ext: 0.10.53 uuid: 3.4.0 vscode-jsonrpc: 4.0.0 - websocket: 1.0.35 + websocket: 1.0.34 transitivePeerDependencies: - supports-color dev: false @@ -2680,7 +2903,7 @@ packages: resolution: {integrity: sha512-OayhehwI+CnO0Wr53e29ZJZWGsNA5yVG7r54qmZSLc5HxA5Cozk4hP7EbYDCXkxh4NbQoT1dhTzC8bkRo+wWXw==} dependencies: buffer: 5.7.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color @@ -2690,16 +2913,16 @@ packages: resolution: {integrity: sha512-wGuFEzvRiWZmDxQMGKEjOKhEIVnLiG6vRUuM9Hwqxpe/kbiyA2WiUyEVpniNPaaw8gDHTf9zJHnPNNj0JiL5mA==} dependencies: '@microsoft/dev-tunnels-contracts': 1.1.9 - axios: 1.7.5(debug@4.3.6) + axios: 1.7.5(debug@4.3.4) buffer: 5.7.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) vscode-jsonrpc: 4.0.0 transitivePeerDependencies: - supports-color dev: false - /@microsoft/dev-tunnels-ssh-tcp@3.11.38: - resolution: {integrity: sha512-GraMSCScu2Pn30oFyzgmw1kAbXJBXBCuzSBQ+q5xIwK1ZpK6D9M/0u2ctsCGw5SwyVVf0hWFqlfZsZlfTX/ifQ==} + /@microsoft/dev-tunnels-ssh-tcp@3.11.36: + resolution: {integrity: sha512-TAxraYXguA0y3M3MueeLma/dyoyvelyITSHVbHUrnOkgbYobs45LyQHuOzD42F57iJuP9DzpjC45RG+mKW3a/g==} dependencies: '@microsoft/dev-tunnels-ssh': 3.11.36 transitivePeerDependencies: @@ -2710,7 +2933,7 @@ packages: resolution: {integrity: sha512-j7SlGaavPRs1Aho9a0JFRjL9N1V6UFo1Q2BUq6cpu+CnlWexmjvZmjeZyNQqwnnnEEAAGc5Vkz74cIQ8JHpvSA==} dependencies: buffer: 5.7.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) diffie-hellman: 5.0.3 vscode-jsonrpc: 4.0.0 transitivePeerDependencies: @@ -2721,14 +2944,14 @@ packages: resolution: {integrity: sha512-gNw9z9LbqLV+WadZ6/MMrWwO3e0LuoUH1wve/1iPsBNbgqeVCiB0EZFNNj2lysxS2gkqoF9hmyVaG3MoM1BkxA==} dev: false - /@microsoft/fast-element@1.13.0: - resolution: {integrity: sha512-iFhzKbbD0cFRo9cEzLS3Tdo9BYuatdxmCEKCpZs1Cro/93zNMpZ/Y9/Z7SknmW6fhDZbpBvtO8lLh9TFEcNVAQ==} + /@microsoft/fast-element@1.12.0: + resolution: {integrity: sha512-gQutuDHPKNxUEcQ4pypZT4Wmrbapus+P9s3bR/SEOLsMbNqNoXigGImITygI5zhb+aA5rzflM6O8YWkmRbGkPA==} dev: false - /@microsoft/fast-foundation@2.49.6: - resolution: {integrity: sha512-DZVr+J/NIoskFC1Y6xnAowrMkdbf2d5o7UyWK6gW5AiQ6S386Ql8dw4KcC4kHaeE1yL2CKvweE79cj6ZhJhTvA==} + /@microsoft/fast-foundation@2.49.5: + resolution: {integrity: sha512-3PpG1BNmZ5kUM1goYU3SsxjsM2H7Rk0ZmpDJ7mnRhWDgKiM5SzJ02KvALRUqDrJQoeDnkW0Q2Q+r9SkEd68Gpg==} dependencies: - '@microsoft/fast-element': 1.13.0 + '@microsoft/fast-element': 1.12.0 '@microsoft/fast-web-utilities': 5.4.1 tabbable: 5.3.3 tslib: 1.14.1 @@ -2739,8 +2962,8 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@microsoft/fast-element': 1.13.0 - '@microsoft/fast-foundation': 2.49.6 + '@microsoft/fast-element': 1.12.0 + '@microsoft/fast-foundation': 2.49.5 react: 17.0.2 dev: false @@ -2754,14 +2977,14 @@ packages: resolution: {integrity: sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==} dev: true - /@microsoft/teams-manifest@0.1.5: - resolution: {integrity: sha512-ITt7mXSZjcrriwtn0Gg0zUnJcRac3feX3AY6MVAaF4uVf58jx5/GlFrWgABaBS30HBF05hhH1dYn2IoCby/StA==} + /@microsoft/teams-manifest@0.1.4: + resolution: {integrity: sha512-VVFnItrOi2MS7seQC/EkFGyqJNkR2jRASTeSaUhyJ+pdnrUszYPRqyOwBzFw4HmXBmlnOD1WTfRgwdeav/KpgA==} dependencies: '@types/fs-extra': 11.0.4 '@types/node-fetch': 2.6.11 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.12.0 + ajv-draft-04: 1.0.0(ajv@8.12.0) + ajv-formats: 3.0.1(ajv@8.12.0) fs-extra: 9.1.0 node-fetch: 2.7.0 transitivePeerDependencies: @@ -2797,7 +3020,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.16.0 dev: true /@npmcli/fs@2.1.2: @@ -2805,7 +3028,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.2 + semver: 7.5.4 dev: true /@npmcli/move-file@2.0.1: @@ -2837,128 +3060,128 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.21.1: - resolution: {integrity: sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==} + /@rollup/rollup-android-arm-eabi@4.18.0: + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.21.1: - resolution: {integrity: sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==} + /@rollup/rollup-android-arm64@4.18.0: + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.21.1: - resolution: {integrity: sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==} + /@rollup/rollup-darwin-arm64@4.18.0: + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.21.1: - resolution: {integrity: sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==} + /@rollup/rollup-darwin-x64@4.18.0: + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.21.1: - resolution: {integrity: sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.18.0: + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.21.1: - resolution: {integrity: sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==} + /@rollup/rollup-linux-arm-musleabihf@4.18.0: + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.21.1: - resolution: {integrity: sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==} + /@rollup/rollup-linux-arm64-gnu@4.18.0: + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.21.1: - resolution: {integrity: sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==} + /@rollup/rollup-linux-arm64-musl@4.18.0: + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.21.1: - resolution: {integrity: sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==} + /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.21.1: - resolution: {integrity: sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==} + /@rollup/rollup-linux-riscv64-gnu@4.18.0: + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.21.1: - resolution: {integrity: sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==} + /@rollup/rollup-linux-s390x-gnu@4.18.0: + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.21.1: - resolution: {integrity: sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==} + /@rollup/rollup-linux-x64-gnu@4.18.0: + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.21.1: - resolution: {integrity: sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==} + /@rollup/rollup-linux-x64-musl@4.18.0: + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.21.1: - resolution: {integrity: sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==} + /@rollup/rollup-win32-arm64-msvc@4.18.0: + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.21.1: - resolution: {integrity: sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==} + /@rollup/rollup-win32-ia32-msvc@4.18.0: + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.21.1: - resolution: {integrity: sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==} + /@rollup/rollup-win32-x64-msvc@4.18.0: + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} cpu: [x64] os: [win32] requiresBuild: true @@ -2989,108 +3212,108 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 lodash.get: 4.4.2 - type-detect: 4.1.0 + type-detect: 4.0.8 dev: true - /@sinonjs/text-encoding@0.7.3: - resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} + /@sinonjs/text-encoding@0.7.2: + resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} dev: true - /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.25.2): + /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.23.7): resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.25.2): + /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.23.7): resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: true - /@svgr/babel-preset@8.1.0(@babel/core@7.25.2): + /@svgr/babel-preset@8.1.0(@babel/core@7.23.7): resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.25.2) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.25.2) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.25.2) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.25.2) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.25.2) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.25.2) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.25.2) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.23.7) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.7) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.7) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.23.7) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.23.7) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.23.7) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.23.7) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.23.7) dev: true /@svgr/core@8.1.0(typescript@4.7.4): resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} engines: {node: '>=14'} dependencies: - '@babel/core': 7.25.2 - '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.23.7) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@4.7.4) snake-case: 3.0.4 @@ -3103,7 +3326,7 @@ packages: resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} engines: {node: '>=14'} dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.23.6 entities: 4.5.0 dev: true @@ -3113,8 +3336,8 @@ packages: peerDependencies: '@svgr/core': '*' dependencies: - '@babel/core': 7.25.2 - '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.23.7) '@svgr/core': 8.1.0(typescript@4.7.4) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -3122,16 +3345,15 @@ packages: - supports-color dev: true - /@swc/helpers@0.5.12: - resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + /@swc/helpers@0.5.3: + resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - dev: true /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -3157,8 +3379,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -3167,20 +3389,20 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.23.6 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true /@types/babel__traverse@7.20.6: resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.23.6 dev: true /@types/body-parser@1.19.5: @@ -3246,11 +3468,11 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.19.5: - resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: '@types/node': 14.14.21 - '@types/qs': 6.9.15 + '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -3259,9 +3481,9 @@ packages: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.5 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.11 + '@types/serve-static': 1.15.5 dev: true /@types/fs-extra@11.0.4: @@ -3276,10 +3498,10 @@ packages: '@types/node': 14.14.21 dev: true - /@types/hast@2.3.10: - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + /@types/hast@2.3.9: + resolution: {integrity: sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==} dependencies: - '@types/unist': 2.0.11 + '@types/unist': 2.0.10 dev: false /@types/history@4.7.11: @@ -3331,13 +3553,17 @@ packages: /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: - '@types/unist': 2.0.11 + '@types/unist': 2.0.10 dev: true /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: true + /@types/mocha@8.0.4: resolution: {integrity: sha512-M4BwiTJjHmLq6kjON7ZoI2JMlBvpY3BYSdiP6s/qCT3jb1s9/DeJF0JELpAxiVSIxXDzfNKe+r7yedMIoLbknQ==} dev: true @@ -3366,12 +3592,12 @@ packages: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: true - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: true - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + /@types/qs@6.9.11: + resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} dev: true /@types/range-parser@1.2.7: @@ -3414,17 +3640,17 @@ packages: /@types/react@17.0.3: resolution: {integrity: sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==} dependencies: - '@types/prop-types': 15.7.12 - '@types/scheduler': 0.23.0 + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 csstype: 3.1.3 dev: true - /@types/scheduler@0.23.0: - resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} dev: true - /@types/semver@7.3.4: - resolution: {integrity: sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/send@0.17.4: @@ -3434,12 +3660,12 @@ packages: '@types/node': 14.14.21 dev: true - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} dependencies: '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 '@types/node': 14.14.21 - '@types/send': 0.17.4 dev: true /@types/sinon-chai@3.2.12: @@ -3473,8 +3699,8 @@ packages: '@types/node': 14.14.21 dev: true - /@types/tmp@0.2.0: - resolution: {integrity: sha512-flgpHJjntpBAdJD43ShRosQvNC0ME97DCfGvZEDlAThQmnerRXrLbX6YgzRBQCZTthET9eAWFAMaYP0m0Y4HzQ==} + /@types/tmp@0.2.6: + resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} dev: true /@types/ttf2eot@2.0.2: @@ -3495,8 +3721,8 @@ packages: '@types/node': 14.14.21 dev: true - /@types/unist@2.0.11: - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} /@types/uuid@8.3.0: resolution: {integrity: sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==} @@ -3524,12 +3750,12 @@ packages: '@typescript-eslint/experimental-utils': 5.0.0(eslint@8.1.0)(typescript@4.7.4) '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.7.4) '@typescript-eslint/scope-manager': 5.0.0 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.1.0 functional-red-black-tree: 1.0.1 - ignore: 5.3.2 + ignore: 5.3.0 regexpp: 3.2.0 - semver: 7.5.2 + semver: 7.5.4 tsutils: 3.21.0(typescript@4.7.4) typescript: 4.7.4 transitivePeerDependencies: @@ -3567,7 +3793,7 @@ packages: '@typescript-eslint/scope-manager': 5.0.0 '@typescript-eslint/types': 5.0.0 '@typescript-eslint/typescript-estree': 5.0.0(typescript@4.7.4) - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.1.0 typescript: 4.7.4 transitivePeerDependencies: @@ -3598,10 +3824,10 @@ packages: dependencies: '@typescript-eslint/types': 5.0.0 '@typescript-eslint/visitor-keys': 5.0.0 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.2 + semver: 7.5.4 tsutils: 3.21.0(typescript@4.7.4) typescript: 4.7.4 transitivePeerDependencies: @@ -3626,9 +3852,9 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 vite: 5.3.3(@types/node@14.14.21)(sass@1.77.6) @@ -3640,12 +3866,12 @@ packages: resolution: {integrity: sha512-VdgpnD75swH9hpXjd34VBgQ2w2quK63WljodlUcOoJDPKiV+rPjHrcUc2sjLCNKxhl6oKqmsZgwOWcDAY2GKKQ==} dev: true - /@vscode/extension-telemetry@0.6.2(tslib@2.7.0): + /@vscode/extension-telemetry@0.6.2(tslib@2.6.2): resolution: {integrity: sha512-yb/wxLuaaCRcBAZtDCjNYSisAXz3FWsSqAha5nhHcYxx2ZPdQdWuZqVXGKq0ZpHVndBWWtK6XqtpCN2/HB4S1w==} engines: {vscode: ^1.60.0} dependencies: - '@microsoft/1ds-core-js': 3.2.18(tslib@2.7.0) - '@microsoft/1ds-post-js': 3.2.18(tslib@2.7.0) + '@microsoft/1ds-core-js': 3.2.15(tslib@2.6.2) + '@microsoft/1ds-post-js': 3.2.15(tslib@2.6.2) transitivePeerDependencies: - tslib dev: false @@ -3655,8 +3881,8 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@microsoft/fast-element': 1.13.0 - '@microsoft/fast-foundation': 2.49.6 + '@microsoft/fast-element': 1.12.0 + '@microsoft/fast-foundation': 2.49.5 '@microsoft/fast-react-wrapper': 0.1.48(react@17.0.2) react: 17.0.2 dev: false @@ -3678,46 +3904,37 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.12.1): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.12.1 + acorn: 8.11.3 dev: true /acorn-walk@8.3.3: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} dependencies: - acorn: 8.12.1 + acorn: 8.11.3 dev: true - /acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /adm-zip@0.5.15: - resolution: {integrity: sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==} - engines: {node: '>=12.0'} + /adm-zip@0.5.12: + resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} + engines: {node: '>=6.0'} dev: false /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.6(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3736,7 +3953,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-draft-04@1.0.0(ajv@8.17.1): + /ajv-draft-04@1.0.0(ajv@8.12.0): resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: ajv: ^8.5.0 @@ -3744,10 +3961,10 @@ packages: ajv: optional: true dependencies: - ajv: 8.17.1 + ajv: 8.12.0 dev: false - /ajv-formats@3.0.1(ajv@8.17.1): + /ajv-formats@3.0.1(ajv@8.12.0): resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: ajv: ^8.0.0 @@ -3755,7 +3972,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.17.1 + ajv: 8.12.0 dev: false /ajv@6.12.6: @@ -3767,13 +3984,13 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + uri-js: 4.4.1 dev: false /ansi-colors@4.1.1: @@ -3844,7 +4061,6 @@ packages: /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. dependencies: delegates: 1.0.0 readable-stream: 3.6.2 @@ -3879,27 +4095,25 @@ packages: engines: {node: '>=0.10.0'} dev: true - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bind: 1.0.5 + is-array-buffer: 3.0.2 dev: true /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true @@ -3917,24 +4131,23 @@ packages: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true /asn1@0.2.6: @@ -3956,14 +4169,14 @@ packages: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: false /astral-regex@2.0.0: @@ -3989,11 +4202,11 @@ packages: /async-mutex@0.3.1: resolution: {integrity: sha512-vRfQwcqBnJTLzVQo72Sf7KIUbcSUP5hNchx6udI1U6LuPQpfePgdjJzlCe76yFZ8pxlLjn9lwcl/Ya0TSOv0Tw==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: false - /async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true /asynckit@0.4.0: @@ -4010,67 +4223,65 @@ packages: hasBin: true dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 dev: true /await-semaphore@0.1.3: resolution: {integrity: sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==} dev: false - /axios@1.7.5(debug@4.3.6): + /axios@1.7.5(debug@4.3.4): resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} dependencies: - follow-redirects: 1.15.6(debug@4.3.6) + follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: false - /babel-core@7.0.0-bridge.0(@babel/core@7.25.2): + /babel-core@7.0.0-bridge.0(@babel/core@7.23.7): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 dev: false - /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.24.7): + resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.25.4 - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + '@babel/compat-data': 7.24.7 + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.7) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.24.7): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) - core-js-compat: 3.38.1 + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.24.7) + core-js-compat: 3.35.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.24.7): + resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + '@babel/core': 7.24.7 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.7) transitivePeerDependencies: - supports-color dev: false @@ -4099,8 +4310,8 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true @@ -4167,11 +4378,11 @@ packages: - supports-color dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: - fill-range: 7.1.1 + fill-range: 7.0.1 /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -4181,15 +4392,15 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001653 - electron-to-chromium: 1.5.13 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + caniuse-lite: 1.0.30001579 + electron-to-chromium: 1.4.645 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) /buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -4218,7 +4429,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.8.2 + node-gyp-build: 4.8.0 dev: false /bytes@3.1.2: @@ -4246,7 +4457,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.2.1 + tar: 6.2.0 unique-filename: 2.0.1 transitivePeerDependencies: - bluebird @@ -4277,15 +4488,12 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + get-intrinsic: 1.2.2 + set-function-length: 1.2.0 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -4302,8 +4510,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001653: - resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} + /caniuse-lite@1.0.30001579: + resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} /chai-as-promised@7.1.1(chai@4.2.0): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} @@ -4332,7 +4540,7 @@ packages: deep-eql: 3.0.1 get-func-name: 2.0.2 pathval: 1.1.1 - type-detect: 4.1.0 + type-detect: 4.0.8 dev: true /chalk@2.4.2: @@ -4372,6 +4580,11 @@ packages: get-func-name: 2.0.2 dev: true + /check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + dev: true + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -4383,21 +4596,17 @@ packages: domutils: 3.1.0 dev: true - /cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} - engines: {node: '>=18.17'} + /cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 domutils: 3.1.0 - encoding-sniffer: 0.2.0 - htmlparser2: 9.1.0 + htmlparser2: 8.0.2 parse5: 7.1.2 parse5-htmlparser2-tree-adapter: 7.0.0 - parse5-parser-stream: 7.1.2 - undici: 6.19.8 - whatwg-mimetype: 4.0.0 dev: true /chokidar@3.5.3: @@ -4405,22 +4614,7 @@ packages: 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 - dev: true - - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 + braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -4657,10 +4851,10 @@ packages: toggle-selection: 1.0.6 dev: false - /core-js-compat@3.38.1: - resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + /core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} dependencies: - browserslist: 4.23.3 + browserslist: 4.22.2 dev: false /core-util-is@1.0.3: @@ -4759,18 +4953,21 @@ packages: resolution: {integrity: sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==} dev: true - /cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.2): + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.28.1): resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 1.0.3 - cytoscape: 3.30.2 + cytoscape: 3.28.1 dev: true - /cytoscape@3.30.2: - resolution: {integrity: sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==} + /cytoscape@3.28.1: + resolution: {integrity: sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==} engines: {node: '>=0.10'} + dependencies: + heap: 0.2.7 + lodash: 4.17.21 dev: true /d3-array@2.12.1: @@ -5044,12 +5241,11 @@ packages: d3-zoom: 3.0.0 dev: true - /d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} + /d@1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: - es5-ext: 0.10.64 - type: 2.7.3 + es5-ext: 0.10.53 + type: 1.2.0 dev: false /dagre-d3-es@7.0.10: @@ -5059,40 +5255,13 @@ packages: lodash-es: 4.17.21 dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - /date-format@4.0.14: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} engines: {node: '>=4.0'} dev: false - /dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + /dayjs@1.11.7: + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} dev: true /debug@2.6.9: @@ -5116,8 +5285,8 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4(supports-color@8.1.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.2: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -5126,11 +5295,10 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 8.1.1 dev: true - /debug@4.3.6(supports-color@8.1.1): - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + /debug@4.3.4(supports-color@8.1.1): + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -5165,7 +5333,7 @@ packages: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: - type-detect: 4.1.0 + type-detect: 4.0.8 dev: true /deep-is@0.1.4: @@ -5179,13 +5347,13 @@ packages: strip-bom: 4.0.0 dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 + get-intrinsic: 1.2.2 gopd: 1.0.1 + has-property-descriptors: 1.0.1 /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -5196,8 +5364,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -5291,11 +5459,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - dev: true - /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -5360,7 +5523,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /dotenv@8.2.0: @@ -5372,7 +5535,7 @@ packages: resolution: {integrity: sha512-YDBmkNhQ6pvUY6gDpwmWe+A6Id819eR3RPAVZIhaZfCL1C+F7/0uzXPSjE2DprKruc3kuVhOCMJl2Z/6whLUzQ==} hasBin: true dependencies: - minimatch: 9.0.5 + minimatch: 9.0.3 yargs: 17.7.2 dev: false @@ -5386,19 +5549,19 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.9.2 + jake: 10.8.7 dev: true - /electron-to-chromium@1.5.13: - resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + /electron-to-chromium@1.4.645: + resolution: {integrity: sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==} - /elkjs@0.9.3: - resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} + /elkjs@0.9.2: + resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} dev: true /emitter-listener@1.1.2: @@ -5420,13 +5583,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /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 @@ -5485,88 +5641,64 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 + is-negative-zero: 2.0.2 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 + is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.13 + is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.13.2 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.2 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 + which-typed-array: 1.1.13 dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.2 + hasown: 2.0.0 dev: true /es-to-primitive@1.2.1: @@ -5582,21 +5714,10 @@ packages: resolution: {integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==} dependencies: es6-iterator: 2.0.3 - es6-symbol: 3.1.4 + es6-symbol: 3.1.3 next-tick: 1.0.0 dev: false - /es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - requiresBuild: true - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - dev: false - /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true @@ -5604,16 +5725,15 @@ packages: /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: - d: 1.0.2 + d: 1.0.1 es5-ext: 0.10.53 - es6-symbol: 3.1.4 + es6-symbol: 3.1.3 dev: false - /es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} + /es6-symbol@3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} dependencies: - d: 1.0.2 + d: 1.0.1 ext: 1.7.0 dev: false @@ -5684,8 +5804,8 @@ packages: '@esbuild/win32-x64': 0.23.0 dev: true - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} /escape-html@1.0.3: @@ -5705,14 +5825,14 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.15.1 + is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.2(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0): - resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -5759,18 +5879,18 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 5.0.0(eslint@8.1.0)(typescript@4.7.4) - array-includes: 3.1.8 + array-includes: 3.1.7 array.prototype.flat: 1.3.2 debug: 2.6.9 doctrine: 2.1.0 eslint: 8.1.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.2(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.0.0)(eslint-import-resolver-node@0.3.9)(eslint@8.1.0) has: 1.0.4 - is-core-module: 2.15.1 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.2.0 + object.values: 1.1.7 resolve: 1.22.8 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -5850,7 +5970,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -5858,7 +5978,7 @@ packages: eslint-utils: 3.0.0(eslint@8.1.0) eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.6.0 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -5875,10 +5995,10 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.4 + optionator: 0.9.3 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.2 + semver: 7.5.4 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -5887,22 +6007,12 @@ packages: - supports-color dev: true - /esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.3 - dev: false - /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -5911,8 +6021,8 @@ packages: engines: {node: '>=4'} hasBin: true - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -5948,13 +6058,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - dev: false - /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -6040,7 +6143,7 @@ packages: /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: - type: 2.7.3 + type: 2.7.2 dev: false /extend-shallow@2.0.1: @@ -6089,7 +6192,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.8 + micromatch: 4.0.5 dev: true /fast-json-stable-stringify@2.1.0: @@ -6104,12 +6207,8 @@ packages: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} dev: true - /fast-uri@3.0.1: - resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} - dev: false - - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} dependencies: reusify: 1.0.4 dev: true @@ -6147,8 +6246,8 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -6218,7 +6317,7 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.3.1 + flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -6228,15 +6327,15 @@ packages: hasBin: true dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - /flow-parser@0.244.0: - resolution: {integrity: sha512-Dkc88m5k8bx1VvHTO9HEJ7tvMcSb3Zvcv1PY4OHK7pHdtdY2aUjhmPy6vpjVJ2uUUOIybRlb91sXE8g4doChtA==} + /flow-parser@0.227.0: + resolution: {integrity: sha512-nOygtGKcX/siZK/lFzpfdHEfOkfGcTW7rNroR1Zsz6T/JxSahPALXVt5qVHq/fgvMJuv096BTKbgxN3PzVBaDA==} engines: {node: '>=0.4.0'} dev: false - /follow-redirects@1.15.6(debug@4.3.6): + /follow-redirects@1.15.6(debug@4.3.4): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: @@ -6245,7 +6344,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) dev: false /for-each@0.3.3: @@ -6374,9 +6473,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: true @@ -6396,7 +6495,6 @@ packages: /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -6420,15 +6518,13 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 + hasown: 2.0.0 /get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} @@ -6444,13 +6540,12 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true /get-value@2.0.6: @@ -6477,14 +6572,13 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 9.0.5 + minimatch: 9.0.3 minipass: 5.0.0 - path-scurry: 1.11.1 + path-scurry: 1.10.1 dev: false /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6496,7 +6590,6 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6508,7 +6601,6 @@ 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 @@ -6528,12 +6620,11 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - gopd: 1.0.1 dev: true /globby@11.1.0: @@ -6543,7 +6634,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.2 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -6551,7 +6642,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.2 /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -6568,21 +6659,21 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - es-define-property: 1.0.0 + get-intrinsic: 1.2.2 - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -6636,8 +6727,8 @@ packages: type-fest: 0.8.1 dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -6649,7 +6740,7 @@ packages: /hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: - '@types/hast': 2.3.10 + '@types/hast': 2.3.9 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -6661,6 +6752,10 @@ packages: hasBin: true dev: true + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: true + /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false @@ -6668,10 +6763,10 @@ packages: /history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 loose-envify: 1.4.0 resolve-pathname: 3.0.0 - tiny-invariant: 1.3.3 + tiny-invariant: 1.3.1 tiny-warning: 1.0.3 value-equal: 1.0.1 dev: true @@ -6679,7 +6774,7 @@ packages: /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 dev: true /hoist-non-react-statics@3.3.2: @@ -6692,8 +6787,8 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 @@ -6722,17 +6817,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.6(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6741,17 +6826,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.6(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - - /https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6776,6 +6851,7 @@ packages: /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: safer-buffer: 2.1.2 dev: true @@ -6789,8 +6865,8 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} dev: true @@ -6798,8 +6874,8 @@ packages: resolution: {integrity: sha512-y0BKZgnoDLRIF2J0Pg/Wa6uhY5i6SqR7Wfagghf0UHRpnWJ5jm1IS0bZjAV5ADOxHAM2zdzYWmw8EbQgEUlvmw==} dev: true - /immutable@4.3.7: - resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + /immutable@4.3.6: + resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} dev: true /import-fresh@3.3.0: @@ -6825,7 +6901,6 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -6837,13 +6912,13 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 dev: true /internmap@1.0.1: @@ -6860,7 +6935,7 @@ packages: deprecated: We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser dependencies: '@formatjs/ecma402-abstract': 1.6.3 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /intl-messageformat@9.5.3: @@ -6868,15 +6943,11 @@ packages: dependencies: fast-memoize: 2.5.2 intl-messageformat-parser: 6.4.3 - tslib: 2.7.0 + tslib: 2.6.2 dev: true - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + /ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true /ipaddr.js@1.9.1: @@ -6888,7 +6959,7 @@ packages: resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} engines: {node: '>= 0.10'} dependencies: - hasown: 2.0.2 + hasown: 2.0.0 dev: true /is-alphabetical@1.0.4: @@ -6902,12 +6973,12 @@ packages: is-decimal: 1.0.4 dev: false - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: true /is-arrayish@0.2.1: @@ -6924,15 +6995,15 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.3.0 + binary-extensions: 2.2.0 dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: true /is-buffer@1.1.6: @@ -6944,31 +7015,23 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.2 + hasown: 2.0.0 /is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.2 - dev: true - - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 + hasown: 2.0.0 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-decimal@1.0.4: @@ -7033,8 +7096,8 @@ packages: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true @@ -7042,7 +7105,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-number@3.0.0: @@ -7086,8 +7149,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: true /is-regexp@1.0.0: @@ -7095,11 +7158,10 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 dev: true /is-stream@2.0.1: @@ -7111,7 +7173,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-symbol@1.0.4: @@ -7121,11 +7183,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.13 dev: true /is-typedarray@1.0.0: @@ -7139,7 +7201,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 dev: true /is-windows@1.0.2: @@ -7197,7 +7259,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.23.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -7230,27 +7292,27 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} hasBin: true dependencies: - async: 3.2.6 + async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 @@ -7274,31 +7336,27 @@ packages: argparse: 2.0.1 dev: true - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true - - /jscodeshift@0.14.0(@babel/preset-env@7.25.4): + /jscodeshift@0.14.0(@babel/preset-env@7.23.8): resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.25.2 - '@babel/parser': 7.25.4 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.2) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) - '@babel/preset-env': 7.25.4(@babel/core@7.25.2) - '@babel/preset-flow': 7.24.7(@babel/core@7.25.2) - '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) - '@babel/register': 7.24.6(@babel/core@7.25.2) - babel-core: 7.0.0-bridge.0(@babel/core@7.25.2) + '@babel/core': 7.23.7 + '@babel/parser': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/preset-env': 7.23.8(@babel/core@7.24.7) + '@babel/preset-flow': 7.23.3(@babel/core@7.23.7) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.7) + '@babel/register': 7.23.7(@babel/core@7.23.7) + babel-core: 7.0.0-bridge.0(@babel/core@7.23.7) chalk: 4.1.2 - flow-parser: 0.244.0 + flow-parser: 0.227.0 graceful-fs: 4.2.11 - micromatch: 4.0.8 + micromatch: 4.0.5 neo-async: 2.6.2 node-dir: 0.1.17 recast: 0.21.5 @@ -7379,7 +7437,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.3 + semver: 7.5.4 dev: false /just-extend@4.2.1: @@ -7416,8 +7474,8 @@ packages: safe-buffer: 5.2.1 dev: false - /katex@0.16.11: - resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} + /katex@0.16.10: + resolution: {integrity: sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==} hasBin: true dependencies: commander: 8.3.0 @@ -7460,6 +7518,11 @@ packages: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} dev: true + /lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -7480,11 +7543,11 @@ packages: colorette: 1.4.0 commander: 8.3.0 cosmiconfig: 7.1.0 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) enquirer: 2.4.1 execa: 5.1.1 listr2: 3.14.0(enquirer@2.4.1) - micromatch: 4.0.8 + micromatch: 4.0.5 normalize-path: 3.0.0 please-upgrade-node: 3.2.0 string-argv: 0.3.1 @@ -7506,7 +7569,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.4.1 + rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -7618,9 +7681,9 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.6(supports-color@8.1.1) - flatted: 3.3.1 - rfdc: 1.4.1 + debug: 4.3.4(supports-color@8.1.1) + flatted: 3.2.9 + rfdc: 1.3.1 streamroller: 3.1.5 transitivePeerDependencies: - supports-color @@ -7635,7 +7698,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true /lowlight@1.20.0: @@ -7645,8 +7708,9 @@ packages: highlight.js: 10.7.3 dev: false - /lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + engines: {node: 14 || >=16.14} dev: false /lru-cache@5.1.1: @@ -7689,7 +7753,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.6.3 + semver: 7.5.4 dev: true /make-error@1.3.6: @@ -7750,7 +7814,7 @@ packages: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.11 + '@types/unist': 2.0.10 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 micromark: 3.2.0 @@ -7811,20 +7875,20 @@ packages: '@braintree/sanitize-url': 6.0.4 '@types/d3-scale': 4.0.8 '@types/d3-scale-chromatic': 3.0.3 - cytoscape: 3.30.2 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2) + cytoscape: 3.28.1 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.28.1) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.10 - dayjs: 1.11.13 + dayjs: 1.11.7 dompurify: 3.0.6 - elkjs: 0.9.3 - katex: 0.16.11 + elkjs: 0.9.2 + katex: 0.16.10 khroma: 2.1.0 lodash-es: 4.17.21 mdast-util-from-markdown: 1.3.1 non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.3.4 + stylis: 4.3.1 ts-dedent: 2.2.0 uuid: 9.0.1 web-worker: 1.3.0 @@ -7996,7 +8060,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -8037,11 +8101,11 @@ packages: - supports-color dev: true - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.3 + braces: 3.0.2 picomatch: 2.3.1 /miller-rabin@4.0.1: @@ -8082,7 +8146,7 @@ packages: prop-types: ^15.0.0 react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 prop-types: 15.8.1 react: 17.0.2 tiny-warning: 1.0.3 @@ -8107,8 +8171,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -8203,7 +8267,7 @@ packages: peerDependencies: mocha: '>=3.1.2' dependencies: - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 mocha: 10.0.0 transitivePeerDependencies: @@ -8244,6 +8308,18 @@ packages: engines: {node: '>=12.0.0'} dev: true + /mocked-env@1.3.5: + resolution: {integrity: sha512-GyYY6ynVOdEoRlaGpaq8UYwdWkvrsU2xRme9B+WPSuJcNjh17+3QIxSYU6zwee0SbehhV6f06VZ4ahjG+9zdrA==} + engines: {node: '>=6'} + dependencies: + check-more-types: 2.24.0 + debug: 4.3.2 + lazy-ass: 1.6.0 + ramda: 0.27.1 + transitivePeerDependencies: + - supports-color + dev: true + /move-file@2.1.0: resolution: {integrity: sha512-i9qLW6gqboJ5Ht8bauZi7KlTnQ3QFpBCvMvFfEcHADKgHGeJ9BZMO7SFCTwHPV9Qa0du9DYY1Yx3oqlGt30nXA==} engines: {node: '>=10.17'} @@ -8265,8 +8341,8 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /nan@2.20.0: - resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} dev: true /nanoid@3.3.3: @@ -8316,16 +8392,12 @@ packages: resolution: {integrity: sha512-mc/caHeUcdjnC/boPWJefDr4KUIWQNv+tlnFnJd38QMou86QtxQzBJfxgGRzvx8jazYRqrVlaHarfO72uNxPOg==} dev: false - /next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: false - /nise@4.1.0: resolution: {integrity: sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==} dependencies: '@sinonjs/commons': 1.8.6 '@sinonjs/fake-timers': 6.0.1 - '@sinonjs/text-encoding': 0.7.3 + '@sinonjs/text-encoding': 0.7.2 just-extend: 4.2.1 path-to-regexp: 1.8.0 dev: true @@ -8334,7 +8406,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /node-dir@0.1.17: @@ -8344,6 +8416,18 @@ packages: minimatch: 3.1.2 dev: false + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -8356,8 +8440,8 @@ packages: whatwg-url: 5.0.0 dev: false - /node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} hasBin: true dev: false @@ -8374,8 +8458,8 @@ packages: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.5.2 - tar: 6.2.1 + semver: 7.5.4 + tar: 6.2.0 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -8389,8 +8473,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} /node-rsa@1.1.1: resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} @@ -8429,7 +8513,6 @@ packages: /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 @@ -8464,7 +8547,7 @@ packages: istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.1.6 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -8492,9 +8575,8 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -8512,7 +8594,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -8525,26 +8607,26 @@ packages: isobject: 3.0.1 dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true - /office-addin-manifest@1.13.1: - resolution: {integrity: sha512-uIYpEE3tLr3grchqx9GOIHl3P+/4EqQ/Mrx4u5y7EsFzB5YqSIjwsvw6/x6OLrEhD5+0qtEh4fcAJVtfMPSpmw==} + /office-addin-manifest@1.13.2: + resolution: {integrity: sha512-+IBmcMbgoAsjE7FOO15HeVQD91GbWd3mcdmq43xulFaI5uC5bYhw70TI7XEUUYRrPU1iLFGbdYNHvsjFfNdqzQ==} hasBin: true dependencies: - '@microsoft/teams-manifest': 0.1.5 - adm-zip: 0.5.15 + '@microsoft/teams-manifest': 0.1.4 + adm-zip: 0.5.12 chalk: 2.4.2 commander: 6.2.1 fs-extra: 7.0.1 - node-fetch: 2.7.0 - office-addin-usage-data: 1.6.12 + node-fetch: 2.6.7 + office-addin-usage-data: 1.6.11 path: 0.12.7 uuid: 8.3.2 xml2js: 0.5.0 @@ -8552,8 +8634,8 @@ packages: - encoding dev: false - /office-addin-usage-data@1.6.12: - resolution: {integrity: sha512-K9Ii5Jsc6Vuf6LrBvo5BycMzTmDwTkk3g5W2zS4PLffvvQYeI/RO3oYpGpOT6z7Pa8oh5gQ2QMDUgmjQGQZ7PA==} + /office-addin-usage-data@1.6.11: + resolution: {integrity: sha512-8n86S1PkAktGFtrM2kYVX8zbgo/i8VyH6RzO3ApX6GeFOeTWJPtYVWmGs7WklkoTlZGTwDjfiR+noB0vWA9Vpg==} hasBin: true dependencies: applicationinsights: 1.8.10 @@ -8590,16 +8672,16 @@ packages: is-wsl: 2.2.0 dev: false - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.5 dev: true /p-limit@2.3.0: @@ -8690,7 +8772,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -8703,12 +8785,6 @@ packages: parse5: 7.1.2 dev: true - /parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - dependencies: - parse5: 7.1.2 - dev: true - /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -8747,11 +8823,11 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.4.3 + lru-cache: 10.1.0 minipass: 5.0.0 dev: false @@ -8781,8 +8857,12 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -8823,13 +8903,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true - - /postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + /postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -8948,13 +9023,12 @@ packages: /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - dev: true /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.6 + side-channel: 1.0.4 dev: false /query-string@6.14.1: @@ -8971,6 +9045,10 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /ramda@0.27.1: + resolution: {integrity: sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==} + dev: true + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -9039,7 +9117,7 @@ packages: intl-messageformat: 9.5.3 intl-messageformat-parser: 6.4.3 react: 17.0.2 - tslib: 2.7.0 + tslib: 2.6.2 typescript: 4.7.4 dev: true @@ -9056,13 +9134,13 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 react: 17.0.2 react-router: 5.2.0(react@17.0.2) - tiny-invariant: 1.3.3 + tiny-invariant: 1.3.1 tiny-warning: 1.0.3 dev: true @@ -9071,7 +9149,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -9080,7 +9158,7 @@ packages: prop-types: 15.8.1 react: 17.0.2 react-is: 16.13.1 - tiny-invariant: 1.3.3 + tiny-invariant: 1.3.1 tiny-warning: 1.0.3 dev: true @@ -9089,7 +9167,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -9155,7 +9233,7 @@ packages: ast-types: 0.14.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /recast@0.21.5: @@ -9165,7 +9243,7 @@ packages: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.7.0 + tslib: 2.6.2 dev: false /reflect-metadata@0.1.13: @@ -9197,7 +9275,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.23.8 dev: false /regex-not@1.0.2: @@ -9208,14 +9286,13 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + set-function-name: 2.0.1 dev: true /regexpp@3.2.0: @@ -9295,7 +9372,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.15.1 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -9322,12 +9399,11 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -9335,38 +9411,38 @@ 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 + dev: true /robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: true - /rollup@4.21.1: - resolution: {integrity: sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==} + /rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.1 - '@rollup/rollup-android-arm64': 4.21.1 - '@rollup/rollup-darwin-arm64': 4.21.1 - '@rollup/rollup-darwin-x64': 4.21.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.1 - '@rollup/rollup-linux-arm-musleabihf': 4.21.1 - '@rollup/rollup-linux-arm64-gnu': 4.21.1 - '@rollup/rollup-linux-arm64-musl': 4.21.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.1 - '@rollup/rollup-linux-riscv64-gnu': 4.21.1 - '@rollup/rollup-linux-s390x-gnu': 4.21.1 - '@rollup/rollup-linux-x64-gnu': 4.21.1 - '@rollup/rollup-linux-x64-musl': 4.21.1 - '@rollup/rollup-win32-arm64-msvc': 4.21.1 - '@rollup/rollup-win32-ia32-msvc': 4.21.1 - '@rollup/rollup-win32-x64-msvc': 4.21.1 + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 dev: true @@ -9383,7 +9459,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.7.0 + tslib: 2.6.2 dev: true /sade@1.8.1: @@ -9393,12 +9469,12 @@ packages: mri: 1.2.0 dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -9410,12 +9486,12 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + /safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: true @@ -9433,13 +9509,13 @@ packages: engines: {node: '>=14.0.0'} hasBin: true dependencies: - chokidar: 3.6.0 - immutable: 4.3.7 + chokidar: 3.5.3 + immutable: 4.3.6 source-map-js: 1.2.0 dev: true - /sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} /scheduler@0.20.2: resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} @@ -9460,18 +9536,13 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.5.2: - resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 - /semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -9515,25 +9586,23 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 + define-data-property: 1.1.1 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.1 - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 + define-data-property: 1.1.1 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.1 dev: true /set-value@2.0.1: @@ -9573,14 +9642,12 @@ packages: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} dev: false - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -9630,7 +9697,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.6.2 dev: true /snapdragon-node@2.1.1: @@ -9670,17 +9737,17 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.6(supports-color@8.1.1) - socks: 2.8.3 + debug: 4.3.4(supports-color@8.1.1) + socks: 2.7.1 transitivePeerDependencies: - supports-color dev: true - /socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + /socks@2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} dependencies: - ip-address: 9.0.5 + ip: 2.0.0 smart-buffer: 4.2.0 dev: true @@ -9759,10 +9826,6 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true - /ssri@9.0.1: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -9797,7 +9860,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.6(supports-color@8.1.1) + debug: 4.3.4(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -9826,31 +9889,29 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: true /string_decoder@1.1.1: @@ -9900,8 +9961,8 @@ packages: engines: {node: '>=8'} dev: true - /stylis@4.3.4: - resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + /stylis@4.3.1: + resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} dev: true /supports-color@5.5.0: @@ -9954,7 +10015,7 @@ packages: dependencies: commander: 9.5.0 glob: 8.1.0 - sax: 1.4.1 + sax: 1.3.0 svg-pathdata: 6.0.3 dev: true @@ -9969,7 +10030,7 @@ packages: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.1 + picocolors: 1.0.0 dev: true /svgpath@2.6.0: @@ -9989,11 +10050,11 @@ packages: '@types/ttf2eot': 2.0.2 '@types/ttf2woff': 2.0.4 '@types/ttf2woff2': 2.0.2 - cheerio: 1.0.0 + cheerio: 1.0.0-rc.12 colors-cli: 1.0.33 copy-template-dir: 1.4.0 del: 6.1.1 - ejs: 3.1.10 + ejs: 3.1.9 fs-extra: 11.1.1 image2uri: 1.0.5 move-file: 2.1.0 @@ -10003,7 +10064,7 @@ packages: ttf2eot: 3.1.0 ttf2woff: 3.0.0 ttf2woff2: 5.0.0 - yaml: 2.5.0 + yaml: 2.3.4 yargs: 17.7.2 transitivePeerDependencies: - bluebird @@ -10019,8 +10080,8 @@ packages: engines: {node: '>=6'} dev: true - /tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -10034,7 +10095,7 @@ packages: /tas-client@0.1.73: resolution: {integrity: sha512-UDdUF9kV2hYdlv+7AgqP2kXarVSUhjK7tg1BUflIRGEgND0/QoNpN64rcEuhEcM8AIbW65yrCopJWqRhLZ3m8w==} dependencies: - axios: 1.7.5(debug@4.3.6) + axios: 1.7.5(debug@4.3.4) transitivePeerDependencies: - debug dev: false @@ -10070,19 +10131,17 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + /tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: true /tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: true - /tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} - dependencies: - rimraf: 3.0.2 + /tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} dev: false /to-fast-properties@2.0.0: @@ -10147,7 +10206,7 @@ packages: chalk: 2.4.2 enhanced-resolve: 4.5.0 loader-utils: 1.4.2 - micromatch: 4.0.8 + micromatch: 4.0.5 semver: 6.3.1 typescript: 4.7.4 dev: true @@ -10172,7 +10231,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 14.14.21 - acorn: 8.12.1 + acorn: 8.11.3 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 @@ -10204,8 +10263,8 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} /tsutils@3.21.0(typescript@4.7.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -10232,7 +10291,7 @@ packages: dependencies: bindings: 1.5.0 bufferstreams: 3.0.0 - nan: 2.20.0 + nan: 2.18.0 node-gyp: 9.4.1 transitivePeerDependencies: - bluebird @@ -10259,11 +10318,6 @@ packages: engines: {node: '>=4'} dev: true - /type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - dev: true - /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -10287,52 +10341,50 @@ packages: mime-types: 2.1.35 dev: false - /type@2.7.3: - resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + /type@1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} dev: false - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: false + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: true - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + is-typed-array: 1.1.12 dev: true /typedarray-to-buffer@3.1.5: @@ -10358,17 +10410,12 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true - /undici@6.19.8: - resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} - engines: {node: '>=18.17'} - dev: true - /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -10419,7 +10466,7 @@ packages: /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: - '@types/unist': 2.0.11 + '@types/unist': 2.0.10 dev: true /universalify@0.1.2: @@ -10449,21 +10496,20 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db@1.1.0(browserslist@4.23.3): - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.3 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - dev: true /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} @@ -10480,7 +10526,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.8.2 + node-gyp-build: 4.8.0 dev: false /util-deprecate@1.0.2: @@ -10519,7 +10565,7 @@ packages: hasBin: true dependencies: dequal: 2.0.3 - diff: 5.2.0 + diff: 5.0.0 kleur: 4.1.5 sade: 1.8.1 dev: true @@ -10591,8 +10637,8 @@ packages: dependencies: '@types/node': 14.14.21 esbuild: 0.21.5 - postcss: 8.4.41 - rollup: 4.21.1 + postcss: 8.4.39 + rollup: 4.18.0 sass: 1.77.6 optionalDependencies: fsevents: 2.3.3 @@ -10620,13 +10666,13 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false - /websocket@1.0.35: - resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==} + /websocket@1.0.34: + resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} engines: {node: '>=4.0.0'} dependencies: bufferutil: 4.0.8 debug: 2.6.9 - es5-ext: 0.10.64 + es5-ext: 0.10.53 typedarray-to-buffer: 3.1.5 utf-8-validate: 5.0.10 yaeti: 0.0.6 @@ -10634,18 +10680,6 @@ packages: - supports-color dev: false - /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==} dependencies: @@ -10667,15 +10701,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /which@2.0.2: @@ -10692,11 +10726,6 @@ packages: string-width: 4.2.3 dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true - /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true @@ -10742,7 +10771,7 @@ packages: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} dependencies: - sax: 1.4.1 + sax: 1.3.0 xmlbuilder: 11.0.1 dev: false @@ -10779,10 +10808,9 @@ packages: engines: {node: '>= 6'} dev: true - /yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - hasBin: true dev: true /yargs-parser@18.1.3: @@ -10798,6 +10826,11 @@ packages: engines: {node: '>=10'} dev: true + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -10834,12 +10867,12 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.4 + yargs-parser: 20.2.9 dev: true /yargs@17.7.2: @@ -10847,7 +10880,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/packages/vscode-extension/src/handlers/lifecycleHandlers.ts b/packages/vscode-extension/src/handlers/lifecycleHandlers.ts index 3339715af1..c8b7509118 100644 --- a/packages/vscode-extension/src/handlers/lifecycleHandlers.ts +++ b/packages/vscode-extension/src/handlers/lifecycleHandlers.ts @@ -8,6 +8,7 @@ import { ok, Result, Stage, + UserError, } from "@microsoft/teamsfx-api"; import { ApiPluginStartOptions, @@ -15,6 +16,8 @@ import { assembleError, AuthSvcScopes, CapabilityOptions, + featureFlagManager, + FeatureFlags, isUserCancelError, isValidOfficeAddInProject, QuestionNames, @@ -24,7 +27,11 @@ import * as vscode from "vscode"; import M365TokenInstance from "../commonlib/m365Login"; import { VS_CODE_UI } from "../qm/vsc_ui"; import { ExtTelemetry } from "../telemetry/extTelemetry"; -import { TelemetryEvent, TelemetryTriggerFrom } from "../telemetry/extTelemetryEvents"; +import { + TelemetryEvent, + TelemetryProperty, + TelemetryTriggerFrom, +} from "../telemetry/extTelemetryEvents"; import envTreeProviderInstance from "../treeview/environmentTreeViewProvider"; import { localize } from "../utils/localizeUtils"; import { getSystemInputs } from "../utils/systemEnvUtils"; @@ -32,6 +39,8 @@ import { getTriggerFromProperty } from "../utils/telemetryUtils"; import { openFolder, openOfficeDevFolder } from "../utils/workspaceUtils"; import { invokeTeamsAgent } from "./copilotChatHandlers"; import { runCommand } from "./sharedOpts"; +import { ExtensionSource } from "../error/error"; +import VsCodeLogInstance from "../commonlib/log"; export async function createNewProjectHandler(...args: any[]): Promise> { ExtTelemetry.sendTelemetryEvent(TelemetryEvent.CreateProjectStart, getTriggerFromProperty(args)); @@ -51,6 +60,16 @@ export async function createNewProjectHandler(...args: any[]): Promise { + if (!vscode.extensions.getExtension("ms-graph.kiota")) { + void vscode.window + .showInformationMessage( + localize("teamstoolkit.error.KiotaNotInstalled"), + "Install Kiota", + "Cancel" + ) + .then((selection) => { + if (selection === "Install Kiota") { + // Open market place to install kiota + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.InstallKiota, { + ...getTriggerFromProperty(args), + }); + void vscode.commands.executeCommand("extension.open", "ms-graph.kiota"); + } else { + return err( + new UserError( + ExtensionSource, + "KiotaNotInstalled", + localize("teamstoolkit.error.KiotaNotInstalled") + ) + ); + } + }); + + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.CreateProject, { + [TelemetryProperty.KiotaInstalled]: "No", + ...getTriggerFromProperty(args), + }); + VsCodeLogInstance.error(localize("teamstoolkit.error.KiotaNotInstalled")); + return ok({ projectPath: "" }); + } else { + void vscode.commands.executeCommand("kiota.openApiExplorer.searchOrOpenApiDescription", [ + { + kind: "Plugin", + type: "ApiPlugin", + source: "ttk", + }, + ]); + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.CreateProject, { + [TelemetryProperty.KiotaInstalled]: "Yes", + ...getTriggerFromProperty(args), + }); + return ok(result); + } +} diff --git a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts index bd7a85b48a..026a89fc3c 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts @@ -292,6 +292,8 @@ export enum TelemetryEvent { CreatePluginWithManifestStart = "create-plugin-with-manifest-start", CreatePluginWithManifest = "create-plugin-with-manifest", + + InstallKiota = "install-kiota", } export enum TelemetryProperty { @@ -411,6 +413,7 @@ export enum TelemetryProperty { CopilotChatResponseTokenPerSecond = "copilot-chat-response-token-per-second", CopilotChatRequestToken = "copilot-chat-request-token", CopilotChatResponseToken = "copilot-chat-response-token", + KiotaInstalled = "kiota-installed", } export enum TelemetryMeasurements { diff --git a/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts b/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts index e6684a9c6d..79f9739f88 100644 --- a/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts +++ b/packages/vscode-extension/test/handlers/lifecycleHandlers.test.ts @@ -1,6 +1,7 @@ import { err, ok, Platform, SystemError, UserError } from "@microsoft/teamsfx-api"; import { AppDefinition, + FeatureFlagName, teamsDevPortalClient, UnhandledError, UserCancelError, @@ -32,6 +33,8 @@ import * as workspaceUtils from "../../src/utils/workspaceUtils"; import M365TokenInstance from "../../src/commonlib/m365Login"; import { MockCore } from "../mocks/mockCore"; import * as globalState from "@microsoft/teamsfx-core/build/common/globalState"; +import mockedEnv, { RestoreFn } from "mocked-env"; +import VsCodeLogInstance from "../../src/commonlib/log"; describe("Lifecycle handlers", () => { const sandbox = sinon.createSandbox(); @@ -55,8 +58,12 @@ describe("Lifecycle handlers", () => { describe("createNewProjectHandler", function () { const sandbox = sinon.createSandbox(); + let mockedEnvRestore: RestoreFn; afterEach(() => { + if (mockedEnvRestore) { + mockedEnvRestore(); + } sandbox.restore(); }); @@ -116,6 +123,84 @@ describe("Lifecycle handlers", () => { assert.isTrue(res.isOk()); assert.isTrue(openFolder.calledOnce); }); + + it("kiota integration: kiota installed", async () => { + mockedEnvRestore = mockedEnv({ + [FeatureFlagName.KiotaIntegration]: "true", + }); + sandbox.stub(shared, "runCommand").resolves( + ok({ + projectPath: "", + createProjectForKiota: true, + }) + ); + sandbox.stub(vscode.extensions, "getExtension").returns({ + id: "mockedId", + extensionUri: vscode.Uri.parse("file://mockedUri"), + isActive: true, + extensionPath: "mockedPath", + extensionKind: vscode.ExtensionKind.UI, + exports: {}, + packageJSON: {}, + activate: () => Promise.resolve(), + }); + const executeCommand = sandbox.stub(vscode.commands, "executeCommand").resolves(); + const logError = sandbox.stub(VsCodeLogInstance, "error").resolves(); + const res = await createNewProjectHandler(); + assert.isTrue(res.isOk()); + assert.isTrue(executeCommand.calledOnce); + assert.isTrue(logError.notCalled); + }); + + it("kiota integration: kiota not installed and click install", async () => { + mockedEnvRestore = mockedEnv({ + [FeatureFlagName.KiotaIntegration]: "true", + }); + sandbox.stub(shared, "runCommand").resolves( + ok({ + projectPath: "", + createProjectForKiota: true, + }) + ); + sandbox.stub(vscode.extensions, "getExtension").returns(undefined); + const showMessageStub = sandbox + .stub(vscode.window, "showInformationMessage") + .callsFake((title: string, ...items: any[]) => { + return Promise.resolve(items[0]); + }); + const executeCommand = sandbox.stub(vscode.commands, "executeCommand").resolves(); + const logError = sandbox.stub(VsCodeLogInstance, "error").resolves(); + const res = await createNewProjectHandler(); + assert.isTrue(res.isOk()); + assert.isTrue(showMessageStub.calledOnce); + assert.isTrue(executeCommand.calledOnce); + assert.isTrue(logError.calledOnce); + }); + + it("kiota integration: kiota not installed and click cancel", async () => { + mockedEnvRestore = mockedEnv({ + [FeatureFlagName.KiotaIntegration]: "true", + }); + sandbox.stub(shared, "runCommand").resolves( + ok({ + projectPath: "", + createProjectForKiota: true, + }) + ); + sandbox.stub(vscode.extensions, "getExtension").returns(undefined); + const showMessageStub = sandbox + .stub(vscode.window, "showInformationMessage") + .callsFake((title: string, ...items: any[]) => { + return Promise.resolve(items[1]); + }); + const executeCommand = sandbox.stub(vscode.commands, "executeCommand").resolves(); + const logError = sandbox.stub(VsCodeLogInstance, "error").resolves(); + const res = await createNewProjectHandler(); + assert.isTrue(res.isOk()); + assert.isTrue(showMessageStub.calledOnce); + assert.isTrue(executeCommand.notCalled); + assert.isTrue(logError.calledOnce); + }); }); describe("provisionHandler", function () { From 28a33cd63f4f72fef62938975971a61d7c1e444a Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:39:20 +0800 Subject: [PATCH 37/52] feat: zip app pacakge outputFolder (#12309) * refactor: new schema copy * refactor: a first version to not allow customize file name * refactor: driver * refactor: minor * refactor: cli * fix: yaml old version * test: ut * test: ut * test: ut --- packages/api/src/types.ts | 2 +- packages/cli/src/commands/common.ts | 8 +- .../src/commands/models/teamsapp/package.ts | 4 +- .../src/commands/models/teamsapp/publish.ts | 4 +- .../src/commands/models/teamsapp/update.ts | 4 +- .../src/commands/models/teamsapp/validate.ts | 4 +- .../yaml-schema/v1.7/yaml.schema.json | 1842 +++++++++++++++++ .../src/component/configManager/validator.ts | 2 +- .../driver/teamsApp/createAppPackage.ts | 77 +- .../interfaces/CreateAppPackageArgs.ts | 9 +- .../component/driver/teamsApp/teamsappMgr.ts | 12 +- packages/fx-core/src/core/FxCore.ts | 5 +- packages/fx-core/src/question/constants.ts | 1 + .../driver/teamsApp/createAppPackage.test.ts | 225 +- packages/server/src/serverConnection.ts | 5 +- 15 files changed, 2139 insertions(+), 65 deletions(-) create mode 100644 packages/fx-core/resource/yaml-schema/v1.7/yaml.schema.json diff --git a/packages/api/src/types.ts b/packages/api/src/types.ts index 0b7dc5ccca..e4e5fa3a72 100644 --- a/packages/api/src/types.ts +++ b/packages/api/src/types.ts @@ -160,7 +160,7 @@ export interface TeamsAppInputs extends InputsWithProjectPath { "manifest-file"?: string; "package-file"?: string; "output-package-file"?: string; - "output-manifest-file"?: string; + "output-folder"?: string; env?: string; "env-file"?: string; } diff --git a/packages/cli/src/commands/common.ts b/packages/cli/src/commands/common.ts index 587ceaa555..6618b09e60 100644 --- a/packages/cli/src/commands/common.ts +++ b/packages/cli/src/commands/common.ts @@ -37,11 +37,11 @@ export const TeamsAppOuputPackageOption: CLICommandOption = { description: "Specifies the output zipped Microsoft Teams app package file path.", default: "./appPackage/build/appPackage.${env}.zip", }; -export const TeamsAppOutputManifestFileOption: CLICommandOption = { - name: "output-manifest-file", +export const TeamsAppOutputFolderOption: CLICommandOption = { + name: "output-folder", type: "string", - description: "Specifies the output Microsoft Teams app manifest file path.", - default: "./appPackage/build/manifest.${env}.json", + description: "Specifies the output folder containing the manifest(s).", + default: "./appPackage/build", }; export const EnvOption: CLICommandOption = { name: "env", diff --git a/packages/cli/src/commands/models/teamsapp/package.ts b/packages/cli/src/commands/models/teamsapp/package.ts index 8470d078ba..ea96ed1aea 100644 --- a/packages/cli/src/commands/models/teamsapp/package.ts +++ b/packages/cli/src/commands/models/teamsapp/package.ts @@ -10,7 +10,7 @@ import { ProjectFolderOption, TeamsAppManifestFileOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, } from "../../common"; export const teamsappPackageCommand: CLICommand = { @@ -19,7 +19,7 @@ export const teamsappPackageCommand: CLICommand = { options: [ TeamsAppManifestFileOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, EnvOption, EnvFileOption, ProjectFolderOption, diff --git a/packages/cli/src/commands/models/teamsapp/publish.ts b/packages/cli/src/commands/models/teamsapp/publish.ts index f0a9f843ad..490d9c7ff1 100644 --- a/packages/cli/src/commands/models/teamsapp/publish.ts +++ b/packages/cli/src/commands/models/teamsapp/publish.ts @@ -10,7 +10,7 @@ import { ProjectFolderOption, TeamsAppManifestFileOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, TeamsAppPackageOption, } from "../../common"; import { validateArgumentConflict } from "./update"; @@ -22,7 +22,7 @@ export const teamsappPublishCommand: CLICommand = { TeamsAppManifestFileOption, TeamsAppPackageOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, EnvOption, EnvFileOption, ProjectFolderOption, diff --git a/packages/cli/src/commands/models/teamsapp/update.ts b/packages/cli/src/commands/models/teamsapp/update.ts index c6a1ec38f1..73ccaa756d 100644 --- a/packages/cli/src/commands/models/teamsapp/update.ts +++ b/packages/cli/src/commands/models/teamsapp/update.ts @@ -11,7 +11,7 @@ import { ProjectFolderOption, TeamsAppManifestFileOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, TeamsAppPackageOption, } from "../../common"; @@ -22,7 +22,7 @@ export const teamsappUpdateCommand: CLICommand = { TeamsAppManifestFileOption, TeamsAppPackageOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, EnvOption, EnvFileOption, ProjectFolderOption, diff --git a/packages/cli/src/commands/models/teamsapp/validate.ts b/packages/cli/src/commands/models/teamsapp/validate.ts index 8a4b9cdc96..4ebf659991 100644 --- a/packages/cli/src/commands/models/teamsapp/validate.ts +++ b/packages/cli/src/commands/models/teamsapp/validate.ts @@ -11,7 +11,7 @@ import { ProjectFolderOption, TeamsAppManifestFileOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, TeamsAppPackageOption, ValidateMethodOption, } from "../../common"; @@ -42,7 +42,7 @@ function getOptions(): CLICommandOption[] { TeamsAppManifestFileOption, TeamsAppPackageOption, TeamsAppOuputPackageOption, - TeamsAppOutputManifestFileOption, + TeamsAppOutputFolderOption, EnvOption, EnvFileOption, ProjectFolderOption, diff --git a/packages/fx-core/resource/yaml-schema/v1.7/yaml.schema.json b/packages/fx-core/resource/yaml-schema/v1.7/yaml.schema.json new file mode 100644 index 0000000000..99d47cf2b0 --- /dev/null +++ b/packages/fx-core/resource/yaml-schema/v1.7/yaml.schema.json @@ -0,0 +1,1842 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "projectId": { + "type": "string", + "description": "The projectId used for telemetry." + }, + "environmentFolderPath": { + "type": "string", + "description": "The folder path of .env files used for variables and different envrironments." + }, + "version": { + "type": "string", + "description": "The version of the yaml file schema", + "const": "v1.7" + }, + "additionalMetadata": { + "type": "object", + "description": "Metadata property, used by Teams Toolkit only.", + "additionalProperties": true, + "properties": { + "sampleTag": { + "type": ["number","string","boolean","object","array", "null", "integer"], + "description": "A tag for the sample app used to track telemetry events sent by Teams Toolkit associated with that sample. Pattern: :" + } + } + }, + "provision": { + "$ref": "#/definitions/lifeCycleArray", + "description": "Called by `teamsfx provision`" + }, + "deploy": { + "$ref": "#/definitions/lifeCycleArray", + "description": "Called by `teamsfx deploy`" + }, + "publish": { + "$ref": "#/definitions/lifeCycleArray", + "description": "Called by `teamsfx publish`" + } + }, + "required": ["version"], + "definitions": { + "lifeCycleArray": { + "type": "array", + "items": { + "anyOf": [ + { "$ref": "#/definitions/aadAppCreate" }, + { "$ref": "#/definitions/aadAppUpdate" }, + { "$ref": "#/definitions/armDeploy" }, + { "$ref": "#/definitions/azureStorageEnableStaticWebsite" }, + { "$ref": "#/definitions/cliRunNpmCommand" }, + { "$ref": "#/definitions/cliRunDotnetCommand" }, + { "$ref": "#/definitions/cliRunNpxCommand" }, + { "$ref": "#/definitions/azureStorageDeploy" }, + { "$ref": "#/definitions/azureAppServiceZipDeploy" }, + { "$ref": "#/definitions/azureFunctionsZipDeploy" }, + { "$ref": "#/definitions/teamsAppCreate" }, + { "$ref": "#/definitions/teamsAppValidateManifest" }, + { "$ref": "#/definitions/teamsAppValidateAppPackage" }, + { "$ref": "#/definitions/teamsAppValidateWithTestCases" }, + { "$ref": "#/definitions/teamsAppZipAppPackage" }, + { "$ref": "#/definitions/teamsAppUpdate" }, + { "$ref": "#/definitions/teamsAppPublishAppPackage" }, + { "$ref": "#/definitions/botAadAppCreate" }, + { "$ref": "#/definitions/botframeworkCreate" }, + { "$ref": "#/definitions/fileCreateOrUpdateEnvironmentFile" }, + { "$ref": "#/definitions/fileCreateOrUpdateJsonFile" }, + { "$ref": "#/definitions/devToolInstall" }, + { "$ref": "#/definitions/teamsAppExtendToM365" }, + { "$ref": "#/definitions/spfxDeploy" }, + { "$ref": "#/definitions/teamsAppCopyAppPackageToSPFx" }, + { "$ref": "#/definitions/script" }, + { "$ref": "#/definitions/apiKeyRegister"}, + { "$ref": "#/definitions/azureStaticWebAppGetDeploymentKey"}, + { "$ref": "#/definitions/apiKeyUpdate"}, + { "$ref": "#/definitions/oauthRegister"}, + { "$ref": "#/definitions/oauthUpdate"} + ] + } + }, + "aadAppCreateBase": { + "type": "object", + "description": "Create Microsoft Entra application and client secret (optional). Refer to https://aka.ms/teamsfx-actions/aadapp-create for more details.", + "required": ["uses", "writeToEnvironmentFile"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Create Microsoft Entra application when the environment variable that stores clientId is empty. Also create client secret for the application when generateClientSecret parameter is true and the environment variable that stores clientSecret is empty. When creating new Microsoft Entra application, this action generates clientId, objectId, tenantId, authority and authorityHost. When creating new client secret, this action generates clientSecret. Refer to https://aka.ms/teamsfx-actions/aadapp-create for more details.", + "const": "aadApp/create" + } + } + }, + "aadAppCreateWithSecret": { + "type": "object", + "additionalProperties": false, + "allOf": [ { "$ref": "#/definitions/aadAppCreateBase" } ], + "required": ["with", "writeToEnvironmentFile"], + "properties": { + "name": {}, + "uses": {}, + "env": {}, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name", "generateClientSecret", "signInAudience"], + "properties": { + "name": { + "type": "string", + "description": "The name of Microsoft Entra application. Note: when you run aadApp/update, the Microsoft Entra application name will be updated based on the definition in manifest. If you don't want to change the name, ensure the name in Microsoft Entra application manifest is the same with the name defined here." + }, + "generateClientSecret": { + "type": "boolean", + "description": "Whether to generate client secret for the Microsoft Entra application. When the value is true, you need to specify the name of environment variable that stores the value of client secret in writeToEnvironmentVariable. For example: `clientSecret: SECRET_MY_AAD_APP_CLIENT_SECRET`.", + "const": true + }, + "signInAudience": { + "type": "string", + "description": "Specifies what Microsoft accounts are supported for the current application.", + "enum": ["AzureADMyOrg", "AzureADMultipleOrgs", "AzureADandPersonalMicrosoftAccount", "PersonalMicrosoftAccount"] + }, + "serviceManagementReference": { + "type": "string", + "description": "References application or service contact information from a Service or Asset Management database." + }, + "clientSecretExpireDays": { + "type": "integer", + "description": "The number of days the client secret is valid.", + "minimum": 1 + }, + "clientSecretDescription": { + "type": "string", + "description": "The description of the client secret." + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["clientId", "objectId", "clientSecret"], + "properties": { + "clientId": { + "description": "Required. The client (application) id of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "objectId": { + "description": "Required. The object id of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "clientSecret": { + "description": "Required when generateClientSecret is true. The generated client secret of the Microsoft Entra application.", + "$ref": "#/definitions/secretEnvVarName" + }, + "tenantId": { + "description": "The tenant id of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "authority": { + "description": "The authority of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "authorityHost": { + "description": "The authority host name of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "aadAppCreateWithoutSecret": { + "type": "object", + "allOf": [ { "$ref": "#/definitions/aadAppCreateBase" } ], + "required": ["with", "writeToEnvironmentFile"], + "additionalProperties": false, + "properties": { + "name": {}, + "uses": {}, + "env": {}, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name", "generateClientSecret", "signInAudience"], + "properties": { + "name": { + "type": "string", + "description": "The name of Microsoft Entra application. Note: when you run aadApp/update, the Microsoft Entra application name will be updated based on the definition in manifest. If you don't want to change the name, ensure the name in Microsoft Entra application manifest is the same with the name defined here." + }, + "generateClientSecret": { + "type": "boolean", + "description": "Whether to generate client secret for the Microsoft Entra application. When the value is true, you need to specify the name of environment variable that stores the value of client secret in writeToEnvironmentVariable. For example: `clientSecret: SECRET_MY_AAD_APP_CLIENT_SECRET`.", + "const": false + }, + "signInAudience": { + "type": "string", + "description": "Specifies what Microsoft accounts are supported for the current application.", + "enum": ["AzureADMyOrg", "AzureADMultipleOrgs", "AzureADandPersonalMicrosoftAccount", "PersonalMicrosoftAccount"] + }, + "serviceManagementReference": { + "type": "string", + "description": "References application or service contact information from a Service or Asset Management database." + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["clientId", "objectId"], + "properties": { + "clientId": { + "description": "Required. The client (application) id of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "objectId": { + "description": "Required. The object id of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "tenantId": { + "description": "The tenant id of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "authority": { + "description": "The authority of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + }, + "authorityHost": { + "description": "The authority host name of created Microsoft Entra application.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "aadAppCreate": { + "type": "object", + "oneOf": [ + { "$ref": "#/definitions/aadAppCreateWithoutSecret" }, + { "$ref": "#/definitions/aadAppCreateWithSecret" } + ] + }, + "aadAppUpdate": { + "type": "object", + "additionalProperties": false, + "description": "Update Microsoft Entra application. Refer to https://aka.ms/teamsfx-actions/aadapp-update for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Update Microsoft Entra application based on the given Microsoft Entra application manifest. If the manifest uses AAD_APP_ACCESS_AS_USER_PERMISSION_ID and the environment variable is empty, this action will generate a random id and output it. Refer to https://aka.ms/teamsfx-actions/aadapp-update for more details.", + "const": "aadApp/update" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["manifestPath", "outputFilePath"], + "properties": { + "manifestPath": { + "type": "string", + "description": "Path of Microsoft Entra application manifest. Environment variables in the manifest will be replaced before applying the manifest to Microsoft Entra application." + }, + "outputFilePath": { + "type": "string", + "description": "Generate the final Microsoft Entra application manifest used to update Microsoft Entra application to this path." + } + } + } + } + }, + "armDeploy": { + "type": "object", + "additionalProperties": false, + "description": "Create Azure resources using the referenced Bicep/JSON files. Refer to https://aka.ms/teamsfx-actions/arm-deploy for more details on the naming convertion rule.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Create Azure resources using the referenced Bicep/JSON files. Outputs from Bicep/JSON will be persisted in the current Teams Toolkit environment following certain naming convertion. Refer to https://aka.ms/teamsfx-actions/arm-deploy for more details on the naming convertion rule.", + "const": "arm/deploy" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["subscriptionId", "resourceGroupName", "templates"], + "properties": { + "subscriptionId": { + "type": "string", + "description": "The subscription id to deploy to" + }, + "resourceGroupName": { + "type": "string", + "description": "The resource group name to deploy to" + }, + "bicepCliVersion": { + "type": "string", + "description": "The Bicep CLI version. Bicep CLI will be downloaded to {Home}/.fx/bin/bicep.\n Teams Toolkit defaults to Bicep in PATH if version is not defined." + }, + "templates": { + "type": "array", + "description": "The list of templates to deploy", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["deploymentName", "path"], + "properties": { + "deploymentName": { + "type": "string", + "description": "The name of ARM deployment" + }, + "path": { + "type": "string", + "description": "Relative path to ARM template. Both Bicep and JSON format are supported." + }, + "parameters": { + "type": "string", + "description": "Relative path to ARM parameters file. Teams Toolkit will expand the environment variable in the parameters file" + } + } + } + } + } + } + } + }, + "azureStorageEnableStaticWebsite": { + "type": "object", + "additionalProperties": false, + "description": "Enable static website config for Azure Storage. Refer to https://aka.ms/teamsfx-actions/azure-storage-enable-static-website for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Enable static website config for Azure Storage. This action has no output. Refer to https://aka.ms/teamsfx-actions/azure-storage-enable-static-website for more details.", + "const": "azureStorage/enableStaticWebsite" + }, + "with": { + "type": "object", + "description": "parameters for this action", + "additionalProperties": false, + "required": ["storageResourceId"], + "properties": { + "storageResourceId": { + "type": "string", + "description": "The resource id of the storage account" + }, + "indexPage": { + "type": "string", + "description": "The index page of the static website, default to 'index.html'" + }, + "errorPage": { + "type": "string", + "description": "The error page of the static website, default to 'index.html'" + } + } + } + } + }, + "cliRunNpmCommand": { + "type": "object", + "additionalProperties": false, + "description": "Execute npm command with arguments. Refer to https://aka.ms/teamsfx-actions/cli-run-npm-command for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Execute npm command with arguments. Refer to https://aka.ms/teamsfx-actions/cli-run-npm-command for more details.", + "const": "cli/runNpmCommand" + }, + "with": { + "type": "object", + "description": "parameters for this action", + "additionalProperties": false, + "required": ["args"], + "properties": { + "args": { + "type": "string", + "description": "The arguments passed to the npm command" + }, + "workingDirectory": { + "type": "string", + "description": "The working directory, default to './'" + } + } + } + } + }, + "cliRunDotnetCommand": { + "type": "object", + "additionalProperties": false, + "description": "Execute dotnet command with arguments. Refer to https://aka.ms/teamsfx-actions/cli-run-dotnet-command for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Execute dotnet command with arguments. Refer to https://aka.ms/teamsfx-actions/cli-run-dotnet-command for more details.", + "const": "cli/runDotnetCommand" + }, + "with": { + "type": "object", + "description": "parameters for this action", + "additionalProperties": false, + "required": ["args"], + "properties": { + "args": { + "type": "string", + "description": "The arguments passed to the dotnet command" + }, + "workingDirectory": { + "type": "string", + "description": "The working directory, default to './'" + }, + "execPath": { + "type": "string", + "description": "The path to the dotnet executable, default to system path." + } + } + } + } + }, + "cliRunNpxCommand": { + "type": "object", + "additionalProperties": false, + "description": "Execute npx command with arguments. Refer to https://aka.ms/teamsfx-actions/cli-run-npx-command for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Execute npx command with arguments. Refer to https://aka.ms/teamsfx-actions/cli-run-npx-command for more details.", + "const": "cli/runNpxCommand" + }, + "with": { + "type": "object", + "description": "parameters for this action", + "additionalProperties": false, + "required": ["args"], + "properties": { + "args": { + "type": "string", + "description": "The arguments passed to the npm command" + }, + "workingDirectory": { + "type": "string", + "description": "The working directory, default to './'" + } + } + } + } + }, + "azureStorageDeploy": { + "type": "object", + "additionalProperties": false, + "description": "Upload and deploy the project to Azure Storage Service. Refer to https://aka.ms/teamsfx-actions/azure-storage-deploy for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will upload and deploy the project to Azure Storage Service. This action has no output. Refer to https://aka.ms/teamsfx-actions/azure-storage-deploy for more details.", + "const": "azureStorage/deploy" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["artifactFolder", "resourceId"], + "properties": { + "artifactFolder": { + "type": "string", + "description": "Path to the distribution folder that contains the files to deploy." + }, + "resourceId": { + "type": "string", + "description": "The resource id of the storage account." + }, + "workingDirectory": { + "type": "string", + "description": "The working directory, deploy program will find ignore file and create upload package file based on this directory, default to './'" + }, + "ignoreFile": { + "type": "string", + "description": "The path to the ignore file. Any files listed in this file will be ignored during upload. default ignores nothing." + } + } + } + } + }, + "azureAppServiceZipDeploy": { + "type": "object", + "additionalProperties": false, + "description": "Upload and deploy the project to Azure App Service. Refer to https://aka.ms/teamsfx-actions/azure-app-service-deploy for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will upload and deploy the project to Azure App Service. This action has no output. Refer to https://aka.ms/teamsfx-actions/azure-app-service-deploy for more details.", + "const": "azureAppService/zipDeploy" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["artifactFolder", "resourceId"], + "properties": { + "artifactFolder": { + "type": "string", + "description": "Path to the distribution folder that contains the files to deploy." + }, + "resourceId": { + "type": "string", + "description": "The resource id of the Azure App Service." + }, + "workingDirectory": { + "type": "string", + "description": "The working directory, deploy program will find ignore file and create upload package file based on this directory, default to './'" + }, + "ignoreFile": { + "type": "string", + "description": "The path to the ignore file. Any files listed in this file will be ignored during upload. default ignores nothing." + }, + "dryRun": { + "type": "boolean", + "description": "If true, the action will only package the files to be deployed without actually deploying them. Default to false." + }, + "outputZipFile": { + "type": "string", + "description": "The path to the packaged zip file. If not specified, the zip file will be saved to the workingDirectory/.deployment/deployment.zip." + } + } + } + } + }, + "azureFunctionsZipDeploy": { + "type": "object", + "additionalProperties": false, + "description": "Upload and deploy the project to Azure Functions. Refer to https://aka.ms/teamsfx-actions/azure-functions-deploy for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will upload and deploy the project to Azure Functions. This action has no output. Refer to https://aka.ms/teamsfx-actions/azure-functions-deploy for more details.", + "const": "azureFunctions/zipDeploy" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["artifactFolder", "resourceId"], + "properties": { + "artifactFolder": { + "type": "string", + "description": "Path to the distribution folder that contains the files to deploy." + }, + "resourceId": { + "type": "string", + "description": "The resource id of the Azure Functions." + }, + "workingDirectory": { + "type": "string", + "description": "The working directory, deploy program will find ignore file based on this directory, default to './'" + }, + "ignoreFile": { + "type": "string", + "description": "The path to the ignore file. Any files listed in this file will be ignored during upload. default ignores nothing." + }, + "dryRun": { + "type": "boolean", + "description": "If true, the action will only package the files to be deployed without actually deploying them. Default to false." + }, + "outputZipFile": { + "type": "string", + "description": "The path to the packaged zip file. If not specified, the zip file will be saved to the workingDirectory/.deployment/deployment.zip." + } + } + } + } + }, + "teamsAppCreate": { + "type": "object", + "additionalProperties": false, + "description": "Create a Teams app in Teams Developer Portal. Refer to https://aka.ms/teamsfx-actions/teamsapp-create for more details.", + "required": ["uses", "with", "writeToEnvironmentFile"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will create a new Teams app for you if TEAMS_APP_ID environment variable is empty or the app with TEAMS_APP_ID is not found from Teams Developer Portal. Refer to https://aka.ms/teamsfx-actions/teamsapp-create for more details", + "const": "teamsApp/create" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "Name of the Teams app" + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["teamsAppId"], + "properties": { + "teamsAppId": { + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "teamsAppValidateManifest": { + "type": "object", + "additionalProperties": false, + "description": "Validate Teams app manifest. Refer to https://aka.ms/teamsfx-actions/teamsapp-validate for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will validate Teams app manifest with manifest schema. Refer to https://aka.ms/teamsfx-actions/teamsapp-validate for more details.", + "const": "teamsApp/validateManifest" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["manifestPath"], + "properties": { + "manifestPath": { + "type": "string", + "description": "Path to Teams app manifest file." + } + } + } + } + }, + "teamsAppValidateAppPackage": { + "type": "object", + "additionalProperties": false, + "description": "Validate Teams app manifest. Refer to https://aka.ms/teamsfx-actions/teamsapp-validate for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will validate Teams app package file using validation rules. Refer to https://aka.ms/teamsfx-actions/teamsapp-validate for more details.", + "const": "teamsApp/validateAppPackage" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["appPackagePath"], + "properties": { + "appPackagePath": { + "type": "string", + "description": "Path to zipped Teams app package file." + } + } + } + } + }, + "teamsAppValidateWithTestCases": { + "type": "object", + "additionalProperties": false, + "description": "Async Valiation Tests. Refer to https://aka.ms/teamsfx-actions/teamsapp-validate for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will trigger async validations for the Teams app package file. Refer to https://aka.ms/teamsfx-actions/teamsapp-validate for more details.", + "const": "teamsApp/validateWithTestCases" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["appPackagePath"], + "properties": { + "appPackagePath": { + "type": "string", + "description": "Path to zipped Teams app package file." + }, + "showMessage": { + "type": "boolean", + "description": "Show message or not." + }, + "showProgressBar": { + "type": "boolean", + "description": "Show progress bar or not." + } + } + } + } + }, + "teamsAppZipAppPackage": { + "type": "object", + "additionalProperties": false, + "description": "Zip app package with manifest file and icons. Refer to https://aka.ms/teamsfx-actions/teamsapp-zipAppPackage for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "This action will render Teams app manifest template with environment variables, and zip manifest file with two icons. Refer to https://aka.ms/teamsfx-actions/teamsapp-zipAppPackage for more details.", + "const": "teamsApp/zipAppPackage" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["manifestPath", "outputZipPath", "outputFolder"], + "properties": { + "manifestPath": { + "type": "string", + "description": "Path to Teams app manifest file" + }, + "outputZipPath": { + "type": "string", + "description": "Path to the output zip package" + }, + "outputFolder": { + "type": "string", + "description": "Path to the output folder containing manifests" + } + } + } + } + }, + "teamsAppUpdate": { + "type": "object", + "additionalProperties": false, + "description": "Update Teams app in Teams Developer Portal. Refer to https://aka.ms/teamsfx-actions/teamsapp-update for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Apply the Teams app manifest to an existing Teams app in Teams Developer Portal. Will use the app id in manifest.json file to determine which Teams app to update. Refer to https://aka.ms/teamsfx-actions/teamsapp-update for more details.", + "const": "teamsApp/update" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["appPackagePath"], + "properties": { + "appPackagePath": { + "type": "string", + "description": "Path to Teams app package" + } + } + } + } + }, + "teamsAppPublishAppPackage": { + "type": "object", + "additionalProperties": false, + "description": "Publish Teams app package to Teams Admin center. Refer to https://aka.ms/teamsfx-actions/teamsapp-publish for more details.", + "required": ["uses", "with", "writeToEnvironmentFile"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Publish Teams app package to Teams Admin center. Refer to https://aka.ms/teamsfx-actions/teamsapp-publish for more details.", + "const": "teamsApp/publishAppPackage" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["appPackagePath"], + "properties": { + "appPackagePath": { + "type": "string", + "description": "Path to Teams app package to be published." + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["publishedAppId"], + "properties": { + "publishedAppId": { + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "botAadAppCreate": { + "type": "object", + "additionalProperties": false, + "description": "Create a new or reuse an existing Microsoft Entra application for bot. Refer to https://aka.ms/teamsfx-actions/botaadapp-create for more details.", + "required": ["uses", "with", "writeToEnvironmentFile"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Create a new or reuse an existing Microsoft Entra application for bot. Refer to https://aka.ms/teamsfx-actions/botaadapp-create for more details.", + "const": "botAadApp/create" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "The user-facing display name for this Microsoft Entra application" + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["botId", "botPassword"], + "properties": { + "botId": { + "description": "Required. Client (application) id of the Microsoft Entra application created for bot.", + "$ref": "#/definitions/envVarName" + }, + "botPassword": { + "description": "Required. Client secret of the Microsoft Entra application created for bot.", + "$ref": "#/definitions/secretEnvVarName" + } + } + } + } + }, + "botframeworkCreate": { + "type": "object", + "additionalProperties": false, + "description": "Create or update the bot registration on dev.botframework.com. Refer to https://aka.ms/teamsfx-actions/botframework-create for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Create or update the bot registration on dev.botframework.com. Refer to https://aka.ms/teamsfx-actions/botframework-create for more details.", + "const": "botFramework/create" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["botId", "name", "messagingEndpoint"], + "properties": { + "botId": { + "type": "string", + "description": "the Microsoft Entra app client id of the bot" + }, + "name": { + "type": "string", + "description": "the name of the bot" + }, + "messagingEndpoint": { + "type": "string", + "description": "the messaging endpoint of the bot" + }, + "description": { + "type": "string", + "description": "the long description of the bot" + }, + "iconUrl": { + "type": "string", + "description": "the icon of the bot, pointed to an existing URL" + }, + "channels": { + "type": "array", + "description": "the channel(s) to be enabled of the bot", + "items": { + "oneOf": [{ "$ref": "#/definitions/MsTeamsChannel" }, { "$ref": "#/definitions/M365ExtensionsChannel" }] + } + } + } + } + } + }, + "MsTeamsChannel": { + "type": "object", + "additionalProperties": false, + "description": "Microsoft Teams channel", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "Microsoft Teams channel", + "enum": ["msteams"] + }, + "callingWebhook": { + "type": "string", + "description": "Webhook for Microsoft Teams channel calls" + } + } + }, + "M365ExtensionsChannel": { + "type": "object", + "additionalProperties": false, + "description": "Microsoft 365 Extensions channel", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "Microsoft 365 Extensions channel", + "enum": ["m365extensions"] + } + } + }, + "fileCreateOrUpdateEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Create or update variables to environment file. Refer to https://aka.ms/teamsfx-actions/file-createorupdateenvironmentfile for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Create or update variables to environment file. Refer to https://aka.ms/teamsfx-actions/file-createorupdateenvironmentfile for more details.", + "const": "file/createOrUpdateEnvironmentFile" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["envs", "target"], + "properties": { + "envs": { + "type": "object", + "description": "the environment variable(s) to be generated", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + } + }, + "target": { + "type": "string", + "description": "The target environment file to be created or updated" + } + } + } + } + }, + "fileCreateOrUpdateJsonFile": { + "type": "object", + "additionalProperties": false, + "description": "Create or update JSON file. Refer to https://aka.ms/teamsfx-actions/file-createorupdatejsonfile for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Create or update JSON file. Refer to https://aka.ms/teamsfx-actions/file-createorupdatejsonfile for more details.", + "const": "file/createOrUpdateJsonFile" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["target"], + "properties": { + "appsettings": { + "type": "object", + "description": "the app settings to be generated" + }, + "target": { + "type": "string", + "description": "the target file" + }, + "content": { + "type": "object", + "description": "the json content to be created or updated, will be merged with existing content" + } + } + } + } + }, + "devToolInstall": { + "type": "object", + "additionalProperties": false, + "description": "Install development tool(s). Refer to https://aka.ms/teamsfx-actions/devtool-install for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Install development tool(s). Refer to https://aka.ms/teamsfx-actions/devtool-install for more details.", + "const": "devTool/install" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "properties": { + "devCert": { + "type": "object", + "description": "Generate an SSL certificate and install it to the system certificate management center. This will output environment variables specified by `sslCertFile` and `sslKeyFile` to current environment's .env file.", + "additionalProperties": false, + "required": ["trust"], + "properties": { + "trust": { + "type": "boolean", + "description": "whether to trust the SSL certificate or not" + } + } + }, + "func": { + "type": "object", + "description": "Install Azure Functions Core Tools. This will output environment variable specified by `funcPath` to current environment's .env file.", + "additionalProperties": false, + "required": [ + "version" + ], + "properties": { + "version": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "The version number of Azure Functions Core Tools that follow the Semantic Versioning scheme." + }, + "symlinkDir": { + "type": "string", + "description": "The path of the symlink target for the folder containing Azure Functions Core Tools binaries." + } + } + }, + "dotnet": { + "type": "boolean", + "description": "Install .NET SDK. This will output environment variables specified by `dotnetPath` to current environment's .env file." + }, + "testTool": { + "type": "object", + "description": "Install Teams App Test Tool. This will output environment variables specified by `testToolPath` to current environment's .env file.", + "additionalProperties": false, + "required": ["version", "symlinkDir"], + "properties": { + "version": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "The version number of Teams App Test Tool npm package that follow the Semantic Versioning scheme." + }, + "symlinkDir": { + "type": "string", + "description": "The path of the symlink target for the folder containing Teams App Test Tool binaries." + } + } + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "properties": { + "sslCertFile": { + "description": "The path of the certificate file of the SSL certificate. This parameter takes effect only when `devCert` is specified.", + "$ref": "#/definitions/envVarName" + }, + "sslKeyFile": { + "description": "The path of the key file of the SSL certificate. This parameter takes effect only when `devCert` is specified.", + "$ref": "#/definitions/envVarName" + }, + "funcPath": { + "description": "The path of the Azure Functions Core Tools binary. This parameter takes effect only when `func` is `true`.", + "$ref": "#/definitions/envVarName" + }, + "dotnetPath": { + "description": "The path of the .NET binary. This parameter takes effect only when `dotnet` is `true`.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "teamsAppExtendToM365": { + "type": "object", + "additionalProperties": false, + "description": "Extend Teams app across Microsoft 365. Refer to https://aka.ms/teamsfx-actions/teamsapp-extendToM365 for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Extend Teams app across Microsoft 365. Refer to https://aka.ms/teamsfx-actions/teamsapp-extendToM365 for more details.", + "const": "teamsApp/extendToM365" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "parameters for this action", + "required": ["appPackagePath"], + "properties": { + "appPackagePath": { + "type": "string", + "description": "path to Teams app package" + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["titleId", "appId"], + "properties": { + "titleId": { + "description": "Required. The ID of M365 title.", + "$ref": "#/definitions/envVarName" + }, + "appId": { + "description": "Required. The app ID of M365 title.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "spfxDeploy": { + "type": "object", + "additionalProperties": false, + "description": "Deploy the SPFx package to SharePoint app catalog. Refer to https://aka.ms/teamsfx-actions/spfx-deploy for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Deploy the SPFx package to SharePoint app catalog. Refer to https://aka.ms/teamsfx-actions/spfx-deploy for more details.", + "const": "spfx/deploy" + }, + "with": { + "type": "object", + "description": "parameters for this action", + "additionalProperties": false, + "required": ["packageSolutionPath"], + "properties": { + "createAppCatalogIfNotExist": { + "type": "boolean", + "description": "Whether to create tenant app catalog first if not exist, default value is `false`" + }, + "packageSolutionPath": { + "type": "string", + "description": "The path to package-solution.json in SPFx project" + } + } + } + } + }, + "teamsAppCopyAppPackageToSPFx": { + "type": "object", + "additionalProperties": false, + "description": "Copy the generated Teams app package to SPFx solution. Refer to https://aka.ms/teamsfx-actions/teams-app-copy-app-package-to-spfx for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Copy the generated Teams app package to SPFx solution. Refer to https://aka.ms/teamsfx-actions/teams-app-copy-app-package-to-spfx for more details.", + "const": "teamsApp/copyAppPackageToSPFx" + }, + "with": { + "type": "object", + "description": "parameters for this action", + "additionalProperties": false, + "required": ["appPackagePath", "spfxFolder"], + "properties": { + "spfxFolder": { + "type": "string", + "description": "The source folder to the SPFx project" + }, + "appPackagePath": { + "type": "string", + "description": "The path to the zipped Teams app package" + } + } + } + } + }, + "script": { + "type": "object", + "additionalProperties": false, + "description": "Execute a user defined script. Refer to https://aka.ms/teamsfx-actions/script for more details.", + "required": ["uses", "with"], + "properties": { + "name": { + "type": "string", + "description": "An optional name of this action." + }, + "env": { + "type": "object", + "description": "Define environment variables for this action.", + "additionalProperties": { + "type": "string" + } + }, + "uses": { + "type": "string", + "description": "Execute a user defined script. Refer to https://aka.ms/teamsfx-actions/script for more details.", + "const": "script" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["run"], + "properties": { + "run": { + "type": "string", + "description": "The command for this action to run or path to the script. Succeeds if exit code is 0." + }, + "workingDirectory": { + "type": "string", + "description": "Current working directory. Defaults to the directory of this file." + }, + "shell": { + "type": "string", + "description": "Shell command. If not specified, use default shell for current platform. The rule is: 1) use the value of the 'SHELL' environment variable if it is set. Otherwise the shell depends on operation system: 2) on macOS, use '/bin/zsh' if it exists, otherwise use '/bin/bash'; 3) On Windows, use the value of the 'ComSpec' environment variable if it exists, otherwise use 'cmd.exe'; 4) On Linux or other OS, use '/bin/sh' if it extis." + }, + "timeout": { + "type": "number", + "description": "timeout in ms" + }, + "redirectTo": { + "type": "string", + "description": "redirect stdout and stderr to a file" + } + } + } + } + }, + "relativePath": { + "type": "string", + "maxLength": 2048 + }, + "httpsUrl": { + "type": "string", + "maxLength": 2048, + "pattern": "^[Hh][Tt][Tt][Pp][Ss]?://" + }, + "semver": { + "type": "string", + "maxLength": 256, + "pattern": "^([0-9]|[1-9]+[0-9]*)\\.([0-9]|[1-9]+[0-9]*)\\.([0-9]|[1-9]+[0-9]*)$" + }, + "hexColor": { + "type": "string", + "pattern": "^#[0-9a-fA-F]{6}$" + }, + "guid": { + "type": "string", + "pattern": "^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$" + }, + "languageTag": { + "type": "string", + "pattern": "^[A-Za-z0-9]{1,8}(-[A-Za-z0-9]{1,8}){0,2}$" + }, + "taskInfoDimension": { + "type": "string", + "pattern": "^((([0-9]*\\.)?[0-9]+)|[lL][aA][rR][gG][eE]|[mM][eE][dD][iI][uU][mM]|[sS][mM][aA][lL][lL])$", + "maxLength": 16 + }, + "secretEnvVarName": { + "type": "string", + "pattern": "^SECRET_[A-Z0-9_]+$", + "maxLength": 256 + }, + "envVarName": { + "type": "string", + "pattern": "^[A-Z][A-Z0-9_]*$", + "maxLength": 256 + }, + "apiKeyRegister": { + "type": "object", + "additionalProperties": false, + "description": "Create an API key.", + "required": ["uses", "with", "writeToEnvironmentFile"], + "properties": { + "uses": { + "type": "string", + "description": "Register API key. Refer to https://aka.ms/teamsfx-actions/apiKey-register for more details.", + "const": "apiKey/register" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name", "appId", "apiSpecPath"], + "properties": { + "name": { + "type": "string", + "description": "The name of API key." + }, + "appId": { + "type": "string", + "description": "The app ID of Teams app." + }, + "primaryClientSecret": { + "type": "string", + "description": "Primary client secret of API key. Length of client secret >= 10 and <= 128" + }, + "secondaryClientSecret": { + "type": "string", + "description": "Secondary callingWebhook secret of API key. Length of client secret >= 10 and <= 128" + }, + "apiSpecPath": { + "type": "string", + "description": "The path of API specification file." + }, + "applicableToApps": { + "type": "string", + "description": "Which app can access the API key? Values can be \"SpecificApp\" or \"AnyApp\". Default is \"AnyApp\".", + "enum": ["SpecificApp", "AnyApp"] + }, + "targetAudience": { + "type": "string", + "description": "Which tenant can access the API key? Values can be \"HomeTenant\" or \"AnyTenant\". Default is \"AnyTenant\".", + "enum": ["HomeTenant", "AnyTenant"] + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["registrationId"], + "properties": { + "registrationId": { + "description": "Required. The registration id of created API key.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "azureStaticWebAppGetDeploymentKey": { + "type": "object", + "additionalProperties": false, + "description": "Get deployment key from Azure Static Web App.", + "required": ["uses", "with", "writeToEnvironmentFile"], + "properties": { + "uses": { + "type": "string", + "description": "Get deployment key. Refer to https://aka.ms/teamsfx-actions/swa-get-deployment-key for more details.", + "const": "azureStaticWebApps/getDeploymentToken" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["resourceId"], + "properties": { + "resourceId": { + "type": "string", + "description": "The resource ID of Azure Static Web App." + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["deploymentToken"], + "properties": { + "deploymentToken": { + "description": "Required. The deployment token of Azure Static Web App.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "apiKeyUpdate": { + "type": "object", + "additionalProperties": false, + "description": "Update an API key.", + "required": ["uses", "with"], + "properties": { + "uses": { + "type": "string", + "description": "Updagte API key. Refer to https://aka.ms/teamsfx-actions/apiKey-update for more details.", + "const": "apiKey/update" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name", "appId", "apiSpecPath", "registrationId"], + "properties": { + "name": { + "type": "string", + "description": "The name of API key." + }, + "appId": { + "type": "string", + "description": "The app ID of Teams app." + }, + "apiSpecPath": { + "type": "string", + "description": "The path of API specification file." + }, + "registrationId": { + "type": "string", + "description": "The registration id of API key." + }, + "applicableToApps": { + "type": "string", + "description": "Which app can access the API key? Values can be \"SpecificApp\" or \"AnyApp\". Default is \"AnyApp\".", + "enum": ["SpecificApp", "AnyApp"] + }, + "targetAudience": { + "type": "string", + "description": "Which tenant can access the API key? Values can be \"HomeTenant\" or \"AnyTenant\". Default is \"AnyTenant\".", + "enum": ["HomeTenant", "AnyTenant"] + } + } + } + } + }, + "oauthRegister": { + "type": "object", + "additionalProperties": false, + "description": "Create an OAuth registration.", + "required": ["uses", "with", "writeToEnvironmentFile"], + "properties": { + "uses": { + "type": "string", + "description": "Register OAuth registration. Refer to https://aka.ms/teamsfx-actions/oauth-register for more details.", + "const": "oauth/register" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name", "appId", "apiSpecPath", "flow"], + "properties": { + "name": { + "type": "string", + "description": "The name of OAuth registration." + }, + "appId": { + "type": "string", + "description": "The app ID of OAuth registration." + }, + "apiSpecPath": { + "type": "string", + "description": "The path of API specification file." + }, + "applicableToApps": { + "type": "string", + "description": "Which app can access the OAuth registration? Values can be \"SpecificApp\" or \"AnyApp\". Default is \"AnyApp\".", + "enum": ["SpecificApp", "AnyApp"] + }, + "targetAudience": { + "type": "string", + "description": "Which tenant can access the OAuth registration? Values can be \"HomeTenant\" or \"AnyTenant\". Default is \"AnyTenant\".", + "enum": ["HomeTenant", "AnyTenant"] + }, + "flow": { + "type": "string", + "description": "The flow of OAuth registration. Values can be \"authorizationCode\" .", + "enum": ["authorizationCode"] + }, + "clientId": { + "type": "string", + "description": "The client id of OAuth registration." + }, + "clientSecret": { + "type": "string", + "description": "The client secret of OAuth registration." + }, + "refreshUrl": { + "type": "string", + "description": "The refresh url of OAuth registration." + }, + "isPKCEEnabled": { + "type": "boolean", + "description": "Whether PKCE is enabled for OAuth registration. Default is false." + }, + "identityProvider": { + "type": "string", + "description": "The identity provider of OAuth registration.", + "enum": ["MicrosoftEntra", "Custom"] + } + } + }, + "writeToEnvironmentFile": { + "type": "object", + "additionalProperties": false, + "description": "Write environment variables to environment file", + "required": ["configurationId"], + "properties": { + "configurationId": { + "description": "Required. The configuration id of created OAuth registration.", + "$ref": "#/definitions/envVarName" + } + } + } + } + }, + "oauthUpdate": { + "type": "object", + "additionalProperties": false, + "description": "Update an OAuth registration.", + "required": ["uses", "with"], + "properties": { + "uses": { + "type": "string", + "description": "Updagte OAuth registration. Refer to https://aka.ms/teamsfx-actions/oauth-update for more details.", + "const": "oauth/update" + }, + "with": { + "type": "object", + "additionalProperties": false, + "description": "Parameters for this action", + "required": ["name", "appId", "apiSpecPath", "configurationId"], + "properties": { + "name": { + "type": "string", + "description": "The name of OAuth registration." + }, + "appId": { + "type": "string", + "description": "The app ID of OAuth registration." + }, + "apiSpecPath": { + "type": "string", + "description": "The path of API specification file." + }, + "configurationId": { + "type": "string", + "description": "The configuration id of OAuth registration." + }, + "applicableToApps": { + "type": "string", + "description": "Which app can access the OAuth registration? Values can be \"SpecificApp\" or \"AnyApp\". Default is \"AnyApp\".", + "enum": ["SpecificApp", "AnyApp"] + }, + "targetAudience": { + "type": "string", + "description": "Which tenant can access the OAuth registration? Values can be \"HomeTenant\" or \"AnyTenant\". Default is \"AnyTenant\".", + "enum": ["HomeTenant", "AnyTenant"] + }, + "isPKCEEnabled": { + "type": "boolean", + "description": "Whether PKCE is enabled for OAuth registration. Default is false." + } + } + } + } + } + } +} diff --git a/packages/fx-core/src/component/configManager/validator.ts b/packages/fx-core/src/component/configManager/validator.ts index 78c90b99c5..6ed0f81e3b 100644 --- a/packages/fx-core/src/component/configManager/validator.ts +++ b/packages/fx-core/src/component/configManager/validator.ts @@ -7,7 +7,7 @@ import path from "path"; import { getResourceFolder } from "../../folder"; type Version = string; -const supportedVersions = ["1.0.0", "1.1.0", "v1.2", "v1.3", "v1.4", "v1.5", "v1.6"]; +const supportedVersions = ["1.0.0", "1.1.0", "v1.2", "v1.3", "v1.4", "v1.5", "v1.6", "v1.7"]; export class Validator { impl: Map; diff --git a/packages/fx-core/src/component/driver/teamsApp/createAppPackage.ts b/packages/fx-core/src/component/driver/teamsApp/createAppPackage.ts index 2cbfc4d52c..d84d143200 100644 --- a/packages/fx-core/src/component/driver/teamsApp/createAppPackage.ts +++ b/packages/fx-core/src/component/driver/teamsApp/createAppPackage.ts @@ -21,6 +21,7 @@ import { InvalidFileOutsideOfTheDirectotryError } from "../../../error/teamsApp" import { getResolvedManifest, normalizePath } from "./utils/utils"; import { copilotGptManifestUtils } from "./utils/CopilotGptManifestUtils"; import { ManifestType } from "../../utils/envFunctionUtils"; +import { getAbsolutePath } from "../../utils/common"; export const actionName = "teamsApp/zipAppPackage"; @@ -69,18 +70,23 @@ export class CreateAppPackageDriver implements StepDriver { // Deal with relative path // Environment variables should have been replaced by value // ./build/appPackage/appPackage.dev.zip instead of ./build/appPackage/appPackage.${{TEAMSFX_ENV}}.zip - let zipFileName = args.outputZipPath; - if (!path.isAbsolute(zipFileName)) { - zipFileName = path.join(context.projectPath, zipFileName); - } + const zipFileName = getAbsolutePath(args.outputZipPath, context.projectPath); const zipFileDir = path.dirname(zipFileName); await fs.mkdir(zipFileDir, { recursive: true }); - let jsonFileName = args.outputJsonPath; - if (!path.isAbsolute(jsonFileName)) { - jsonFileName = path.join(context.projectPath, jsonFileName); + let jsonFileDir; + let teamsManifestJsonFileName; + const shouldwriteAllManifest = !!args.outputFolder; + if (args.outputJsonPath) { + teamsManifestJsonFileName = getAbsolutePath(args.outputJsonPath, context.projectPath); + jsonFileDir = path.dirname(teamsManifestJsonFileName); + } else { + jsonFileDir = getAbsolutePath(args.outputFolder!, context.projectPath); + teamsManifestJsonFileName = path.join( + jsonFileDir, + `manifest.${process.env.TEAMSFX_ENV!}.json` + ); } - const jsonFileDir = path.dirname(jsonFileName); await fs.mkdir(jsonFileDir, { recursive: true }); const appDirectory = path.dirname(manifestPath); @@ -215,7 +221,13 @@ export class CreateAppPackageDriver implements StepDriver { const plugins = manifest.copilotExtensions?.plugins; // API plugin if (plugins?.length && plugins[0].file) { - const addFilesRes = await this.addPlugin(zip, plugins[0].file, appDirectory, context); + const addFilesRes = await this.addPlugin( + zip, + plugins[0].file, + appDirectory, + context, + !shouldwriteAllManifest ? undefined : jsonFileDir + ); if (addFilesRes.isErr()) { return err(addFilesRes.error); } @@ -239,7 +251,10 @@ export class CreateAppPackageDriver implements StepDriver { declarativeCopilots[0].file, copilotGptManifestFile, ManifestType.DeclarativeCopilotManifest, - context + context, + shouldwriteAllManifest + ? path.join(jsonFileDir, path.relative(appDirectory, copilotGptManifestFile)) + : undefined ); if (addFileWithVariableRes.isErr()) { return err(addFileWithVariableRes.error); @@ -267,7 +282,8 @@ export class CreateAppPackageDriver implements StepDriver { zip, normalizePath(pluginFileRelativePath, useForwardSlash), appDirectory, - context + context, + !shouldwriteAllManifest ? undefined : jsonFileDir ); if (addPluginRes.isErr()) { @@ -282,11 +298,7 @@ export class CreateAppPackageDriver implements StepDriver { zip.writeZip(zipFileName); - if (await fs.pathExists(jsonFileName)) { - await fs.chmod(jsonFileName, 0o777); - } - await fs.writeFile(jsonFileName, JSON.stringify(manifest, null, 4)); - await fs.chmod(jsonFileName, 0o444); + await this.writeJsonFile(teamsManifestJsonFileName, JSON.stringify(manifest, null, 4)); const builtSuccess = [ { content: "(√)Done: ", color: Colors.BRIGHT_GREEN }, @@ -312,8 +324,8 @@ export class CreateAppPackageDriver implements StepDriver { if (!args || !args.manifestPath) { invalidParams.push("manifestPath"); } - if (!args || !args.outputJsonPath) { - invalidParams.push("outputJsonPath"); + if (!args || (!args.outputJsonPath && !args.outputFolder)) { + invalidParams.push("outputJsonPath or outputFolder"); } if (!args || !args.outputZipPath) { invalidParams.push("outputZipPath"); @@ -357,15 +369,17 @@ export class CreateAppPackageDriver implements StepDriver { * Add plugin file and plugin related files to zip. * @param zip zip * @param pluginRelativePath plugin file path relative to app package folder - * @param appDirectory app package path + * @param appDirectory app package path containing manifest template. * @param context context + * @param outputDirectory optional. Folder where we should put the resolved manifest in. * @returns result of adding plugin file and plugin related files */ private async addPlugin( zip: AdmZip, pluginRelativePath: string, appDirectory: string, - context: WrapDriverContext + context: WrapDriverContext, + outputDirectory?: string ): Promise> { const pluginFile = path.resolve(appDirectory, pluginRelativePath); const checkExistenceRes = await this.validateReferencedFile(pluginFile, appDirectory); @@ -378,7 +392,10 @@ export class CreateAppPackageDriver implements StepDriver { pluginRelativePath, pluginFile, ManifestType.PluginManifest, - context + context, + !outputDirectory + ? undefined + : path.join(outputDirectory, path.relative(appDirectory, pluginFile)) ); if (addFileWithVariableRes.isErr()) { return err(addFileWithVariableRes.error); @@ -454,7 +471,8 @@ export class CreateAppPackageDriver implements StepDriver { entryName: string, filePath: string, manifestType: ManifestType, - context: WrapDriverContext + context: WrapDriverContext, + outputPath?: string // If outputPath exists, we will write down the file after replacing placeholders. ): Promise> { const expandedEnvVarResult = await CreateAppPackageDriver.expandEnvVars( filePath, @@ -469,10 +487,25 @@ export class CreateAppPackageDriver implements StepDriver { const attr = await fs.stat(filePath); zip.addFile(entryName, Buffer.from(content), "", attr.mode); + if (outputPath && path.extname(outputPath).toLowerCase() === ".json") { + await this.writeJsonFile( + `${outputPath.substring(0, outputPath.length - 5)}.${process.env.TEAMSFX_ENV!}.json`, + content + ); + } + return ok(undefined); } private addFileInZip(zip: AdmZip, zipPath: string, filePath: string) { zip.addLocalFile(filePath, zipPath === "." ? "" : zipPath); } + + private async writeJsonFile(jsonFileName: string, content: string) { + if (await fs.pathExists(jsonFileName)) { + await fs.chmod(jsonFileName, 0o777); + } + await fs.writeFile(jsonFileName, content); + await fs.chmod(jsonFileName, 0o444); + } } diff --git a/packages/fx-core/src/component/driver/teamsApp/interfaces/CreateAppPackageArgs.ts b/packages/fx-core/src/component/driver/teamsApp/interfaces/CreateAppPackageArgs.ts index 01fc1ed2d5..37f38012e5 100644 --- a/packages/fx-core/src/component/driver/teamsApp/interfaces/CreateAppPackageArgs.ts +++ b/packages/fx-core/src/component/driver/teamsApp/interfaces/CreateAppPackageArgs.ts @@ -13,7 +13,12 @@ export interface CreateAppPackageArgs { outputZipPath: string; /** - * Manifest file path + * Manifest file path. This parameter is used when teamspp yaml version <= 1.6 */ - outputJsonPath: string; + outputJsonPath?: string; + + /** + * Folder path where output files should be put. This parameter is used when teamspp yaml version > 1.6 + */ + outputFolder?: string; } diff --git a/packages/fx-core/src/component/driver/teamsApp/teamsappMgr.ts b/packages/fx-core/src/component/driver/teamsApp/teamsappMgr.ts index af1f4d9a81..cf51a6ec3c 100644 --- a/packages/fx-core/src/component/driver/teamsApp/teamsappMgr.ts +++ b/packages/fx-core/src/component/driver/teamsApp/teamsappMgr.ts @@ -156,19 +156,13 @@ class TeamsAppMgr { "build", env ? `appPackage.${env}.zip` : "appPackage.zip" ); - inputs["output-manifest-file"] = - inputs["output-manifest-file"] || - path.join( - inputs.projectPath, - "appPackage", - "build", - env ? `manifest.${env}.json` : "manifest.json" - ); + inputs["output-folder"] = + inputs["output-folder"] || path.join(inputs.projectPath, "appPackage", "build"); const packageArgs: CreateAppPackageArgs = { manifestPath: inputs["manifest-file"], outputZipPath: inputs["output-package-file"], - outputJsonPath: inputs["output-manifest-file"], + outputFolder: inputs["output-folder"], }; const buildDriver: CreateAppPackageDriver = Container.get(createAppPackageActionName); const driverContext: DriverContext = createDriverContext(inputs); diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index 6405f91f83..5d27d6187c 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -1022,11 +1022,10 @@ export class FxCore { // eslint-disable-next-line @typescript-eslint/restrict-template-expressions `${inputs.projectPath}/${AppPackageFolderName}/${BuildFolderName}/appPackage.${process.env .TEAMSFX_ENV!}.zip`, - outputJsonPath: + outputFolder: inputs[QuestionNames.OutputManifestParamName] ?? // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - `${inputs.projectPath}/${AppPackageFolderName}/${BuildFolderName}/manifest.${process.env - .TEAMSFX_ENV!}.json`, + `${inputs.projectPath}/${AppPackageFolderName}/${BuildFolderName}`, }; const result = (await driver.execute(args, context)).result; if (context.platform === Platform.VSCode) { diff --git a/packages/fx-core/src/question/constants.ts b/packages/fx-core/src/question/constants.ts index fc406df53f..d68be21ba0 100644 --- a/packages/fx-core/src/question/constants.ts +++ b/packages/fx-core/src/question/constants.ts @@ -79,6 +79,7 @@ export enum QuestionNames { ConfirmAadManifest = "confirmAadManifest", OutputZipPathParamName = "output-zip-path", OutputManifestParamName = "output-manifest-path", + OutputFolderParamName = "output-folder", M365Host = "m365-host", ManifestPath = "manifest-path", diff --git a/packages/fx-core/tests/component/driver/teamsApp/createAppPackage.test.ts b/packages/fx-core/tests/component/driver/teamsApp/createAppPackage.test.ts index 46f7b4e9e2..3111741355 100644 --- a/packages/fx-core/tests/component/driver/teamsApp/createAppPackage.test.ts +++ b/packages/fx-core/tests/component/driver/teamsApp/createAppPackage.test.ts @@ -416,7 +416,7 @@ describe("teamsApp/createAppPackage", async () => { } }); - it("happy path", async () => { + it("version <= 1.6: happy path", async () => { const args: CreateAppPackageArgs = { manifestPath: "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", @@ -457,10 +457,11 @@ describe("teamsApp/createAppPackage", async () => { sinon.stub(manifestUtils, "getManifestV3").resolves(ok(manifest)); sinon.stub(fs, "chmod").callsFake(async () => {}); - sinon.stub(fs, "writeFile").callsFake(async () => {}); + const writeFileStub = sinon.stub(fs, "writeFile").callsFake(async () => {}); const result = (await teamsAppDriver.execute(args, mockedDriverContext)).result; chai.assert(result.isOk()); + chai.assert(writeFileStub.calledOnce); if (await fs.pathExists(args.outputZipPath)) { const zip = new AdmZip(args.outputZipPath); @@ -487,14 +488,84 @@ describe("teamsApp/createAppPackage", async () => { } }); - it("should return error when placeholder is not resolved in openapi.yml", async () => { + it("version > 1.6: happy path", async () => { const args: CreateAppPackageArgs = { manifestPath: "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", outputZipPath: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/appPackage.dev.zip", - outputJsonPath: - "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/manifest.dev.json", + outputFolder: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage", + }; + + const manifest = new TeamsAppManifest(); + manifest.composeExtensions = [ + { + composeExtensionType: "apiBased", + apiSpecificationFile: "resources/openai.yml", + commands: [ + { + id: "GET /repairs", + apiResponseRenderingTemplateFile: "resources/repairs.json", + title: "fake", + }, + ], + botId: "", + }, + ]; + manifest.icons = { + color: "resources/color.png", + outline: "resources/outline.png", + }; + manifest.localizationInfo = { + defaultLanguageTag: "en", + additionalLanguages: [ + { + languageTag: "de", + file: "resources/de.json", + }, + ], + }; + sinon.stub(manifestUtils, "getManifestV3").resolves(ok(manifest)); + + sinon.stub(fs, "chmod").callsFake(async () => {}); + const writeFileStub = sinon.stub(fs, "writeFile").callsFake(async () => {}); + + const result = (await teamsAppDriver.execute(args, mockedDriverContext)).result; + chai.assert(result.isOk()); + chai.assert(writeFileStub.calledOnce); + if (await fs.pathExists(args.outputZipPath)) { + const zip = new AdmZip(args.outputZipPath); + + let openapiContent = ""; + + const entries = zip.getEntries(); + for (const e of entries) { + const name = e.entryName; + + if (name.endsWith("openai.yml")) { + const data = e.getData(); + openapiContent = data.toString("utf8"); + break; + } + } + + chai.assert( + openapiContent != undefined && + openapiContent.length > 0 && + openapiContent.search(fakeUrl) >= 0 && + openapiContent.search(openapiServerPlaceholder) < 0 + ); + await fs.remove(args.outputZipPath); + } + }); + + it("version > 1.6:should return error when placeholder is not resolved in openapi.yml", async () => { + const args: CreateAppPackageArgs = { + manifestPath: + "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", + outputZipPath: + "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/appPackage.dev.zip", + outputFolder: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage", }; const manifest = new TeamsAppManifest(); @@ -539,7 +610,7 @@ describe("teamsApp/createAppPackage", async () => { ); }); - it("happy path - CLI", async () => { + it("version > 1.6: happy path - CLI", async () => { const mockedCliDriverContext = { ...mockedDriverContext, platform: Platform.CLI, @@ -549,8 +620,7 @@ describe("teamsApp/createAppPackage", async () => { "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", outputZipPath: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/appPackage.dev.zip", - outputJsonPath: - "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/manifest.dev.json", + outputFolder: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage", }; const manifest = new TeamsAppManifest(); @@ -698,7 +768,7 @@ describe("teamsApp/createAppPackage", async () => { chai.assert.isTrue(executeResult.result.isOk()); }); - it("happy path - API plugin", async () => { + it("version <= 1.6: happy path - API plugin", async () => { const args: CreateAppPackageArgs = { manifestPath: "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", @@ -723,7 +793,7 @@ describe("teamsApp/createAppPackage", async () => { }; sinon.stub(manifestUtils, "getManifestV3").resolves(ok(manifest)); sinon.stub(fs, "chmod").callsFake(async () => {}); - sinon.stub(fs, "writeFile").callsFake(async () => {}); + const writeFileStub = sinon.stub(fs, "writeFile").callsFake(async () => {}); const result = (await teamsAppDriver.execute(args, mockedDriverContext)).result; if (result.isErr()) { @@ -732,6 +802,70 @@ describe("teamsApp/createAppPackage", async () => { chai.assert.isTrue(result.isOk()); const outputExist = await fs.pathExists(args.outputZipPath); chai.assert.isTrue(outputExist); + chai.assert.isTrue(writeFileStub.calledOnce); + if (outputExist) { + const zip = new AdmZip(args.outputZipPath); + let aiPluginContent = ""; + let openapiContent = ""; + + const entries = zip.getEntries(); + entries.forEach((e) => { + const name = e.entryName; + if (name.endsWith("ai-plugin.json")) { + const data = e.getData(); + aiPluginContent = data.toString("utf8"); + } + + if (name.endsWith("openai.yml")) { + const data = e.getData(); + openapiContent = data.toString("utf8"); + } + }); + + chai.assert( + openapiContent && + aiPluginContent && + openapiContent.search("APP_NAME_SUFFIX") < 0 && + aiPluginContent.search(openapiServerPlaceholder) < 0 + ); + await fs.remove(args.outputZipPath); + } + }); + + it("version > 1.6: happy path - API plugin", async () => { + const args: CreateAppPackageArgs = { + manifestPath: + "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", + outputZipPath: + "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/appPackage.dev.zip", + outputFolder: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage", + }; + + const manifest = new TeamsAppManifest(); + manifest.copilotExtensions = { + plugins: [ + { + file: "resources/ai-plugin.json", + id: "plugin1", + }, + ], + }; + manifest.icons = { + color: "resources/color.png", + outline: "resources/outline.png", + }; + sinon.stub(manifestUtils, "getManifestV3").resolves(ok(manifest)); + sinon.stub(fs, "chmod").callsFake(async () => {}); + const writeFileStub = sinon.stub(fs, "writeFile").callsFake(async () => {}); + + const result = (await teamsAppDriver.execute(args, mockedDriverContext)).result; + if (result.isErr()) { + console.log(result.error); + } + chai.assert.isTrue(result.isOk()); + const outputExist = await fs.pathExists(args.outputZipPath); + chai.assert.isTrue(outputExist); + chai.assert.isTrue(writeFileStub.calledTwice); if (outputExist) { const zip = new AdmZip(args.outputZipPath); let aiPluginContent = ""; @@ -896,7 +1030,7 @@ describe("teamsApp/createAppPackage", async () => { }); describe("copilotGpt", async () => { - it("happy path ", async () => { + it("version <= 1.6: happy path ", async () => { const args: CreateAppPackageArgs = { manifestPath: "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", @@ -921,13 +1055,80 @@ describe("teamsApp/createAppPackage", async () => { }; sinon.stub(manifestUtils, "getManifestV3").resolves(ok(manifest)); sinon.stub(fs, "chmod").callsFake(async () => {}); - sinon.stub(fs, "writeFile").callsFake(async () => {}); + const writeFileStub = sinon.stub(fs, "writeFile").callsFake(async () => {}); + + const result = (await teamsAppDriver.execute(args, mockedDriverContext)).result; + if (result.isErr()) { + console.log(result.error); + } + chai.assert.isTrue(result.isOk()); + chai.assert.isTrue(writeFileStub.calledOnce); + const outputExist = await fs.pathExists(args.outputZipPath); + chai.assert.isTrue(outputExist); + if (outputExist) { + const zip = new AdmZip(args.outputZipPath); + let gptManifestContent = ""; + let plugin = ""; + let apiSpec = ""; + + const entries = zip.getEntries(); + entries.forEach((e) => { + const name = e.entryName; + if (name.endsWith("gpt.json")) { + const data = e.getData(); + gptManifestContent = data.toString("utf8"); + } else if (name.endsWith("ai-plugin.json")) { + const data = e.getData(); + plugin = data.toString("utf8"); + } else if (name.endsWith("openai.yml")) { + const data = e.getData(); + apiSpec = data.toString("utf8"); + } + }); + + chai.assert( + plugin && + apiSpec && + gptManifestContent && + gptManifestContent.search("APP_NAME_SUFFIX") < 0 && + gptManifestContent.search("test") > 0 + ); + await fs.remove(args.outputZipPath); + } + }); + + it("version > 1.6: happy path ", async () => { + const args: CreateAppPackageArgs = { + manifestPath: + "./tests/plugins/resource/appstudio/resources-multi-env/templates/appPackage/v3.manifest.template.json", + outputZipPath: + "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage/appPackage.dev.zip", + outputFolder: "./tests/plugins/resource/appstudio/resources-multi-env/build/appPackage", + }; + + const manifest = new TeamsAppManifest(); + manifest.copilotExtensions = { + declarativeCopilots: [ + { + file: "resources/gpt.json", + id: "action_1", + }, + ], + }; + manifest.icons = { + color: "resources/color.png", + outline: "resources/outline.png", + }; + sinon.stub(manifestUtils, "getManifestV3").resolves(ok(manifest)); + sinon.stub(fs, "chmod").callsFake(async () => {}); + const writeFileStub = sinon.stub(fs, "writeFile").callsFake(async () => {}); const result = (await teamsAppDriver.execute(args, mockedDriverContext)).result; if (result.isErr()) { console.log(result.error); } chai.assert.isTrue(result.isOk()); + chai.assert.isTrue(writeFileStub.calledThrice); const outputExist = await fs.pathExists(args.outputZipPath); chai.assert.isTrue(outputExist); if (outputExist) { diff --git a/packages/server/src/serverConnection.ts b/packages/server/src/serverConnection.ts index 1e4db860a5..4a3695f629 100644 --- a/packages/server/src/serverConnection.ts +++ b/packages/server/src/serverConnection.ts @@ -228,11 +228,10 @@ export default class ServerConnection implements IServerConnection { BuildFolderName, `appPackage.${inputs.env}.zip` ); - inputs[QuestionNames.OutputManifestParamName] = path.join( + inputs[QuestionNames.OutputFolderParamName] = path.join( inputs.projectPath!, AppPackageFolderName, - BuildFolderName, - `manifest.${inputs.env}.json` + BuildFolderName ); const res = await Correlator.runWithId( corrId, From 5f29a2f5b60a0eac2f28b1996f1c525fa5154567 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:39:40 +0800 Subject: [PATCH 38/52] build: code owner (#12311) --- .github/CODEOWNERS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 645c95cd33..c86507c7fc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -149,8 +149,8 @@ /packages/fx-core/src/component/feature/createAuthFiles.ts @KennethBWSong @xzf0587 /packages/fx-core/src/component/feature/sso.ts @KennethBWSong @xzf0587 /packages/fx-core/src/component/generator @Yukun-dong @hund030 @JerryYangKai @eriolchan -/packages/fx-core/src/component/generator/apiSpec @yuqizhou77 @nliu-ms @Alive-Fish -/packages/fx-core/src/component/generator/copilotExtension @yuqizhou77 @huimiu @jayzhang +/packages/fx-core/src/component/generator/apiSpec @yuqizhou77 @nliu-ms @Alive-Fish @anchenyi @jayzhang +/packages/fx-core/src/component/generator/copilotExtension @yuqizhou77 @huimiu @jayzhang @anchenyi /packages/fx-core/src/component/generator/officeAddin @jayzhang @tecton /packages/fx-core/src/component/generator/officeXMLAddin @jayzhang @tecton /packages/fx-core/src/component/generator/spfx @HuihuiWu-Microsoft @yuqizhou77 @nliu-ms @@ -204,8 +204,8 @@ /packages/fx-core/tests/component/error @jayzhang @xzf0587 @LongOddCode /packages/fx-core/tests/component/feature @KennethBWSong @xzf0587 /packages/fx-core/tests/component/generator/generator.test.ts @Yukun-dong @hund030 @JerryYangKai @eriolchan -/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts @yuqizhou77 @huimiu @jayzhang -/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @yuqizhou77 @nliu-ms @Alive-Fish @jayzhang +/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts @yuqizhou77 @huimiu @jayzhang @anchenyi +/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @yuqizhou77 @nliu-ms @Alive-Fish @jayzhang @anchenyi /packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts @jayzhang @tecton /packages/fx-core/tests/component/generator/officeXMLAddinGenerator.test.ts @jayzhang @tecton /packages/fx-core/tests/component/generator/spfxGenerator.test.ts @HuihuiWu-Microsoft @yuqizhou77 @nliu-ms @jayzhang @@ -296,7 +296,7 @@ /templates/* @hund030 @eriolchan @huimiu /templates/**/ai-assistant-bot @kimizhu @swatDong @kuojianlu /templates/**/ai-bot @kimizhu @swatDong @kuojianlu -/templates/**/api-plugin-existing-api @yuqizhou77 @Alive-Fish @jayzhang +/templates/**/api-plugin-existing-api @yuqizhou77 @Alive-Fish @jayzhang @anchenyi /templates/**/api-plugin-from-scratch @hund030 @eriolchan @huimiu /templates/**/api-plugin-from-scratch-bearer @hund030 @eriolchan @huimiu @Yimin-Jin /templates/**/api-plugin-from-scratch-oauth @hund030 @eriolchan @huimiu @Yimin-Jin From 65878930e69487b7ba8afdac07b22d8c34eb0ea7 Mon Sep 17 00:00:00 2001 From: Hui Miao Date: Mon, 2 Sep 2024 13:34:15 +0800 Subject: [PATCH 39/52] fix: update the DC schema (#12291) --- .../appPackage/declarativeCopilot.json.tpl | 3 ++- .../copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl | 3 ++- .../copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- .../appPackage/repairDeclarativeCopilot.json.tpl | 3 ++- 12 files changed, 24 insertions(+), 12 deletions(-) diff --git a/templates/common/api-plugin-existing-api/appPackage/declarativeCopilot.json.tpl b/templates/common/api-plugin-existing-api/appPackage/declarativeCopilot.json.tpl index 50527d7e31..acbedc180f 100644 --- a/templates/common/api-plugin-existing-api/appPackage/declarativeCopilot.json.tpl +++ b/templates/common/api-plugin-existing-api/appPackage/declarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}", "description": "Declarative copilot created with Teams Toolkit", {{#FileFunction}} diff --git a/templates/common/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl b/templates/common/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl index 50527d7e31..acbedc180f 100644 --- a/templates/common/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl +++ b/templates/common/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}", "description": "Declarative copilot created with Teams Toolkit", {{#FileFunction}} diff --git a/templates/csharp/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl b/templates/csharp/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl index dc2e8ad9fc..f14138625b 100644 --- a/templates/csharp/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl +++ b/templates/csharp/copilot-gpt-basic/appPackage/declarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}", "description": "Declarative copilot created with Teams Toolkit", "instructions": "You are a declarative copilot and were created with Team Toolkit. You should start every response and answer to the user with \"Thanks for using Teams Toolkit to create your declarative copilot!\\n\" and then answer the questions and help the user." diff --git a/templates/csharp/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl b/templates/csharp/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl index 8159ff453a..5361f2b13b 100644 --- a/templates/csharp/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/csharp/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This GPT helps you with finding car repair records.", "instructions": "You will help the user find car repair records assigned to a specific person, the name of the person should be provided by the user. The user will provide the name of the person and you will need to understand the user's intent and provide the car repair records assigned to that person. You can only access and leverage the data from the 'repairPlugin' action.", diff --git a/templates/js/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl b/templates/js/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl index 1bb1f7b03b..4a436a8bc5 100644 --- a/templates/js/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/js/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This declarative copilot helps you with finding car repair records.", {{#FileFunction}} diff --git a/templates/js/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl b/templates/js/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl index b978eb0e51..d8cbb8ce88 100644 --- a/templates/js/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This declarative copilot helps you with finding car repair records.", {{#FileFunction}} diff --git a/templates/js/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl b/templates/js/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl index 1bb1f7b03b..4a436a8bc5 100644 --- a/templates/js/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/js/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This declarative copilot helps you with finding car repair records.", {{#FileFunction}} diff --git a/templates/js/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl b/templates/js/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl index 8159ff453a..5361f2b13b 100644 --- a/templates/js/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/js/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This GPT helps you with finding car repair records.", "instructions": "You will help the user find car repair records assigned to a specific person, the name of the person should be provided by the user. The user will provide the name of the person and you will need to understand the user's intent and provide the car repair records assigned to that person. You can only access and leverage the data from the 'repairPlugin' action.", diff --git a/templates/ts/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl b/templates/ts/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl index 1bb1f7b03b..4a436a8bc5 100644 --- a/templates/ts/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/ts/api-plugin-from-scratch-bearer/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This declarative copilot helps you with finding car repair records.", {{#FileFunction}} diff --git a/templates/ts/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl b/templates/ts/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl index b978eb0e51..d8cbb8ce88 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This declarative copilot helps you with finding car repair records.", {{#FileFunction}} diff --git a/templates/ts/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl b/templates/ts/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl index 1bb1f7b03b..4a436a8bc5 100644 --- a/templates/ts/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/ts/api-plugin-from-scratch/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This declarative copilot helps you with finding car repair records.", {{#FileFunction}} diff --git a/templates/ts/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl b/templates/ts/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl index 8159ff453a..5361f2b13b 100644 --- a/templates/ts/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl +++ b/templates/ts/copilot-gpt-from-scratch-plugin/appPackage/repairDeclarativeCopilot.json.tpl @@ -1,5 +1,6 @@ { - "$schema": "https://aka.ms/json-schemas/copilot-extensions/v1.0/declarative-copilot.schema.json", + "$schema": "https://aka.ms/json-schemas/copilot-extensions/vNext/declarative-copilot.schema.json", + "version": "v1.0", "name": "{{appName}}${{APP_NAME_SUFFIX}}", "description": "This GPT helps you with finding car repair records.", "instructions": "You will help the user find car repair records assigned to a specific person, the name of the person should be provided by the user. The user will provide the name of the person and you will need to understand the user's intent and provide the car repair records assigned to that person. You can only access and leverage the data from the 'repairPlugin' action.", From e6af1a71009c6bb46cb68fe285a80a1e3b2cfcae Mon Sep 17 00:00:00 2001 From: Alive-Fish Date: Mon, 2 Sep 2024 15:01:05 +0800 Subject: [PATCH 40/52] fix(server): upgrade the ts-node typescript versions (#12314) --- packages/server/package.json | 4 +- packages/server/pnpm-lock.yaml | 70 +++++++++++++++++----------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/server/package.json b/packages/server/package.json index 8c75403fc1..dcee502915 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -84,8 +84,8 @@ "style-loader": "^2.0.0", "terser-webpack-plugin": "^5.1.2", "ts-loader": "^9.2.2", - "ts-node": "^10.9.1", - "typescript": "4.7.4", + "ts-node": "^10.9.2", + "typescript": "^5.5.4", "umd-compat-loader": "^2.1.2", "url-loader": "^4.1.1", "uuid": "^8.3.2", diff --git a/packages/server/pnpm-lock.yaml b/packages/server/pnpm-lock.yaml index ccc68065de..3e38bcae68 100644 --- a/packages/server/pnpm-lock.yaml +++ b/packages/server/pnpm-lock.yaml @@ -44,7 +44,7 @@ optionalDependencies: devDependencies: '@istanbuljs/nyc-config-typescript': specifier: ^1.0.1 - version: 1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@10.9.1) + version: 1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@10.9.2) '@types/adm-zip': specifier: ^0.4.34 version: 0.4.34 @@ -101,10 +101,10 @@ devDependencies: version: 8.2.0 '@typescript-eslint/eslint-plugin': specifier: ^4.19.0 - version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.7.4) + version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^4.19.0 - version: 4.19.0(eslint@7.29.0)(typescript@4.7.4) + version: 4.19.0(eslint@7.29.0)(typescript@5.5.4) chai: specifier: ^4.2.0 version: 4.2.0 @@ -191,13 +191,13 @@ devDependencies: version: 5.1.2(webpack@5.76.0) ts-loader: specifier: ^9.2.2 - version: 9.2.2(typescript@4.7.4)(webpack@5.76.0) + version: 9.2.2(typescript@5.5.4)(webpack@5.76.0) ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@14.14.21)(typescript@4.7.4) + specifier: ^10.9.2 + version: 10.9.2(@types/node@14.14.21)(typescript@5.5.4) typescript: - specifier: 4.7.4 - version: 4.7.4 + specifier: ^5.5.4 + version: 5.5.4 umd-compat-loader: specifier: ^2.1.2 version: 2.1.2 @@ -606,7 +606,7 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/nyc-config-typescript@1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@10.9.1): + /@istanbuljs/nyc-config-typescript@1.0.1(nyc@15.1.0)(source-map-support@0.5.19)(ts-node@10.9.2): resolution: {integrity: sha512-/gz6LgVpky205LuoOfwEZmnUtaSmdk0QIMcNFj9OvxhiMhPpKftMgZmGN7jNj7jR+lr8IB1Yks3QSSSNSxfoaQ==} engines: {node: '>=8'} peerDependencies: @@ -617,7 +617,7 @@ packages: '@istanbuljs/schema': 0.1.3 nyc: 15.1.0 source-map-support: 0.5.19 - ts-node: 10.9.1(@types/node@14.14.21)(typescript@4.7.4) + ts-node: 10.9.2(@types/node@14.14.21)(typescript@5.5.4) dev: true /@istanbuljs/schema@0.1.3: @@ -955,7 +955,7 @@ packages: '@types/node': 14.14.21 dev: true - /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@4.7.4): + /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.29.0)(typescript@5.5.4): resolution: {integrity: sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -966,8 +966,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@4.7.4) - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.29.0)(typescript@5.5.4) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 4.19.0 debug: 4.3.6 eslint: 7.29.0 @@ -975,13 +975,13 @@ packages: lodash: 4.17.21 regexpp: 3.2.0 semver: 7.6.3 - tsutils: 3.21.0(typescript@4.7.4) - typescript: 4.7.4 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@4.19.0(eslint@7.29.0)(typescript@4.7.4): + /@typescript-eslint/experimental-utils@4.19.0(eslint@7.29.0)(typescript@5.5.4): resolution: {integrity: sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -990,7 +990,7 @@ packages: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.7.4) + '@typescript-eslint/typescript-estree': 4.19.0(typescript@5.5.4) eslint: 7.29.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -999,7 +999,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser@4.19.0(eslint@7.29.0)(typescript@4.7.4): + /@typescript-eslint/parser@4.19.0(eslint@7.29.0)(typescript@5.5.4): resolution: {integrity: sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1011,10 +1011,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.7.4) + '@typescript-eslint/typescript-estree': 4.19.0(typescript@5.5.4) debug: 4.3.6 eslint: 7.29.0 - typescript: 4.7.4 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1032,7 +1032,7 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree@4.19.0(typescript@4.7.4): + /@typescript-eslint/typescript-estree@4.19.0(typescript@5.5.4): resolution: {integrity: sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1047,8 +1047,8 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@4.7.4) - typescript: 4.7.4 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2349,7 +2349,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@5.5.4) debug: 3.2.7 eslint: 7.29.0 eslint-import-resolver-node: 0.3.9 @@ -2375,7 +2375,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@4.7.4) + '@typescript-eslint/parser': 4.19.0(eslint@7.29.0)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.flat: 1.3.2 debug: 2.6.9 @@ -5321,7 +5321,7 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-loader@9.2.2(typescript@4.7.4)(webpack@5.76.0): + /ts-loader@9.2.2(typescript@5.5.4)(webpack@5.76.0): resolution: {integrity: sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5332,12 +5332,12 @@ packages: enhanced-resolve: 5.17.1 micromatch: 4.0.8 semver: 7.6.3 - typescript: 4.7.4 + typescript: 5.5.4 webpack: 5.76.0(webpack-cli@4.7.2) dev: true - /ts-node@10.9.1(@types/node@14.14.21)(typescript@4.7.4): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@14.14.21)(typescript@5.5.4): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -5362,7 +5362,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.7.4 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -5383,14 +5383,14 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsutils@3.21.0(typescript@4.7.4): + /tsutils@3.21.0(typescript@5.5.4): 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: 4.7.4 + typescript: 5.5.4 dev: true /tunnel-agent@0.6.0: @@ -5480,9 +5480,9 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@4.7.4: - resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} - engines: {node: '>=4.2.0'} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} hasBin: true dev: true From ca2296d20f28a86a04cf09d6e03c910f6e67b19d Mon Sep 17 00:00:00 2001 From: Hui Miao Date: Mon, 2 Sep 2024 16:18:12 +0800 Subject: [PATCH 41/52] fix: migrate the dashboard tab js template to vite (#12313) --- templates/js/dashboard-tab/.vscode/tasks.json | 2 +- templates/js/dashboard-tab/README.md | 12 +++++++----- .../js/dashboard-tab/{public => }/index.html | 8 ++++---- templates/js/dashboard-tab/package.json.tpl | 13 +++++++------ templates/js/dashboard-tab/public/favicon.ico | Bin 0 -> 91302 bytes .../dashboard-tab/src/{index.css => main.css} | 0 .../dashboard-tab/src/{index.jsx => main.jsx} | 2 +- templates/js/dashboard-tab/teamsapp.yml.tpl | 4 ++-- templates/js/dashboard-tab/vite.config.js | 15 +++++++++++++++ templates/ts/dashboard-tab/README.md | 12 +++++++----- templates/ts/dashboard-tab/package.json.tpl | 1 - 11 files changed, 44 insertions(+), 25 deletions(-) rename templates/js/dashboard-tab/{public => }/index.html (73%) create mode 100644 templates/js/dashboard-tab/public/favicon.ico rename templates/js/dashboard-tab/src/{index.css => main.css} (100%) rename templates/js/dashboard-tab/src/{index.jsx => main.jsx} (90%) create mode 100644 templates/js/dashboard-tab/vite.config.js diff --git a/templates/js/dashboard-tab/.vscode/tasks.json b/templates/js/dashboard-tab/.vscode/tasks.json index 72413ddb7b..7272ec795e 100644 --- a/templates/js/dashboard-tab/.vscode/tasks.json +++ b/templates/js/dashboard-tab/.vscode/tasks.json @@ -75,7 +75,7 @@ "background": { "activeOnStart": true, "beginsPattern": ".*", - "endsPattern": "Compiled|Failed|compiled|failed" + "endsPattern": "Compiled|Failed|compiled|failed|ready" } } } diff --git a/templates/js/dashboard-tab/README.md b/templates/js/dashboard-tab/README.md index 2ed6dda262..79fffb69d2 100644 --- a/templates/js/dashboard-tab/README.md +++ b/templates/js/dashboard-tab/README.md @@ -52,11 +52,13 @@ The following files can be customized and demonstrate an example implementation The following are project-related files. You generally will not need to customize these files. -| File | Contents | -| -------------------------- | ------------------------------------ | -| `src/index.css` | The style of application entry point | -| `src/index.jsx` | Application entry point | -| `src/internal/context.jsx` | TeamsFx Context | +| File | Contents | +| -------------------------- | ------------------------------------------ | +| `src/main.css` | The style of React application entry point | +| `src/main.jsx` | The entry point for a React application | +| `src/internal/context.jsx` | TeamsFx Context | +| `index.html` | The entry point of the application | +| `vite.config.js` | Vite configuration file | The following are Teams Toolkit specific project files. You can [visit a complete guide on Github](https://github.com/OfficeDev/TeamsFx/wiki/Teams-Toolkit-Visual-Studio-Code-v5-Guide#overview) to understand how Teams Toolkit works. diff --git a/templates/js/dashboard-tab/public/index.html b/templates/js/dashboard-tab/index.html similarity index 73% rename from templates/js/dashboard-tab/public/index.html rename to templates/js/dashboard-tab/index.html index c61bcb4424..a72c470202 100644 --- a/templates/js/dashboard-tab/public/index.html +++ b/templates/js/dashboard-tab/index.html @@ -1,17 +1,17 @@ + - + Microsoft Teams Tab - -
+ - + \ No newline at end of file diff --git a/templates/js/dashboard-tab/package.json.tpl b/templates/js/dashboard-tab/package.json.tpl index 6836dbf579..02d6fec293 100644 --- a/templates/js/dashboard-tab/package.json.tpl +++ b/templates/js/dashboard-tab/package.json.tpl @@ -4,6 +4,7 @@ "engines": { "node": "16 || 18" }, + "type": "module", "private": true, "dependencies": { "@fluentui/react-charting": "^5.14.10", @@ -14,17 +15,17 @@ "@microsoft/teamsfx-react": "^3.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.8.0", - "react-scripts": "^5.0.1" + "react-router-dom": "^6.8.0" }, "devDependencies": { - "env-cmd": "^10.1.0" + "@vitejs/plugin-react": "^4.3.1", + "env-cmd": "^10.1.0", + "vite": "^5.4.0" }, "scripts": { "dev:teamsfx": "env-cmd --silent -f .localConfigs npm run start", - "start": "react-scripts start", - "build": "react-scripts build", - "eject": "react-scripts eject", + "start": "vite", + "build": "vite build", "test": "echo \"Error: no test specified\" && exit 1" }, "eslintConfig": { diff --git a/templates/js/dashboard-tab/public/favicon.ico b/templates/js/dashboard-tab/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ef5ef2b4b028da06704021fe28884aaa3bf313c6 GIT binary patch literal 91302 zcmeHQ2RxPE8-K46O*GW6WTm~dhmoWrvQ=gxG!#WfF0PDdD-B7s*RMqx*`>&CiOeJ; zdu4n7=Ui?--Q4S5?oIx^_v1L@J>z-4&vV9m){7uGgcE^393qIgPeKqkqVGTdD89}B z((`l65JX?U^Z9Kr1mRah5Gkon{|spac~y)cqM}{Try@w@OpsEr%g>D<=ag^=H?U!T zJJ=9JQXhwSC@ZcXIc(xEP|`>_Ss7LM6dKMUz|z@&+Zb3w&1E$$5M9(@M?CLERiu_(l!&og8b9@*d)Zt!-6<@?Sd&Cw zD5P3$woeuCAALz)Nog~BH!RYxxJISq+uh)-JJ#Q7@6D2$dBaO}Ll6I69t~o>T`fD$ z^N50W8QZesyZkshaLAMr(L*N`Mog}Bcf0@EwmiUBX zocT7mS8KNC`wdm)4Clz7i_^OmQ@2;MJhbq`Q@dfKb-teEm2z2}lj*>B@ZkJ01$e@( zQO^QQj*gXDs#eW5x`t!C!^7_t;Ypj>6^HxBPCdWDJ2;|Yf6a>Zf`0R37Y=>E8uEVf z)<*r>Nebf(yk{-bLZ*Iu5OzHvBDg_YIAqA71)HR~#bmQ}Cz& z$K0!n*4}rVEqRfB$0J`3g!9Q;|C*rYk&S1@X4$@v12JR+Lieb?N}a?McO=K zclPWv$EWB8`L3Pp&#ugJT6kJcxSb?HM20WRc8JVD5wiouAD2v*%d@(4`yI=S{mIF` z>n-JXg}Prd6iZY-rK6n^AU|o+J;_JDQxl#bM>00%<=Nf69x z8!h}aC~$<2?0p;Wt-0amADe@&$#_<>jP>^6t&ms~o;06*MxgIhKhEnVAzQUX9SiF~ zdJm93w6xVusbNuW-P9VNsQKH&_W3TVzaaH_2X3rKQBlg2XYKD3UxugpjXac-WgwQiicfgIB5<$E zT5(m%8Yew3GkfXGx!xnM2z)+oc76OcF^$6`Ipl*8X$6@JHH(f;39e-&xSs*8saqT8 zDBB;&<=Vtk^JR1LxR_wm;zv8$ETSqubv$2W-JWiBO7%v?L{;mYsb?$hq+37VFZXaR zo7V2ci6_!qhqA2!W!;5RSJ~Q(lOni%&rP3U#?HP0lr$q$J>hMZ7W(3oFaEh(2G69A z)g~{^?H+s2ep!=ldPyX*Z8KpyXCWIhMt0MhQQ1cS$Q*XJL^3v1Z;1Pl$O^s*HlBxNPE#^!X=n*<~NS zh|kuMOu|J}DBPE=2gk z<-J*`&(Y%W{q^R>H`uv_3)WN}U*<0Duzq~1?bnjaxw#G8D{d$!CS8o5DG?D-c37JQ zh-82D%!plxYs(2^y=E zU3#dvS5!0C^!*7=U&e%1tlWijk=gH|&MBH}b>h(&eLQfpg&rGjVzy<%P5X`*cl{RE zz-4oizD9roJ$LT*_2)nW1)qbq(8b?)mEreS7HdUU-EQVs%T{Oc&vbuw?$Py{hGJ_T zbAAiE7^=$Wjyek#>2epK`b7y>a>UmS7Zee(sNS$($!-70*=7wlS8N*6TzE8J20GW+ z9_5wVvix+NXLkJ1{IHA7IrqN`cieBjY<9(?DLAFAGQHOH)<+iQVNwT+PgIRHFm+60 zn{XbgPp0BSQ1H66ZJ^-zM(ZWkl{Y7_e=M}Pyi~y{DFv z*x1mv)I+xYf#Qn!K0BWx(!yijvBYnRjGFDVB`RroRczE^pVvF1N*JQ{aBBZcSS z^^hqOgNk-rE!uo!&FZ0&2Rs}-lV`4;OE@K)VmRKZ(X^OTjHPO7@#EQB>*_$&@+y;P zd#)h(H2321Gedk7hYRZD22A$nENl>4Y2KLo)+^cM9SbK9PA}M3sJymgvZvqcvbN_U zM^lSd&@2>+3Crd1tQ|S7A4tBdK`WYglZZ7J{&ZJ(|Hbq}}w{ zaBkto9Es4gZs=aI^;_ST?zOBib3I@B^n&!#RKKl(Vty7PngJj6x7TF?)mc|4m&MaE zMY!Z!uHk*Q88*UIi_VUYhSe-y~{beLNHiJbbm(w&i{dL+f{g%ys-sxZM?jgr`bo1mnw`C7W zyW{$?b!jYGhzqx`sM_XOta!{v^q+BOGj%7Hpw+iLP|Immi!$2pTl-roD(yz`sZz5*AgB4n6-@RWzc*1V4$ z{0CKCCzsa=o!*_(d?49XD;IPiatrxdC2XbkH{PCQyySZJbqV}NHs1L)s#e^V--cW= z$cwCCPpDl0I%-X;ou@~1aDG|cn6qrf+}IpfExk0Ckk-i7X}1Es)A^RCKD-*ge992K zy`za!oUmubu@%KjmTnq{=TRjBk(qI)V5h`-v?<6mwk+k?>qNI&-fJ)Hu9=>i#5K-f@q|ppxc0Yu zHeRcBypM7}O}ff)ard6$_MwoRE}%f*k7vb~PNCspPq3yI7pE z=awf2UwYkgYmuCb7_q;8`t_#i>HGE_PU1lZyT*7d39{IJH1=ZLCWSo-u;IS@NcQBb z?DD1Q=-K1f+A{@bR=VGnUmdwiEYUxHa}JNj`J$Bus>7wmjfiPj@Jwy|()9T=3T-=d zp3ITF6F7&zb(n{5P+9S~G&#;x~_}X?n8$obUG(bK`65{)g6-`^P+eYBX~F{2hD;wx*5$&i2{U=vKs- zNh-~*qLar6KAyJpYVGhBy3IIyQTJgi&8M%-Iq+&}+v3||&0|#)3(l-uTX+ceNiz;L zFAY4k#WG*e$RR;}xYS62nFQ0D`9nntxQ6U+)Jq)o!2I|kW3#p;u_%shI`2|Mk0bf% zy-fVR^JpI~I;Jni4!$cLi$)RJl490dDhX<~ zzX@z{KjF+(k+Gq6u6wx9;wUQ#}>FxH@N-aZnWq6rTPW2*F>!pSPk~> z6z7vC%yLo~>uK?_5k1*-$9i5YNF2Z2*t_>;o5sBs z!}0Ni3ZLB&)%-zzDc-?C4<^bQi62^-iK9{9zXDWS8V*m^6U?r zRBv&jUTw)>fR$$)fpj#kiu|XftxCscrK0#Y8O5rK@}&H4la>~(@SHV-O<7ybDaY=6 z=84gqI6i;tXO%27KAcRr`&N8HlMoLo4zO?Wbbo2Oo^!&g`|SSetFpK3ygan&!m$r5 z%6A1`c{P0#x;?K(>9*HIcV2=j&rJ};WhZXNxNU&lwHN;4prTKsxS!h#?;_(_bef430^*9xla;WK7IiKtXu&F$Q0D9VN1~tHabp8^k z`UyOBRS?Z_lXF1C)9&`S6xyuOo1 zhdGzj$lpUa+wdQ1<$So>#R6MQ&^<@pHH~MU2@v_vFi+eps$#;GqVs9I$m=I%ALeJXy$$Q}b;=Tm33N7)MJhtqI4zI_m>*Lud2u$y1P&faz3G+a^KLH$QwoT|ExGOd*+9oxT7 z_r>KIB}G3x|18&X=)Ww5Ywq!1td(_~?^qC&KX=a;a(z_-j*J#;9Mb8I_dL`lak^_(PstH?%_B- z>j>vNasZK<9We|n|K zx``sAm$XOjJ?30{#FJfNtYl>I_%hyT-+KZVTN*PJ|7AbL9v8b|SCXmi+IEBk@wj_; zim)T{XtoC4SE>5d2QH;BhZ$9GSmFh;%EcAI6UWu&O= zxOP(fPTt1?k69w4HP{u@CfvEKXPQ}ixne@QaH(^6`};4`rk{};RVHgxy2&QeJ7ZDx zLG+W=F;S1u8@B)YUz-wcy+JsXM;P7xVU60y`w1`Fo*)6+kNsOCz5~Zs_$pxt-+JYw zXWwt-BGvz7tr)eoKtjk2Z`$lNPNdGt`zk+M(pw)NZIs}AA+}+SXeaLT}L{8F|PI# zflVCeu;#*a?z)fvwv;}}V?{OaqXFN{PtX01N7?u#J*Lm6Qe_GO#&KF#h}E#i1OS@L^;(XFSr zrsfz&1Uau$^NmMBHz#hm=<4VVYt*Hbg}m6#ZQmj&*$5AL~_^bj+eKvM_+JVs>Knm+NDXqM!Ac#P7B!A z97y~3sqYkXwuA(?APwy#ms<7OmX_)h9YfuDrRJ67?i7Fj(h8F$2&&T#vKJtwj zGMB*D)+7+wwD@=(3f}6E?9)--eDd++Yx=U`kMtdKjs{s|__LpyA{-QL~+r%j0u`Djz9En=$+5fSqn^$q@Bw=0J1cdp>u6<;ZvyS#RCmXIl!>2S`PIO!aB)3U4;>gVFEzs;H?Y@3Uk zYazB$sycB=QzvvxdcBr!wSaj?%eQ-(d&J}??7$Vu?RRJ|lU|yYa%IT6f|R10o`69f zUXaG}TkJFAQ>mX)uC%NU7k5y%zpm6e8BBScG)}&{IVM1!Gu%w<=*kgqCNH`qVa9*7 z&dCu6+MU2xukLaoIxIu1Crv*)yx8Y;^GLH#iablT5Zo4DlYrrl<3t>MM9(41=TzNcCY?Z0WOxsvTFHaNj(pdRu@(lpTSlQZV-+VO` z%N0(27g(loRo2uaG(~gc#*tYdGVeiN|LD`GpoVuu*hlyH%%DK8v9&igoM}pEYyJ>s zx_;&~EreI({02>9?J^}9bB~HSQ=RZnBCmEVjEFWVd4kN@r4v%7MaVlWTe`|>x}aM~ z+)mSw%6wLd58OL(ThgESH}DDZJIO{=%vtMNjubjBUUqy~Q;qixFr&hDk@v}D*6j|{ zPR$Go9Lrwt^}?8_8McNM0-#hYFopMc|BdBQc6N;;tM^$5`K{S%%GnWNhi`8@9avv9 zyBW;iEqq-h;kWTik?Hs|JeW`u=VZRLs|$*uk= z#c+(1S6a4%%*LF_c^ymbOp9kO0i~P^H~g4kc`hFONwG2ytQx72f#UP zx5&DF%rA01VG)3ejb%PdNOQjZICZc(aYXjrAzhP0A$n|E1AM1)vVFvb*nZwPa`zq+ zk708O!d|Aib(zPiwsPbfIE`(1=gVpAvgHdmdYhwZn9^{6_o-DG5|U>;6J^X-$S6MY zHJKs1m)+KJMFM}??8fppEHijsyWUq@6#KRMt1xb&X>sXrr$$$s>?^kAg{*r`aXq+r*!a1G(blaM zd!~d%BzZ^XTS_UiipmkDuxd`o#OXWZ(mfWGWiKqg0atohG|wdrpG)A}wKsRwO^!RM zEs`f#+J*{(7LPxAIm=m=nb$;xykcV<8u}gQ9JUUJt;7A1D}UHJ9JUUJt;1pKaM(H=who7_!(r=i*g71x z4u`G7Vdvqn^KjUCIP5$eb{-Bp4~LzH!_LED=i#vPaM*b`>^vNH9u7MXhnu}gQ9JUUJt;1pKaM(H=who7_!wvFvxEbJVoIWtoz`*+|;g10Byu^MO z0vG}q0vG~)L!i>#ovXstep8t<{tz&CfJrNNv8#lp%*E~-@D~F+6ZrqFaIteJcf%{! zySk3=TWMG-h(Ogz0(XTo-Vop#RPKy#E_1d+=`lbSZRIZbP+;q#X9*)PRB1z?%)?`3 zg)813U|vNJ-qhpb8!BAvkHUIH8x?p)>oDi_G0qteAr^KX(trK^J+;Jbx{ z!9d$^d<%@s-ynmozLtq&oW8YHKp$#r-3ZhE-(^tdf)5^OeWzSL{yB=G@MAjvmp@R) zcT(oPZ+gq<{2-10kKjic8;_0HX;>G&!vO7%iQ2UtP29H&Ep)V|Yd(TjIl*=awvqpD zGKe-cI?*58$gyXhi%dC!XNh2)Y=t#pMg4%4BH?|ybYG{!HPez4(Mo1A1pXiqH|E=uchor ziLb#DKA7w0{52lripL#vk^< z%)r07x(d8r{QPTgX<511LJ*SkGk`DJL9MgYH|LM_dTH{jE;r@j8N6#sx#q=N3 ze_C~#o_PJyb4qC`>2QC-G5yE%pB}xYH7+F`?oW7s^qf*!O#dCtOi<5JS${)G2O&nczF^dHlIT6LP9c>U3HN@*$SaDT!v{m1m59=)a| z?zcmX-G2+~13V|zA3dj(_Wx1;3+))Q|Np0UNJ}}15{8t*>kA9e=9+4%rlX_d=glWw zzTVQ+7k;68kIL^_f6Op7Wa$29CFy{o}Wi7!gwe+&Mwy@zd1r`|ILd)VHCGsHJ#MfX6?``}E?k>rwaKo!p!+_RjiQ39? zK+mgt!kSVTj1SXMDr2zVOo`6k@F&eJfV;%vs-5vdlyK-R9AXIG0oo|xOg&tsjgkx~ z@ikb&X~iGP0mz`d%FTXNZ&;H*C$>3s>OHwUU_I!mEdn?X+Vj`JsvCZszXtsPP4^D~ z8MM$V16tdAa?Hv7FduT+4(9s@?sPl4u@$ZsB9Jwy`2cn>0J+(XTVW7FPv2W>Wdr(&S~ zs}%KC=0HEsv@u&k58gk;wc3l8IMIFwWpD3j@V%Cy_=Efg8sFZ^e`{st{u8EM_Zm_Q zgKZAfdwQ@Z)(!BUOpTtuQUAdh@wa{d1(rn(f1vw+UHcEepGK|SX6Q3e7B&2T$M}a@ z`2+C`e8aAep%_#7UJua!T53Epd;CwW?16grJMo8Q^~NVN-+y~6dmx_wN$n5hpPBPN z1A%XEW&TP1FNs!W&3}^e|C4OEcJjO0e^?f+yh9l!2OJkMV*Qs={sSEj=f;?gKP~fb1C7H#mJj;jIA+NJ z<~@+S4TiGe8VSIO;orxDdD6Q6G8k}TCXH~d5a7kI??b}8=v{wgCVzt=?=BhiyB6;;UKv?5ClhZHvs@0yFAsvy{gNd z58MJ>?r7lV>T(l+o0Ji7BCMU^Aj=<_65U8=cpD7wa>JrXg>`qsVo3#ex}#v-`|KoKN2B#-3gARs?}#Pf1pzV6>8r{w;T5Oe%C1iEC=sW6?TQgOH8&@ReQ zv>I{ja<2l?C+*SZLZcCZu5b>NfN*uWS-ZJmCLCSiL^q+!1H)nIP;p6asH~1%;eB!g z8epEpwB6l+&L81`{vU3@7jzS80Q~-N6J03Uz5aH01A4ovBZx@&QB6^R2dVl(%vN<} z0}J@!q{lG>;2{MJ0T>)22>yegbf<;=#}L2}`27f=r%!W~xj1Yrcg3Fr@3hh2owf*= zdN7wz1N@~h3_Lqs;o_hMH>kt3rbJ2a#nE{qRaqX%vbi*{{zrN%%ko?0o<8PKf#y=*1O#i|7 zr;q(V*8csBKwogg+W&RLG2lRq|FHHSYyYwKA8Y^n(r&{va%?=Jt}_~$?ViF+F=E8XlRDDe*UnyTEp@lV7D=s{0)VW8GO?Bso5JO6N95A5%#q@)L(^__ywlk?u?hiS<1{N3x{&w$(^@5jL!xQ_-HhnesE!GF(p ztm31|X@-8Vw68CJ=s(!|&VV~lf4xhS zQSBc&u8j6Gi+@J-e~jjrJU?dXKP-n4;~#Q*8SO6vZC79Rwf&T)hxU&|C&Ym2IH;HL zFDV~p*|6{Wi5D=gq1WG2|JR*fSQlV>&^acc@BOEHKFo5%b6xcE{9pW@$3M)Xl^OZM zF)SR*{>Kw-IzVmw%M3c1nJ0Xgp$7vPm)iReGiha3-o$fJG}Q&#-hY`zC$sY8d4VHlnBAIzo|%m4oy0V?y``CS)~5IS!<0Jj(jz}Vo%1JX?i#9J7^HcH}+ z2Kil=i;(PS033`@vI)Qs?=>LW0$n!9iRdStbtc^fLc057Fxf=70FNXaz(xR9Qou_o zI`6%}b#&c%(bjd}1^z!90EHmpL}YunC5e&%XcF&<05-u9r0*dJ8ZuQ_4X#7 zFZdH-g69S+T=5scxU`JYm<;qs6<`c0OdZUL=)ZN zF8JWzNq^vW-QBdDt9@>2gy!KbX?nK?dZ_z5c-SK+!V$7#TLCTf!#FX!jcB4D%&BC9 z?v91oJlxgVqTBtPYH#j)TQ$)_M{AmRsC0FZ2Xojfz?{VmU>AZlx+Y)>z`3NyiQ1~_ z;LL8n`2*`~!8X#XP-@0bW;J?JaRYiqQ=NErnbvP?em-DYKyCgR@bVIzx$W2a^h4{{ zq<23vO3A%fd>>)<&Ca}P+#@TPDZMn63yh{a4qz_ zTIX6IE%cWVtb3;)@B-xk#(TtZbfmhXDp>CCfM)KVbX=Cci0<-@1<%dUI16PtejfiydmL z{}cV4JlJ*g#6u_UztT?P1@b^H2WHGaK-#@G%Ar>^)zCMVdw!vxB!@CGU4lA8qLq>j z@c-Gu|))%U+1vMzUK>dof6%oa2SV?bd&OWb70TA9_hE*i{{!K+@m0J()l6K^;i_VFdksslO!o_tysWr;(2(d-ap)52OLMk)30NpWl69+tX9~ z*HG8@Z?gJJ%BxcjwDn)4H2t+gbIJ z7^kQHtH0$lB7G+hl;zOd_<<2L^fwQvOT_vB>St%WMEq7?Dy`$U{+5rW|2+tFzSqJX zU2q!_wBfcQXv1ws(1x44fKA*c*3Bkv7XyCqVI8m!ifF^H`Vc>~19p26ZLm5;v;ixG zE_VI^8?a2Ihh($1fv*$+x^PW^en?+6pdZ@ikPkG!SK9{i4dUTJKG5#Ot(u4(z_km{ zHn5uxK8L^mY`9NL5Ev<7e(clY2A=9bm*5dy83%c;T10SM;W1R zA8ht4h}>z|(c``la4-Jb1ABgb{~^+bZ)C(bKpq)t-=Maa1I$BEDBlh(akRb$?~a9Q zqR@c5gs&#*XiTREmwl_m3dz_1p??oBZX4DT_hC?y!516zU(S2O@$PF))$NdmaCHT@ z2zB`udgnC4z`5MB>!ne6KRLvPQu&nj9RN(46Sb6=_N8nRt&j$Y1GVxYU8MJ0avRVP zOv#Ilx*_&^z>sr#U;;=Uca}7a>YBV zy(QqiJ%G~rH+XkF=z9~v{5kl}iE<+8E_+B%fBT=4N*jLcAq3;Ic0k8Z^YE}N@_q;U zNi_7Q|GlOphd$8nTtguBzmSIRICS#;^L!U9ABOiNkKV%4EKNhm=W=tv`W&fzXhT_$ z@`0H5#6Jut#i7RrWACEwW%cL=aY%VGntyuB?@j(BI%%~bwmtIPZ7kj$f0!?%p%aH+ z^`F*qN%4s1Qh|<9qJdohNa+}9!#W1cFLQZ4)jvj-+dVHL4p0`I-{dTUn0K#t-Q)hr zZelwRr)c2xOf;BAfCf&{5Wp!t0+>3W`v+$sxSYZ44M@w1L#ux>&cNR}CDhjW`C>Rv z0jDJdfg#OPNU;G=FTZjZmq}p0^E!Ah1!t1*rNDia*6;k)ySk1Cy7HA=hd~|%FyCH^ zMq*5j?{|L}ePL?+U;78n~bLYlS;|RDGO))(P+|i zsHKOr{3+=n-`#&C9JkX-VaylvbA-|n@;On4G;=iZ()vFLBU!cptR*8~<(wKrEO(X--H39QK%ou`? literal 0 HcmV?d00001 diff --git a/templates/js/dashboard-tab/src/index.css b/templates/js/dashboard-tab/src/main.css similarity index 100% rename from templates/js/dashboard-tab/src/index.css rename to templates/js/dashboard-tab/src/main.css diff --git a/templates/js/dashboard-tab/src/index.jsx b/templates/js/dashboard-tab/src/main.jsx similarity index 90% rename from templates/js/dashboard-tab/src/index.jsx rename to templates/js/dashboard-tab/src/main.jsx index 61bd0a0fb4..253d7e5f99 100644 --- a/templates/js/dashboard-tab/src/index.jsx +++ b/templates/js/dashboard-tab/src/main.jsx @@ -1,4 +1,4 @@ -import "./index.css"; +import "./main.css"; import React from "react"; import { createRoot } from "react-dom/client"; diff --git a/templates/js/dashboard-tab/teamsapp.yml.tpl b/templates/js/dashboard-tab/teamsapp.yml.tpl index a192ed6aa5..49577b1a85 100644 --- a/templates/js/dashboard-tab/teamsapp.yml.tpl +++ b/templates/js/dashboard-tab/teamsapp.yml.tpl @@ -91,7 +91,7 @@ deploy: - uses: cli/runNpmCommand name: install dependencies with: - args: install --production + args: install - uses: cli/runNpmCommand name: build app with: @@ -100,7 +100,7 @@ deploy: - uses: cli/runNpxCommand name: deploy to Azure Static Web Apps with: - args: '@azure/static-web-apps-cli deploy ./build -d ${{SECRET_TAB_SWA_DEPLOYMENT_TOKEN}} --env production' + args: '@azure/static-web-apps-cli deploy ./dist -d ${{SECRET_TAB_SWA_DEPLOYMENT_TOKEN}} --env production' # Triggered when 'teamsapp publish' is executed publish: diff --git a/templates/js/dashboard-tab/vite.config.js b/templates/js/dashboard-tab/vite.config.js new file mode 100644 index 0000000000..1f2556b593 --- /dev/null +++ b/templates/js/dashboard-tab/vite.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import fs from "fs"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + port: 53000, + https: { + cert: process.env.SSL_CRT_FILE ? fs.readFileSync(process.env.SSL_CRT_FILE) : undefined, + key: process.env.SSL_KEY_FILE ? fs.readFileSync(process.env.SSL_KEY_FILE) : undefined, + }, + }, +}); diff --git a/templates/ts/dashboard-tab/README.md b/templates/ts/dashboard-tab/README.md index 67a78bb0e4..d5f23aef09 100644 --- a/templates/ts/dashboard-tab/README.md +++ b/templates/ts/dashboard-tab/README.md @@ -54,11 +54,13 @@ The following files can be customized and demonstrate an example implementation The following are project-related files. You generally will not need to customize these files. -| File | Contents | -| ------------------------- | ------------------------------------ | -| `src/index.css` | The style of application entry point | -| `src/index.tsx` | Application entry point | -| `src/internal/context.ts` | TeamsFx Context | +| File | Contents | +| ------------------------- | ------------------------------------------ | +| `src/main.css` | The style of React application entry point | +| `src/main.tsx` | The entry point for a React application | +| `src/internal/context.ts` | TeamsFx Context | +| `index.html` | The entry point of the application | +| `vite.config.ts` | Vite configuration file | The following are Teams Toolkit specific project files. You can [visit a complete guide on Github](https://github.com/OfficeDev/TeamsFx/wiki/Teams-Toolkit-Visual-Studio-Code-v5-Guide#overview) to understand how Teams Toolkit works. diff --git a/templates/ts/dashboard-tab/package.json.tpl b/templates/ts/dashboard-tab/package.json.tpl index d4de71afca..b72a8cc4d6 100644 --- a/templates/ts/dashboard-tab/package.json.tpl +++ b/templates/ts/dashboard-tab/package.json.tpl @@ -32,7 +32,6 @@ "dev:teamsfx": "env-cmd --silent -f .localConfigs npm run start", "start": "vite", "build": "tsc && vite build", - "server": "vite preview", "test": "echo \"Error: no test specified\" && exit 1" }, "eslintConfig": { From 17924f754d8b316754aea666bd9544e409389910 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Mon, 2 Sep 2024 18:43:23 +0800 Subject: [PATCH 42/52] feat: add plugin from treeview (#12299) * feat: add plugin from treeview * fix: vsc * fix: vsc * fix: ut * fix: ut * refactor: warn * refactor: warn * refactor: warn * test: ut * refactor: pr comment * refactor: minor --- packages/cli/src/commands/models/create.ts | 9 +- packages/fx-core/resource/package.nls.json | 23 +- packages/fx-core/src/common/telemetry.ts | 1 + packages/fx-core/src/common/utils.ts | 4 +- .../src/component/generator/apiSpec/helper.ts | 4 +- .../generator/copilotExtension/generator.ts | 14 +- .../generator/copilotExtension/helper.ts | 50 ++- .../fx-core/src/component/utils/common.ts | 13 + packages/fx-core/src/core/FxCore.ts | 221 ++++++----- packages/fx-core/src/index.ts | 1 + packages/fx-core/src/question/constants.ts | 50 +-- packages/fx-core/src/question/create.ts | 30 +- .../src/question/inputs/AddPluginInputs.ts | 12 +- .../question/inputs/CreateProjectInputs.ts | 8 +- .../src/question/options/AddPluginOptions.ts | 31 +- packages/fx-core/src/question/other.ts | 66 ++-- .../copilotExtensionGenerator.test.ts | 130 ++++++- packages/fx-core/tests/core/FxCore.test.ts | 345 ++++++++++-------- packages/fx-core/tests/core/utils.ts | 4 + .../fx-core/tests/question/question.test.ts | 108 ++---- packages/vscode-extension/src/config.ts | 8 + .../src/telemetry/extTelemetry.ts | 2 + .../src/utils/autoOpenHelper.ts | 9 +- .../handlers/autoOpenProjectHandler.test.ts | 4 +- 24 files changed, 667 insertions(+), 480 deletions(-) diff --git a/packages/cli/src/commands/models/create.ts b/packages/cli/src/commands/models/create.ts index 38c2ad053e..73be9b2bdc 100644 --- a/packages/cli/src/commands/models/create.ts +++ b/packages/cli/src/commands/models/create.ts @@ -14,8 +14,6 @@ import { CliQuestionName, CreateProjectInputs, CreateProjectOptions, - featureFlagManager, - FeatureFlags, isCopilotExtensionEnabled, MeArchitectureOptions, QuestionNames, @@ -49,7 +47,12 @@ function adjustOptions(options: CLICommandOption[]) { if (!isCopilotExtensionEnabled()) { //skip Copilot extension questions if the feature flag is not enabled. - const questionsToDelete = [QuestionNames.ApiPluginType, QuestionNames.WithPlugin]; + const questionsToDelete = [ + QuestionNames.ApiPluginType, + QuestionNames.WithPlugin, + QuestionNames.PluginManifestFilePath, + QuestionNames.PluginOpenApiSpecFilePath, + ]; options = options.filter((option) => !questionsToDelete.includes(option.name as QuestionNames)); } diff --git a/packages/fx-core/resource/package.nls.json b/packages/fx-core/resource/package.nls.json index 3390fc40ea..b049c24b54 100644 --- a/packages/fx-core/resource/package.nls.json +++ b/packages/fx-core/resource/package.nls.json @@ -388,18 +388,18 @@ "core.createProjectQuestion.apiSpec.operation.placeholder.skipExisting": "Methods defined in manifest.json are not listed", "core.createProjectQuestion.apiSpec.multipleValidationErrors.message": "Incompatible OpenAPI description document. Check output panel for details.", "core.createProjectQuestion.apiSpec.multipleValidationErrors.vscode.message": "Incompatible OpenAPI description document. Check [output panel](command:fx-extension.showOutputChannel) for details.", - "core.createProjectQuestion.meArchitecture.title": "Architecture of search based message extension", - "core.createProjectQuestion.declarativeCopilot.title": "Create declarative copilot", + "core.createProjectQuestion.meArchitecture.title": "Architecture of Search Based Message Extension", + "core.createProjectQuestion.declarativeCopilot.title": "Create Declarative Copilot", "core.createProjectQuestion.declarativeCopilot.placeholder": "Add API plugin to your declarative Copilot", "core.createProjectQuestion.createApiPlugin.title": "Create API Plugin", - "core.createProjectQuestion.addApiPlugin.title": "Add API plugin", + "core.createProjectQuestion.addApiPlugin.title": "Add API Plugin", "core.createProjectQuestion.addApiPlugin.placeholder": "Select how to add plugin", "core.createProjectQuestion.noPlugin.label": "No plugin", "core.createProjectQuestion.noPlugin.detail": "Create declarative Copilot only", "core.createProjectQuestion.addPlugin.label": "Add plugin", "core.createProjectQuestion.addPlugin.detail": "Create declarative Copilot with API plugin", - "core.createProjectQuestion.addExistingPlugin.pluginManifest.title": "Import manifest file", - "core.createProjectQuestion.addExistingPlugin.apiSpec.title": "Import OpenAPI description document", + "core.createProjectQuestion.addExistingPlugin.pluginManifest.title": "Import Manifest File", + "core.createProjectQuestion.addExistingPlugin.apiSpec.title": "Import OpenAPI Description Document", "core.createProjectQuestion.addExistingPlugin.pluginManifest.placeholder": "Select your plugin manifest file", "core.createProjectQuestion.addExistingPlugin.openApiSpec.placeholder": "Select OpenAPI description document used for your API plugin", "core.createProjectQuestion.addPlugin.MissingRequiredProperty": "Invalid plugin manifest. Missing \"%s\"", @@ -442,13 +442,12 @@ "core.SampleSelect.title": "Start from a sample", "core.SampleSelect.placeholder": "Select a sample", "core.SampleSelect.buttons.viewSamples": "View samples", - "core.question.pluginAvailability.title": "Select Plugin Availability", - "core.pluginAvailability.declarativeCopilot": "Declarative Copilot", - "core.pluginAvailability.copilotForM365": "Copilot for Microsoft 365", - "core.pluginAvailability.declarativeCopilotAndM365": "Both declarative Copilot and Copilot for Microsoft 365", - "core.addPlugin.success": "Plugin \"%s\" added to the project successfully.", - "core.addAction.success": "Action \"%s\" added to the project successfully.", - "core.addActionAndPlugin.success": "Action \"%s\" and plugin \"%s\" added to the project successfully.", + "core.addPlugin.success.vsc": "API plugin \"%s\" added to the project successfully.", + "core.addPlugin.success": "API plugin \"%s\" added to the project successfully. View plugin manifest in \"%s\".", + "core.addPlugin.success.viewPluginManifest": "View plugin manifest", + "core.scaffold.warning.summary": "We have detected following issues:\n%s", + "core.addPlugin.warning.manifestVariables": "Environment variables \"%s\" found in manifest of the added plugin. Ensure the values are set in .env file or system environment variables.", + "core.addPlugin.warning.apiSpecVariables": "Environment variables \"%s\" found in API specification of the added plugin. Ensure the values are set in .env file or system environment variables.", "core.updateBotIdsQuestion.title": "Create new bot(s) for debugging", "core.updateBotIdsQuestion.placeholder": "Deselect to keep the original botId value", "_core.updateBotIdsQuestion.placeholder.comment": "'botId' is the field name that shouldn't be localized.", diff --git a/packages/fx-core/src/common/telemetry.ts b/packages/fx-core/src/common/telemetry.ts index 113629bb10..c04102c902 100644 --- a/packages/fx-core/src/common/telemetry.ts +++ b/packages/fx-core/src/common/telemetry.ts @@ -162,6 +162,7 @@ export enum TelemetryEvent { DependencyApi = "dependency-api", AppStudioApi = "app-studio-api", MOSApi = "ttk-mos-api", + ViewPluginManifestAfterAdded = "view-plugin-manifest-after-added", } export enum ProjectTypeProps { diff --git a/packages/fx-core/src/common/utils.ts b/packages/fx-core/src/common/utils.ts index e226a1c0bc..779cd3d06a 100644 --- a/packages/fx-core/src/common/utils.ts +++ b/packages/fx-core/src/common/utils.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { Context, InputsWithProjectPath } from "@microsoft/teamsfx-api"; +import { Context, Inputs } from "@microsoft/teamsfx-api"; import { DriverContext } from "../component/driver/interface/commonArgs"; import axios from "axios"; import fs from "fs-extra"; @@ -10,7 +10,7 @@ export async function waitSeconds(second: number): Promise { return new Promise((resolve) => setTimeout(resolve, second * 1000)); } -export function generateDriverContext(ctx: Context, inputs: InputsWithProjectPath): DriverContext { +export function generateDriverContext(ctx: Context, inputs: Inputs): DriverContext { return { azureAccountProvider: ctx.tokenProvider!.azureAccountProvider, m365TokenProvider: ctx.tokenProvider!.m365TokenProvider, diff --git a/packages/fx-core/src/component/generator/apiSpec/helper.ts b/packages/fx-core/src/component/generator/apiSpec/helper.ts index 38953c1832..da4e60a684 100644 --- a/packages/fx-core/src/component/generator/apiSpec/helper.ts +++ b/packages/fx-core/src/component/generator/apiSpec/helper.ts @@ -147,9 +147,7 @@ export async function listOperations( shouldLogWarning = true, existingCorrelationId?: string ): Promise> { - const isPlugin = - inputs[QuestionNames.ApiPluginType] === apiPluginApiSpecOptionId || - !!inputs[QuestionNames.PluginAvailability]; + const isPlugin = inputs[QuestionNames.ApiPluginType] === apiPluginApiSpecOptionId; const isCustomApi = inputs[QuestionNames.CustomCopilotRag] === CustomCopilotRagOptions.customApi().id; const projectType = isPlugin diff --git a/packages/fx-core/src/component/generator/copilotExtension/generator.ts b/packages/fx-core/src/component/generator/copilotExtension/generator.ts index 4688ea31a4..f40d1e1546 100644 --- a/packages/fx-core/src/component/generator/copilotExtension/generator.ts +++ b/packages/fx-core/src/component/generator/copilotExtension/generator.ts @@ -14,6 +14,7 @@ import { Inputs, ManifestTemplateFileName, ok, + Platform, Result, } from "@microsoft/teamsfx-api"; import { DefaultTemplateGenerator } from "../templates/templateGenerator"; @@ -34,11 +35,13 @@ import { declarativeCopilotInstructionFileName } from "../constant"; import { addExistingPlugin } from "./helper"; import path from "path"; import { copilotGptManifestUtils } from "../../driver/teamsApp/utils/CopilotGptManifestUtils"; +import { outputScaffoldingWarningMessage } from "../../utils/common"; const enum telemetryProperties { templateName = "template-name", isDeclarativeCopilot = "is-declarative-copilot", isMicrosoftEntra = "is-microsoft-entra", + needAddPluginFromExisting = "need-add-plugin-from-existing", } /** @@ -111,6 +114,9 @@ export class CopilotExtensionGenerator extends DefaultTemplateGenerator { [telemetryProperties.isDeclarativeCopilot]: isDeclarativeCopilot.toString(), [telemetryProperties.isMicrosoftEntra]: auth === ApiAuthOptions.microsoftEntra().id ? "true" : "", + [telemetryProperties.needAddPluginFromExisting]: + inputs[QuestionNames.ApiPluginType] === + ApiPluginStartOptions.existingPlugin().id.toString(), }); return Promise.resolve( @@ -157,7 +163,13 @@ export class CopilotExtensionGenerator extends DefaultTemplateGenerator { if (addPluginRes.isErr()) { return err(addPluginRes.error); } else { - return ok({}); + if (inputs.platform === Platform.CLI || inputs.platform === Platform.VS) { + const warningMessage = outputScaffoldingWarningMessage(addPluginRes.value.warnings); + if (warningMessage) { + context.logProvider.info(warningMessage); + } + } + return ok({ warnings: addPluginRes.value.warnings }); } } else { return ok({}); diff --git a/packages/fx-core/src/component/generator/copilotExtension/helper.ts b/packages/fx-core/src/component/generator/copilotExtension/helper.ts index 81782262a2..2117c4e996 100644 --- a/packages/fx-core/src/component/generator/copilotExtension/helper.ts +++ b/packages/fx-core/src/component/generator/copilotExtension/helper.ts @@ -9,6 +9,7 @@ import { PluginManifestSchema, Result, UserError, + Warning, } from "@microsoft/teamsfx-api"; import { copilotGptManifestUtils } from "../../driver/teamsApp/utils/CopilotGptManifestUtils"; import { pluginManifestUtils } from "../../driver/teamsApp/utils/PluginManifestUtils"; @@ -16,6 +17,18 @@ import path from "path"; import fs from "fs-extra"; import { normalizePath } from "../../driver/teamsApp/utils/utils"; import { getDefaultString, getLocalizedString } from "../../../common/localizeUtils"; +import { getEnvironmentVariables } from "../../utils/common"; +import { sendTelemetryErrorEvent } from "../../../common/telemetry"; +import { assembleError } from "../../../error"; + +export interface AddExistingPluginResult { + warnings: Warning[]; + destinationPluginManifestPath: string; +} + +const pluginManifestPlaceholderWarning = "add-exsiting-plugin-manifest-placehoder"; +const apiSpecPlaceholderWarning = "add-exsiting-plugin-api-spec-placehoder"; +const readApiSpecErrorTelemetry = "read-api-spec-error"; export async function addExistingPlugin( declarativeCopilotManifestPath: string, @@ -24,7 +37,7 @@ export async function addExistingPlugin( actionId: string, context: Context, source: string -): Promise> { +): Promise> { const pluginManifestRes = await pluginManifestUtils.readPluginManifestFile( fromPluginManifestPath ); @@ -38,6 +51,7 @@ export async function addExistingPlugin( if (checkRes.isErr()) { return err(checkRes.error); } + const runtimes = pluginManifest.runtimes!; // have validated that the value exists. const destinationApiSpecRelativePath = runtimes.find((runtime) => runtime.type === "OpenApi")! .spec.url as string; // have validated that the value exists. @@ -88,7 +102,39 @@ export async function addExistingPlugin( if (addActionRes.isErr()) { return err(addActionRes.error); } - return ok(undefined); + + const warnings: Warning[] = []; + const pluginManifestVariables = getEnvironmentVariables(JSON.stringify(pluginManifest)); + if (pluginManifestVariables.length > 0) { + warnings.push({ + type: pluginManifestPlaceholderWarning, + content: getLocalizedString( + "core.addPlugin.warning.manifestVariables", + pluginManifestVariables.join(", ") + ), + }); + } + + try { + const apiSpecContent = await fs.readFile(destinationApiSpecPath, "utf8"); + const apiSpecVariables = getEnvironmentVariables(apiSpecContent); + if (apiSpecVariables.length > 0) { + warnings.push({ + type: apiSpecPlaceholderWarning, + content: getLocalizedString( + "core.addPlugin.warning.apiSpecVariables", + apiSpecVariables.join(", ") + ), + }); + } + } catch (e) { + sendTelemetryErrorEvent(source, readApiSpecErrorTelemetry, assembleError(e)); + } + + return ok({ + destinationPluginManifestPath, + warnings, + }); } export function validateSourcePluginManifest( diff --git a/packages/fx-core/src/component/utils/common.ts b/packages/fx-core/src/component/utils/common.ts index 58c9fd957d..816ba2f3e4 100644 --- a/packages/fx-core/src/component/utils/common.ts +++ b/packages/fx-core/src/component/utils/common.ts @@ -10,10 +10,13 @@ import { Result, SystemError, UserError, + Warning, } from "@microsoft/teamsfx-api"; import path from "path"; import { ExecutionResult } from "../driver/interface/stepDriver"; import { getLocalizedString } from "../../common/localizeUtils"; +import { SummaryConstant } from "../configManager/constant"; +import { EOL } from "os"; const placeholderRegex = /\${{ *[a-zA-Z_][a-zA-Z0-9_]* *}}/g; @@ -171,3 +174,13 @@ export function getAbsolutePath(relativeOrAbsolutePath: string, projectPath: str ? relativeOrAbsolutePath : path.join(projectPath, relativeOrAbsolutePath); } + +export function outputScaffoldingWarningMessage(warnings: Warning[]): string { + const manifestWarningMessage = warnings.map((warn) => { + return `${SummaryConstant.NotExecuted} ${warn.content}`; + }); + + return manifestWarningMessage.length > 0 + ? getLocalizedString("core.scaffold.warning.summary", manifestWarningMessage.join(EOL)) + : ""; +} diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index 5d27d6187c..1c6cab1977 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -94,6 +94,7 @@ import { pluginManifestUtils } from "../component/driver/teamsApp/utils/PluginMa import { containsUnsupportedFeature, getFeaturesFromAppDefinition, + normalizePath, } from "../component/driver/teamsApp/utils/utils"; import { ValidateManifestDriver } from "../component/driver/teamsApp/validate"; import { ValidateAppPackageDriver } from "../component/driver/teamsApp/validateAppPackage"; @@ -112,7 +113,10 @@ import { import { LaunchHelper } from "../component/m365/launchHelper"; import { EnvLoaderMW, EnvWriterMW } from "../component/middleware/envMW"; import { QuestionMW } from "../component/middleware/questionMW"; -import { expandEnvironmentVariable } from "../component/utils/common"; +import { + expandEnvironmentVariable, + outputScaffoldingWarningMessage, +} from "../component/utils/common"; import { envUtil } from "../component/utils/envUtil"; import { metadataUtil } from "../component/utils/metadataUtil"; import { pathUtils } from "../component/utils/pathUtils"; @@ -131,9 +135,9 @@ import { import { NoNeedUpgradeError } from "../error/upgrade"; import { YamlFieldMissingError } from "../error/yml"; import { + ApiPluginStartOptions, AppNamePattern, HubTypes, - PluginAvailabilityOptions, ProjectTypeOptions, QuestionNames, SPFxVersionOptionIds, @@ -165,7 +169,8 @@ import { MosServiceEndpoint, MosServiceScope } from "../component/m365/serviceCo import { teamsDevPortalClient } from "../client/teamsDevPortalClient"; import { SyncManifestArgs } from "../component/driver/teamsApp/interfaces/SyncManifest"; import { SyncManifestDriver } from "../component/driver/teamsApp/syncManifest"; -import { generateDriverContext, isJsonSpecFile } from "../common/utils"; +import { generateDriverContext } from "../common/utils"; +import { addExistingPlugin } from "../component/generator/copilotExtension/helper"; export class FxCore { constructor(tools: Tools) { @@ -1853,21 +1858,14 @@ export class FxCore { if (!inputs.projectPath) { throw new Error("projectPath is undefined"); // should never happen } - const url = inputs[QuestionNames.ApiSpecLocation]; - const manifestPath = inputs[QuestionNames.ManifestPath]; - const appPackageFolder = path.dirname(manifestPath); - const apiSpecFolder = path.join(appPackageFolder, DefaultApiSpecFolderName); - const needAddAction = - inputs[QuestionNames.PluginAvailability] === PluginAvailabilityOptions.action().id || - inputs[QuestionNames.PluginAvailability] === - PluginAvailabilityOptions.copilotPluginAndAction().id; - const needAddCopilotPlugin = - inputs[QuestionNames.PluginAvailability] === PluginAvailabilityOptions.copilotPlugin().id || - inputs[QuestionNames.PluginAvailability] === - PluginAvailabilityOptions.copilotPluginAndAction().id; + const context = createContext(); + const teamsManifestPath = inputs[QuestionNames.ManifestPath]; + const appPackageFolder = path.dirname(teamsManifestPath); + const isGenerateFromApiSpec = + inputs[QuestionNames.ApiPluginType] === ApiPluginStartOptions.apiSpec().id; // validate the project is valid for adding plugin - const manifestRes = await manifestUtils._readAppManifest(manifestPath); + const manifestRes = await manifestUtils._readAppManifest(teamsManifestPath); if (manifestRes.isErr()) { return err(manifestRes.error); } @@ -1880,22 +1878,26 @@ export class FxCore { AppStudioError.TeamsAppRequiredPropertyMissingError.name, AppStudioError.TeamsAppRequiredPropertyMissingError.message( "declarativeCopilots", - manifestPath + teamsManifestPath ) ) ); } - const gptManifestFilePath = path.join(appPackageFolder, declarativeGpt.file); - const gptManifestRes = await copilotGptManifestUtils.readCopilotGptManifestFile( - gptManifestFilePath - ); - if (gptManifestRes.isErr()) { - return err(gptManifestRes.error); + const gptManifestFilePathRes = await copilotGptManifestUtils.getManifestPath(teamsManifestPath); + if (gptManifestFilePathRes.isErr()) { + return err(gptManifestFilePathRes.error); } - const gptManifest = gptManifestRes.value; + const declarativeCopilotManifestPath = gptManifestFilePathRes.value; - const context = createContext(); + const declarativeCopilotManifesRes = await copilotGptManifestUtils.readCopilotGptManifestFile( + declarativeCopilotManifestPath + ); + if (declarativeCopilotManifesRes.isErr()) { + return err(declarativeCopilotManifesRes.error); + } + + const declarativeCopilotManifest = declarativeCopilotManifesRes.value; // confirm const confirmRes = await context.userInteraction.showMessage( @@ -1914,109 +1916,104 @@ export class FxCore { return err(new UserCancelError()); } - // generate file path - let isYaml = false; - try { - isYaml = !(await isJsonSpecFile(url)); - } catch (e) {} - await fs.ensureDir(apiSpecFolder); - - let openApiSpecFileName = isYaml ? DefaultApiSpecYamlFileName : DefaultApiSpecJsonFileName; - const openApiSpecFileNamePrefix = openApiSpecFileName.split(".")[0]; - const openApiSpecFileType = openApiSpecFileName.split(".")[1]; - let apiSpecFileNameSuffix = 1; - openApiSpecFileName = `${openApiSpecFileNamePrefix}_${apiSpecFileNameSuffix}.${openApiSpecFileType}`; - - while (await fs.pathExists(path.join(apiSpecFolder, openApiSpecFileName))) { - openApiSpecFileName = `${openApiSpecFileNamePrefix}_${++apiSpecFileNameSuffix}.${openApiSpecFileType}`; - } - const openApiSpecFilePath = path.join(apiSpecFolder, openApiSpecFileName); - - const pluginManifestNamePrefix = DefaultPluginManifestFileName.split(".")[0]; - let pluginFileNameSuffix = 1; - let pluginManifestName = `${pluginManifestNamePrefix}_${pluginFileNameSuffix}.json`; - while (await fs.pathExists(path.join(appPackageFolder, pluginManifestName))) { - pluginManifestName = `${pluginManifestNamePrefix}_${++pluginFileNameSuffix}.json`; + // find the next available action id + let actionId = ""; + let suffix = 1; + actionId = `action_${suffix}`; + const existingActionIds = declarativeCopilotManifest.actions?.map((action) => action.id); + while (existingActionIds?.includes(actionId)) { + suffix += 1; + actionId = `action_${suffix}`; } - const pluginManifestFilePath = path.join(appPackageFolder, pluginManifestName); - const specParser = new SpecParser(url, getParserOptions(ProjectType.Copilot, true)); - const generateRes = await generateFromApiSpec( - specParser, - manifestPath, - inputs, - context, - CoreTelemetryComponentName, - ProjectType.Copilot, - { - destinationApiSpecFilePath: openApiSpecFilePath, - pluginManifestFilePath: pluginManifestFilePath, - } - ); - if (generateRes.isErr()) { - return err(generateRes.error); - } + let destinationPluginManifestPath: string; + // generate files + if (isGenerateFromApiSpec) { + const url = inputs[QuestionNames.ApiSpecLocation].trim(); - const warnings = generateRes.value.warnings; - if (warnings && warnings.length > 0) { - const warnSummary = await generateScaffoldingSummary( - warnings, - manifestRes.value, - path.relative(inputs.projectPath, openApiSpecFilePath), - path.relative(inputs.projectPath, pluginManifestFilePath), - inputs.projectPath + destinationPluginManifestPath = + await copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath(appPackageFolder); + const destinationApiSpecPath = await pluginManifestUtils.getDefaultNextAvailableApiSpecPath( + url, + path.join(appPackageFolder, DefaultApiSpecFolderName) ); - context.logProvider.info(warnSummary + "\n"); - } - - // update Teams manifest - if (needAddCopilotPlugin) { - const plugins = teamsManifest.copilotExtensions?.plugins || []; - plugins.push({ - id: "plugin_1", // Teams manifest can have only one plugin. - file: pluginManifestName, - }); - teamsManifest.copilotExtensions = { - ...teamsManifest.copilotExtensions, - plugins, - }; - const updateManifestRes = await manifestUtils._writeAppManifest(teamsManifest, manifestPath); - if (updateManifestRes.isErr()) { - return err(updateManifestRes.error); + const specParser = new SpecParser(url, getParserOptions(ProjectType.Copilot, true)); + const generateRes = await generateFromApiSpec( + specParser, + teamsManifestPath, + inputs, + context, + CoreTelemetryComponentName, + ProjectType.Copilot, + { + destinationApiSpecFilePath: destinationApiSpecPath, + pluginManifestFilePath: destinationPluginManifestPath, + } + ); + if (generateRes.isErr()) { + return err(generateRes.error); } - } - // update GPT manifest - let actionId = ""; - if (needAddAction) { - let suffix = 1; - actionId = `action_${suffix}`; - const existingActionIds = gptManifest.actions?.map((action) => action.id); - while (existingActionIds?.includes(actionId)) { - suffix += 1; - actionId = `action_${suffix}`; + const warnings = generateRes.value.warnings; + if (warnings && warnings.length > 0) { + const warnSummary = await generateScaffoldingSummary( + warnings, + manifestRes.value, + path.relative(inputs.projectPath, destinationApiSpecPath), + path.relative(inputs.projectPath, destinationPluginManifestPath), + inputs.projectPath + ); + context.logProvider.info(warnSummary + "\n"); } + const addActionRes = await copilotGptManifestUtils.addAction( - gptManifestFilePath, + declarativeCopilotManifestPath, actionId, - pluginManifestName + normalizePath(path.relative(appPackageFolder, destinationPluginManifestPath), true) ); if (addActionRes.isErr()) { return err(addActionRes.error); } - } + } else { + const addPluginRes = await addExistingPlugin( + declarativeCopilotManifestPath, + inputs[QuestionNames.PluginManifestFilePath].trim(), + inputs[QuestionNames.PluginOpenApiSpecFilePath].trim(), + actionId, + context, + Stage.addPlugin + ); - let successMessage = ""; - if (needAddAction && needAddCopilotPlugin) { - successMessage = getLocalizedString("core.addActionAndPlugin.success", actionId, "plugin_1"); - } else if (needAddAction) { - successMessage = getLocalizedString("core.addAction.success", actionId); - } else if (needAddCopilotPlugin) { - successMessage = getLocalizedString("core.addPlugin.success", "plugin_1"); + if (addPluginRes.isErr()) { + return err(addPluginRes.error); + } + destinationPluginManifestPath = addPluginRes.value.destinationPluginManifestPath; + const warningMessage = outputScaffoldingWarningMessage(addPluginRes.value.warnings); + context.logProvider.info(warningMessage); + } + + if (inputs.platform === Platform.VSCode) { + const successMessage = getLocalizedString("core.addPlugin.success.vsc", actionId); + const viewPluginManifest = getLocalizedString("core.addPlugin.success.viewPluginManifest"); + void context.userInteraction + .showMessage("info", successMessage, false, viewPluginManifest) + .then((userRes) => { + if (userRes.isOk() && userRes.value === viewPluginManifest) { + context.telemetryReporter.sendTelemetryEvent( + TelemetryEvent.ViewPluginManifestAfterAdded + ); + void TOOLS?.ui?.openFile?.(destinationPluginManifestPath); + } + }); + } else { + const successMessage = getLocalizedString( + "core.addPlugin.success", + actionId, + destinationPluginManifestPath + ); + void context.userInteraction.showMessage("info", successMessage, false); } - void context.userInteraction.showMessage("info", successMessage, false); - return ok(undefined); } } diff --git a/packages/fx-core/src/index.ts b/packages/fx-core/src/index.ts index 5aa28119e7..17e544ac75 100644 --- a/packages/fx-core/src/index.ts +++ b/packages/fx-core/src/index.ts @@ -89,6 +89,7 @@ export { loadTeamsFxDevScript } from "./component/local/packageJsonHelper"; export { Hub } from "./component/m365/constants"; export { PackageService } from "./component/m365/packageService"; export { MosServiceEndpoint, MosServiceScope } from "./component/m365/serviceConstant"; +export { outputScaffoldingWarningMessage } from "./component/utils/common"; export { DotenvOutput, envUtil } from "./component/utils/envUtil"; export { metadataUtil } from "./component/utils/metadataUtil"; export { pathUtils } from "./component/utils/pathUtils"; diff --git a/packages/fx-core/src/question/constants.ts b/packages/fx-core/src/question/constants.ts index d68be21ba0..a46374a19d 100644 --- a/packages/fx-core/src/question/constants.ts +++ b/packages/fx-core/src/question/constants.ts @@ -99,7 +99,6 @@ export enum QuestionNames { collaborationAppType = "collaborationType", DestinationApiSpecFilePath = "destination-api-spec-location", - PluginAvailability = "plugin-availability", SyncManifest = "sync-manifest", ApiPluginType = "api-plugin-type", @@ -1144,35 +1143,6 @@ export const recommendedLocations = [ "West US 3", ]; -export class PluginAvailabilityOptions { - static action(): OptionItem { - return { - id: "action", - label: getLocalizedString("core.pluginAvailability.declarativeCopilot"), - }; - } - static copilotPlugin(): OptionItem { - return { - id: "api-plugin", - label: getLocalizedString("core.pluginAvailability.copilotForM365"), - }; - } - static copilotPluginAndAction(): OptionItem { - return { - id: "api-plugin-and-action", - label: getLocalizedString("core.pluginAvailability.declarativeCopilotAndM365"), - }; - } - - static all(): OptionItem[] { - return [ - PluginAvailabilityOptions.copilotPlugin(), - PluginAvailabilityOptions.action(), - PluginAvailabilityOptions.copilotPluginAndAction(), - ]; - } -} - export class TeamsAppValidationOptions { static schema(): OptionItem { return { @@ -1281,16 +1251,20 @@ export class ApiPluginStartOptions { }; } - static staticAll(): OptionItem[] { - return [ - ApiPluginStartOptions.newApi(), - ApiPluginStartOptions.apiSpec(), - ApiPluginStartOptions.existingPlugin(), - ]; + static staticAll(doesProjectExists?: boolean): OptionItem[] { + return doesProjectExists + ? [ApiPluginStartOptions.apiSpec(), ApiPluginStartOptions.existingPlugin()] + : [ + ApiPluginStartOptions.newApi(), + ApiPluginStartOptions.apiSpec(), + ApiPluginStartOptions.existingPlugin(), + ]; } - static all(inputs: Inputs): OptionItem[] { - if (inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id) { + static all(inputs: Inputs, doesProjectExists?: boolean): OptionItem[] { + if (doesProjectExists) { + return [ApiPluginStartOptions.apiSpec(), ApiPluginStartOptions.existingPlugin()]; + } else if (inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id) { return [ ApiPluginStartOptions.newApi(), ApiPluginStartOptions.apiSpec(), diff --git a/packages/fx-core/src/question/create.ts b/packages/fx-core/src/question/create.ts index b0c005845b..4d52801cd1 100644 --- a/packages/fx-core/src/question/create.ts +++ b/packages/fx-core/src/question/create.ts @@ -1304,30 +1304,33 @@ function declarativeCopilotPluginQuestion(): SingleSelectQuestion { }; } -function apiPluginStartQuestion(): SingleSelectQuestion { +export function apiPluginStartQuestion(doesProjectExists?: boolean): SingleSelectQuestion { return { type: "singleSelect", name: QuestionNames.ApiPluginType, title: (inputs: Inputs) => { - return inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id + return inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id || + doesProjectExists ? getLocalizedString("core.createProjectQuestion.addApiPlugin.title") : getLocalizedString("core.createProjectQuestion.createApiPlugin.title"); }, placeholder: (inputs: Inputs) => { - return inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id + return inputs[QuestionNames.Capabilities] === CapabilityOptions.declarativeCopilot().id || + doesProjectExists ? getLocalizedString("core.createProjectQuestion.addApiPlugin.placeholder") : getLocalizedString("core.createProjectQuestion.projectType.copilotExtension.placeholder"); }, cliDescription: "API plugin type.", - staticOptions: ApiPluginStartOptions.staticAll(), + staticOptions: ApiPluginStartOptions.staticAll(doesProjectExists), dynamicOptions: (inputs: Inputs) => { - return ApiPluginStartOptions.all(inputs); + return ApiPluginStartOptions.all(inputs, doesProjectExists); }, default: ApiPluginStartOptions.newApi().id, }; } export function pluginManifestQuestion(): SingleFileQuestion { + const correlationId = Correlator.getId(); return { type: "singleFile", name: QuestionNames.PluginManifestFilePath, @@ -1345,16 +1348,31 @@ export function pluginManifestQuestion(): SingleFileQuestion { validFunc: async (input: string) => { const manifestRes = await pluginManifestUtils.readPluginManifestFile(input.trim()); if (manifestRes.isErr()) { + sendTelemetryErrorEvent( + CoreSource, + getQuestionValidationErrorEventName(QuestionNames.PluginManifestFilePath), + manifestRes.error, + { + "correlation-id": correlationId, + } + ); return (manifestRes.error as UserError).displayMessage; } else { const manifest = manifestRes.value; const checkRes = validateSourcePluginManifest( - // TODO: telemetry manifest, QuestionNames.PluginManifestFilePath ); if (checkRes.isErr()) { + sendTelemetryErrorEvent( + CoreSource, + getQuestionValidationErrorEventName(QuestionNames.PluginManifestFilePath), + checkRes.error, + { + "correlation-id": correlationId, + } + ); return checkRes.error.displayMessage; } } diff --git a/packages/fx-core/src/question/inputs/AddPluginInputs.ts b/packages/fx-core/src/question/inputs/AddPluginInputs.ts index 3512a56fdd..93670476e2 100644 --- a/packages/fx-core/src/question/inputs/AddPluginInputs.ts +++ b/packages/fx-core/src/question/inputs/AddPluginInputs.ts @@ -11,12 +11,16 @@ import { Inputs } from "@microsoft/teamsfx-api"; export interface AddPluginInputs extends Inputs { - /** @description Select Teams manifest.json File */ - "manifest-path"?: string; - /** @description Select Plugin Availability */ - "plugin-availability"?: "api-plugin" | "action" | "api-plugin-and-action"; + /** @description Add API Plugin */ + "api-plugin-type"?: "api-spec" | "existing-plugin"; + /** @description Import Manifest File */ + "plugin-manifest-path"?: string; + /** @description Import OpenAPI Description Document */ + "plugin-opeanapi-spec-path"?: string; /** @description OpenAPI Description Document */ "openapi-spec-location"?: string; /** @description Select Operation(s) Copilot Can Interact with */ "api-operation"?: string[]; + /** @description Select Teams manifest.json File */ + "manifest-path"?: string; } diff --git a/packages/fx-core/src/question/inputs/CreateProjectInputs.ts b/packages/fx-core/src/question/inputs/CreateProjectInputs.ts index 626b3ccc62..db324fe131 100644 --- a/packages/fx-core/src/question/inputs/CreateProjectInputs.ts +++ b/packages/fx-core/src/question/inputs/CreateProjectInputs.ts @@ -57,15 +57,15 @@ export interface CreateProjectInputs extends Inputs { "spfx-webpart-name"?: string; /** @description SPFx solution folder */ "spfx-folder"?: string; - /** @description Architecture of search based message extension */ + /** @description Architecture of Search Based Message Extension */ "me-architecture"?: "new-api" | "api-spec" | "bot-plugin" | "bot"; - /** @description Create declarative copilot */ + /** @description Create Declarative Copilot */ "with-plugin"?: "no" | "yes"; /** @description Create API Plugin */ "api-plugin-type"?: "new-api" | "api-spec" | "existing-plugin"; - /** @description Import manifest file */ + /** @description Import Manifest File */ "plugin-manifest-path"?: string; - /** @description Import OpenAPI description document */ + /** @description Import OpenAPI Description Document */ "plugin-opeanapi-spec-path"?: string; /** @description Authentication Type */ "api-auth"?: "none" | "api-key" | "microsoft-entra" | "oauth"; diff --git a/packages/fx-core/src/question/options/AddPluginOptions.ts b/packages/fx-core/src/question/options/AddPluginOptions.ts index d8125f1b29..53042aadee 100644 --- a/packages/fx-core/src/question/options/AddPluginOptions.ts +++ b/packages/fx-core/src/question/options/AddPluginOptions.ts @@ -12,35 +12,44 @@ import { CLICommandOption, CLICommandArgument } from "@microsoft/teamsfx-api"; export const AddPluginOptions: CLICommandOption[] = [ { - name: "teams-manifest-file", - questionName: "manifest-path", + name: "api-plugin-type", type: "string", - shortName: "t", - description: - "Specify the path for Teams app manifest template. It can be either absolute path or relative path to the project root folder, with default at './appPackage/manifest.json'", + description: "API plugin type.", required: true, - default: "./appPackage/manifest.json", + default: "new-api", + choices: ["api-spec", "existing-plugin"], }, { - name: "plugin-availability", + name: "plugin-manifest-path", type: "string", - description: "Select plugin availability.", - required: true, - choices: ["api-plugin", "action", "api-plugin-and-action"], + description: "Plugin manifest path.", + }, + { + name: "plugin-opeanapi-spec-path", + type: "string", + description: "OpenAPI description document used for your API plugin.", }, { name: "openapi-spec-location", type: "string", shortName: "a", description: "OpenAPI description document location.", - required: true, }, { name: "api-operation", type: "array", shortName: "o", description: "Select operation(s) Copilot can interact with.", + }, + { + name: "teams-manifest-file", + questionName: "manifest-path", + type: "string", + shortName: "t", + description: + "Specify the path for Teams app manifest template. It can be either absolute path or relative path to the project root folder, with default at './appPackage/manifest.json'", required: true, + default: "./appPackage/manifest.json", }, ]; export const AddPluginArguments: CLICommandArgument[] = []; diff --git a/packages/fx-core/src/question/other.ts b/packages/fx-core/src/question/other.ts index 9794571593..cac14898f2 100644 --- a/packages/fx-core/src/question/other.ts +++ b/packages/fx-core/src/question/other.ts @@ -23,17 +23,13 @@ import { AppStudioScopes, ConstantString } from "../common/constants"; import { FeatureFlags, featureFlagManager } from "../common/featureFlags"; import { getLocalizedString } from "../common/localizeUtils"; import { Constants } from "../component/driver/add/utility/constants"; -import { AppStudioError } from "../component/driver/teamsApp/errors"; -import { AppStudioResultFactory } from "../component/driver/teamsApp/results"; -import { manifestUtils } from "../component/driver/teamsApp/utils/ManifestUtils"; -import { getAbsolutePath } from "../component/utils/common"; import { envUtil } from "../component/utils/envUtil"; import { CollaborationConstants, CollaborationUtil } from "../core/collaborator"; import { environmentNameManager } from "../core/environmentName"; import { TOOLS } from "../common/globalVars"; import { + ApiPluginStartOptions, HubOptions, - PluginAvailabilityOptions, QuestionNames, TeamsAppValidationOptions, } from "./constants"; @@ -42,7 +38,10 @@ import { SPFxImportFolderQuestion, SPFxWebpartNameQuestion, apiOperationQuestion, + apiPluginStartQuestion, apiSpecLocationQuestion, + pluginApiSpecQuestion, + pluginManifestQuestion, } from "./create"; import { UninstallInputs } from "./inputs"; import * as os from "os"; @@ -740,54 +739,37 @@ export function createNewEnvQuestionNode(): IQTreeNode { }; } -export function selectPluginAvailabilityQuestion(): SingleSelectQuestion { - return { - name: QuestionNames.PluginAvailability, - title: getLocalizedString("core.question.pluginAvailability.title"), - cliDescription: "Select plugin availability.", - type: "singleSelect", - staticOptions: PluginAvailabilityOptions.all(), - dynamicOptions: async (inputs: Inputs) => { - const teamsManifestPath = inputs[QuestionNames.TeamsAppManifestFilePath]; - const absolutePath = getAbsolutePath(teamsManifestPath, inputs.projectPath!); - const manifestRes = await manifestUtils._readAppManifest(absolutePath); - if (manifestRes.isErr()) { - throw manifestRes.error; - } - const commonProperties = ManifestUtil.parseCommonProperties(manifestRes.value); - if (!commonProperties.capabilities.includes("copilotGpt")) { - throw AppStudioResultFactory.UserError( - AppStudioError.TeamsAppRequiredPropertyMissingError.name, - AppStudioError.TeamsAppRequiredPropertyMissingError.message( - "declarativeCopilots", - teamsManifestPath - ) - ); - } - - if (commonProperties.capabilities.includes("plugin")) { - // A project can have only one plugin. - return [PluginAvailabilityOptions.action()]; - } else { - return PluginAvailabilityOptions.all(); - } - }, - }; -} - // add Plugin to a declarative Copilot project export function addPluginQuestionNode(): IQTreeNode { return { - data: selectTeamsAppManifestQuestion(), + data: apiPluginStartQuestion(true), children: [ { - data: selectPluginAvailabilityQuestion(), + data: pluginManifestQuestion(), + condition: { + equals: ApiPluginStartOptions.existingPlugin().id, + }, + }, + { + data: pluginApiSpecQuestion(), + condition: { + equals: ApiPluginStartOptions.existingPlugin().id, + }, }, { data: apiSpecLocationQuestion(), + condition: { + equals: ApiPluginStartOptions.apiSpec().id, + }, }, { data: apiOperationQuestion(true, true), + condition: { + equals: ApiPluginStartOptions.apiSpec().id, + }, + }, + { + data: selectTeamsAppManifestQuestion(), }, ], }; diff --git a/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts b/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts index 5e5e320112..4fbb829e12 100644 --- a/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/copilotExtensionGenerator.test.ts @@ -26,6 +26,8 @@ import * as generatorHelper from "../../../src/component/generator/copilotExtens import { pluginManifestUtils } from "../../../src/component/driver/teamsApp/utils/PluginManifestUtils"; import fs from "fs-extra"; import path from "path"; +import { MockLogProvider } from "../../core/utils"; +import * as commons from "../../../src/component/utils/common"; describe("copilotExtension", async () => { let mockedEnvRestore: RestoreFn | undefined; @@ -163,9 +165,53 @@ describe("copilotExtension", async () => { sandbox .stub(copilotGptManifestUtils, "getManifestPath") .resolves(ok("declarativeCopilot.json")); - sandbox.stub(generatorHelper, "addExistingPlugin").resolves(ok(undefined)); + sandbox + .stub(generatorHelper, "addExistingPlugin") + .resolves(ok({ destinationPluginManifestPath: "test.json", warnings: [] })); - const res = await generator.post(context, inputs, ""); + let res = await generator.post(context, inputs, ""); + assert.isTrue(res.isOk()); + + res = await generator.post(context, { ...inputs, platform: Platform.CLI }, ""); + assert.isTrue(res.isOk()); + + res = await generator.post(context, { ...inputs, platform: Platform.VS }, ""); + assert.isTrue(res.isOk()); + }); + + it("add plugin success with warnings", async () => { + const generator = new CopilotExtensionGenerator(); + const context = createContext(); + + const inputs: Inputs = { + platform: Platform.VSCode, + projectPath: "./", + [QuestionNames.Capabilities]: CapabilityOptions.apiPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.existingPlugin().id, + [QuestionNames.AppName]: "app", + }; + + const logStub = sandbox.stub(MockLogProvider.prototype, "info").resolves(); + sandbox + .stub(copilotGptManifestUtils, "getManifestPath") + .resolves(ok("declarativeCopilot.json")); + sandbox.stub(generatorHelper, "addExistingPlugin").resolves( + ok({ + destinationPluginManifestPath: "test.json", + warnings: [{ type: "test", content: "warningContent" }], + }) + ); + + let res = await generator.post(context, inputs, ""); + assert.isFalse(logStub.called); + assert.isTrue(res.isOk()); + + res = await generator.post(context, { ...inputs, platform: Platform.CLI }, ""); + assert.isTrue(res.isOk()); + assert.isTrue(logStub.called); + + res = await generator.post(context, { ...inputs, platform: Platform.VS }, ""); + assert.isTrue(logStub.called); assert.isTrue(res.isOk()); }); it("get manifest path error", async () => { @@ -227,7 +273,7 @@ describe("helper", async () => { sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( ok({ schema_version: "v1", - name_for_human: "test", + name_for_human: "${{file}}", runtimes: [{ type: "OpenApi", spec: { url: "test.json" } }], } as any) ); @@ -242,6 +288,8 @@ describe("helper", async () => { sandbox.stub(fs, "ensureFile").resolves(); sandbox.stub(fs, "copyFile").resolves(); sandbox.stub(fs, "writeFile").resolves(); + sandbox.stub(fs, "readFile").resolves(); + sandbox.stub(commons, "getEnvironmentVariables").returns([]); const res = await generatorHelper.addExistingPlugin( "test.json", "originalManifest.json", @@ -266,6 +314,7 @@ describe("helper", async () => { const getApiSpecPath = sandbox .stub(pluginManifestUtils, "getDefaultNextAvailableApiSpecPath") .resolves("nextApiSpec.json"); + sandbox.stub(commons, "getEnvironmentVariables").returns([]); sandbox .stub(copilotGptManifestUtils, "getDefaultNextAvailablePluginManifestPath") .resolves("nextPluginManifest.json"); @@ -274,6 +323,7 @@ describe("helper", async () => { sandbox.stub(fs, "ensureFile").resolves(); sandbox.stub(fs, "copyFile").resolves(); sandbox.stub(fs, "writeFile").resolves(); + sandbox.stub(fs, "readFile").resolves(); const res = await generatorHelper.addExistingPlugin( "test.json", "originalManifest.json", @@ -286,6 +336,80 @@ describe("helper", async () => { assert.isTrue(getApiSpecPath.notCalled); }); + it("success: has warning", async () => { + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v1", + name_for_human: "test", + runtimes: [{ type: "OpenApi", spec: { url: "test.json" } }], + } as any) + ); + sandbox.stub(copilotGptManifestUtils, "addAction").resolves(ok({} as any)); + const getApiSpecPath = sandbox + .stub(pluginManifestUtils, "getDefaultNextAvailableApiSpecPath") + .resolves("nextApiSpec.json"); + sandbox.stub(commons, "getEnvironmentVariables").returns(["TEST_ENV"]); + sandbox + .stub(copilotGptManifestUtils, "getDefaultNextAvailablePluginManifestPath") + .resolves("nextPluginManifest.json"); + sandbox.stub(fs, "pathExists").resolves(false); + sandbox.stub(path, "relative").returns("test"); + sandbox.stub(fs, "ensureFile").resolves(); + sandbox.stub(fs, "copyFile").resolves(); + sandbox.stub(fs, "writeFile").resolves(); + sandbox.stub(fs, "readFile").resolves(); + const res = await generatorHelper.addExistingPlugin( + "test.json", + "originalManifest.json", + "originalManifest.yaml", + "id", + context, + "source" + ); + assert.isTrue(res.isOk()); + if (res.isOk()) { + assert.equal(res.value.warnings.length, 2); + } + assert.isTrue(getApiSpecPath.notCalled); + }); + + it("success: only get partial warning", async () => { + sandbox.stub(pluginManifestUtils, "readPluginManifestFile").resolves( + ok({ + schema_version: "v1", + name_for_human: "test", + runtimes: [{ type: "OpenApi", spec: { url: "test.json" } }], + } as any) + ); + sandbox.stub(copilotGptManifestUtils, "addAction").resolves(ok({} as any)); + const getApiSpecPath = sandbox + .stub(pluginManifestUtils, "getDefaultNextAvailableApiSpecPath") + .resolves("nextApiSpec.json"); + sandbox.stub(commons, "getEnvironmentVariables").returns(["TEST_ENV"]); + sandbox + .stub(copilotGptManifestUtils, "getDefaultNextAvailablePluginManifestPath") + .resolves("nextPluginManifest.json"); + sandbox.stub(fs, "pathExists").resolves(false); + sandbox.stub(path, "relative").returns("test"); + sandbox.stub(fs, "ensureFile").resolves(); + sandbox.stub(fs, "copyFile").resolves(); + sandbox.stub(fs, "writeFile").resolves(); + sandbox.stub(fs, "readFile").throws(); + const res = await generatorHelper.addExistingPlugin( + "test.json", + "originalManifest.json", + "originalManifest.yaml", + "id", + context, + "source" + ); + assert.isTrue(res.isOk()); + if (res.isOk()) { + assert.equal(res.value.warnings.length, 1); + } + assert.isTrue(getApiSpecPath.notCalled); + }); + it("error: readPluginManifestFile Error", async () => { sandbox .stub(pluginManifestUtils, "readPluginManifestFile") diff --git a/packages/fx-core/tests/core/FxCore.test.ts b/packages/fx-core/tests/core/FxCore.test.ts index 6b85a968c6..0ccb642b5a 100644 --- a/packages/fx-core/tests/core/FxCore.test.ts +++ b/packages/fx-core/tests/core/FxCore.test.ts @@ -35,7 +35,13 @@ import mockedEnv, { RestoreFn } from "mocked-env"; import * as os from "os"; import * as path from "path"; import sinon from "sinon"; -import { FxCore, PackageService, getUuid, teamsDevPortalClient } from "../../src"; +import { + FxCore, + PackageService, + getLocalizedString, + getUuid, + teamsDevPortalClient, +} from "../../src"; import { FeatureFlagName } from "../../src/common/featureFlags"; import { LaunchHelper } from "../../src/component/m365/launchHelper"; import { @@ -84,6 +90,7 @@ import { InvalidProjectError, MissingEnvironmentVariablesError, MissingRequiredInputError, + NotImplementedError, UserCancelError, } from "../../src/error/common"; import { NoNeedUpgradeError } from "../../src/error/upgrade"; @@ -91,16 +98,13 @@ import { CapabilityOptions, QuestionNames, ScratchOptions, + SyncManifestInputs, + UninstallInputs, questionNodes, } from "../../src/question"; -import { - ApiPluginStartOptions, - HubOptions, - PluginAvailabilityOptions, -} from "../../src/question/constants"; +import { ApiPluginStartOptions, HubOptions } from "../../src/question/constants"; import { validationUtils } from "../../src/ui/validationUtils"; import { MockTools, randomAppName } from "./utils"; -import { isValidProjectV3, SyncManifestInputs, UninstallInputs } from "../../build"; import { CoreHookContext } from "../../src/core/types"; import * as projectHelper from "../../src/common/projectSettingsHelper"; import * as migrationUtil from "../../src/core/middleware/utils/v3MigrationUtils"; @@ -111,6 +115,7 @@ import { SyncManifestDriver } from "../../src/component/driver/teamsApp/syncMani import { ConstantString } from "../../src/common/constants"; import { SyncManifestArgs } from "../../src/component/driver/teamsApp/interfaces/SyncManifest"; import { WrapDriverContext } from "../../src/component/driver/util/wrapUtil"; +import * as copilotExtensionHelper from "../../src/component/generator/copilotExtension//helper"; const tools = new MockTools(); @@ -4757,15 +4762,16 @@ describe("addPlugin", async () => { afterEach(() => { sandbox.restore(); }); - it("add both action and plugin success", async () => { + + it("from API spec: add action success", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, [QuestionNames.Folder]: os.tmpdir(), [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", - [QuestionNames.ApiSpecLocation]: "test.json", + [QuestionNames.ApiSpecLocation]: "test.yaml", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -4777,19 +4783,18 @@ describe("addPlugin", async () => { }, ], }; - sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sandbox.stub(manifestUtils, "_writeAppManifest").resolves(ok(undefined)); sandbox.stub(pluginGeneratorHelper, "generateScaffoldingSummary").resolves(""); sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { - if (path.endsWith("openapi_1.json")) { + if (path.endsWith("openapi_1.yaml")) { return true; } if (path.endsWith("ai-plugin_1.json")) { return true; } - if (path.endsWith("openapi_2.json")) { + if (path.endsWith("openapi_2.yaml")) { return false; } if (path.endsWith("ai-plugin_2.json")) { @@ -4800,39 +4805,52 @@ describe("addPlugin", async () => { sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox .stub(copilotGptManifestUtils, "addAction") .resolves(ok({} as DeclarativeCopilotManifestSchema)); const core = new FxCore(tools); - sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves( - ok({ - warnings: [ - { type: WarningType.OperationOnlyContainsOptionalParam, content: "fakeMessage" }, - ], - }) - ); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); + + const showMessageStub = sandbox + .stub(tools.ui, "showMessage") + .callsFake((level, message, modal, items) => { + if (level == "info") { + return Promise.resolve( + ok(getLocalizedString("core.addPlugin.success.viewPluginManifest")) + ); + } else if (level === "warn") { + return Promise.resolve(ok("Add")); + } else { + throw new NotImplementedError("TEST", "showMessage"); + } + }); + + const openFileStub = sandbox.stub(tools.ui, "openFile").resolves(); - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); if (result.isErr()) { console.log(result.error); } assert.isTrue(result.isOk()); + assert.isTrue(showMessageStub.calledTwice); + assert.isTrue(openFileStub.calledOnce); + if (await fs.pathExists(inputs.projectPath!)) { await fs.remove(inputs.projectPath!); } }); - it("add action only success", async () => { + it("from API spec: add action with warnings from CLI", async () => { const appName = await mockV3Project(); const inputs: Inputs = { - platform: Platform.VSCode, + platform: Platform.CLI, [QuestionNames.Folder]: os.tmpdir(), [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.yaml", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.action().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -4866,33 +4884,37 @@ describe("addPlugin", async () => { sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox .stub(copilotGptManifestUtils, "addAction") .resolves(ok({} as DeclarativeCopilotManifestSchema)); const core = new FxCore(tools); - sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); + sandbox + .stub(CopilotPluginHelper, "generateFromApiSpec") + .resolves( + ok({ warnings: [{ type: WarningType.OperationOnlyContainsOptionalParam, content: "" }] }) + ); - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); + const showMessageStub = sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); - if (result.isErr()) { - console.log(result.error); - } + assert.isTrue(result.isOk()); + assert.isTrue(showMessageStub.calledTwice); if (await fs.pathExists(inputs.projectPath!)) { await fs.remove(inputs.projectPath!); } }); - it("add plugin success", async () => { + it("from existing plugin: add action success and not view plugin manifest", async () => { const appName = await mockV3Project(); const inputs: Inputs = { - platform: Platform.VSCode, + platform: Platform.CLI, [QuestionNames.Folder]: os.tmpdir(), [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", - [QuestionNames.ApiSpecLocation]: "test.json", - [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPlugin().id, + [QuestionNames.PluginManifestFilePath]: "ai-plugin.json", + [QuestionNames.PluginOpenApiSpecFilePath]: "openapi.json", + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.existingPlugin().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -4907,52 +4929,39 @@ describe("addPlugin", async () => { sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sandbox.stub(manifestUtils, "_writeAppManifest").resolves(ok(undefined)); - sandbox.stub(pluginGeneratorHelper, "generateScaffoldingSummary").resolves(""); - sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { - if (path.endsWith("openapi_1.json")) { - return true; - } - if (path.endsWith("ai-plugin_1.json")) { - return true; - } - if (path.endsWith("openapi_2.json")) { - return false; - } - if (path.endsWith("ai-plugin_2.json")) { - return false; - } - return true; - }); + sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox - .stub(copilotGptManifestUtils, "addAction") - .resolves(ok({} as DeclarativeCopilotManifestSchema)); + .stub(copilotExtensionHelper, "addExistingPlugin") + .resolves(ok({ destinationPluginManifestPath: "ai-plugin.json", warnings: [] })); const core = new FxCore(tools); - sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); + const showMessageStub = sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); if (result.isErr()) { console.log(result.error); } + assert.isTrue(result.isOk()); + assert.isTrue(showMessageStub.calledTwice); if (await fs.pathExists(inputs.projectPath!)) { await fs.remove(inputs.projectPath!); } }); - it("error: read Teams manifest error", async () => { + it("from existing plugin: add action error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { - platform: Platform.VSCode, + platform: Platform.CLI, [QuestionNames.Folder]: os.tmpdir(), [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", - [QuestionNames.ApiSpecLocation]: "test.json", - [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.PluginManifestFilePath]: "ai-plugin.json", + [QuestionNames.PluginOpenApiSpecFilePath]: "openapi.json", + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.existingPlugin().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -4965,18 +4974,33 @@ describe("addPlugin", async () => { ], }; sandbox.stub(validationUtils, "validateInputs").resolves(undefined); + sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); + sandbox.stub(manifestUtils, "_writeAppManifest").resolves(ok(undefined)); + sandbox - .stub(manifestUtils, "_readAppManifest") - .resolves(err(new SystemError("manifestError", "manifestError", "", ""))); + .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") + .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); + sandbox + .stub(copilotExtensionHelper, "addExistingPlugin") + .resolves(err(new SystemError("fakeError", "fakeError", "", ""))); + + sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); + const core = new FxCore(tools); + const result = await core.addPlugin(inputs); - assert.isTrue(result.isErr()); if (result.isErr()) { - assert.equal(result.error.name, "manifestError"); + console.log(result.error); + } + + assert.isTrue(result.isErr() && result.error.name === "fakeError"); + if (await fs.pathExists(inputs.projectPath!)) { + await fs.remove(inputs.projectPath!); } }); - it("error: read GPT manifest error", async () => { + it("from API Spec: generateForCopilot error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -4984,7 +5008,7 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -4996,20 +5020,31 @@ describe("addPlugin", async () => { }, ], }; + sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { + if (path.endsWith("openapi_1.json")) { + return false; + } + if (path.endsWith("ai-plugin_1.json")) { + return false; + } + return true; + }); sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") - .resolves(err(new SystemError("readError", "readError", "", ""))); + .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); + sandbox + .stub(CopilotPluginHelper, "generateFromApiSpec") + .resolves(err(new SystemError("", "", "", ""))); const core = new FxCore(tools); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); - if (result.isErr()) { - assert.equal(result.error.name, "readError"); - } }); - it("error: not copilot GPT project", async () => { + it("from API spec: add action error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -5017,22 +5052,53 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); - + manifest.copilotExtensions = { + declarativeCopilots: [ + { + file: "test1.json", + id: "action_1", + }, + ], + }; sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); + sandbox.stub(manifestUtils, "_writeAppManifest").resolves(ok(undefined)); + sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { + if (path.endsWith("openapi_1.json")) { + return false; + } + if (path.endsWith("ai-plugin_1.json")) { + return false; + } + return true; + }); + sandbox + .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") + .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); + sandbox + .stub(copilotGptManifestUtils, "addAction") + .resolves(err(new SystemError("addActionError", "addActionError", "", ""))); + const core = new FxCore(tools); + sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); + + sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); if (result.isErr()) { - assert.equal(result.error.name, AppStudioError.TeamsAppRequiredPropertyMissingError.name); + assert.equal(result.error.name, "addActionError"); + } + if (await fs.pathExists(inputs.projectPath!)) { + await fs.remove(inputs.projectPath!); } }); - it("error: cancel", async () => { + it("error: read Teams manifest error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -5040,7 +5106,7 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -5053,20 +5119,18 @@ describe("addPlugin", async () => { ], }; sandbox.stub(validationUtils, "validateInputs").resolves(undefined); - sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sandbox - .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") - .resolves(ok({} as DeclarativeCopilotManifestSchema)); - sandbox.stub(tools.ui, "showMessage").resolves(ok("Cancel")); + .stub(manifestUtils, "_readAppManifest") + .resolves(err(new SystemError("manifestError", "manifestError", "", ""))); const core = new FxCore(tools); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); if (result.isErr()) { - assert.isTrue(result.error instanceof UserCancelError); + assert.equal(result.error.name, "manifestError"); } }); - it("error: confirm UI error", async () => { + it("error: get declarative copilot manifest path error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -5074,7 +5138,7 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -5089,20 +5153,20 @@ describe("addPlugin", async () => { sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); sandbox - .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") - .resolves(ok({} as DeclarativeCopilotManifestSchema)); - sandbox - .stub(tools.ui, "showMessage") - .resolves(err(new SystemError("uiError", "uiError", "", ""))); + .stub(copilotGptManifestUtils, "getManifestPath") + .resolves(err(new SystemError("getError", "getError", "", ""))); const core = new FxCore(tools); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); if (result.isErr()) { - assert.equal("uiError", result.error.name); + assert.equal(result.error.name, "getError"); + } + if (await fs.pathExists(inputs.projectPath!)) { + await fs.remove(inputs.projectPath!); } }); - it("error: generateForCopilot error", async () => { + it("error: read GPT manifest error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -5110,7 +5174,7 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPluginAndAction().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -5122,30 +5186,50 @@ describe("addPlugin", async () => { }, ], }; - sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { - if (path.endsWith("openapi_1.json")) { - return false; - } - if (path.endsWith("ai-plugin_1.json")) { - return false; - } - return true; - }); sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") - .resolves(ok({} as DeclarativeCopilotManifestSchema)); - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); - sandbox - .stub(CopilotPluginHelper, "generateFromApiSpec") - .resolves(err(new SystemError("", "", "", ""))); + .resolves(err(new SystemError("readError", "readError", "", ""))); + const core = new FxCore(tools); + const result = await core.addPlugin(inputs); + assert.isTrue(result.isErr()); + if (result.isErr()) { + assert.equal(result.error.name, "readError"); + } + if (await fs.pathExists(inputs.projectPath!)) { + await fs.remove(inputs.projectPath!); + } + }); + + it("error: not copilot GPT project", async () => { + const appName = await mockV3Project(); + const inputs: Inputs = { + platform: Platform.VSCode, + [QuestionNames.Folder]: os.tmpdir(), + [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", + [QuestionNames.ApiSpecLocation]: "test.json", + [QuestionNames.ApiOperation]: ["GET /user/{userId}"], + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, + projectPath: path.join(os.tmpdir(), appName), + }; + const manifest = new TeamsAppManifest(); + + sandbox.stub(validationUtils, "validateInputs").resolves(undefined); + sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); const core = new FxCore(tools); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); + if (result.isErr()) { + assert.equal(result.error.name, AppStudioError.TeamsAppRequiredPropertyMissingError.name); + } + if (await fs.pathExists(inputs.projectPath!)) { + await fs.remove(inputs.projectPath!); + } }); - it("update manifest error", async () => { + it("error: cancel", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -5153,7 +5237,7 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.copilotPlugin().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -5167,41 +5251,23 @@ describe("addPlugin", async () => { }; sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); - sandbox - .stub(manifestUtils, "_writeAppManifest") - .resolves(err(new SystemError("writeError", "writeError", "", ""))); - sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { - if (path.endsWith("openapi_1.json")) { - return false; - } - if (path.endsWith("ai-plugin_1.json")) { - return false; - } - - return true; - }); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") .resolves(ok({} as DeclarativeCopilotManifestSchema)); - sandbox - .stub(copilotGptManifestUtils, "addAction") - .resolves(ok({} as DeclarativeCopilotManifestSchema)); - + sandbox.stub(tools.ui, "showMessage").resolves(ok("Cancel")); const core = new FxCore(tools); - sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); - - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); if (result.isErr()) { - assert.equal(result.error.name, "writeError"); + assert.isTrue(result.error instanceof UserCancelError); } if (await fs.pathExists(inputs.projectPath!)) { await fs.remove(inputs.projectPath!); } }); - it("add action error", async () => { + it("error: confirm UI error", async () => { const appName = await mockV3Project(); const inputs: Inputs = { platform: Platform.VSCode, @@ -5209,7 +5275,7 @@ describe("addPlugin", async () => { [QuestionNames.TeamsAppManifestFilePath]: "manifest.json", [QuestionNames.ApiSpecLocation]: "test.json", [QuestionNames.ApiOperation]: ["GET /user/{userId}"], - [QuestionNames.PluginAvailability]: PluginAvailabilityOptions.action().id, + [QuestionNames.ApiPluginType]: ApiPluginStartOptions.apiSpec().id, projectPath: path.join(os.tmpdir(), appName), }; const manifest = new TeamsAppManifest(); @@ -5223,31 +5289,18 @@ describe("addPlugin", async () => { }; sandbox.stub(validationUtils, "validateInputs").resolves(undefined); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok(manifest)); - sandbox.stub(manifestUtils, "_writeAppManifest").resolves(ok(undefined)); - sandbox.stub(fs, "pathExists").callsFake(async (path: string) => { - if (path.endsWith("openapi_1.json")) { - return false; - } - if (path.endsWith("ai-plugin_1.json")) { - return false; - } - return true; - }); sandbox .stub(copilotGptManifestUtils, "readCopilotGptManifestFile") .resolves(ok({} as DeclarativeCopilotManifestSchema)); + sandbox.stub(copilotGptManifestUtils, "getManifestPath").resolves(ok("dcManifest.json")); sandbox - .stub(copilotGptManifestUtils, "addAction") - .resolves(err(new SystemError("addActionError", "addActionError", "", ""))); - + .stub(tools.ui, "showMessage") + .resolves(err(new SystemError("uiError", "uiError", "", ""))); const core = new FxCore(tools); - sandbox.stub(CopilotPluginHelper, "generateFromApiSpec").resolves(ok({ warnings: [] })); - - sandbox.stub(tools.ui, "showMessage").resolves(ok("Add")); const result = await core.addPlugin(inputs); assert.isTrue(result.isErr()); if (result.isErr()) { - assert.equal(result.error.name, "addActionError"); + assert.equal("uiError", result.error.name); } if (await fs.pathExists(inputs.projectPath!)) { await fs.remove(inputs.projectPath!); diff --git a/packages/fx-core/tests/core/utils.ts b/packages/fx-core/tests/core/utils.ts index 2de050f82f..5122adc1c1 100644 --- a/packages/fx-core/tests/core/utils.ts +++ b/packages/fx-core/tests/core/utils.ts @@ -265,6 +265,10 @@ export class MockUserInteraction implements UserInteraction { async confirm(config: ConfirmConfig): Promise> { return ok({ type: "success", result: true }); } + + async openFile(filePath: string): Promise> { + return ok(true); + } } export class MockTools implements Tools { diff --git a/packages/fx-core/tests/question/question.test.ts b/packages/fx-core/tests/question/question.test.ts index c1de7b7136..32b815a30c 100644 --- a/packages/fx-core/tests/question/question.test.ts +++ b/packages/fx-core/tests/question/question.test.ts @@ -37,7 +37,7 @@ import { CollaborationConstants, CollaborationUtil } from "../../src/core/collab import { setTools } from "../../src/common/globalVars"; import { SPFxImportFolderQuestion, questionNodes } from "../../src/question"; import { - PluginAvailabilityOptions, + ApiPluginStartOptions, QuestionNames, TeamsAppValidationOptions, } from "../../src/question/constants"; @@ -51,7 +51,6 @@ import { selectAadAppManifestQuestionNode, selectAadManifestQuestion, selectLocalTeamsAppManifestQuestion, - selectPluginAvailabilityQuestion, selectTeamsAppManifestQuestion, } from "../../src/question/other"; import { QuestionTreeVisitor, traverse } from "../../src/ui/visitor"; @@ -1192,19 +1191,13 @@ describe("oauthQuestion", async () => { describe("addPluginQuestionNode", async () => { const sandbox = sinon.createSandbox(); - let mockedEnvRestore: RestoreFn = () => {}; + const mockedEnvRestore: RestoreFn = () => {}; afterEach(() => { sandbox.restore(); mockedEnvRestore(); }); - beforeEach(() => { - mockedEnvRestore = mockedEnv({ - [FeatureFlagName.CopilotExtension]: "true", - }); - }); - - it("success: can add a plugin or an action", async () => { + it("success: can add a plugin from api spec", async () => { sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok({} as TeamsAppManifest)); sandbox.stub(ManifestUtil, "parseCommonProperties").returns({ capabilities: ["copilotGpt"], @@ -1230,16 +1223,16 @@ describe("addPluginQuestionNode", async () => { ) => { questionNames.push(question.name); await callFuncs(question, inputs); - if (QuestionNames.TeamsAppManifestFilePath) { + if (question.name === QuestionNames.TeamsAppManifestFilePath) { return ok({ type: "success", result: "manifest.json", }); - } else if (QuestionNames.PluginAvailability) { + } else if (question.name == QuestionNames.ApiPluginType) { const select = question as SingleSelectQuestion; const options = await select.dynamicOptions!(inputs); - assert.isTrue(options.length === 3); - return ok({ type: "success", result: PluginAvailabilityOptions.action().id }); + //assert.isTrue(options.length === 2); + return ok({ type: "success", result: ApiPluginStartOptions.apiSpec().id }); } else if (question.name === QuestionNames.ApiSpecLocation) { return ok({ type: "success", result: "test.yaml" }); } else if (question.name === QuestionNames.ApiOperation) { @@ -1251,20 +1244,17 @@ describe("addPluginQuestionNode", async () => { await traverse(node, inputs, ui, undefined, visitor); assert.deepEqual(questionNames, [ - QuestionNames.TeamsAppManifestFilePath, - QuestionNames.PluginAvailability, + QuestionNames.ApiPluginType, QuestionNames.ApiSpecLocation, QuestionNames.ApiOperation, + QuestionNames.TeamsAppManifestFilePath, ]); }); - it("success: can add an action only", async () => { - mockedEnvRestore = mockedEnv({ - [FeatureFlagName.CopilotExtension]: "true", - }); + it("success: can add a plugin from existing plugin", async () => { sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok({} as TeamsAppManifest)); sandbox.stub(ManifestUtil, "parseCommonProperties").returns({ - capabilities: ["copilotGpt", "plugin"], + capabilities: ["copilotGpt"], isApiME: false, isSPFx: false, id: "1", @@ -1287,24 +1277,20 @@ describe("addPluginQuestionNode", async () => { ) => { questionNames.push(question.name); await callFuncs(question, inputs); - if (QuestionNames.TeamsAppManifestFilePath) { + if (question.name == QuestionNames.TeamsAppManifestFilePath) { return ok({ type: "success", result: "manifest.json", }); - } else if (QuestionNames.PluginAvailability) { + } else if (question.name == QuestionNames.ApiPluginType) { const select = question as SingleSelectQuestion; const options = await select.dynamicOptions!(inputs); - assert.isTrue(options.length === 1); - assert.isTrue((options[0] as OptionItem).id === PluginAvailabilityOptions.action().id); - return ok({ type: "success", result: PluginAvailabilityOptions.action().id }); - } else if (question.name === QuestionNames.ApiSpecLocation) { + assert.isTrue(options.length === 2); + return ok({ type: "success", result: ApiPluginStartOptions.existingPlugin().id }); + } else if (question.name === QuestionNames.PluginManifestFilePath) { return ok({ type: "success", result: "test.yaml" }); - } else if (question.name === QuestionNames.ApiOperation) { - const select = question as MultiSelectQuestion; - const cliDescription = select.cliDescription; - assert.isTrue(cliDescription?.includes("Copilot")); - return ok({ type: "success", result: "[GET /repairs]" }); + } else if (question.name === QuestionNames.PluginOpenApiSpecFilePath) { + return ok({ type: "success", result: "test.json" }); } return ok({ type: "success", result: undefined }); }; @@ -1312,62 +1298,10 @@ describe("addPluginQuestionNode", async () => { await traverse(node, inputs, ui, undefined, visitor); assert.deepEqual(questionNames, [ + QuestionNames.ApiPluginType, + QuestionNames.PluginManifestFilePath, + QuestionNames.PluginOpenApiSpecFilePath, QuestionNames.TeamsAppManifestFilePath, - QuestionNames.PluginAvailability, - QuestionNames.ApiSpecLocation, - QuestionNames.ApiOperation, ]); }); - - describe("selectPluginAvailabilityQuestion", async () => { - it("error: cannot add as the project is not declarative Copilot", async () => { - sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok({} as TeamsAppManifest)); - sandbox.stub(ManifestUtil, "parseCommonProperties").returns({ - capabilities: [], - isApiME: false, - isSPFx: false, - id: "1", - version: "1", - manifestVersion: "", - isApiMeAAD: false, - }); - const inputs: Inputs = { - platform: Platform.VSCode, - projectPath: "./test", - }; - - const question = selectPluginAvailabilityQuestion(); - let error; - try { - await question.dynamicOptions!(inputs); - } catch (e) { - error = e; - } - - console.log(error); - assert.isTrue(error !== undefined); - }); - - it("error: readManifestError", async () => { - sandbox - .stub(manifestUtils, "_readAppManifest") - .resolves(err(new UserError("error", "error", "error", "error"))); - - const inputs: Inputs = { - platform: Platform.VSCode, - projectPath: "./test", - }; - - const question = selectPluginAvailabilityQuestion(); - let error; - try { - await question.dynamicOptions!(inputs); - } catch (e) { - error = e; - } - - console.log(error); - assert.isTrue(error !== undefined); - }); - }); }); diff --git a/packages/vscode-extension/src/config.ts b/packages/vscode-extension/src/config.ts index b919c58259..aaf8feb0c5 100644 --- a/packages/vscode-extension/src/config.ts +++ b/packages/vscode-extension/src/config.ts @@ -23,6 +23,14 @@ export class ConfigManager { ConfigurationKey.CopilotExtensionEnable, false ).toString(); + process.env["DEVELOP_COPILOT_PLUGIN"] = this.getConfiguration( + ConfigurationKey.CopilotExtensionEnable, + false + ).toString(); + process.env["TEAMSFX_DECLARATIVE_COPILOT"] = this.getConfiguration( + ConfigurationKey.CopilotExtensionEnable, + false + ).toString(); } loadLogLevel() { const logLevel = this.getConfiguration(ConfigurationKey.LogLevel, "Info") as string; diff --git a/packages/vscode-extension/src/telemetry/extTelemetry.ts b/packages/vscode-extension/src/telemetry/extTelemetry.ts index cd5223cabe..a28857a69c 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetry.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetry.ts @@ -80,6 +80,8 @@ export namespace ExtTelemetry { return TelemetryEvent.CopilotPluginAddAPI; case Stage.syncManifest: return TelemetryEvent.SyncManifest; + case Stage.addPlugin: + return TelemetryEvent.AddPlugin; default: return undefined; } diff --git a/packages/vscode-extension/src/utils/autoOpenHelper.ts b/packages/vscode-extension/src/utils/autoOpenHelper.ts index 7db320e161..609d5af8d5 100644 --- a/packages/vscode-extension/src/utils/autoOpenHelper.ts +++ b/packages/vscode-extension/src/utils/autoOpenHelper.ts @@ -19,6 +19,7 @@ import { generateScaffoldingSummary, globalStateGet, globalStateUpdate, + outputScaffoldingWarningMessage, } from "@microsoft/teamsfx-core"; import { ExtTelemetry } from "../telemetry/extTelemetry"; import { TelemetryEvent, TelemetryTriggerFrom } from "../telemetry/extTelemetryEvents"; @@ -173,8 +174,10 @@ export async function ShowScaffoldingWarningSummary( workspacePath ); } - } - if (commonProperties.isApiME && teamsManifest.composeExtensions![0].apiSpecificationFile) { + } else if ( + commonProperties.isApiME && + teamsManifest.composeExtensions![0].apiSpecificationFile + ) { message = await generateScaffoldingSummary( createWarnings, teamsManifest, @@ -182,6 +185,8 @@ export async function ShowScaffoldingWarningSummary( undefined, workspacePath ); + } else { + message = outputScaffoldingWarningMessage(createWarnings); } if (message) { diff --git a/packages/vscode-extension/test/handlers/autoOpenProjectHandler.test.ts b/packages/vscode-extension/test/handlers/autoOpenProjectHandler.test.ts index 2998050a93..2cc325c8ff 100644 --- a/packages/vscode-extension/test/handlers/autoOpenProjectHandler.test.ts +++ b/packages/vscode-extension/test/handlers/autoOpenProjectHandler.test.ts @@ -156,7 +156,7 @@ describe("autoOpenProjectHandler", () => { chai.assert.isTrue(generateWarningStub.called); }); - it("opens README and skip show warnings if api file does not exist", async () => { + it("opens README and show warnings", async () => { sandbox.stub(globalVariables, "workspaceUri").value(vscode.Uri.file("test")); sandbox.stub(globalVariables, "isTeamsFxProject").resolves(false); const showMessageStub = sandbox @@ -201,7 +201,7 @@ describe("autoOpenProjectHandler", () => { await autoOpenProjectHandler(); - chai.assert.isTrue(sendTelemetryStub.calledOnce); + chai.assert.isTrue(sendTelemetryStub.calledTwice); chai.assert.isTrue(parseManifestStub.called); chai.assert.isFalse(generateWarningStub.called); }); From ef08838517399c585a0df902ad7bed4aef5f2a46 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:22:02 +0800 Subject: [PATCH 43/52] feat: upgrade template schema to 1.7 (#12319) * feat: upgrade template schema to 1.7 * refactor: upgrade template --- templates/common/api-plugin-existing-api/teamsapp.yml.tpl | 8 ++++---- templates/common/copilot-gpt-basic/teamsapp.yml.tpl | 8 ++++---- .../common/copilot-plugin-existing-api/teamsapp.yml.tpl | 8 ++++---- templates/common/office-addin/teamsapp.yml | 4 ++-- templates/common/office-xml-addin-common/teamsapp.yml.tpl | 4 ++-- .../yml/actions/teamsAppZipAppPackage.mustache | 2 +- .../teamsapp.local.yml.tpl.mustache | 2 +- .../teamsapp.yml.tpl.mustache | 2 +- .../teamsapp.local.yml.tpl.mustache | 2 +- .../teamsapp.yml.tpl.mustache | 2 +- templates/csharp/ai-assistant-bot/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/ai-assistant-bot/teamsapp.yml.tpl | 6 +++--- templates/csharp/ai-bot/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/ai-bot/teamsapp.yml.tpl | 6 +++--- .../api-message-extension-sso/teamsapp.local.yml.tpl | 6 +++--- .../csharp/api-message-extension-sso/teamsapp.yml.tpl | 6 +++--- templates/csharp/api-plugin-existing-api/teamsapp.yml.tpl | 6 +++--- .../api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl | 6 +++--- .../api-plugin-from-scratch-bearer/teamsapp.yml.tpl | 6 +++--- .../api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl | 6 +++--- .../csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl | 6 +++--- .../csharp/api-plugin-from-scratch/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/api-plugin-from-scratch/teamsapp.yml.tpl | 6 +++--- .../csharp/command-and-response/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/command-and-response/teamsapp.yml.tpl | 6 +++--- templates/csharp/copilot-gpt-basic/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl | 6 +++--- .../csharp/copilot-plugin-existing-api/teamsapp.yml.tpl | 6 +++--- .../teamsapp.local.yml.tpl | 6 +++--- .../copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl | 6 +++--- .../copilot-plugin-from-scratch/teamsapp.local.yml.tpl | 6 +++--- .../csharp/copilot-plugin-from-scratch/teamsapp.yml.tpl | 6 +++--- .../csharp/custom-copilot-basic/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/custom-copilot-basic/teamsapp.yml.tpl | 6 +++--- .../custom-copilot-rag-customize/teamsapp.local.yml.tpl | 6 +++--- .../csharp/custom-copilot-rag-customize/teamsapp.yml.tpl | 6 +++--- templates/csharp/default-bot/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/default-bot/teamsapp.yml.tpl | 6 +++--- templates/csharp/empty/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/empty/teamsapp.yml.tpl | 6 +++--- templates/csharp/link-unfurling/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/link-unfurling/teamsapp.yml.tpl | 6 +++--- .../message-extension-action/teamsapp.local.yml.tpl | 6 +++--- .../csharp/message-extension-action/teamsapp.yml.tpl | 6 +++--- .../message-extension-copilot/teamsapp.local.yml.tpl | 6 +++--- .../csharp/message-extension-copilot/teamsapp.yml.tpl | 6 +++--- .../message-extension-search/teamsapp.local.yml.tpl | 6 +++--- .../csharp/message-extension-search/teamsapp.yml.tpl | 6 +++--- templates/csharp/message-extension/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/message-extension/teamsapp.yml.tpl | 6 +++--- templates/csharp/non-sso-tab-ssr/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/non-sso-tab-ssr/teamsapp.yml.tpl | 6 +++--- templates/csharp/non-sso-tab/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/non-sso-tab/teamsapp.yml.tpl | 6 +++--- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.yml.tpl | 6 +++--- .../teamsapp.local.yml.tpl | 6 +++--- .../notification-http-timer-trigger/teamsapp.yml.tpl | 6 +++--- .../teamsapp.local.yml.tpl | 6 +++--- .../notification-http-trigger-isolated/teamsapp.yml.tpl | 6 +++--- .../notification-http-trigger/teamsapp.local.yml.tpl | 6 +++--- .../csharp/notification-http-trigger/teamsapp.yml.tpl | 6 +++--- .../teamsapp.local.yml.tpl | 6 +++--- .../notification-timer-trigger-isolated/teamsapp.yml.tpl | 6 +++--- .../notification-timer-trigger/teamsapp.local.yml.tpl | 6 +++--- .../csharp/notification-timer-trigger/teamsapp.yml.tpl | 6 +++--- .../csharp/notification-webapi/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/notification-webapi/teamsapp.yml.tpl | 6 +++--- templates/csharp/sso-tab-ssr/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/sso-tab-ssr/teamsapp.yml.tpl | 6 +++--- templates/csharp/sso-tab/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/sso-tab/teamsapp.yml.tpl | 6 +++--- templates/csharp/workflow/teamsapp.local.yml.tpl | 6 +++--- templates/csharp/workflow/teamsapp.yml.tpl | 6 +++--- templates/js/ai-assistant-bot/teamsapp.local.yml.tpl | 6 +++--- templates/js/ai-assistant-bot/teamsapp.testtool.yml | 4 ++-- templates/js/ai-assistant-bot/teamsapp.yml.tpl | 8 ++++---- templates/js/ai-bot/teamsapp.local.yml.tpl | 6 +++--- templates/js/ai-bot/teamsapp.testtool.yml | 4 ++-- templates/js/ai-bot/teamsapp.yml.tpl | 8 ++++---- .../js/api-message-extension-sso/teamsapp.local.yml.tpl | 6 +++--- templates/js/api-message-extension-sso/teamsapp.yml.tpl | 8 ++++---- .../api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl | 6 +++--- .../js/api-plugin-from-scratch-bearer/teamsapp.yml.tpl | 8 ++++---- .../api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl | 6 +++--- .../js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl | 8 ++++---- .../js/api-plugin-from-scratch/teamsapp.local.yml.tpl | 6 +++--- templates/js/api-plugin-from-scratch/teamsapp.yml.tpl | 8 ++++---- templates/js/command-and-response/teamsapp.local.yml.tpl | 6 +++--- templates/js/command-and-response/teamsapp.testtool.yml | 4 ++-- templates/js/command-and-response/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../js/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl | 8 ++++---- .../js/copilot-plugin-from-scratch/teamsapp.local.yml.tpl | 6 +++--- templates/js/copilot-plugin-from-scratch/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-assistant-new/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../js/custom-copilot-assistant-new/teamsapp.yml.tpl | 8 ++++---- templates/js/custom-copilot-basic/teamsapp.local.yml.tpl | 6 +++--- .../js/custom-copilot-basic/teamsapp.testtool.yml.tpl | 4 ++-- templates/js/custom-copilot-basic/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-rag-custom-api/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../js/custom-copilot-rag-custom-api/teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-rag-customize/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../js/custom-copilot-rag-customize/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../js/custom-copilot-rag-microsoft365/teamsapp.yml.tpl | 8 ++++---- templates/js/dashboard-tab/teamsapp.local.yml.tpl | 6 +++--- templates/js/dashboard-tab/teamsapp.yml.tpl | 8 ++++---- .../default-bot-message-extension/teamsapp.local.yml.tpl | 6 +++--- .../js/default-bot-message-extension/teamsapp.yml.tpl | 8 ++++---- templates/js/default-bot/teamsapp.local.yml.tpl | 6 +++--- templates/js/default-bot/teamsapp.testtool.yml | 4 ++-- templates/js/default-bot/teamsapp.yml.tpl | 8 ++++---- templates/js/link-unfurling/teamsapp.local.yml.tpl | 6 +++--- templates/js/link-unfurling/teamsapp.testtool.yml | 4 ++-- templates/js/link-unfurling/teamsapp.yml.tpl | 8 ++++---- .../js/m365-message-extension/teamsapp.local.yml.tpl | 6 +++--- templates/js/m365-message-extension/teamsapp.testtool.yml | 4 ++-- templates/js/m365-message-extension/teamsapp.yml.tpl | 8 ++++---- .../js/message-extension-action/teamsapp.local.yml.tpl | 6 +++--- .../js/message-extension-action/teamsapp.testtool.yml | 4 ++-- templates/js/message-extension-action/teamsapp.yml.tpl | 8 ++++---- .../js/message-extension-copilot/teamsapp.local.yml.tpl | 6 +++--- templates/js/message-extension-copilot/teamsapp.yml.tpl | 8 ++++---- templates/js/message-extension/teamsapp.local.yml.tpl | 6 +++--- templates/js/message-extension/teamsapp.testtool.yml | 4 ++-- templates/js/message-extension/teamsapp.yml.tpl | 8 ++++---- .../js/non-sso-tab-default-bot/teamsapp.local.yml.tpl | 6 +++--- templates/js/non-sso-tab-default-bot/teamsapp.yml.tpl | 8 ++++---- templates/js/non-sso-tab/teamsapp.local.yml.tpl | 6 +++--- templates/js/non-sso-tab/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../notification-http-timer-trigger/teamsapp.testtool.yml | 4 ++-- .../js/notification-http-timer-trigger/teamsapp.yml.tpl | 8 ++++---- .../js/notification-http-trigger/teamsapp.local.yml.tpl | 6 +++--- .../js/notification-http-trigger/teamsapp.testtool.yml | 4 ++-- templates/js/notification-http-trigger/teamsapp.yml.tpl | 8 ++++---- templates/js/notification-restify/teamsapp.local.yml.tpl | 6 +++--- templates/js/notification-restify/teamsapp.testtool.yml | 4 ++-- templates/js/notification-restify/teamsapp.yml.tpl | 8 ++++---- .../js/notification-timer-trigger/teamsapp.local.yml.tpl | 6 +++--- .../js/notification-timer-trigger/teamsapp.testtool.yml | 4 ++-- templates/js/notification-timer-trigger/teamsapp.yml.tpl | 8 ++++---- templates/js/office-json-addin/teamsapp.yml | 4 ++-- templates/js/sso-tab-with-obo-flow/teamsapp.local.yml.tpl | 6 +++--- templates/js/sso-tab-with-obo-flow/teamsapp.yml.tpl | 8 ++++---- templates/js/workflow/teamsapp.local.yml.tpl | 6 +++--- templates/js/workflow/teamsapp.testtool.yml | 4 ++-- templates/js/workflow/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-assistant-new/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../python/custom-copilot-assistant-new/teamsapp.yml.tpl | 8 ++++---- .../python/custom-copilot-basic/teamsapp.local.yml.tpl | 6 +++--- .../python/custom-copilot-basic/teamsapp.testtool.yml.tpl | 4 ++-- templates/python/custom-copilot-basic/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-rag-custom-api/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../python/custom-copilot-rag-custom-api/teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-rag-customize/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../python/custom-copilot-rag-customize/teamsapp.yml.tpl | 8 ++++---- templates/ts/ai-assistant-bot/teamsapp.local.yml.tpl | 6 +++--- templates/ts/ai-assistant-bot/teamsapp.testtool.yml | 4 ++-- templates/ts/ai-assistant-bot/teamsapp.yml.tpl | 8 ++++---- templates/ts/ai-bot/teamsapp.local.yml.tpl | 6 +++--- templates/ts/ai-bot/teamsapp.testtool.yml | 4 ++-- templates/ts/ai-bot/teamsapp.yml.tpl | 8 ++++---- .../ts/api-message-extension-sso/teamsapp.local.yml.tpl | 6 +++--- templates/ts/api-message-extension-sso/teamsapp.yml.tpl | 8 ++++---- .../api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl | 6 +++--- .../ts/api-plugin-from-scratch-bearer/teamsapp.yml.tpl | 8 ++++---- .../api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl | 6 +++--- .../ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl | 8 ++++---- .../ts/api-plugin-from-scratch/teamsapp.local.yml.tpl | 6 +++--- templates/ts/api-plugin-from-scratch/teamsapp.yml.tpl | 8 ++++---- templates/ts/command-and-response/teamsapp.local.yml.tpl | 6 +++--- templates/ts/command-and-response/teamsapp.testtool.yml | 4 ++-- templates/ts/command-and-response/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../ts/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl | 8 ++++---- .../ts/copilot-plugin-from-scratch/teamsapp.local.yml.tpl | 6 +++--- templates/ts/copilot-plugin-from-scratch/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-assistant-new/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../ts/custom-copilot-assistant-new/teamsapp.yml.tpl | 8 ++++---- templates/ts/custom-copilot-basic/teamsapp.local.yml.tpl | 6 +++--- .../ts/custom-copilot-basic/teamsapp.testtool.yml.tpl | 4 ++-- templates/ts/custom-copilot-basic/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-rag-custom-api/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../ts/custom-copilot-rag-custom-api/teamsapp.yml.tpl | 8 ++++---- .../custom-copilot-rag-customize/teamsapp.local.yml.tpl | 6 +++--- .../teamsapp.testtool.yml.tpl | 4 ++-- .../ts/custom-copilot-rag-customize/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../ts/custom-copilot-rag-microsoft365/teamsapp.yml.tpl | 8 ++++---- templates/ts/dashboard-tab/teamsapp.local.yml.tpl | 6 +++--- templates/ts/dashboard-tab/teamsapp.yml.tpl | 8 ++++---- .../default-bot-message-extension/teamsapp.local.yml.tpl | 6 +++--- .../ts/default-bot-message-extension/teamsapp.yml.tpl | 8 ++++---- templates/ts/default-bot/teamsapp.local.yml.tpl | 6 +++--- templates/ts/default-bot/teamsapp.testtool.yml | 4 ++-- templates/ts/default-bot/teamsapp.yml.tpl | 8 ++++---- templates/ts/link-unfurling/teamsapp.local.yml.tpl | 6 +++--- templates/ts/link-unfurling/teamsapp.testtool.yml | 4 ++-- templates/ts/link-unfurling/teamsapp.yml.tpl | 8 ++++---- .../ts/m365-message-extension/teamsapp.local.yml.tpl | 6 +++--- templates/ts/m365-message-extension/teamsapp.testtool.yml | 4 ++-- templates/ts/m365-message-extension/teamsapp.yml.tpl | 8 ++++---- .../ts/message-extension-action/teamsapp.local.yml.tpl | 6 +++--- .../ts/message-extension-action/teamsapp.testtool.yml | 4 ++-- templates/ts/message-extension-action/teamsapp.yml.tpl | 8 ++++---- .../ts/message-extension-copilot/teamsapp.local.yml.tpl | 6 +++--- templates/ts/message-extension-copilot/teamsapp.yml.tpl | 8 ++++---- templates/ts/message-extension/teamsapp.local.yml.tpl | 6 +++--- templates/ts/message-extension/teamsapp.testtool.yml | 4 ++-- templates/ts/message-extension/teamsapp.yml.tpl | 8 ++++---- .../ts/non-sso-tab-default-bot/teamsapp.local.yml.tpl | 6 +++--- templates/ts/non-sso-tab-default-bot/teamsapp.yml.tpl | 8 ++++---- templates/ts/non-sso-tab/teamsapp.local.yml.tpl | 6 +++--- templates/ts/non-sso-tab/teamsapp.yml.tpl | 8 ++++---- .../teamsapp.local.yml.tpl | 6 +++--- .../notification-http-timer-trigger/teamsapp.testtool.yml | 4 ++-- .../ts/notification-http-timer-trigger/teamsapp.yml.tpl | 8 ++++---- .../ts/notification-http-trigger/teamsapp.local.yml.tpl | 6 +++--- .../ts/notification-http-trigger/teamsapp.testtool.yml | 4 ++-- templates/ts/notification-http-trigger/teamsapp.yml.tpl | 8 ++++---- templates/ts/notification-restify/teamsapp.local.yml.tpl | 6 +++--- templates/ts/notification-restify/teamsapp.testtool.yml | 4 ++-- templates/ts/notification-restify/teamsapp.yml.tpl | 8 ++++---- .../ts/notification-timer-trigger/teamsapp.local.yml.tpl | 6 +++--- .../ts/notification-timer-trigger/teamsapp.testtool.yml | 4 ++-- templates/ts/notification-timer-trigger/teamsapp.yml.tpl | 8 ++++---- templates/ts/office-addin/teamsapp.yml | 4 ++-- templates/ts/office-json-addin/teamsapp.yml | 4 ++-- templates/ts/spfx-tab/teamsapp.local.yml.tpl | 6 +++--- templates/ts/spfx-tab/teamsapp.yml.tpl | 8 ++++---- templates/ts/sso-tab-with-obo-flow/teamsapp.local.yml.tpl | 6 +++--- templates/ts/sso-tab-with-obo-flow/teamsapp.yml.tpl | 8 ++++---- templates/ts/workflow/teamsapp.local.yml.tpl | 6 +++--- templates/ts/workflow/teamsapp.testtool.yml | 4 ++-- templates/ts/workflow/teamsapp.yml.tpl | 8 ++++---- 268 files changed, 822 insertions(+), 822 deletions(-) diff --git a/templates/common/api-plugin-existing-api/teamsapp.yml.tpl b/templates/common/api-plugin-existing-api/teamsapp.yml.tpl index 57f6d6e8df..ed155eb8ba 100644 --- a/templates/common/api-plugin-existing-api/teamsapp.yml.tpl +++ b/templates/common/api-plugin-existing-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -86,7 +86,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/common/copilot-gpt-basic/teamsapp.yml.tpl b/templates/common/copilot-gpt-basic/teamsapp.yml.tpl index 3a05ab5006..07b473d984 100644 --- a/templates/common/copilot-gpt-basic/teamsapp.yml.tpl +++ b/templates/common/copilot-gpt-basic/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -23,7 +23,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -55,7 +55,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/common/copilot-plugin-existing-api/teamsapp.yml.tpl b/templates/common/copilot-plugin-existing-api/teamsapp.yml.tpl index 2b7d833309..125f6111b7 100644 --- a/templates/common/copilot-plugin-existing-api/teamsapp.yml.tpl +++ b/templates/common/copilot-plugin-existing-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -58,7 +58,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -95,7 +95,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/common/office-addin/teamsapp.yml b/templates/common/office-addin/teamsapp.yml index 4d0e53490a..be40faf6b6 100644 --- a/templates/common/office-addin/teamsapp.yml +++ b/templates/common/office-addin/teamsapp.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env diff --git a/templates/common/office-xml-addin-common/teamsapp.yml.tpl b/templates/common/office-xml-addin-common/teamsapp.yml.tpl index 061b0c229f..2b15b72536 100644 --- a/templates/common/office-xml-addin-common/teamsapp.yml.tpl +++ b/templates/common/office-xml-addin-common/teamsapp.yml.tpl @@ -1,4 +1,4 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 \ No newline at end of file +version: v1.7 \ No newline at end of file diff --git a/templates/constraints/yml/actions/teamsAppZipAppPackage.mustache b/templates/constraints/yml/actions/teamsAppZipAppPackage.mustache index 78ca80af1f..f331fa12da 100644 --- a/templates/constraints/yml/actions/teamsAppZipAppPackage.mustache +++ b/templates/constraints/yml/actions/teamsAppZipAppPackage.mustache @@ -9,4 +9,4 @@ manifestPath: ./appPackage/manifest.json {{/localManifest}} outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json \ No newline at end of file + outputFolder: ./appPackage/build \ No newline at end of file diff --git a/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache b/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache index 80d9bff8b4..7e62e83aae 100644 --- a/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache +++ b/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache @@ -1,4 +1,4 @@ -{{#header}} version: v1.5 {{/header}} +{{#header}} version: v1.7 {{/header}} provision: {{#teamsAppCreate}} {{/teamsAppCreate}} diff --git a/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache b/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache index d674c31b24..633b56743f 100644 --- a/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache +++ b/templates/constraints/yml/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache @@ -1,4 +1,4 @@ -{{#header}} version: v1.5 {{/header}} +{{#header}} version: v1.7 {{/header}} environmentFolderPath: ./env diff --git a/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache b/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache index 80d9bff8b4..7e62e83aae 100644 --- a/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache +++ b/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl.mustache @@ -1,4 +1,4 @@ -{{#header}} version: v1.5 {{/header}} +{{#header}} version: v1.7 {{/header}} provision: {{#teamsAppCreate}} {{/teamsAppCreate}} diff --git a/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache b/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache index 6a553344f6..90b531700b 100644 --- a/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache +++ b/templates/constraints/yml/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl.mustache @@ -1,4 +1,4 @@ -{{#header}} version: v1.5 {{/header}} +{{#header}} version: v1.7 {{/header}} environmentFolderPath: ./env diff --git a/templates/csharp/ai-assistant-bot/teamsapp.local.yml.tpl b/templates/csharp/ai-assistant-bot/teamsapp.local.yml.tpl index 863eecb5b4..2b81570d7a 100644 --- a/templates/csharp/ai-assistant-bot/teamsapp.local.yml.tpl +++ b/templates/csharp/ai-assistant-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -72,7 +72,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/ai-assistant-bot/teamsapp.yml.tpl b/templates/csharp/ai-assistant-bot/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/ai-assistant-bot/teamsapp.yml.tpl +++ b/templates/csharp/ai-assistant-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/ai-bot/teamsapp.local.yml.tpl b/templates/csharp/ai-bot/teamsapp.local.yml.tpl index ea08f9222c..3abced640a 100644 --- a/templates/csharp/ai-bot/teamsapp.local.yml.tpl +++ b/templates/csharp/ai-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -74,7 +74,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/ai-bot/teamsapp.yml.tpl b/templates/csharp/ai-bot/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/ai-bot/teamsapp.yml.tpl +++ b/templates/csharp/ai-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/api-message-extension-sso/teamsapp.local.yml.tpl b/templates/csharp/api-message-extension-sso/teamsapp.local.yml.tpl index c20cb10024..bde02553b2 100644 --- a/templates/csharp/api-message-extension-sso/teamsapp.local.yml.tpl +++ b/templates/csharp/api-message-extension-sso/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -65,7 +65,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-message-extension-sso/teamsapp.yml.tpl b/templates/csharp/api-message-extension-sso/teamsapp.yml.tpl index e1b29c7422..e375e96907 100644 --- a/templates/csharp/api-message-extension-sso/teamsapp.yml.tpl +++ b/templates/csharp/api-message-extension-sso/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -86,7 +86,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-existing-api/teamsapp.yml.tpl b/templates/csharp/api-plugin-existing-api/teamsapp.yml.tpl index e1044fbdba..eb353c58dc 100644 --- a/templates/csharp/api-plugin-existing-api/teamsapp.yml.tpl +++ b/templates/csharp/api-plugin-existing-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl b/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl index 896fcb92c3..a680aa3d0f 100644 --- a/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -73,7 +73,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.yml.tpl b/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.yml.tpl index bc49de1100..3d86636120 100644 --- a/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch-bearer/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -64,7 +64,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl b/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl index 33395905b3..59d1b63208 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -26,7 +26,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl b/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl index 68715d5279..600c287537 100644 --- a/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch-oauth/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -115,7 +115,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-from-scratch/teamsapp.local.yml.tpl b/templates/csharp/api-plugin-from-scratch/teamsapp.local.yml.tpl index 33395905b3..59d1b63208 100644 --- a/templates/csharp/api-plugin-from-scratch/teamsapp.local.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -26,7 +26,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/api-plugin-from-scratch/teamsapp.yml.tpl b/templates/csharp/api-plugin-from-scratch/teamsapp.yml.tpl index bc3e7f4426..9f0e770584 100644 --- a/templates/csharp/api-plugin-from-scratch/teamsapp.yml.tpl +++ b/templates/csharp/api-plugin-from-scratch/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/command-and-response/teamsapp.local.yml.tpl b/templates/csharp/command-and-response/teamsapp.local.yml.tpl index 50ad49fb25..4aa089bccf 100644 --- a/templates/csharp/command-and-response/teamsapp.local.yml.tpl +++ b/templates/csharp/command-and-response/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/command-and-response/teamsapp.yml.tpl b/templates/csharp/command-and-response/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/command-and-response/teamsapp.yml.tpl +++ b/templates/csharp/command-and-response/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/copilot-gpt-basic/teamsapp.yml.tpl b/templates/csharp/copilot-gpt-basic/teamsapp.yml.tpl index d873ff069a..f3aad18544 100644 --- a/templates/csharp/copilot-gpt-basic/teamsapp.yml.tpl +++ b/templates/csharp/copilot-gpt-basic/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -23,7 +23,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. # Will use the app id in manifest file to determine which Teams app to update. @@ -50,7 +50,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. # Will use the app id in manifest file to determine which Teams app to update. diff --git a/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl b/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl index 3f591bd647..6a7a068dbf 100644 --- a/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl +++ b/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -32,7 +32,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl b/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl index 6930904ff1..0923cd6d43 100644 --- a/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl +++ b/templates/csharp/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/copilot-plugin-existing-api/teamsapp.yml.tpl b/templates/csharp/copilot-plugin-existing-api/teamsapp.yml.tpl index ebbaa5096e..7b5ddc8af7 100644 --- a/templates/csharp/copilot-plugin-existing-api/teamsapp.yml.tpl +++ b/templates/csharp/copilot-plugin-existing-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -59,7 +59,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl b/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl index bb1e0552ed..d4519140c6 100644 --- a/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl +++ b/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl b/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl index 160ff1c425..6c10ca373a 100644 --- a/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl +++ b/templates/csharp/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -70,7 +70,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/copilot-plugin-from-scratch/teamsapp.local.yml.tpl b/templates/csharp/copilot-plugin-from-scratch/teamsapp.local.yml.tpl index 81b33b543c..50bc625b8d 100644 --- a/templates/csharp/copilot-plugin-from-scratch/teamsapp.local.yml.tpl +++ b/templates/csharp/copilot-plugin-from-scratch/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -32,7 +32,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/copilot-plugin-from-scratch/teamsapp.yml.tpl b/templates/csharp/copilot-plugin-from-scratch/teamsapp.yml.tpl index 6930904ff1..0923cd6d43 100644 --- a/templates/csharp/copilot-plugin-from-scratch/teamsapp.yml.tpl +++ b/templates/csharp/copilot-plugin-from-scratch/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/custom-copilot-basic/teamsapp.local.yml.tpl b/templates/csharp/custom-copilot-basic/teamsapp.local.yml.tpl index 2bbbe4f129..e7c1245c56 100644 --- a/templates/csharp/custom-copilot-basic/teamsapp.local.yml.tpl +++ b/templates/csharp/custom-copilot-basic/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -79,7 +79,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/custom-copilot-basic/teamsapp.yml.tpl b/templates/csharp/custom-copilot-basic/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/custom-copilot-basic/teamsapp.yml.tpl +++ b/templates/csharp/custom-copilot-basic/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/custom-copilot-rag-customize/teamsapp.local.yml.tpl b/templates/csharp/custom-copilot-rag-customize/teamsapp.local.yml.tpl index 2bbbe4f129..e7c1245c56 100644 --- a/templates/csharp/custom-copilot-rag-customize/teamsapp.local.yml.tpl +++ b/templates/csharp/custom-copilot-rag-customize/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -79,7 +79,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/custom-copilot-rag-customize/teamsapp.yml.tpl b/templates/csharp/custom-copilot-rag-customize/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/custom-copilot-rag-customize/teamsapp.yml.tpl +++ b/templates/csharp/custom-copilot-rag-customize/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/default-bot/teamsapp.local.yml.tpl b/templates/csharp/default-bot/teamsapp.local.yml.tpl index 50ad49fb25..4aa089bccf 100644 --- a/templates/csharp/default-bot/teamsapp.local.yml.tpl +++ b/templates/csharp/default-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/default-bot/teamsapp.yml.tpl b/templates/csharp/default-bot/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/default-bot/teamsapp.yml.tpl +++ b/templates/csharp/default-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/empty/teamsapp.local.yml.tpl b/templates/csharp/empty/teamsapp.local.yml.tpl index be07a2bd1a..9f871e1fcd 100644 --- a/templates/csharp/empty/teamsapp.local.yml.tpl +++ b/templates/csharp/empty/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -26,7 +26,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/empty/teamsapp.yml.tpl b/templates/csharp/empty/teamsapp.yml.tpl index a6df70e5d0..944c99559b 100644 --- a/templates/csharp/empty/teamsapp.yml.tpl +++ b/templates/csharp/empty/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -28,7 +28,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/link-unfurling/teamsapp.local.yml.tpl b/templates/csharp/link-unfurling/teamsapp.local.yml.tpl index 6e5d3ce66d..52c45e3487 100644 --- a/templates/csharp/link-unfurling/teamsapp.local.yml.tpl +++ b/templates/csharp/link-unfurling/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/link-unfurling/teamsapp.yml.tpl b/templates/csharp/link-unfurling/teamsapp.yml.tpl index 4e40869189..abf62050cc 100644 --- a/templates/csharp/link-unfurling/teamsapp.yml.tpl +++ b/templates/csharp/link-unfurling/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/message-extension-action/teamsapp.local.yml.tpl b/templates/csharp/message-extension-action/teamsapp.local.yml.tpl index 62636731b6..cf14be1934 100644 --- a/templates/csharp/message-extension-action/teamsapp.local.yml.tpl +++ b/templates/csharp/message-extension-action/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/message-extension-action/teamsapp.yml.tpl b/templates/csharp/message-extension-action/teamsapp.yml.tpl index 91bcb3acac..ddb77c84e5 100644 --- a/templates/csharp/message-extension-action/teamsapp.yml.tpl +++ b/templates/csharp/message-extension-action/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/message-extension-copilot/teamsapp.local.yml.tpl b/templates/csharp/message-extension-copilot/teamsapp.local.yml.tpl index 84cb8e4213..98a52f9d60 100644 --- a/templates/csharp/message-extension-copilot/teamsapp.local.yml.tpl +++ b/templates/csharp/message-extension-copilot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/message-extension-copilot/teamsapp.yml.tpl b/templates/csharp/message-extension-copilot/teamsapp.yml.tpl index 88951c9678..1a8d6a85c8 100644 --- a/templates/csharp/message-extension-copilot/teamsapp.yml.tpl +++ b/templates/csharp/message-extension-copilot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/message-extension-search/teamsapp.local.yml.tpl b/templates/csharp/message-extension-search/teamsapp.local.yml.tpl index 6e5d3ce66d..52c45e3487 100644 --- a/templates/csharp/message-extension-search/teamsapp.local.yml.tpl +++ b/templates/csharp/message-extension-search/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/message-extension-search/teamsapp.yml.tpl b/templates/csharp/message-extension-search/teamsapp.yml.tpl index 1cad4107e3..02d70c6c47 100644 --- a/templates/csharp/message-extension-search/teamsapp.yml.tpl +++ b/templates/csharp/message-extension-search/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/message-extension/teamsapp.local.yml.tpl b/templates/csharp/message-extension/teamsapp.local.yml.tpl index 6e5d3ce66d..52c45e3487 100644 --- a/templates/csharp/message-extension/teamsapp.local.yml.tpl +++ b/templates/csharp/message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/message-extension/teamsapp.yml.tpl b/templates/csharp/message-extension/teamsapp.yml.tpl index 4e40869189..abf62050cc 100644 --- a/templates/csharp/message-extension/teamsapp.yml.tpl +++ b/templates/csharp/message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/non-sso-tab-ssr/teamsapp.local.yml.tpl b/templates/csharp/non-sso-tab-ssr/teamsapp.local.yml.tpl index 47aac59a71..188d345caf 100644 --- a/templates/csharp/non-sso-tab-ssr/teamsapp.local.yml.tpl +++ b/templates/csharp/non-sso-tab-ssr/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Set TAB_DOMAIN and TAB_ENDPOINT for local launch @@ -33,7 +33,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/non-sso-tab-ssr/teamsapp.yml.tpl b/templates/csharp/non-sso-tab-ssr/teamsapp.yml.tpl index 8c51a69708..41b661025e 100644 --- a/templates/csharp/non-sso-tab-ssr/teamsapp.yml.tpl +++ b/templates/csharp/non-sso-tab-ssr/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/non-sso-tab/teamsapp.local.yml.tpl b/templates/csharp/non-sso-tab/teamsapp.local.yml.tpl index 47aac59a71..188d345caf 100644 --- a/templates/csharp/non-sso-tab/teamsapp.local.yml.tpl +++ b/templates/csharp/non-sso-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Set TAB_DOMAIN and TAB_ENDPOINT for local launch @@ -33,7 +33,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/non-sso-tab/teamsapp.yml.tpl b/templates/csharp/non-sso-tab/teamsapp.yml.tpl index 8c51a69708..41b661025e 100644 --- a/templates/csharp/non-sso-tab/teamsapp.yml.tpl +++ b/templates/csharp/non-sso-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.local.yml.tpl b/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.local.yml.tpl index de6153b191..1481907547 100644 --- a/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.yml.tpl b/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.yml.tpl index 0469f4931c..b9404a7a2b 100644 --- a/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.yml.tpl +++ b/templates/csharp/notification-http-timer-trigger-isolated/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-timer-trigger/teamsapp.local.yml.tpl b/templates/csharp/notification-http-timer-trigger/teamsapp.local.yml.tpl index de6153b191..1481907547 100644 --- a/templates/csharp/notification-http-timer-trigger/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-http-timer-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-timer-trigger/teamsapp.yml.tpl b/templates/csharp/notification-http-timer-trigger/teamsapp.yml.tpl index ec64329111..40081be3f5 100644 --- a/templates/csharp/notification-http-timer-trigger/teamsapp.yml.tpl +++ b/templates/csharp/notification-http-timer-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-trigger-isolated/teamsapp.local.yml.tpl b/templates/csharp/notification-http-trigger-isolated/teamsapp.local.yml.tpl index de6153b191..1481907547 100644 --- a/templates/csharp/notification-http-trigger-isolated/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-http-trigger-isolated/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-trigger-isolated/teamsapp.yml.tpl b/templates/csharp/notification-http-trigger-isolated/teamsapp.yml.tpl index 0469f4931c..b9404a7a2b 100644 --- a/templates/csharp/notification-http-trigger-isolated/teamsapp.yml.tpl +++ b/templates/csharp/notification-http-trigger-isolated/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-trigger/teamsapp.local.yml.tpl b/templates/csharp/notification-http-trigger/teamsapp.local.yml.tpl index de6153b191..1481907547 100644 --- a/templates/csharp/notification-http-trigger/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-http-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-http-trigger/teamsapp.yml.tpl b/templates/csharp/notification-http-trigger/teamsapp.yml.tpl index ec64329111..40081be3f5 100644 --- a/templates/csharp/notification-http-trigger/teamsapp.yml.tpl +++ b/templates/csharp/notification-http-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-timer-trigger-isolated/teamsapp.local.yml.tpl b/templates/csharp/notification-timer-trigger-isolated/teamsapp.local.yml.tpl index de6153b191..1481907547 100644 --- a/templates/csharp/notification-timer-trigger-isolated/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-timer-trigger-isolated/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-timer-trigger-isolated/teamsapp.yml.tpl b/templates/csharp/notification-timer-trigger-isolated/teamsapp.yml.tpl index 0469f4931c..b9404a7a2b 100644 --- a/templates/csharp/notification-timer-trigger-isolated/teamsapp.yml.tpl +++ b/templates/csharp/notification-timer-trigger-isolated/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-timer-trigger/teamsapp.local.yml.tpl b/templates/csharp/notification-timer-trigger/teamsapp.local.yml.tpl index de6153b191..1481907547 100644 --- a/templates/csharp/notification-timer-trigger/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-timer-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-timer-trigger/teamsapp.yml.tpl b/templates/csharp/notification-timer-trigger/teamsapp.yml.tpl index ec64329111..40081be3f5 100644 --- a/templates/csharp/notification-timer-trigger/teamsapp.yml.tpl +++ b/templates/csharp/notification-timer-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-webapi/teamsapp.local.yml.tpl b/templates/csharp/notification-webapi/teamsapp.local.yml.tpl index fc3741214a..52156dc26e 100644 --- a/templates/csharp/notification-webapi/teamsapp.local.yml.tpl +++ b/templates/csharp/notification-webapi/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/notification-webapi/teamsapp.yml.tpl b/templates/csharp/notification-webapi/teamsapp.yml.tpl index ff1f60627b..a3203a8df7 100644 --- a/templates/csharp/notification-webapi/teamsapp.yml.tpl +++ b/templates/csharp/notification-webapi/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/sso-tab-ssr/teamsapp.local.yml.tpl b/templates/csharp/sso-tab-ssr/teamsapp.local.yml.tpl index f97b4c85d7..ffcd2ea76b 100644 --- a/templates/csharp/sso-tab-ssr/teamsapp.local.yml.tpl +++ b/templates/csharp/sso-tab-ssr/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -91,7 +91,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/sso-tab-ssr/teamsapp.yml.tpl b/templates/csharp/sso-tab-ssr/teamsapp.yml.tpl index a278023325..a8235d5c3f 100644 --- a/templates/csharp/sso-tab-ssr/teamsapp.yml.tpl +++ b/templates/csharp/sso-tab-ssr/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -89,7 +89,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/sso-tab/teamsapp.local.yml.tpl b/templates/csharp/sso-tab/teamsapp.local.yml.tpl index f97b4c85d7..ffcd2ea76b 100644 --- a/templates/csharp/sso-tab/teamsapp.local.yml.tpl +++ b/templates/csharp/sso-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -91,7 +91,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/sso-tab/teamsapp.yml.tpl b/templates/csharp/sso-tab/teamsapp.yml.tpl index a278023325..a8235d5c3f 100644 --- a/templates/csharp/sso-tab/teamsapp.yml.tpl +++ b/templates/csharp/sso-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -89,7 +89,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/csharp/workflow/teamsapp.local.yml.tpl b/templates/csharp/workflow/teamsapp.local.yml.tpl index 50ad49fb25..4aa089bccf 100644 --- a/templates/csharp/workflow/teamsapp.local.yml.tpl +++ b/templates/csharp/workflow/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/csharp/workflow/teamsapp.yml.tpl b/templates/csharp/workflow/teamsapp.yml.tpl index aa4dae251a..74710a4229 100644 --- a/templates/csharp/workflow/teamsapp.yml.tpl +++ b/templates/csharp/workflow/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/ai-assistant-bot/teamsapp.local.yml.tpl b/templates/js/ai-assistant-bot/teamsapp.local.yml.tpl index 51506e4922..e08c35e1b6 100644 --- a/templates/js/ai-assistant-bot/teamsapp.local.yml.tpl +++ b/templates/js/ai-assistant-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/ai-assistant-bot/teamsapp.testtool.yml b/templates/js/ai-assistant-bot/teamsapp.testtool.yml index 006e73712a..a1c5a99503 100644 --- a/templates/js/ai-assistant-bot/teamsapp.testtool.yml +++ b/templates/js/ai-assistant-bot/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/ai-assistant-bot/teamsapp.yml.tpl b/templates/js/ai-assistant-bot/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/ai-assistant-bot/teamsapp.yml.tpl +++ b/templates/js/ai-assistant-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/ai-bot/teamsapp.local.yml.tpl b/templates/js/ai-bot/teamsapp.local.yml.tpl index ecb41ab206..9bdd4bd85d 100644 --- a/templates/js/ai-bot/teamsapp.local.yml.tpl +++ b/templates/js/ai-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/ai-bot/teamsapp.testtool.yml b/templates/js/ai-bot/teamsapp.testtool.yml index 16b4e16478..b64edb3d60 100644 --- a/templates/js/ai-bot/teamsapp.testtool.yml +++ b/templates/js/ai-bot/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/ai-bot/teamsapp.yml.tpl b/templates/js/ai-bot/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/ai-bot/teamsapp.yml.tpl +++ b/templates/js/ai-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/api-message-extension-sso/teamsapp.local.yml.tpl b/templates/js/api-message-extension-sso/teamsapp.local.yml.tpl index 53fa9fb7f3..62b46f50a6 100644 --- a/templates/js/api-message-extension-sso/teamsapp.local.yml.tpl +++ b/templates/js/api-message-extension-sso/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -65,7 +65,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/api-message-extension-sso/teamsapp.yml.tpl b/templates/js/api-message-extension-sso/teamsapp.yml.tpl index 19c10ba9a1..f94a3fbdae 100644 --- a/templates/js/api-message-extension-sso/teamsapp.yml.tpl +++ b/templates/js/api-message-extension-sso/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -86,7 +86,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -148,7 +148,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl b/templates/js/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl index 547a5130eb..088073fcca 100644 --- a/templates/js/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl +++ b/templates/js/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/api-plugin-from-scratch-bearer/teamsapp.yml.tpl b/templates/js/api-plugin-from-scratch-bearer/teamsapp.yml.tpl index 84ff3817eb..ee25a13a4b 100644 --- a/templates/js/api-plugin-from-scratch-bearer/teamsapp.yml.tpl +++ b/templates/js/api-plugin-from-scratch-bearer/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -64,7 +64,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -126,7 +126,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl b/templates/js/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl index fed518b8fe..7b73365d09 100644 --- a/templates/js/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -27,7 +27,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl b/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl index e743175a3d..b0bc5ff3e9 100644 --- a/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl +++ b/templates/js/api-plugin-from-scratch-oauth/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -115,7 +115,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -172,7 +172,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/api-plugin-from-scratch/teamsapp.local.yml.tpl b/templates/js/api-plugin-from-scratch/teamsapp.local.yml.tpl index fed518b8fe..7b73365d09 100644 --- a/templates/js/api-plugin-from-scratch/teamsapp.local.yml.tpl +++ b/templates/js/api-plugin-from-scratch/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -27,7 +27,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/api-plugin-from-scratch/teamsapp.yml.tpl b/templates/js/api-plugin-from-scratch/teamsapp.yml.tpl index e186f8e7cf..1b4a977bc1 100644 --- a/templates/js/api-plugin-from-scratch/teamsapp.yml.tpl +++ b/templates/js/api-plugin-from-scratch/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/command-and-response/teamsapp.local.yml.tpl b/templates/js/command-and-response/teamsapp.local.yml.tpl index 16ab4f350e..bf58933b6e 100644 --- a/templates/js/command-and-response/teamsapp.local.yml.tpl +++ b/templates/js/command-and-response/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/command-and-response/teamsapp.testtool.yml b/templates/js/command-and-response/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/command-and-response/teamsapp.testtool.yml +++ b/templates/js/command-and-response/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/command-and-response/teamsapp.yml.tpl b/templates/js/command-and-response/teamsapp.yml.tpl index f894e13717..eca3e63622 100644 --- a/templates/js/command-and-response/teamsapp.yml.tpl +++ b/templates/js/command-and-response/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -101,7 +101,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl b/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl index 054f987870..5365af9a14 100644 --- a/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl +++ b/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -27,7 +27,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. diff --git a/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl b/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl index 47ec8b27b7..1ea590b184 100644 --- a/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl +++ b/templates/js/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. @@ -99,7 +99,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. # Will use the app id in manifest file to determine which Teams app to update. diff --git a/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl b/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl index 92a108e9ee..82ed11c0c6 100644 --- a/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl +++ b/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -60,7 +60,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl b/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl index 0955cc52d0..686abe0fc6 100644 --- a/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl +++ b/templates/js/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -81,7 +81,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -143,7 +143,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/copilot-plugin-from-scratch/teamsapp.local.yml.tpl b/templates/js/copilot-plugin-from-scratch/teamsapp.local.yml.tpl index b53ba0bee5..46f650d8ec 100644 --- a/templates/js/copilot-plugin-from-scratch/teamsapp.local.yml.tpl +++ b/templates/js/copilot-plugin-from-scratch/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -33,7 +33,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/copilot-plugin-from-scratch/teamsapp.yml.tpl b/templates/js/copilot-plugin-from-scratch/teamsapp.yml.tpl index 5bb964181a..12e858e30e 100644 --- a/templates/js/copilot-plugin-from-scratch/teamsapp.yml.tpl +++ b/templates/js/copilot-plugin-from-scratch/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -116,7 +116,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl index 3622b79e23..eab3d7b2d8 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl index f02ff2622b..02f1650a19 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-assistant-new/teamsapp.local.yml.tpl b/templates/js/custom-copilot-assistant-new/teamsapp.local.yml.tpl index 6f76c5bc99..2c7fb58640 100644 --- a/templates/js/custom-copilot-assistant-new/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-assistant-new/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl b/templates/js/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl index cab2b7e66a..e3fbcbc2de 100644 --- a/templates/js/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl +++ b/templates/js/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/custom-copilot-assistant-new/teamsapp.yml.tpl b/templates/js/custom-copilot-assistant-new/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/custom-copilot-assistant-new/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-assistant-new/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-basic/teamsapp.local.yml.tpl b/templates/js/custom-copilot-basic/teamsapp.local.yml.tpl index 6f76c5bc99..2c7fb58640 100644 --- a/templates/js/custom-copilot-basic/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-basic/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-basic/teamsapp.testtool.yml.tpl b/templates/js/custom-copilot-basic/teamsapp.testtool.yml.tpl index cab2b7e66a..e3fbcbc2de 100644 --- a/templates/js/custom-copilot-basic/teamsapp.testtool.yml.tpl +++ b/templates/js/custom-copilot-basic/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/custom-copilot-basic/teamsapp.yml.tpl b/templates/js/custom-copilot-basic/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/custom-copilot-basic/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-basic/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl b/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl index 4a323a50ed..b688445ca3 100644 --- a/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl b/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl index 39944e4b3a..7966965d64 100644 --- a/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl +++ b/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl b/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl b/templates/js/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl index 35bfa0bf46..a715b7d2be 100644 --- a/templates/js/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl b/templates/js/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl index 4e9b897438..7364896bae 100644 --- a/templates/js/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl +++ b/templates/js/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/custom-copilot-rag-custom-api/teamsapp.yml.tpl b/templates/js/custom-copilot-rag-custom-api/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/custom-copilot-rag-custom-api/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-rag-custom-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-customize/teamsapp.local.yml.tpl b/templates/js/custom-copilot-rag-customize/teamsapp.local.yml.tpl index 6f76c5bc99..2c7fb58640 100644 --- a/templates/js/custom-copilot-rag-customize/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-rag-customize/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl b/templates/js/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl index cab2b7e66a..e3fbcbc2de 100644 --- a/templates/js/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl +++ b/templates/js/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/custom-copilot-rag-customize/teamsapp.yml.tpl b/templates/js/custom-copilot-rag-customize/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/js/custom-copilot-rag-customize/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-rag-customize/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl b/templates/js/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl index cbd8999b62..996095a982 100644 --- a/templates/js/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl +++ b/templates/js/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: - uses: aadApp/create # Creates a new Azure Active Directory (AAD) app to authenticate users if the environment variable that stores clientId is empty @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/custom-copilot-rag-microsoft365/teamsapp.yml.tpl b/templates/js/custom-copilot-rag-microsoft365/teamsapp.yml.tpl index e6ff97117c..726421f253 100644 --- a/templates/js/custom-copilot-rag-microsoft365/teamsapp.yml.tpl +++ b/templates/js/custom-copilot-rag-microsoft365/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -123,7 +123,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/dashboard-tab/teamsapp.local.yml.tpl b/templates/js/dashboard-tab/teamsapp.local.yml.tpl index 59ae8b577a..8f5bd87b02 100644 --- a/templates/js/dashboard-tab/teamsapp.local.yml.tpl +++ b/templates/js/dashboard-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -31,7 +31,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/dashboard-tab/teamsapp.yml.tpl b/templates/js/dashboard-tab/teamsapp.yml.tpl index 49577b1a85..b3889dc2f4 100644 --- a/templates/js/dashboard-tab/teamsapp.yml.tpl +++ b/templates/js/dashboard-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -61,7 +61,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/default-bot-message-extension/teamsapp.local.yml.tpl b/templates/js/default-bot-message-extension/teamsapp.local.yml.tpl index 43c042ef34..480d72302b 100644 --- a/templates/js/default-bot-message-extension/teamsapp.local.yml.tpl +++ b/templates/js/default-bot-message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -50,7 +50,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/default-bot-message-extension/teamsapp.yml.tpl b/templates/js/default-bot-message-extension/teamsapp.yml.tpl index 5f84fe4773..cfc56139f5 100644 --- a/templates/js/default-bot-message-extension/teamsapp.yml.tpl +++ b/templates/js/default-bot-message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -101,7 +101,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/default-bot/teamsapp.local.yml.tpl b/templates/js/default-bot/teamsapp.local.yml.tpl index 43c042ef34..480d72302b 100644 --- a/templates/js/default-bot/teamsapp.local.yml.tpl +++ b/templates/js/default-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -50,7 +50,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/default-bot/teamsapp.testtool.yml b/templates/js/default-bot/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/default-bot/teamsapp.testtool.yml +++ b/templates/js/default-bot/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/default-bot/teamsapp.yml.tpl b/templates/js/default-bot/teamsapp.yml.tpl index 5f84fe4773..cfc56139f5 100644 --- a/templates/js/default-bot/teamsapp.yml.tpl +++ b/templates/js/default-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -101,7 +101,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/link-unfurling/teamsapp.local.yml.tpl b/templates/js/link-unfurling/teamsapp.local.yml.tpl index cf7c0c467a..4d0bbf58d6 100644 --- a/templates/js/link-unfurling/teamsapp.local.yml.tpl +++ b/templates/js/link-unfurling/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/link-unfurling/teamsapp.testtool.yml b/templates/js/link-unfurling/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/link-unfurling/teamsapp.testtool.yml +++ b/templates/js/link-unfurling/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/link-unfurling/teamsapp.yml.tpl b/templates/js/link-unfurling/teamsapp.yml.tpl index 59ebe517fe..eeaa921b85 100644 --- a/templates/js/link-unfurling/teamsapp.yml.tpl +++ b/templates/js/link-unfurling/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/m365-message-extension/teamsapp.local.yml.tpl b/templates/js/m365-message-extension/teamsapp.local.yml.tpl index 304dbde219..30ce9d580f 100644 --- a/templates/js/m365-message-extension/teamsapp.local.yml.tpl +++ b/templates/js/m365-message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -52,7 +52,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/m365-message-extension/teamsapp.testtool.yml b/templates/js/m365-message-extension/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/m365-message-extension/teamsapp.testtool.yml +++ b/templates/js/m365-message-extension/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/m365-message-extension/teamsapp.yml.tpl b/templates/js/m365-message-extension/teamsapp.yml.tpl index 681a6756ae..b9b76961d3 100644 --- a/templates/js/m365-message-extension/teamsapp.yml.tpl +++ b/templates/js/m365-message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/message-extension-action/teamsapp.local.yml.tpl b/templates/js/message-extension-action/teamsapp.local.yml.tpl index 7a3d7afab5..13c989fd9c 100644 --- a/templates/js/message-extension-action/teamsapp.local.yml.tpl +++ b/templates/js/message-extension-action/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/message-extension-action/teamsapp.testtool.yml b/templates/js/message-extension-action/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/message-extension-action/teamsapp.testtool.yml +++ b/templates/js/message-extension-action/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/message-extension-action/teamsapp.yml.tpl b/templates/js/message-extension-action/teamsapp.yml.tpl index e8bdd3e035..04d81d182d 100644 --- a/templates/js/message-extension-action/teamsapp.yml.tpl +++ b/templates/js/message-extension-action/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -104,7 +104,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/message-extension-copilot/teamsapp.local.yml.tpl b/templates/js/message-extension-copilot/teamsapp.local.yml.tpl index 0ef8f01654..cc2946b64a 100644 --- a/templates/js/message-extension-copilot/teamsapp.local.yml.tpl +++ b/templates/js/message-extension-copilot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -52,7 +52,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/message-extension-copilot/teamsapp.yml.tpl b/templates/js/message-extension-copilot/teamsapp.yml.tpl index 681a6756ae..b9b76961d3 100644 --- a/templates/js/message-extension-copilot/teamsapp.yml.tpl +++ b/templates/js/message-extension-copilot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/message-extension/teamsapp.local.yml.tpl b/templates/js/message-extension/teamsapp.local.yml.tpl index cf7c0c467a..4d0bbf58d6 100644 --- a/templates/js/message-extension/teamsapp.local.yml.tpl +++ b/templates/js/message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/message-extension/teamsapp.testtool.yml b/templates/js/message-extension/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/message-extension/teamsapp.testtool.yml +++ b/templates/js/message-extension/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/message-extension/teamsapp.yml.tpl b/templates/js/message-extension/teamsapp.yml.tpl index 681a6756ae..b9b76961d3 100644 --- a/templates/js/message-extension/teamsapp.yml.tpl +++ b/templates/js/message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/non-sso-tab-default-bot/teamsapp.local.yml.tpl b/templates/js/non-sso-tab-default-bot/teamsapp.local.yml.tpl index 6c59df5ebf..0e93f612e5 100644 --- a/templates/js/non-sso-tab-default-bot/teamsapp.local.yml.tpl +++ b/templates/js/non-sso-tab-default-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -56,7 +56,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/non-sso-tab-default-bot/teamsapp.yml.tpl b/templates/js/non-sso-tab-default-bot/teamsapp.yml.tpl index 8d9692d6ea..3a85743bcb 100644 --- a/templates/js/non-sso-tab-default-bot/teamsapp.yml.tpl +++ b/templates/js/non-sso-tab-default-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -61,7 +61,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -120,7 +120,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/non-sso-tab/teamsapp.local.yml.tpl b/templates/js/non-sso-tab/teamsapp.local.yml.tpl index bec2f5542f..01619321c4 100644 --- a/templates/js/non-sso-tab/teamsapp.local.yml.tpl +++ b/templates/js/non-sso-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -31,7 +31,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/non-sso-tab/teamsapp.yml.tpl b/templates/js/non-sso-tab/teamsapp.yml.tpl index c8ae5e0eb8..c63e13b26a 100644 --- a/templates/js/non-sso-tab/teamsapp.yml.tpl +++ b/templates/js/non-sso-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-http-timer-trigger/teamsapp.local.yml.tpl b/templates/js/notification-http-timer-trigger/teamsapp.local.yml.tpl index cba9728ddd..300029712c 100644 --- a/templates/js/notification-http-timer-trigger/teamsapp.local.yml.tpl +++ b/templates/js/notification-http-timer-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-http-timer-trigger/teamsapp.testtool.yml b/templates/js/notification-http-timer-trigger/teamsapp.testtool.yml index 55b37b9f7b..b86b326e56 100644 --- a/templates/js/notification-http-timer-trigger/teamsapp.testtool.yml +++ b/templates/js/notification-http-timer-trigger/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/notification-http-timer-trigger/teamsapp.yml.tpl b/templates/js/notification-http-timer-trigger/teamsapp.yml.tpl index 39b780c704..5fe79ebb9b 100644 --- a/templates/js/notification-http-timer-trigger/teamsapp.yml.tpl +++ b/templates/js/notification-http-timer-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -96,7 +96,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-http-trigger/teamsapp.local.yml.tpl b/templates/js/notification-http-trigger/teamsapp.local.yml.tpl index cba9728ddd..300029712c 100644 --- a/templates/js/notification-http-trigger/teamsapp.local.yml.tpl +++ b/templates/js/notification-http-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-http-trigger/teamsapp.testtool.yml b/templates/js/notification-http-trigger/teamsapp.testtool.yml index 55b37b9f7b..b86b326e56 100644 --- a/templates/js/notification-http-trigger/teamsapp.testtool.yml +++ b/templates/js/notification-http-trigger/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/notification-http-trigger/teamsapp.yml.tpl b/templates/js/notification-http-trigger/teamsapp.yml.tpl index 39b780c704..5fe79ebb9b 100644 --- a/templates/js/notification-http-trigger/teamsapp.yml.tpl +++ b/templates/js/notification-http-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -96,7 +96,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-restify/teamsapp.local.yml.tpl b/templates/js/notification-restify/teamsapp.local.yml.tpl index 7b9846c218..bb9d38d002 100644 --- a/templates/js/notification-restify/teamsapp.local.yml.tpl +++ b/templates/js/notification-restify/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -50,7 +50,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-restify/teamsapp.testtool.yml b/templates/js/notification-restify/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/notification-restify/teamsapp.testtool.yml +++ b/templates/js/notification-restify/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/notification-restify/teamsapp.yml.tpl b/templates/js/notification-restify/teamsapp.yml.tpl index 407795c8b0..620d670afe 100644 --- a/templates/js/notification-restify/teamsapp.yml.tpl +++ b/templates/js/notification-restify/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -101,7 +101,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-timer-trigger/teamsapp.local.yml.tpl b/templates/js/notification-timer-trigger/teamsapp.local.yml.tpl index cba9728ddd..300029712c 100644 --- a/templates/js/notification-timer-trigger/teamsapp.local.yml.tpl +++ b/templates/js/notification-timer-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/notification-timer-trigger/teamsapp.testtool.yml b/templates/js/notification-timer-trigger/teamsapp.testtool.yml index 55b37b9f7b..b86b326e56 100644 --- a/templates/js/notification-timer-trigger/teamsapp.testtool.yml +++ b/templates/js/notification-timer-trigger/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/notification-timer-trigger/teamsapp.yml.tpl b/templates/js/notification-timer-trigger/teamsapp.yml.tpl index 39b780c704..5fe79ebb9b 100644 --- a/templates/js/notification-timer-trigger/teamsapp.yml.tpl +++ b/templates/js/notification-timer-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -96,7 +96,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/office-json-addin/teamsapp.yml b/templates/js/office-json-addin/teamsapp.yml index 42b27ade66..497c6948a3 100644 --- a/templates/js/office-json-addin/teamsapp.yml +++ b/templates/js/office-json-addin/teamsapp.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env diff --git a/templates/js/sso-tab-with-obo-flow/teamsapp.local.yml.tpl b/templates/js/sso-tab-with-obo-flow/teamsapp.local.yml.tpl index ff71099f67..dba4db2bdc 100644 --- a/templates/js/sso-tab-with-obo-flow/teamsapp.local.yml.tpl +++ b/templates/js/sso-tab-with-obo-flow/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/js/sso-tab-with-obo-flow/teamsapp.yml.tpl b/templates/js/sso-tab-with-obo-flow/teamsapp.yml.tpl index df30f78c88..d4fff9c1bd 100644 --- a/templates/js/sso-tab-with-obo-flow/teamsapp.yml.tpl +++ b/templates/js/sso-tab-with-obo-flow/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -96,7 +96,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -175,7 +175,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/workflow/teamsapp.local.yml.tpl b/templates/js/workflow/teamsapp.local.yml.tpl index 16ab4f350e..bf58933b6e 100644 --- a/templates/js/workflow/teamsapp.local.yml.tpl +++ b/templates/js/workflow/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/js/workflow/teamsapp.testtool.yml b/templates/js/workflow/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/js/workflow/teamsapp.testtool.yml +++ b/templates/js/workflow/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/js/workflow/teamsapp.yml.tpl b/templates/js/workflow/teamsapp.yml.tpl index 407795c8b0..620d670afe 100644 --- a/templates/js/workflow/teamsapp.yml.tpl +++ b/templates/js/workflow/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -101,7 +101,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl b/templates/python/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl index 47f9576369..be6835e737 100644 --- a/templates/python/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl +++ b/templates/python/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl b/templates/python/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl index f5a609dde4..d0c953fa05 100644 --- a/templates/python/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl +++ b/templates/python/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/python/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl b/templates/python/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl index 75c71e77b0..493c539d33 100644 --- a/templates/python/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl +++ b/templates/python/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-assistant-new/teamsapp.local.yml.tpl b/templates/python/custom-copilot-assistant-new/teamsapp.local.yml.tpl index 553b241477..7b6c4ba3b5 100644 --- a/templates/python/custom-copilot-assistant-new/teamsapp.local.yml.tpl +++ b/templates/python/custom-copilot-assistant-new/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl b/templates/python/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl index c925d4f9e6..bb5d6a35d4 100644 --- a/templates/python/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl +++ b/templates/python/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/python/custom-copilot-assistant-new/teamsapp.yml.tpl b/templates/python/custom-copilot-assistant-new/teamsapp.yml.tpl index 385dc3d996..ded62fa350 100644 --- a/templates/python/custom-copilot-assistant-new/teamsapp.yml.tpl +++ b/templates/python/custom-copilot-assistant-new/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-basic/teamsapp.local.yml.tpl b/templates/python/custom-copilot-basic/teamsapp.local.yml.tpl index 553b241477..7b6c4ba3b5 100644 --- a/templates/python/custom-copilot-basic/teamsapp.local.yml.tpl +++ b/templates/python/custom-copilot-basic/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-basic/teamsapp.testtool.yml.tpl b/templates/python/custom-copilot-basic/teamsapp.testtool.yml.tpl index c925d4f9e6..bb5d6a35d4 100644 --- a/templates/python/custom-copilot-basic/teamsapp.testtool.yml.tpl +++ b/templates/python/custom-copilot-basic/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/python/custom-copilot-basic/teamsapp.yml.tpl b/templates/python/custom-copilot-basic/teamsapp.yml.tpl index 385dc3d996..ded62fa350 100644 --- a/templates/python/custom-copilot-basic/teamsapp.yml.tpl +++ b/templates/python/custom-copilot-basic/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl b/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl index 2bbb412c48..d186323670 100644 --- a/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl +++ b/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl b/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl index c111f04c1a..9c6e57ec46 100644 --- a/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl +++ b/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl b/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl index d06d5378fe..34b81201e5 100644 --- a/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl +++ b/templates/python/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl b/templates/python/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl index d0d3e00ee5..4ce626f09a 100644 --- a/templates/python/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl +++ b/templates/python/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl b/templates/python/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl index 984cbc9d17..4982515f0e 100644 --- a/templates/python/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl +++ b/templates/python/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/python/custom-copilot-rag-custom-api/teamsapp.yml.tpl b/templates/python/custom-copilot-rag-custom-api/teamsapp.yml.tpl index af28fcf93f..dd0c167375 100644 --- a/templates/python/custom-copilot-rag-custom-api/teamsapp.yml.tpl +++ b/templates/python/custom-copilot-rag-custom-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-rag-customize/teamsapp.local.yml.tpl b/templates/python/custom-copilot-rag-customize/teamsapp.local.yml.tpl index e3f9e92826..7af9c63f5c 100644 --- a/templates/python/custom-copilot-rag-customize/teamsapp.local.yml.tpl +++ b/templates/python/custom-copilot-rag-customize/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/python/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl b/templates/python/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl index c925d4f9e6..bb5d6a35d4 100644 --- a/templates/python/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl +++ b/templates/python/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/python/custom-copilot-rag-customize/teamsapp.yml.tpl b/templates/python/custom-copilot-rag-customize/teamsapp.yml.tpl index d06d5378fe..34b81201e5 100644 --- a/templates/python/custom-copilot-rag-customize/teamsapp.yml.tpl +++ b/templates/python/custom-copilot-rag-customize/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -68,7 +68,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -111,7 +111,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/ai-assistant-bot/teamsapp.local.yml.tpl b/templates/ts/ai-assistant-bot/teamsapp.local.yml.tpl index 51506e4922..e08c35e1b6 100644 --- a/templates/ts/ai-assistant-bot/teamsapp.local.yml.tpl +++ b/templates/ts/ai-assistant-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/ai-assistant-bot/teamsapp.testtool.yml b/templates/ts/ai-assistant-bot/teamsapp.testtool.yml index 006e73712a..a1c5a99503 100644 --- a/templates/ts/ai-assistant-bot/teamsapp.testtool.yml +++ b/templates/ts/ai-assistant-bot/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/ai-assistant-bot/teamsapp.yml.tpl b/templates/ts/ai-assistant-bot/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/ai-assistant-bot/teamsapp.yml.tpl +++ b/templates/ts/ai-assistant-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/ai-bot/teamsapp.local.yml.tpl b/templates/ts/ai-bot/teamsapp.local.yml.tpl index ecb41ab206..9bdd4bd85d 100644 --- a/templates/ts/ai-bot/teamsapp.local.yml.tpl +++ b/templates/ts/ai-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/ai-bot/teamsapp.testtool.yml b/templates/ts/ai-bot/teamsapp.testtool.yml index 16b4e16478..b64edb3d60 100644 --- a/templates/ts/ai-bot/teamsapp.testtool.yml +++ b/templates/ts/ai-bot/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/ai-bot/teamsapp.yml.tpl b/templates/ts/ai-bot/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/ai-bot/teamsapp.yml.tpl +++ b/templates/ts/ai-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/api-message-extension-sso/teamsapp.local.yml.tpl b/templates/ts/api-message-extension-sso/teamsapp.local.yml.tpl index 53fa9fb7f3..62b46f50a6 100644 --- a/templates/ts/api-message-extension-sso/teamsapp.local.yml.tpl +++ b/templates/ts/api-message-extension-sso/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -65,7 +65,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/api-message-extension-sso/teamsapp.yml.tpl b/templates/ts/api-message-extension-sso/teamsapp.yml.tpl index d3cb308507..dd9b962524 100644 --- a/templates/ts/api-message-extension-sso/teamsapp.yml.tpl +++ b/templates/ts/api-message-extension-sso/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -86,7 +86,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -153,7 +153,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl b/templates/ts/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl index f4ea0f9c27..b1637fc92a 100644 --- a/templates/ts/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl +++ b/templates/ts/api-plugin-from-scratch-bearer/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/api-plugin-from-scratch-bearer/teamsapp.yml.tpl b/templates/ts/api-plugin-from-scratch-bearer/teamsapp.yml.tpl index ad88d173bf..c0dede8d3d 100644 --- a/templates/ts/api-plugin-from-scratch-bearer/teamsapp.yml.tpl +++ b/templates/ts/api-plugin-from-scratch-bearer/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -64,7 +64,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -126,7 +126,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl b/templates/ts/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl index 7d8d0b0886..b5c5812d25 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -27,7 +27,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl b/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl index d9a3e014f8..0c7a171b5a 100644 --- a/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl +++ b/templates/ts/api-plugin-from-scratch-oauth/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.6/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.6 +version: v1.7 environmentFolderPath: ./env @@ -115,7 +115,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -177,7 +177,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/api-plugin-from-scratch/teamsapp.local.yml.tpl b/templates/ts/api-plugin-from-scratch/teamsapp.local.yml.tpl index fed518b8fe..7b73365d09 100644 --- a/templates/ts/api-plugin-from-scratch/teamsapp.local.yml.tpl +++ b/templates/ts/api-plugin-from-scratch/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -27,7 +27,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/api-plugin-from-scratch/teamsapp.yml.tpl b/templates/ts/api-plugin-from-scratch/teamsapp.yml.tpl index 971c0f7e85..f867535276 100644 --- a/templates/ts/api-plugin-from-scratch/teamsapp.yml.tpl +++ b/templates/ts/api-plugin-from-scratch/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -110,7 +110,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/command-and-response/teamsapp.local.yml.tpl b/templates/ts/command-and-response/teamsapp.local.yml.tpl index 16ab4f350e..bf58933b6e 100644 --- a/templates/ts/command-and-response/teamsapp.local.yml.tpl +++ b/templates/ts/command-and-response/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/command-and-response/teamsapp.testtool.yml b/templates/ts/command-and-response/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/command-and-response/teamsapp.testtool.yml +++ b/templates/ts/command-and-response/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/command-and-response/teamsapp.yml.tpl b/templates/ts/command-and-response/teamsapp.yml.tpl index fec0375d87..ddc5a70630 100644 --- a/templates/ts/command-and-response/teamsapp.yml.tpl +++ b/templates/ts/command-and-response/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl b/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl index 054f987870..5365af9a14 100644 --- a/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl +++ b/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -27,7 +27,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. diff --git a/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl b/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl index f4707e44bd..51ab7c55a3 100644 --- a/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl +++ b/templates/ts/copilot-gpt-from-scratch-plugin/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. @@ -104,7 +104,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Apply the Teams app manifest to an existing Teams app in # Teams Developer Portal. # Will use the app id in manifest file to determine which Teams app to update. diff --git a/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl b/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl index 92a108e9ee..82ed11c0c6 100644 --- a/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl +++ b/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -60,7 +60,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl b/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl index dbda5dd31e..62e7ec01a4 100644 --- a/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl +++ b/templates/ts/copilot-plugin-from-scratch-api-key/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -81,7 +81,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -148,7 +148,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/copilot-plugin-from-scratch/teamsapp.local.yml.tpl b/templates/ts/copilot-plugin-from-scratch/teamsapp.local.yml.tpl index b53ba0bee5..46f650d8ec 100644 --- a/templates/ts/copilot-plugin-from-scratch/teamsapp.local.yml.tpl +++ b/templates/ts/copilot-plugin-from-scratch/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -33,7 +33,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/copilot-plugin-from-scratch/teamsapp.yml.tpl b/templates/ts/copilot-plugin-from-scratch/teamsapp.yml.tpl index 66a9da6c7a..aaad3c2424 100644 --- a/templates/ts/copilot-plugin-from-scratch/teamsapp.yml.tpl +++ b/templates/ts/copilot-plugin-from-scratch/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -54,7 +54,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage @@ -121,7 +121,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl index 3622b79e23..eab3d7b2d8 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl index f02ff2622b..02f1650a19 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-assistant-assistants-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-assistant-new/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-assistant-new/teamsapp.local.yml.tpl index 6f76c5bc99..2c7fb58640 100644 --- a/templates/ts/custom-copilot-assistant-new/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-assistant-new/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl b/templates/ts/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl index cab2b7e66a..e3fbcbc2de 100644 --- a/templates/ts/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl +++ b/templates/ts/custom-copilot-assistant-new/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/custom-copilot-assistant-new/teamsapp.yml.tpl b/templates/ts/custom-copilot-assistant-new/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/custom-copilot-assistant-new/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-assistant-new/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-basic/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-basic/teamsapp.local.yml.tpl index 6f76c5bc99..2c7fb58640 100644 --- a/templates/ts/custom-copilot-basic/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-basic/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-basic/teamsapp.testtool.yml.tpl b/templates/ts/custom-copilot-basic/teamsapp.testtool.yml.tpl index cab2b7e66a..e3fbcbc2de 100644 --- a/templates/ts/custom-copilot-basic/teamsapp.testtool.yml.tpl +++ b/templates/ts/custom-copilot-basic/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/custom-copilot-basic/teamsapp.yml.tpl b/templates/ts/custom-copilot-basic/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/custom-copilot-basic/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-basic/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl index 4a323a50ed..b688445ca3 100644 --- a/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl b/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl index 39944e4b3a..7966965d64 100644 --- a/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl +++ b/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl b/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-rag-azure-ai-search/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl index 35bfa0bf46..a715b7d2be 100644 --- a/templates/ts/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-rag-custom-api/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl b/templates/ts/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl index 4e9b897438..7364896bae 100644 --- a/templates/ts/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl +++ b/templates/ts/custom-copilot-rag-custom-api/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/custom-copilot-rag-custom-api/teamsapp.yml.tpl b/templates/ts/custom-copilot-rag-custom-api/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/custom-copilot-rag-custom-api/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-rag-custom-api/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-customize/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-rag-customize/teamsapp.local.yml.tpl index 6f76c5bc99..2c7fb58640 100644 --- a/templates/ts/custom-copilot-rag-customize/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-rag-customize/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl b/templates/ts/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl index cab2b7e66a..e3fbcbc2de 100644 --- a/templates/ts/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl +++ b/templates/ts/custom-copilot-rag-customize/teamsapp.testtool.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/custom-copilot-rag-customize/teamsapp.yml.tpl b/templates/ts/custom-copilot-rag-customize/teamsapp.yml.tpl index a36c5c5d36..435dd9ae91 100644 --- a/templates/ts/custom-copilot-rag-customize/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-rag-customize/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl b/templates/ts/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl index cbd8999b62..996095a982 100644 --- a/templates/ts/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl +++ b/templates/ts/custom-copilot-rag-microsoft365/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: - uses: aadApp/create # Creates a new Azure Active Directory (AAD) app to authenticate users if the environment variable that stores clientId is empty @@ -69,7 +69,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/custom-copilot-rag-microsoft365/teamsapp.yml.tpl b/templates/ts/custom-copilot-rag-microsoft365/teamsapp.yml.tpl index e6ff97117c..726421f253 100644 --- a/templates/ts/custom-copilot-rag-microsoft365/teamsapp.yml.tpl +++ b/templates/ts/custom-copilot-rag-microsoft365/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -123,7 +123,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/dashboard-tab/teamsapp.local.yml.tpl b/templates/ts/dashboard-tab/teamsapp.local.yml.tpl index 184d317c1a..55d7a1f939 100644 --- a/templates/ts/dashboard-tab/teamsapp.local.yml.tpl +++ b/templates/ts/dashboard-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -31,7 +31,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/dashboard-tab/teamsapp.yml.tpl b/templates/ts/dashboard-tab/teamsapp.yml.tpl index 49577b1a85..b3889dc2f4 100644 --- a/templates/ts/dashboard-tab/teamsapp.yml.tpl +++ b/templates/ts/dashboard-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -61,7 +61,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/default-bot-message-extension/teamsapp.local.yml.tpl b/templates/ts/default-bot-message-extension/teamsapp.local.yml.tpl index 16ab4f350e..bf58933b6e 100644 --- a/templates/ts/default-bot-message-extension/teamsapp.local.yml.tpl +++ b/templates/ts/default-bot-message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/default-bot-message-extension/teamsapp.yml.tpl b/templates/ts/default-bot-message-extension/teamsapp.yml.tpl index 5ca9a598e2..8846e88854 100644 --- a/templates/ts/default-bot-message-extension/teamsapp.yml.tpl +++ b/templates/ts/default-bot-message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/default-bot/teamsapp.local.yml.tpl b/templates/ts/default-bot/teamsapp.local.yml.tpl index 16ab4f350e..bf58933b6e 100644 --- a/templates/ts/default-bot/teamsapp.local.yml.tpl +++ b/templates/ts/default-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/default-bot/teamsapp.testtool.yml b/templates/ts/default-bot/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/default-bot/teamsapp.testtool.yml +++ b/templates/ts/default-bot/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/default-bot/teamsapp.yml.tpl b/templates/ts/default-bot/teamsapp.yml.tpl index f5cf8c9209..cd2458b6aa 100644 --- a/templates/ts/default-bot/teamsapp.yml.tpl +++ b/templates/ts/default-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/link-unfurling/teamsapp.local.yml.tpl b/templates/ts/link-unfurling/teamsapp.local.yml.tpl index c7d96e0f94..2297caa3b3 100644 --- a/templates/ts/link-unfurling/teamsapp.local.yml.tpl +++ b/templates/ts/link-unfurling/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -52,7 +52,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/link-unfurling/teamsapp.testtool.yml b/templates/ts/link-unfurling/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/link-unfurling/teamsapp.testtool.yml +++ b/templates/ts/link-unfurling/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/link-unfurling/teamsapp.yml.tpl b/templates/ts/link-unfurling/teamsapp.yml.tpl index caf00c6462..dc6de96136 100644 --- a/templates/ts/link-unfurling/teamsapp.yml.tpl +++ b/templates/ts/link-unfurling/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/m365-message-extension/teamsapp.local.yml.tpl b/templates/ts/m365-message-extension/teamsapp.local.yml.tpl index c7d96e0f94..2297caa3b3 100644 --- a/templates/ts/m365-message-extension/teamsapp.local.yml.tpl +++ b/templates/ts/m365-message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -52,7 +52,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/m365-message-extension/teamsapp.testtool.yml b/templates/ts/m365-message-extension/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/m365-message-extension/teamsapp.testtool.yml +++ b/templates/ts/m365-message-extension/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/m365-message-extension/teamsapp.yml.tpl b/templates/ts/m365-message-extension/teamsapp.yml.tpl index caf00c6462..dc6de96136 100644 --- a/templates/ts/m365-message-extension/teamsapp.yml.tpl +++ b/templates/ts/m365-message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/message-extension-action/teamsapp.local.yml.tpl b/templates/ts/message-extension-action/teamsapp.local.yml.tpl index 7a3d7afab5..13c989fd9c 100644 --- a/templates/ts/message-extension-action/teamsapp.local.yml.tpl +++ b/templates/ts/message-extension-action/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/message-extension-action/teamsapp.testtool.yml b/templates/ts/message-extension-action/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/message-extension-action/teamsapp.testtool.yml +++ b/templates/ts/message-extension-action/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/message-extension-action/teamsapp.yml.tpl b/templates/ts/message-extension-action/teamsapp.yml.tpl index e8bdd3e035..04d81d182d 100644 --- a/templates/ts/message-extension-action/teamsapp.yml.tpl +++ b/templates/ts/message-extension-action/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -104,7 +104,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/message-extension-copilot/teamsapp.local.yml.tpl b/templates/ts/message-extension-copilot/teamsapp.local.yml.tpl index c7d96e0f94..2297caa3b3 100644 --- a/templates/ts/message-extension-copilot/teamsapp.local.yml.tpl +++ b/templates/ts/message-extension-copilot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -52,7 +52,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/message-extension-copilot/teamsapp.yml.tpl b/templates/ts/message-extension-copilot/teamsapp.yml.tpl index 8d84cc81cf..8725211656 100644 --- a/templates/ts/message-extension-copilot/teamsapp.yml.tpl +++ b/templates/ts/message-extension-copilot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/message-extension/teamsapp.local.yml.tpl b/templates/ts/message-extension/teamsapp.local.yml.tpl index a3e295d65c..ddf6c44b86 100644 --- a/templates/ts/message-extension/teamsapp.local.yml.tpl +++ b/templates/ts/message-extension/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -52,7 +52,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/message-extension/teamsapp.testtool.yml b/templates/ts/message-extension/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/message-extension/teamsapp.testtool.yml +++ b/templates/ts/message-extension/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/message-extension/teamsapp.yml.tpl b/templates/ts/message-extension/teamsapp.yml.tpl index caf00c6462..dc6de96136 100644 --- a/templates/ts/message-extension/teamsapp.yml.tpl +++ b/templates/ts/message-extension/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/non-sso-tab-default-bot/teamsapp.local.yml.tpl b/templates/ts/non-sso-tab-default-bot/teamsapp.local.yml.tpl index 84aca29c68..090843f813 100644 --- a/templates/ts/non-sso-tab-default-bot/teamsapp.local.yml.tpl +++ b/templates/ts/non-sso-tab-default-bot/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -55,7 +55,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/non-sso-tab-default-bot/teamsapp.yml.tpl b/templates/ts/non-sso-tab-default-bot/teamsapp.yml.tpl index fca259f023..884121067f 100644 --- a/templates/ts/non-sso-tab-default-bot/teamsapp.yml.tpl +++ b/templates/ts/non-sso-tab-default-bot/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -61,7 +61,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -120,7 +120,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/non-sso-tab/teamsapp.local.yml.tpl b/templates/ts/non-sso-tab/teamsapp.local.yml.tpl index 548d013edc..78e5b354aa 100644 --- a/templates/ts/non-sso-tab/teamsapp.local.yml.tpl +++ b/templates/ts/non-sso-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -32,7 +32,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/non-sso-tab/teamsapp.yml.tpl b/templates/ts/non-sso-tab/teamsapp.yml.tpl index 4825b6fb7f..4e0c418577 100644 --- a/templates/ts/non-sso-tab/teamsapp.yml.tpl +++ b/templates/ts/non-sso-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -115,7 +115,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-http-timer-trigger/teamsapp.local.yml.tpl b/templates/ts/notification-http-timer-trigger/teamsapp.local.yml.tpl index cba9728ddd..300029712c 100644 --- a/templates/ts/notification-http-timer-trigger/teamsapp.local.yml.tpl +++ b/templates/ts/notification-http-timer-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-http-timer-trigger/teamsapp.testtool.yml b/templates/ts/notification-http-timer-trigger/teamsapp.testtool.yml index 55b37b9f7b..b86b326e56 100644 --- a/templates/ts/notification-http-timer-trigger/teamsapp.testtool.yml +++ b/templates/ts/notification-http-timer-trigger/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/notification-http-timer-trigger/teamsapp.yml.tpl b/templates/ts/notification-http-timer-trigger/teamsapp.yml.tpl index 4c94359f66..5c799a1ab9 100644 --- a/templates/ts/notification-http-timer-trigger/teamsapp.yml.tpl +++ b/templates/ts/notification-http-timer-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -100,7 +100,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-http-trigger/teamsapp.local.yml.tpl b/templates/ts/notification-http-trigger/teamsapp.local.yml.tpl index cba9728ddd..300029712c 100644 --- a/templates/ts/notification-http-trigger/teamsapp.local.yml.tpl +++ b/templates/ts/notification-http-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-http-trigger/teamsapp.testtool.yml b/templates/ts/notification-http-trigger/teamsapp.testtool.yml index 55b37b9f7b..b86b326e56 100644 --- a/templates/ts/notification-http-trigger/teamsapp.testtool.yml +++ b/templates/ts/notification-http-trigger/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/notification-http-trigger/teamsapp.yml.tpl b/templates/ts/notification-http-trigger/teamsapp.yml.tpl index 4c94359f66..5c799a1ab9 100644 --- a/templates/ts/notification-http-trigger/teamsapp.yml.tpl +++ b/templates/ts/notification-http-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -100,7 +100,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-restify/teamsapp.local.yml.tpl b/templates/ts/notification-restify/teamsapp.local.yml.tpl index 16ab4f350e..bf58933b6e 100644 --- a/templates/ts/notification-restify/teamsapp.local.yml.tpl +++ b/templates/ts/notification-restify/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-restify/teamsapp.testtool.yml b/templates/ts/notification-restify/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/notification-restify/teamsapp.testtool.yml +++ b/templates/ts/notification-restify/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/notification-restify/teamsapp.yml.tpl b/templates/ts/notification-restify/teamsapp.yml.tpl index fec0375d87..ddc5a70630 100644 --- a/templates/ts/notification-restify/teamsapp.yml.tpl +++ b/templates/ts/notification-restify/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-timer-trigger/teamsapp.local.yml.tpl b/templates/ts/notification-timer-trigger/teamsapp.local.yml.tpl index 07c7fb4662..b11a5f6136 100644 --- a/templates/ts/notification-timer-trigger/teamsapp.local.yml.tpl +++ b/templates/ts/notification-timer-trigger/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/notification-timer-trigger/teamsapp.testtool.yml b/templates/ts/notification-timer-trigger/teamsapp.testtool.yml index 55b37b9f7b..b86b326e56 100644 --- a/templates/ts/notification-timer-trigger/teamsapp.testtool.yml +++ b/templates/ts/notification-timer-trigger/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/notification-timer-trigger/teamsapp.yml.tpl b/templates/ts/notification-timer-trigger/teamsapp.yml.tpl index 4c94359f66..5c799a1ab9 100644 --- a/templates/ts/notification-timer-trigger/teamsapp.yml.tpl +++ b/templates/ts/notification-timer-trigger/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -48,7 +48,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -100,7 +100,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/office-addin/teamsapp.yml b/templates/ts/office-addin/teamsapp.yml index 42b27ade66..497c6948a3 100644 --- a/templates/ts/office-addin/teamsapp.yml +++ b/templates/ts/office-addin/teamsapp.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env diff --git a/templates/ts/office-json-addin/teamsapp.yml b/templates/ts/office-json-addin/teamsapp.yml index 4d0e53490a..be40faf6b6 100644 --- a/templates/ts/office-json-addin/teamsapp.yml +++ b/templates/ts/office-json-addin/teamsapp.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env diff --git a/templates/ts/spfx-tab/teamsapp.local.yml.tpl b/templates/ts/spfx-tab/teamsapp.local.yml.tpl index 6cbaf8cd3d..b08164fadb 100644 --- a/templates/ts/spfx-tab/teamsapp.local.yml.tpl +++ b/templates/ts/spfx-tab/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -25,7 +25,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.local.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/spfx-tab/teamsapp.yml.tpl b/templates/ts/spfx-tab/teamsapp.yml.tpl index 16e84efefa..cb5442bd56 100644 --- a/templates/ts/spfx-tab/teamsapp.yml.tpl +++ b/templates/ts/spfx-tab/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -49,7 +49,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -86,7 +86,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build - uses: teamsApp/copyAppPackageToSPFx with: appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip diff --git a/templates/ts/sso-tab-with-obo-flow/teamsapp.local.yml.tpl b/templates/ts/sso-tab-with-obo-flow/teamsapp.local.yml.tpl index ff71099f67..dba4db2bdc 100644 --- a/templates/ts/sso-tab-with-obo-flow/teamsapp.local.yml.tpl +++ b/templates/ts/sso-tab-with-obo-flow/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a new Microsoft Entra app to authenticate users if @@ -71,7 +71,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage diff --git a/templates/ts/sso-tab-with-obo-flow/teamsapp.yml.tpl b/templates/ts/sso-tab-with-obo-flow/teamsapp.yml.tpl index 77f4504a40..1cb896afea 100644 --- a/templates/ts/sso-tab-with-obo-flow/teamsapp.yml.tpl +++ b/templates/ts/sso-tab-with-obo-flow/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -96,7 +96,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -180,7 +180,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/workflow/teamsapp.local.yml.tpl b/templates/ts/workflow/teamsapp.local.yml.tpl index 242dcb566c..80869a82f1 100644 --- a/templates/ts/workflow/teamsapp.local.yml.tpl +++ b/templates/ts/workflow/teamsapp.local.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 provision: # Creates a Teams app @@ -51,7 +51,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: diff --git a/templates/ts/workflow/teamsapp.testtool.yml b/templates/ts/workflow/teamsapp.testtool.yml index 44d71fd1bb..5007303b1e 100644 --- a/templates/ts/workflow/teamsapp.testtool.yml +++ b/templates/ts/workflow/teamsapp.testtool.yml @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 deploy: # Install development tool(s) diff --git a/templates/ts/workflow/teamsapp.yml.tpl b/templates/ts/workflow/teamsapp.yml.tpl index fec0375d87..ddc5a70630 100644 --- a/templates/ts/workflow/teamsapp.yml.tpl +++ b/templates/ts/workflow/teamsapp.yml.tpl @@ -1,7 +1,7 @@ -# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/yaml.schema.json +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json # Visit https://aka.ms/teamsfx-v5.0-guide for details on this file # Visit https://aka.ms/teamsfx-actions for details on actions -version: v1.5 +version: v1.7 environmentFolderPath: ./env @@ -53,7 +53,7 @@ provision: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: @@ -105,7 +105,7 @@ publish: # Path to manifest template manifestPath: ./appPackage/manifest.json outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip - outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json + outputFolder: ./appPackage/build # Validate app package using validation rules - uses: teamsApp/validateAppPackage with: From fe75f00e44fac5efe0ee53cdc378d3f95f236197 Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Tue, 3 Sep 2024 10:52:54 +0800 Subject: [PATCH 44/52] fix: skip spec validation for apikey and oauth driver (#12322) --- .../driver/apiKey/utility/utility.ts | 2 +- .../component/driver/oauth/utility/utility.ts | 2 +- .../component/driver/apiKey/create.test.ts | 42 +++++++++++ .../component/driver/oauth/create.test.ts | 73 +++++++++++++++++++ 4 files changed, 117 insertions(+), 2 deletions(-) diff --git a/packages/fx-core/src/component/driver/apiKey/utility/utility.ts b/packages/fx-core/src/component/driver/apiKey/utility/utility.ts index e4ff8a016f..2b304f3e6a 100644 --- a/packages/fx-core/src/component/driver/apiKey/utility/utility.ts +++ b/packages/fx-core/src/component/driver/apiKey/utility/utility.ts @@ -32,7 +32,7 @@ export async function getDomain( allowMultipleParameters: true, }); const listResult = await parser.list(); - const operations = listResult.APIs.filter((value) => value.isValid); + const operations = listResult.APIs; const domains = operations .filter((value) => { const auth = value.auth; diff --git a/packages/fx-core/src/component/driver/oauth/utility/utility.ts b/packages/fx-core/src/component/driver/oauth/utility/utility.ts index 9d369e1bd0..933783bd48 100644 --- a/packages/fx-core/src/component/driver/oauth/utility/utility.ts +++ b/packages/fx-core/src/component/driver/oauth/utility/utility.ts @@ -46,7 +46,7 @@ export async function getandValidateOauthInfoFromSpec( allowMethods: ["get", "post", "put", "delete", "patch", "head", "connect", "options", "trace"], }); const listResult = await parser.list(); - const operations = listResult.APIs.filter((value) => value.isValid).filter((value) => { + const operations = listResult.APIs.filter((value) => { const auth = value.auth; return auth && auth.authScheme.type === "oauth2" && auth.name === args.name; }); diff --git a/packages/fx-core/tests/component/driver/apiKey/create.test.ts b/packages/fx-core/tests/component/driver/apiKey/create.test.ts index 9d13080606..93ac86b154 100644 --- a/packages/fx-core/tests/component/driver/apiKey/create.test.ts +++ b/packages/fx-core/tests/component/driver/apiKey/create.test.ts @@ -269,6 +269,48 @@ describe("CreateApiKeyDriver", () => { } }); + it("happy path: create registraionid, read domain from api spec, clientSecret from input with invalid api", async () => { + sinon.stub(teamsDevPortalClient, "createApiKeyRegistration").resolves({ + id: "mockedRegistrationId", + clientSecrets: [], + targetUrlsShouldStartWith: [], + applicableToApps: ApiSecretRegistrationAppType.SpecificApp, + }); + sinon.stub(SpecParser.prototype, "list").resolves({ + APIs: [ + { + api: "api", + server: "https://test", + operationId: "get", + auth: { + name: "test", + authScheme: { + type: "http", + scheme: "bearer", + }, + }, + isValid: false, + reason: [], + }, + ], + allAPICount: 1, + validAPICount: 1, + }); + + const args: any = { + name: "test", + appId: "mockedAppId", + primaryClientSecret: "mockedClientSecret", + apiSpecPath: "mockedPath", + }; + const result = await createApiKeyDriver.execute(args, mockedDriverContext, outputEnvVarNames); + expect(result.result.isOk()).to.be.true; + if (result.result.isOk()) { + expect(result.result.value.get(outputKeys.registrationId)).to.equal("mockedRegistrationId"); + expect(result.summaries.length).to.equal(1); + } + }); + it("should throw error when empty outputEnvVarNames", async () => { const args: any = { name: "test", diff --git a/packages/fx-core/tests/component/driver/oauth/create.test.ts b/packages/fx-core/tests/component/driver/oauth/create.test.ts index c195678236..976b95d849 100644 --- a/packages/fx-core/tests/component/driver/oauth/create.test.ts +++ b/packages/fx-core/tests/component/driver/oauth/create.test.ts @@ -333,6 +333,79 @@ describe("CreateOauthDriver", () => { } }); + it("happy path: read clientSecret, refreshurl from input with invalid api", async () => { + sinon + .stub(teamsDevPortalClient, "createOauthRegistration") + .callsFake(async (token, oauthRegistration) => { + expect(oauthRegistration.clientId).to.equals("mockedClientId"); + expect(oauthRegistration.clientSecret).to.equals("mockedClientSecret"); + expect(oauthRegistration.description).to.equals("test"); + expect(oauthRegistration.authorizationEndpoint).to.equals("mockedAuthorizationUrl"); + expect(oauthRegistration.scopes[0]).to.equals("mockedScope"); + expect(oauthRegistration.targetUrlsShouldStartWith[0]).to.equals("https://test"); + expect(oauthRegistration.tokenExchangeEndpoint).to.equals("mockedTokenUrl"); + expect(oauthRegistration.tokenRefreshEndpoint).to.equal("mockedRefreshUrl"); + expect(oauthRegistration.applicableToApps).to.equals(OauthRegistrationAppType.AnyApp); + expect(oauthRegistration.isPKCEEnabled).to.be.false; + expect(oauthRegistration.targetAudience).to.equals( + OauthRegistrationTargetAudience.AnyTenant + ); + expect(oauthRegistration.m365AppId).to.equal(""); + expect(oauthRegistration.identityProvider).to.equal("Custom"); + return { + configurationRegistrationId: { + oAuthConfigId: "mockedRegistrationId", + }, + }; + }); + sinon.stub(SpecParser.prototype, "list").resolves({ + APIs: [ + { + api: "api", + server: "https://test", + operationId: "get", + auth: { + name: "test", + authScheme: { + type: "oauth2", + flows: { + authorizationCode: { + authorizationUrl: "mockedAuthorizationUrl", + tokenUrl: "mockedTokenUrl", + scopes: { + mockedScope: "description for mocked scope", + }, + }, + }, + }, + }, + isValid: false, + reason: [], + }, + ], + allAPICount: 1, + validAPICount: 1, + }); + + const args: any = { + name: "test", + appId: "mockedAppId", + apiSpecPath: "mockedPath", + clientId: "mockedClientId", + clientSecret: "mockedClientSecret", + flow: "authorizationCode", + refreshUrl: "mockedRefreshUrl", + isPKCEEnabled: false, + identityProvider: "Custom", + }; + const result = await createOauthDriver.execute(args, mockedDriverContext, outputEnvVarNames); + expect(result.result.isOk()).to.be.true; + if (result.result.isOk()) { + expect(result.result.value.get(outputKeys.configurationId)).to.equal("mockedRegistrationId"); + expect(result.summaries.length).to.equal(1); + } + }); + it("should throw error is identityProvider is Custom but the authorization url is not Microsoft Entra endpoint", async () => { sinon .stub(teamsDevPortalClient, "createOauthRegistration") From 40ad4a38147872201022fa206932ce697ea0da01 Mon Sep 17 00:00:00 2001 From: Siyuan Chen <67082457+ayachensiyuan@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:16:28 +0800 Subject: [PATCH 45/52] test: add 3 ui test samples (#12323) * test: add 3 ui test samples --------- Co-authored-by: Ivan_Chen --- .github/workflows/ui-test.yml | 20 +++++- packages/tests/scripts/randomCases.json | 8 ++- .../sample-localdebug-dice-roller.test.ts | 5 +- .../sample-localdebug-food-catalog.test.ts | 62 +++++++++++++++++ ...ample-localdebug-outlook-signature.test.ts | 56 ++++++++++++++++ .../sample-localdebug-reddit-link.test.ts | 44 ++++++++++++ .../sample-remotedebug-dice-roller.test.ts | 4 +- .../sample-remotedebug-food-catalog.test.ts | 67 +++++++++++++++++++ ...mple-remotedebug-outlook-signature.test.ts | 23 +++++++ .../sample-remotedebug-reddit-link.test.ts | 44 ++++++++++++ .../src/ui-test/samples/sampleCaseFactory.ts | 27 ++++++-- .../src/ui-test/samples/sampledebugContext.ts | 35 ++++++++-- packages/tests/src/utils/constants.ts | 10 +++ packages/tests/src/utils/executor.ts | 17 ++++- .../tests/src/utils/playwrightOperation.ts | 6 ++ 15 files changed, 410 insertions(+), 18 deletions(-) create mode 100644 packages/tests/src/ui-test/samples/sample-localdebug-food-catalog.test.ts create mode 100644 packages/tests/src/ui-test/samples/sample-localdebug-outlook-signature.test.ts create mode 100644 packages/tests/src/ui-test/samples/sample-localdebug-reddit-link.test.ts create mode 100644 packages/tests/src/ui-test/samples/sample-remotedebug-food-catalog.test.ts create mode 100644 packages/tests/src/ui-test/samples/sample-remotedebug-outlook-signature.test.ts create mode 100644 packages/tests/src/ui-test/samples/sample-remotedebug-reddit-link.test.ts diff --git a/.github/workflows/ui-test.yml b/.github/workflows/ui-test.yml index 780c9c1dd3..8f36ce37dc 100644 --- a/.github/workflows/ui-test.yml +++ b/.github/workflows/ui-test.yml @@ -373,7 +373,7 @@ jobs: path: ./packages/tests/resource - name: Download samples - if: startsWith(matrix.test-case, 'sample-') && contains(matrix.test-case, 'proactive-message') == false && contains(matrix.test-case, 'upgrade') == false && contains(matrix.test-case, 'chef-bot') == false + if: startsWith(matrix.test-case, 'sample-') && contains(matrix.test-case, 'proactive-message') == false && contains(matrix.test-case, 'reddit-link') == false && contains(matrix.test-case, 'upgrade') == false && contains(matrix.test-case, 'chef-bot') == false && contains(matrix.test-case, 'food-catalog') == false && contains(matrix.test-case, 'outlook-signature') == false uses: actions/checkout@v3 with: repository: OfficeDev/TeamsFx-Samples @@ -381,7 +381,7 @@ jobs: path: ./packages/tests/resource - name: Download samples from another repo - if: contains(matrix.test-case, 'proactive-message') && contains(matrix.test-case, 'upgrade') == false + if: (contains(matrix.test-case, 'proactive-message') || contains(matrix.test-case, 'reddit-link')) && contains(matrix.test-case, 'upgrade') == false uses: actions/checkout@v3 with: repository: OfficeDev/Microsoft-Teams-Samples @@ -396,6 +396,22 @@ jobs: ref: main path: ./packages/tests/resource + - name: Download samples food catalog + if: contains(matrix.test-case, 'food-catalog') + uses: actions/checkout@v3 + with: + repository: pnp/graph-connectors-samples + ref: main + path: ./packages/tests/resource + + - name: Download samples outlook signature + if: contains(matrix.test-case, 'outlook-signature') + uses: actions/checkout@v3 + with: + repository: OfficeDev/Office-Add-in-samples + ref: main + path: ./packages/tests/resource + - name: Get VSCode working-directory: packages/tests run: | diff --git a/packages/tests/scripts/randomCases.json b/packages/tests/scripts/randomCases.json index 68c2faaaec..07fdbe4d56 100644 --- a/packages/tests/scripts/randomCases.json +++ b/packages/tests/scripts/randomCases.json @@ -34,7 +34,13 @@ "remotedebug-chatdata-m365-js-azureopenai", "remotedebug-chatdata-m365-js-openai", "remotedebug-chatdata-m365-ts-azureopenai", - "remotedebug-chatdata-m365-ts-openai" + "remotedebug-chatdata-m365-ts-openai", + "sample-localdebug-food-catalog", + "sample-remotedebug-food-catalog", + "sample-localdebug-outlook-signature", + "sample-remotedebug-outlook-signature", + "sample-localdebug-reddit-link", + "sample-remotedebug-reddit-link" ] }, { diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-dice-roller.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-dice-roller.test.ts index 048836df4d..79f647933c 100644 --- a/packages/tests/src/ui-test/samples/sample-localdebug-dice-roller.test.ts +++ b/packages/tests/src/ui-test/samples/sample-localdebug-dice-roller.test.ts @@ -11,9 +11,10 @@ import { CaseFactory } from "./sampleCaseFactory"; class DiceRollerTestCase extends CaseFactory {} new DiceRollerTestCase( - TemplateProject.GraphConnectorBot, + TemplateProject.DiceRoller, 21320394, "v-ivanchen@microsoft.com", "local", - [LocalDebugTaskLabel.StartLocalTunnel, LocalDebugTaskLabel.StartWebServer] + [LocalDebugTaskLabel.StartLocalTunnel, LocalDebugTaskLabel.StartWebServer], + { skipInit: true } ).test(); diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-food-catalog.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-food-catalog.test.ts new file mode 100644 index 0000000000..a97e4258b2 --- /dev/null +++ b/packages/tests/src/ui-test/samples/sample-localdebug-food-catalog.test.ts @@ -0,0 +1,62 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Ivan Chen + */ + +import path from "path"; +import os from "os"; +import fs from "fs"; +import { LocalDebugTaskLabel, TemplateProject } from "../../utils/constants"; +import { CaseFactory } from "./sampleCaseFactory"; +import { SampledebugContext } from "./sampledebugContext"; +class FoodCatalogTestCase extends CaseFactory { + override async onAfterCreate( + sampledebugContext: SampledebugContext, + env: "local" | "dev" + ): Promise { + // create folder for the test "/env/.env.dev" + await sampledebugContext.createEnvFolder( + sampledebugContext.projectPath, + "env" + ); + // create .env file + const filePath = path.resolve( + sampledebugContext.projectPath, + "env", + `.env.${env}` + ); + const envContent = `NOTIFICATION_ENDPOINT=https://test.com\nNOTIFICATION_DOMAIN=test.com\nAPP_NAME=${sampledebugContext.appName}`; + fs.writeFileSync(filePath, envContent, { encoding: "utf-8" }); + console.log("env file created"); + console.log(fs.readFileSync(filePath, { encoding: "utf-8" })); + // add chmod +x to the script + if (os.platform() === "linux" || os.platform() === "darwin") { + const scriptPath = path.resolve( + sampledebugContext.projectPath, + "scripts", + "devtunnel.sh" + ); + fs.chmodSync(scriptPath, "755"); + } + } +} + +new FoodCatalogTestCase( + TemplateProject.FoodCatalog, + 27851421, + "v-ivanchen@microsoft.com", + "local", + [ + LocalDebugTaskLabel.Azurite, + LocalDebugTaskLabel.EnsureDevTunnnel, + LocalDebugTaskLabel.RunWatch, + LocalDebugTaskLabel.FuncStart, + ], + { + skipInit: true, + repoPath: "./resource/samples", + testRootFolder: path.resolve(os.homedir(), "resource"), + } +).test(); diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-outlook-signature.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-outlook-signature.test.ts new file mode 100644 index 0000000000..43db576407 --- /dev/null +++ b/packages/tests/src/ui-test/samples/sample-localdebug-outlook-signature.test.ts @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Ivan Chen + */ + +import { TemplateProject, Timeout } from "../../utils/constants"; +import { CaseFactory } from "./sampleCaseFactory"; +import { SampledebugContext } from "./sampledebugContext"; +import { Executor } from "../../utils/executor"; +import { expect } from "chai"; + +class OutlookSignatureTestCase extends CaseFactory { + override async onAfterCreate( + sampledebugContext: SampledebugContext + ): Promise { + const { success } = await Executor.execute( + "npm install", + sampledebugContext.projectPath, + process.env, + undefined, + "npm warn" + ); + expect(success).to.be.true; + const childProcess = Executor.spawnCommand( + sampledebugContext.projectPath, + "npm", + ["run", "start:xml"], + (data) => { + console.log(data.toString()); + }, + (error) => { + console.error(error); + } + ); + await new Promise((resolve) => { + setTimeout(() => { + resolve(void 0); + }, Timeout.installWait); + }); + childProcess.kill(); + } +} + +new OutlookSignatureTestCase( + TemplateProject.OutlookSignature, + 21044484, + "v-ivanchen@microsoft.com", + "local", + [], + { + skipInit: true, + repoPath: "./resource/Samples", + } +).test(); diff --git a/packages/tests/src/ui-test/samples/sample-localdebug-reddit-link.test.ts b/packages/tests/src/ui-test/samples/sample-localdebug-reddit-link.test.ts new file mode 100644 index 0000000000..74c6617f31 --- /dev/null +++ b/packages/tests/src/ui-test/samples/sample-localdebug-reddit-link.test.ts @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Ivan Chen + */ + +import path from "path"; +import { LocalDebugTaskLabel, TemplateProject } from "../../utils/constants"; +import { CaseFactory } from "./sampleCaseFactory"; +import { SampledebugContext } from "./sampledebugContext"; +import { editDotEnvFile } from "../../utils/commonUtils"; + +class RedditLinkTestCase extends CaseFactory { + public override async onAfterCreate( + sampledebugContext: SampledebugContext, + env: "local" | "dev" + ): Promise { + const envUserFilePath = path.resolve( + sampledebugContext.projectPath, + "env", + `.env.${env}.user` + ); + editDotEnvFile(envUserFilePath, "SECRET_REDDIT_PASSWORD", "fake"); + const envFilePath = path.resolve( + sampledebugContext.projectPath, + "env", + `.env.${env}` + ); + editDotEnvFile(envFilePath, "REDDIT_ID", "fake"); + } +} + +new RedditLinkTestCase( + TemplateProject.RedditLink, + 27851434, + "v-ivanchen@microsoft.com", + "local", + [LocalDebugTaskLabel.StartLocalTunnel, LocalDebugTaskLabel.StartApplication], + { + skipValidation: true, + repoPath: "./resource/samples/msgext-link-unfurling-reddit", + } +).test(); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-dice-roller.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-dice-roller.test.ts index 3ac37bf17f..301e0c8272 100644 --- a/packages/tests/src/ui-test/samples/sample-remotedebug-dice-roller.test.ts +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-dice-roller.test.ts @@ -11,10 +11,10 @@ import { CaseFactory } from "./sampleCaseFactory"; class DiceRollerTestCase extends CaseFactory {} new DiceRollerTestCase( - TemplateProject.GraphConnectorBot, + TemplateProject.DiceRoller, 24121529, "v-ivanchen@microsoft.com", "dev", [], - { skipValidation: true } + { skipInit: true } ).test(); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-food-catalog.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-food-catalog.test.ts new file mode 100644 index 0000000000..94fb0cc369 --- /dev/null +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-food-catalog.test.ts @@ -0,0 +1,67 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Ivan Chen + */ + +import path from "path"; +import os from "os"; +import fs from "fs"; +import { TemplateProject } from "../../utils/constants"; +import { CaseFactory } from "./sampleCaseFactory"; +import { SampledebugContext } from "./sampledebugContext"; + +class FoodCatalogTestCase extends CaseFactory { + override async onAfterCreate( + sampledebugContext: SampledebugContext, + env: "local" | "dev" + ): Promise { + console.log("pre provision project"); + try { + await sampledebugContext.provisionProject( + sampledebugContext.appName, + sampledebugContext.projectPath, + true, + "cli", + "", + "dev", + process.env, + "lifecycle provision because there are unresolved placeholders" + ); + } catch (error) {} + console.log("[start] update env file."); + const envFilePath = path.resolve( + sampledebugContext.projectPath, + "env", + `.env.${env}.user` + ); + let envContent = fs.readFileSync(envFilePath, "utf-8"); + console.log(`envContent: ${envContent}`); + const storageConnectionString = fs + .readFileSync(envFilePath, "utf-8") + .split("\n") + .find((line) => + line.startsWith("SECRET_STORAGE_ACCOUNT_CONNECTION_STRING") + ) + ?.split("=")[1]; + console.log(`storageConnectionString: ${storageConnectionString}`); + envContent += `\nSECRET_TABLE_STORAGE_CONNECTION_STRING=${storageConnectionString}`; + fs.writeFileSync(envFilePath, envContent, { encoding: "utf-8" }); + console.log("[finish] env file updated."); + } +} + +new FoodCatalogTestCase( + TemplateProject.FoodCatalog, + 27851823, + "v-ivanchen@microsoft.com", + "dev", + [], + { + skipInit: true, + skipDeploy: true, + repoPath: "./resource/samples", + testRootFolder: path.resolve(os.homedir(), "resource"), + } +).test(); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-outlook-signature.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-outlook-signature.test.ts new file mode 100644 index 0000000000..a63e6c43a6 --- /dev/null +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-outlook-signature.test.ts @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Ivan Chen + */ + +import { TemplateProject } from "../../utils/constants"; +import { CaseFactory } from "./sampleCaseFactory"; + +class OutlookSignatureTestCase extends CaseFactory {} + +new OutlookSignatureTestCase( + TemplateProject.OutlookSignature, + 24121523, + "v-ivanchen@microsoft.com", + "dev", + [], + { + skipInit: true, + repoPath: "./resource/Samples", + } +).test(); diff --git a/packages/tests/src/ui-test/samples/sample-remotedebug-reddit-link.test.ts b/packages/tests/src/ui-test/samples/sample-remotedebug-reddit-link.test.ts new file mode 100644 index 0000000000..c46a8bb1b3 --- /dev/null +++ b/packages/tests/src/ui-test/samples/sample-remotedebug-reddit-link.test.ts @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +/** + * @author Ivan Chen + */ + +import path from "path"; +import { TemplateProject } from "../../utils/constants"; +import { CaseFactory } from "./sampleCaseFactory"; +import { SampledebugContext } from "./sampledebugContext"; +import { editDotEnvFile } from "../../utils/commonUtils"; + +class RedditLinkTestCase extends CaseFactory { + public override async onAfterCreate( + sampledebugContext: SampledebugContext, + env: "local" | "dev" + ): Promise { + const envUserFilePath = path.resolve( + sampledebugContext.projectPath, + "env", + `.env.${env}.user` + ); + editDotEnvFile(envUserFilePath, "SECRET_REDDIT_PASSWORD", "fake"); + const envFilePath = path.resolve( + sampledebugContext.projectPath, + "env", + `.env.${env}` + ); + editDotEnvFile(envFilePath, "REDDIT_ID", "fake"); + } +} + +new RedditLinkTestCase( + TemplateProject.RedditLink, + 27852468, + "v-ivanchen@microsoft.com", + "dev", + [], + { + skipValidation: true, + repoPath: "./resource/samples/msgext-link-unfurling-reddit", + } +).test(); diff --git a/packages/tests/src/ui-test/samples/sampleCaseFactory.ts b/packages/tests/src/ui-test/samples/sampleCaseFactory.ts index 74a5e12731..6b2604598c 100644 --- a/packages/tests/src/ui-test/samples/sampleCaseFactory.ts +++ b/packages/tests/src/ui-test/samples/sampleCaseFactory.ts @@ -113,6 +113,21 @@ const debugMap: Record Promise> = { LocalDebugTaskResult.DockerFinish ); }, + [LocalDebugTaskLabel.EnsureDevTunnnel]: async () => { + await waitForTerminal( + LocalDebugTaskLabel.EnsureDevTunnnel, + LocalDebugTaskResult.DevtunnelSuccess + ); + }, + [LocalDebugTaskLabel.RunWatch]: async () => { + await waitForTerminal( + LocalDebugTaskLabel.RunWatch, + LocalDebugTaskResult.CompiledSuccess + ); + }, + [LocalDebugTaskLabel.FuncStart]: async () => { + await waitForTerminal(LocalDebugTaskLabel.FuncStart); + }, }; export abstract class CaseFactory { @@ -136,6 +151,7 @@ export abstract class CaseFactory { repoPath?: string; container?: boolean; dockerFolder?: string; + skipDeploy?: boolean; }; public constructor( @@ -159,6 +175,7 @@ export abstract class CaseFactory { repoPath?: string; container?: boolean; dockerFolder?: string; + skipDeploy?: boolean; } = {} ) { this.sampleName = sampleName; @@ -389,10 +406,12 @@ export abstract class CaseFactory { if (options?.container) { await Executor.login(); } - await sampledebugContext.deployProject( - sampledebugContext.projectPath, - Timeout.botDeploy - ); + if (!options?.skipDeploy) { + await sampledebugContext.deployProject( + sampledebugContext.projectPath, + Timeout.botDeploy + ); + } }, }; diff --git a/packages/tests/src/ui-test/samples/sampledebugContext.ts b/packages/tests/src/ui-test/samples/sampledebugContext.ts index 83e4f0d978..c9191a6d45 100644 --- a/packages/tests/src/ui-test/samples/sampledebugContext.ts +++ b/packages/tests/src/ui-test/samples/sampledebugContext.ts @@ -447,7 +447,8 @@ export class SampledebugContext extends TestContext { tool: "ttk" | "cli" = "cli", option = "", env: "dev" | "local" = "dev", - processEnv?: NodeJS.ProcessEnv + processEnv?: NodeJS.ProcessEnv, + skipErrorMessage?: string ) { if (tool === "cli") { await this.runCliProvision( @@ -456,7 +457,8 @@ export class SampledebugContext extends TestContext { createRg, option, env, - processEnv + processEnv, + skipErrorMessage ); } else { await runProvision(appName); @@ -493,7 +495,8 @@ export class SampledebugContext extends TestContext { createRg = true, option = "", env: "dev" | "local" = "dev", - processEnv?: NodeJS.ProcessEnv + processEnv?: NodeJS.ProcessEnv, + skipErrorMessage?: string ) { if (createRg) { await createResourceGroup(appName, env, "westus"); @@ -501,7 +504,17 @@ export class SampledebugContext extends TestContext { const resourceGroupName = `${appName}-${env}-rg`; process.env["AZURE_RESOURCE_GROUP_NAME"] = resourceGroupName; await CliHelper.showVersion(projectPath, processEnv); - await Executor.provision(projectPath, env, true); + const { success, stderr, stdout } = await Executor.provision( + projectPath, + env, + true, + skipErrorMessage + ); + console.log(`stdout: ${stdout}`); + if (!success) { + console.log(`stderr: ${stderr}`); + expect(success).to.be.true; + } } public async runCliDeploy( @@ -512,6 +525,18 @@ export class SampledebugContext extends TestContext { retries?: number, newCommand?: string ) { - await Executor.deploy(projectPath, env); + const { success, stderr, stdout } = await Executor.deploy(projectPath, env); + console.log(`stdout: ${stdout}`); + if (!success) { + console.log(`stderr: ${stderr}`); + expect(success).to.be.true; + } + } + + public createEnvFolder( + folderPath: string, + folderName: string + ): Promise { + return fs.mkdir(path.resolve(folderPath, folderName)); } } diff --git a/packages/tests/src/utils/constants.ts b/packages/tests/src/utils/constants.ts index 564df57ba7..c304623ae6 100644 --- a/packages/tests/src/utils/constants.ts +++ b/packages/tests/src/utils/constants.ts @@ -59,6 +59,8 @@ export enum TemplateProject { LargeScaleBot = "Large Scale Notification Bot", BotSSODocker = "Containerized Bot App with SSO Enabled", HelloWorldTabDocker = "Containerized Hello World Tab with Backend", + FoodCatalog = "Ingest Custom API Data into Microsoft 365 with a Microsoft Graph Connector", + RedditLink = "Format Reddit Link into Adaptive Card", } export enum TemplateProjectFolder { @@ -93,6 +95,8 @@ export enum TemplateProjectFolder { TabSSOApimProxy = "sso-enabled-tab-via-apim-proxy", LargeScaleBot = "large-scale-notification", HelloWorldTabDocker = "hello-world-tab-docker", + FoodCatalog = "nodejs-typescript-food-catalog", + RedditLink = "nodejs", // v2 only Deeplinking = "deep-linking-hello-world-tab-without-sso-M365", } @@ -134,6 +138,8 @@ export const sampleProjectMap: Record = [TemplateProject.BotSSODocker]: TemplateProjectFolder.BotSSODocker, [TemplateProject.HelloWorldTabDocker]: TemplateProjectFolder.HelloWorldTabDocker, + [TemplateProject.FoodCatalog]: TemplateProjectFolder.FoodCatalog, + [TemplateProject.RedditLink]: TemplateProjectFolder.RedditLink, }; export enum Resource { @@ -393,6 +399,9 @@ export enum LocalDebugTaskLabel { StartWebServer = "Start web server", DockerRun = "docker-run: debug", DockerTask = "docker", + EnsureDevTunnnel = "Ensure DevTunnel", + RunWatch = "Run watch", + FuncStart = "func: host start", } export class LocalDebugTaskResult { @@ -408,6 +417,7 @@ export class LocalDebugTaskResult { static readonly DebuggerAttached = "Debugger attached"; static readonly WebServerSuccess = "press h to show help"; static readonly DockerFinish = "press any key to close it"; + static readonly DevtunnelSuccess = "Ready to accept connections for tunnel:"; } export enum LocalDebugTaskLabel2 { diff --git a/packages/tests/src/utils/executor.ts b/packages/tests/src/utils/executor.ts index 9a7a929fc9..a30e49932e 100644 --- a/packages/tests/src/utils/executor.ts +++ b/packages/tests/src/utils/executor.ts @@ -160,8 +160,21 @@ export class Executor { ); } - static async provision(workspace: string, env = "dev", isV3 = true) { - return this.executeCmd(workspace, "provision", env, undefined, false, isV3); + static async provision( + workspace: string, + env = "dev", + isV3 = true, + skipErrorMessage?: string + ) { + return this.executeCmd( + workspace, + "provision", + env, + undefined, + false, + isV3, + skipErrorMessage + ); } static async provisionWithCustomizedProcessEnv( diff --git a/packages/tests/src/utils/playwrightOperation.ts b/packages/tests/src/utils/playwrightOperation.ts index e2a35af4b7..139ff5e258 100644 --- a/packages/tests/src/utils/playwrightOperation.ts +++ b/packages/tests/src/utils/playwrightOperation.ts @@ -108,6 +108,12 @@ export const debugInitMap: Record Promise> = { [TemplateProject.HelloWorldTabDocker]: async () => { await startDebugging("Debug in Teams (Chrome)"); }, + [TemplateProject.FoodCatalog]: async () => { + await startDebugging("Debug"); + }, + [TemplateProject.RedditLink]: async () => { + await startDebugging("Debug in Teams (Chrome)"); + }, }; export async function initPage( From eaae72e09bd5167784c84e51d26312edbe1765f0 Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Tue, 3 Sep 2024 13:07:07 +0800 Subject: [PATCH 46/52] perf(kiota): update TTK command and refactor spec parser (#12318) --- packages/spec-parser/src/interfaces.ts | 5 + packages/spec-parser/src/manifestUpdater.ts | 25 ++- packages/spec-parser/src/specParser.ts | 20 +-- .../spec-parser/test/manifestUpdater.test.ts | 163 ++++++++++++++++++ packages/spec-parser/test/specParser.test.ts | 2 +- packages/vscode-extension/package.nls.json | 2 +- packages/vscode-extension/src/extension.ts | 2 +- .../createPluginWithManifestHandler.ts | 6 +- .../src/handlers/lifecycleHandlers.ts | 12 +- .../createPluginWithManifestHandler.test.ts | 28 ++- 10 files changed, 237 insertions(+), 28 deletions(-) diff --git a/packages/spec-parser/src/interfaces.ts b/packages/spec-parser/src/interfaces.ts index 6c3a99a9e1..9979141e09 100644 --- a/packages/spec-parser/src/interfaces.ts +++ b/packages/spec-parser/src/interfaces.ts @@ -327,3 +327,8 @@ export interface InferredProperties { subtitle?: string; imageUrl?: string; } + +export interface ExistingPluginManifestInfo { + manifestPath: string; + specPath: string; +} diff --git a/packages/spec-parser/src/manifestUpdater.ts b/packages/spec-parser/src/manifestUpdater.ts index 170eb35578..d49a8bdd9b 100644 --- a/packages/spec-parser/src/manifestUpdater.ts +++ b/packages/spec-parser/src/manifestUpdater.ts @@ -8,6 +8,7 @@ import path from "path"; import { AuthInfo, ErrorType, + ExistingPluginManifestInfo, ParseOptions, ProjectType, WarningResult, @@ -34,7 +35,8 @@ export class ManifestUpdater { apiPluginFilePath: string, spec: OpenAPIV3.Document, options: ParseOptions, - authInfo?: AuthInfo + authInfo?: AuthInfo, + existingPluginManifestInfo?: ExistingPluginManifestInfo ): Promise<[TeamsAppManifest, PluginManifestSchema, WarningResult[]]> { const manifest: TeamsAppManifest = await fs.readJSON(manifestPath); const apiPluginRelativePath = ManifestUpdater.getRelativePath(manifestPath, apiPluginFilePath); @@ -59,7 +61,8 @@ export class ManifestUpdater { apiPluginFilePath, appName, authInfo, - options + options, + existingPluginManifestInfo ); return [manifest, apiPlugin, warnings]; @@ -98,7 +101,8 @@ export class ManifestUpdater { apiPluginFilePath: string, appName: string, authInfo: AuthInfo | undefined, - options: ParseOptions + options: ParseOptions, + existingPluginManifestInfo?: ExistingPluginManifestInfo ): Promise<[PluginManifestSchema, WarningResult[]]> { const warnings: WarningResult[] = []; const functions: FunctionObject[] = []; @@ -252,6 +256,11 @@ export class ManifestUpdater { let apiPlugin: PluginManifestSchema; if (await fs.pathExists(apiPluginFilePath)) { apiPlugin = await fs.readJSON(apiPluginFilePath); + } else if ( + existingPluginManifestInfo && + (await fs.pathExists(existingPluginManifestInfo.manifestPath)) + ) { + apiPlugin = await fs.readJSON(existingPluginManifestInfo.manifestPath); } else { apiPlugin = { $schema: ConstantString.PluginManifestSchema, @@ -276,6 +285,16 @@ export class ManifestUpdater { } apiPlugin.runtimes = apiPlugin.runtimes || []; + // Need to delete previous runtime since spec path has changed + if (existingPluginManifestInfo) { + const relativePath = ManifestUpdater.getRelativePath( + existingPluginManifestInfo.manifestPath, + existingPluginManifestInfo.specPath + ); + apiPlugin.runtimes = apiPlugin.runtimes.filter( + (runtime) => runtime.spec.url !== relativePath + ); + } const index = apiPlugin.runtimes.findIndex( (runtime) => runtime.spec.url === specRelativePath && diff --git a/packages/spec-parser/src/specParser.ts b/packages/spec-parser/src/specParser.ts index b7026bee78..d12489c606 100644 --- a/packages/spec-parser/src/specParser.ts +++ b/packages/spec-parser/src/specParser.ts @@ -306,6 +306,12 @@ export class SpecParser { throw new SpecParserError(ConstantString.CancelledMessage, ErrorType.Cancelled); } + const existingPluginManifestInfo = existingPluginFilePath + ? { + manifestPath: existingPluginFilePath, + specPath: this.pathOrSpec as string, + } + : undefined; const [updatedManifest, apiPlugin, warnings] = await ManifestUpdater.updateManifestWithAiPlugin( manifestPath, @@ -313,22 +319,14 @@ export class SpecParser { pluginFilePath, newSpec, this.options, - authInfo + authInfo, + existingPluginManifestInfo ); result.warnings.push(...warnings); await fs.outputJSON(manifestPath, updatedManifest, { spaces: 4 }); - if (existingPluginFilePath) { - const originPluginManifest = (await fs.readJSON( - existingPluginFilePath - )) as PluginManifestSchema; - // TODO (kiota): refactor to avoid generate apiPlugin - originPluginManifest.functions = apiPlugin.functions; - await fs.outputJSON(pluginFilePath, originPluginManifest, { spaces: 4 }); - } else { - await fs.outputJSON(pluginFilePath, apiPlugin, { spaces: 4 }); - } + await fs.outputJSON(pluginFilePath, apiPlugin, { spaces: 4 }); } catch (err) { if (err instanceof SpecParserError) { throw err; diff --git a/packages/spec-parser/test/manifestUpdater.test.ts b/packages/spec-parser/test/manifestUpdater.test.ts index dd7a77b0d2..f492575434 100644 --- a/packages/spec-parser/test/manifestUpdater.test.ts +++ b/packages/spec-parser/test/manifestUpdater.test.ts @@ -3762,6 +3762,169 @@ describe("updateManifestWithAiPlugin", () => { ); } }); + + it("should update existing manifest", async () => { + const spec: any = { + openapi: "3.0.2", + info: { + title: "My API", + description: "My API description", + }, + servers: [ + { + url: "/v3", + }, + ], + paths: { + "/pets": { + post: { + operationId: "createPet", + summary: "Create a pet", + description: "Create a new pet in the store", + requestBody: { + content: { + "application/json": { + schema: { + type: "object", + required: ["name"], + properties: { + name: { + type: "string", + description: "Name of the pet", + }, + age: { + type: "string", + description: "Date time of the pet", + format: "date-time", + }, + status: { + type: "string", + description: "Status of the pet", + enum: ["available", "pending", "sold"], + }, + arrayProp: { + type: "array", + items: { + type: "string", + description: "Prop of the pet", + format: "date-time", + default: "2021-01-01T00:00:00Z", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }; + const manifestPath = "/path/to/your/manifest.json"; + const outputSpecPath = "/path/to/your/spec/outputSpec.yaml"; + const pluginFilePath = "/path/to/your/ai-plugin.json"; + const existingPluginManifestPath = "/path/to/your/pluginManifest.json"; + const specPath = "/path/to/your/spec.yaml"; + const relativePath = ManifestUpdater.getRelativePath(existingPluginManifestPath, specPath); + const originalManifest = { + name: { short: "Original Name", full: "Original Full Name" }, + description: { short: "Original Short Description", full: "Original Full Description" }, + }; + const expectedManifest = { + name: { short: "Original Name", full: "Original Full Name" }, + description: { short: "My API", full: "My API description" }, + copilotExtensions: { + plugins: [ + { + file: "ai-plugin.json", + id: "plugin_1", + }, + ], + }, + }; + const originalPluginManifest = { + $schema: ConstantString.PluginManifestSchema, + schema_version: "v2.1", + name_for_human: "Original Name", + namespace: "originalname", + description_for_human: "My API description", + runtimes: [ + { + type: "OpenApi", + auth: { + type: "None", + }, + spec: { + url: relativePath, + }, + run_for_functions: ["createPet"], + }, + ], + }; + + const expectedPlugins: PluginManifestSchema = { + $schema: ConstantString.PluginManifestSchema, + schema_version: "v2.1", + name_for_human: "Original Name", + namespace: "originalname", + description_for_human: "My API description", + functions: [ + { + name: "createPet", + description: "Create a new pet in the store", + }, + ], + runtimes: [ + { + type: "OpenApi", + auth: { + type: "None", + }, + spec: { + url: "spec/outputSpec.yaml", + }, + run_for_functions: ["createPet"], + }, + ], + }; + sinon.stub(fs, "readJSON").callsFake(async (path) => { + if (path === manifestPath) { + return Promise.resolve(originalManifest); + } else if (path === existingPluginManifestPath) { + return Promise.resolve(originalPluginManifest); + } else { + return Promise.resolve({}); + } + }); + sinon + .stub(fs, "pathExists") + .withArgs(manifestPath) + .resolves(true) + .withArgs(pluginFilePath) + .resolves(false) + .withArgs(existingPluginManifestPath) + .resolves(true); + + const options: ParseOptions = { + allowMethods: ["get", "post"], + }; + const [manifest, apiPlugin, warnings] = await ManifestUpdater.updateManifestWithAiPlugin( + manifestPath, + outputSpecPath, + pluginFilePath, + spec, + options, + undefined, + { + manifestPath: existingPluginManifestPath, + specPath: specPath, + } + ); + + expect(manifest).to.deep.equal(expectedManifest); + expect(apiPlugin).to.deep.equal(expectedPlugins); + expect(warnings).to.deep.equal([]); + }); }); describe("manifestUpdater", () => { diff --git a/packages/spec-parser/test/specParser.test.ts b/packages/spec-parser/test/specParser.test.ts index 3bbcb7f99a..ab28948dbf 100644 --- a/packages/spec-parser/test/specParser.test.ts +++ b/packages/spec-parser/test/specParser.test.ts @@ -1153,7 +1153,7 @@ describe("SpecParser", () => { } }); - it(" should generate adaptivecard for existing plugin manifest", async () => { + it("should generate adaptivecard for existing plugin manifest", async () => { const pluginManifest = { schema_version: "1", name_for_human: "test", diff --git a/packages/vscode-extension/package.nls.json b/packages/vscode-extension/package.nls.json index e083964e65..67cab3527a 100644 --- a/packages/vscode-extension/package.nls.json +++ b/packages/vscode-extension/package.nls.json @@ -552,6 +552,6 @@ "teamstoolkit.walkthroughs.buildIntelligentApps.intelligentAppResources.title": "Intelligent App Resources", "teamstoolkit.walkthroughs.buildIntelligentApps.intelligentAppResources.description": "Explore these resources to build intelligent apps and enhance your development projects\n🗒️ [Generative AI for Beginners](https://github.com/microsoft/generative-ai-for-beginners/tree/main)\n✨ [Retrieval Augmented Generation (RAG)](https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview)\n📚 [AI Learning and Community Hub](https://learn.microsoft.com/en-us/ai/)", "teamstoolkit.m365.needSignIn.message": "You need to sign in your Microsoft 365 account.", - "teamstoolkit.handler.createPluginWithManifest.error.missingParameter": "Missing parameter in the createPluginWithManifest command. Usage: createPluginWithManifest(API_SPEC_PATH:string, PLUGIN_MANIFEST_PATH: string, SCAFFOLD_NEW: boolean).", + "teamstoolkit.handler.createPluginWithManifest.error.missingParameter": "Missing parameter in the createPluginWithManifest command. Usage: createPluginWithManifest(API_SPEC_PATH:string, PLUGIN_MANIFEST_PATH: string, OUTPUT_FOLDER: string).", "teamstoolkit.error.KiotaNotInstalled": "You need to install Microsoft Kiota extension to use this feature." } diff --git a/packages/vscode-extension/src/extension.ts b/packages/vscode-extension/src/extension.ts index d087a132f5..8ce38d9d1c 100644 --- a/packages/vscode-extension/src/extension.ts +++ b/packages/vscode-extension/src/extension.ts @@ -537,7 +537,7 @@ function registerInternalCommands(context: vscode.ExtensionContext) { // Register createPluginWithManifest command if (featureFlagManager.getBooleanValue(FeatureFlags.KiotaIntegration)) { const createPluginWithManifestCommand = vscode.commands.registerCommand( - "fx-extension.createPluginFromManifest", + "fx-extension.createprojectfromkiota", createPluginWithManifest ); context.subscriptions.push(createPluginWithManifestCommand); diff --git a/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts b/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts index e43c9d1faa..31f75e083a 100644 --- a/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts +++ b/packages/vscode-extension/src/handlers/createPluginWithManifestHandler.ts @@ -35,7 +35,7 @@ export async function createPluginWithManifest(args?: any[]): Promise 3) { const error = new UserError( ExtensionSource, "missingParameter", @@ -47,7 +47,7 @@ export async function createPluginWithManifest(args?: any[]): Promise 2 ? args[2] : true; + const outputFolder = args[2] ?? undefined; const inputs = getSystemInputs(); inputs.capabilities = CapabilityOptions.apiPlugin().id; @@ -56,7 +56,7 @@ export async function createPluginWithManifest(args?: any[]): Promise { const core = new MockCore(); sandbox.stub(globalVariables, "core").value(core); const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); - const res = await createPluginWithManifest(["specPath", "pluginManifestPath", true]); + const res = await createPluginWithManifest(["specPath", "pluginManifestPath"]); + chai.assert.isTrue(res.isOk()); + chai.assert.isTrue(openFolder.calledOnce); + }); + + it("happy path: successfullly create plugin project with folder path", async () => { + const core = new MockCore(); + sandbox.stub(globalVariables, "core").value(core); + const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); + const res = await createPluginWithManifest(["specPath", "pluginManifestPath", "folder"]); chai.assert.isTrue(res.isOk()); chai.assert.isTrue(openFolder.calledOnce); }); @@ -45,6 +54,23 @@ describe("createPluginWithManifestHandler", () => { } }); + it("should throw error if args length is bigger than 3", async () => { + const core = new MockCore(); + sandbox.stub(globalVariables, "core").value(core); + const openFolder = sandbox.stub(workspaceUtils, "openFolder").resolves(); + const res = await createPluginWithManifest([ + "specPath", + "pluginManifestPath", + "folder", + "extra", + ]); + chai.assert.isTrue(res.isErr()); + chai.assert.isTrue(openFolder.notCalled); + if (res.isErr()) { + chai.assert.equal(res.error.name, "missingParameter"); + } + }); + it("should throw error if args is empty", async () => { const core = new MockCore(); sandbox.stub(globalVariables, "core").value(core); From 4a6676181b823098447adfa076673e871eb398c0 Mon Sep 17 00:00:00 2001 From: Yimin-Jin <139844715+Yimin-Jin@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:10:21 +0800 Subject: [PATCH 47/52] fix: fix sso-tab (#12302) --- templates/ts/sso-tab-with-obo-flow/api/tsconfig.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/ts/sso-tab-with-obo-flow/api/tsconfig.json b/templates/ts/sso-tab-with-obo-flow/api/tsconfig.json index cca0ca9573..e1f43305ef 100644 --- a/templates/ts/sso-tab-with-obo-flow/api/tsconfig.json +++ b/templates/ts/sso-tab-with-obo-flow/api/tsconfig.json @@ -2,6 +2,8 @@ "compilerOptions": { "module": "commonjs", "target": "es6", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, "outDir": "dist", "rootDir": ".", "sourceMap": true, From a81dd5f7b8dddcd3900c5d55c4f4a2dd721b8157 Mon Sep 17 00:00:00 2001 From: rentu <5545529+SLdragon@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:16:49 +0800 Subject: [PATCH 48/52] perf(spec-parser): add spec hash for telemetry (#12325) * perf(spec-parser): add spec hash for telemetry * fix: remove unused import * fix: update test to make codecov happy --------- Co-authored-by: rentu --- .../src/component/generator/apiSpec/helper.ts | 20 +++++- .../generator/apiSpecGenerator.test.ts | 7 +++ packages/spec-parser/src/interfaces.ts | 2 + packages/spec-parser/src/specParser.ts | 11 ++++ packages/spec-parser/test/specParser.test.ts | 62 +++++++++++++------ 5 files changed, 81 insertions(+), 21 deletions(-) diff --git a/packages/fx-core/src/component/generator/apiSpec/helper.ts b/packages/fx-core/src/component/generator/apiSpec/helper.ts index da4e60a684..ae14f25caa 100644 --- a/packages/fx-core/src/component/generator/apiSpec/helper.ts +++ b/packages/fx-core/src/component/generator/apiSpec/helper.ts @@ -69,6 +69,7 @@ const enum telemetryProperties { validationWarnings = "validation-warnings", validApisCount = "valid-apis-count", allApisCount = "all-apis-count", + specHash = "spec-hash", bearerTokenAuthCount = "bearer-token-auth-count", oauth2AuthCount = "oauth2-auth-count", otherAuthCount = "other-auth-count", @@ -168,6 +169,7 @@ export async function listOperations( context, shouldLogWarning, false, + validationRes.specHash, existingCorrelationId ); if (validationRes.status === ValidationStatus.Error) { @@ -209,6 +211,7 @@ export async function listOperations( [telemetryProperties.bearerTokenAuthCount]: bearerTokenAuthAPIs.length.toString(), [telemetryProperties.oauth2AuthCount]: oauth2AuthAPIs.length.toString(), [telemetryProperties.otherAuthCount]: otherAuthAPIs.length.toString(), + [telemetryProperties.specHash]: validationRes.specHash!, }); // Filter out exsiting APIs @@ -260,6 +263,7 @@ export async function listOperations( context, true, false, + validationRes.specHash, existingCorrelationId ); return err(errors); @@ -286,6 +290,7 @@ export async function listOperations( context, true, false, + validationRes.specHash, existingCorrelationId ); return err(errors); @@ -433,7 +438,15 @@ export async function generateFromApiSpec( } if (validationRes.status === ValidationStatus.Error) { - logValidationResults(projectType, validationRes.errors, warnings, context, false, true); + logValidationResults( + projectType, + validationRes.errors, + warnings, + context, + false, + true, + validationRes.specHash + ); const errorMessage = inputs.platform === Platform.VSCode ? getLocalizedString( @@ -498,6 +511,7 @@ export function logValidationResults( context: Context, shouldLogWarning: boolean, shouldSkipTelemetry: boolean, + specHash?: string, existingCorrelationId?: string ): void { if (!shouldSkipTelemetry) { @@ -513,6 +527,10 @@ export function logValidationResults( [telemetryProperties.projectType]: projectType.toString(), }; + if (specHash) { + properties[telemetryProperties.specHash] = specHash; + } + const specNotValidError = errors.find((error) => error.type === ErrorType.SpecNotValid); if (specNotValidError) { properties[ApiSpecTelemetryPropertis.SpecNotValidDetails] = specNotValidError.content; diff --git a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts index c1e0ada5c0..6a2df5377b 100644 --- a/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts +++ b/packages/fx-core/tests/component/generator/apiSpecGenerator.test.ts @@ -1271,6 +1271,7 @@ describe("listOperations", async () => { status: ValidationStatus.Valid, warnings: [], errors: [], + specHash: "xxx", }); sandbox .stub(SpecParser.prototype, "list") @@ -1291,6 +1292,7 @@ describe("listOperations", async () => { status: ValidationStatus.Valid, warnings: [], errors: [], + specHash: "", }); sandbox.stub(SpecParser.prototype, "list").resolves({ APIs: [ @@ -1333,6 +1335,7 @@ describe("listOperations", async () => { status: ValidationStatus.Valid, warnings: [], errors: [], + specHash: "", }); sandbox.stub(SpecParser.prototype, "list").resolves({ APIs: [ @@ -1687,6 +1690,7 @@ describe("SpecGenerator", async () => { content: "", }, ], + specHash: "xxx", }); sandbox.stub(fs, "ensureDir").resolves(); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok({ ...teamsManifest })); @@ -1745,6 +1749,7 @@ describe("SpecGenerator", async () => { warnings: [ { type: WarningType.OperationIdMissing, content: "warning", data: ["operation2"] }, ], + specHash: "xxx", }); sandbox.stub(fs, "ensureDir").resolves(); sandbox.stub(manifestUtils, "_readAppManifest").resolves(ok({ ...teamsManifest })); @@ -1780,6 +1785,7 @@ describe("SpecGenerator", async () => { status: ValidationStatus.Warning, errors: [], warnings: [{ type: WarningType.OperationIdMissing, content: "warning" }], + specHash: "xxx", }); sandbox.stub(fs, "ensureDir").resolves(); sandbox @@ -1814,6 +1820,7 @@ describe("SpecGenerator", async () => { status: ValidationStatus.Error, errors: [{ type: ErrorType.NoServerInformation, content: "" }], warnings: [], + specHash: "xxx", }); sandbox.stub(SpecParser.prototype, "generate").resolves(); diff --git a/packages/spec-parser/src/interfaces.ts b/packages/spec-parser/src/interfaces.ts index 9979141e09..cdba1ac97b 100644 --- a/packages/spec-parser/src/interfaces.ts +++ b/packages/spec-parser/src/interfaces.ts @@ -23,6 +23,8 @@ export interface ValidateResult { * An array of error results generated during validation. */ errors: ErrorResult[]; + + specHash?: string; } export interface SpecValidationResult { diff --git a/packages/spec-parser/src/specParser.ts b/packages/spec-parser/src/specParser.ts index d12489c606..365f4c242f 100644 --- a/packages/spec-parser/src/specParser.ts +++ b/packages/spec-parser/src/specParser.ts @@ -33,6 +33,7 @@ import { wrapAdaptiveCard } from "./adaptiveCardWrapper"; import { ValidatorFactory } from "./validators/validatorFactory"; import { Validator } from "./validators/validator"; import { PluginManifestSchema } from "@microsoft/teams-manifest"; +import { createHash } from "crypto"; /** * A class that parses an OpenAPI specification file and provides methods to validate, list, and generate artifacts. @@ -83,6 +84,8 @@ export class SpecParser { */ async validate(): Promise { try { + let hash = ""; + try { await this.loadSpec(); if (!this.parser.$refs.circular) { @@ -96,9 +99,15 @@ export class SpecParser { status: ValidationStatus.Error, warnings: [], errors: [{ type: ErrorType.SpecNotValid, content: (e as Error).toString() }], + specHash: hash, }; } + if (this.unResolveSpec!.servers) { + const serverString = JSON.stringify(this.unResolveSpec!.servers); + hash = createHash("sha256").update(serverString).digest("hex"); + } + const errors: ErrorResult[] = []; const warnings: WarningResult[] = []; @@ -109,6 +118,7 @@ export class SpecParser { errors: [ { type: ErrorType.SwaggerNotSupported, content: ConstantString.SwaggerNotSupported }, ], + specHash: hash, }; } @@ -147,6 +157,7 @@ export class SpecParser { status: status, warnings: warnings, errors: errors, + specHash: hash, }; } catch (err) { throw new SpecParserError((err as Error).toString(), ErrorType.ValidateFailed); diff --git a/packages/spec-parser/test/specParser.test.ts b/packages/spec-parser/test/specParser.test.ts index ab28948dbf..0a7eb6095e 100644 --- a/packages/spec-parser/test/specParser.test.ts +++ b/packages/spec-parser/test/specParser.test.ts @@ -20,6 +20,7 @@ import jsyaml from "js-yaml"; import mockedEnv, { RestoreFn } from "mocked-env"; import { SMEValidator } from "../src/validators/smeValidator"; import { ValidatorFactory } from "../src/validators/validatorFactory"; +import { createHash } from "crypto"; describe("SpecParser", () => { afterEach(() => { @@ -133,16 +134,15 @@ describe("SpecParser", () => { const result = await specParser.validate(); - expect(result).to.deep.equal({ - status: ValidationStatus.Warning, - errors: [], - warnings: [ - { - type: WarningType.ConvertSwaggerToOpenAPI, - content: ConstantString.ConvertSwaggerToOpenAPI, - }, - ], - }); + expect(result.warnings).to.deep.equal([ + { + type: WarningType.ConvertSwaggerToOpenAPI, + content: ConstantString.ConvertSwaggerToOpenAPI, + }, + ]); + expect(result.status).equal(ValidationStatus.Warning); + expect(result.errors).to.be.an("array").that.is.empty; + sinon.assert.calledOnce(dereferenceStub); }); @@ -221,16 +221,14 @@ describe("SpecParser", () => { const result = await specParser.validate(); - expect(result).to.deep.equal({ - status: ValidationStatus.Error, - errors: [ - { - type: ErrorType.SwaggerNotSupported, - content: ConstantString.SwaggerNotSupported, - }, - ], - warnings: [], - }); + expect(result.warnings).to.be.an("array").that.is.empty; + expect(result.status).equal(ValidationStatus.Error); + expect(result.errors).to.deep.equal([ + { + type: ErrorType.SwaggerNotSupported, + content: ConstantString.SwaggerNotSupported, + }, + ]); }); it("should return an error result object if no server information", async function () { @@ -250,6 +248,7 @@ describe("SpecParser", () => { { type: ErrorType.NoServerInformation, content: ConstantString.NoServerInformation }, { type: ErrorType.NoSupportedApi, content: ConstantString.NoSupportedApi, data: [] }, ], + specHash: "", }); sinon.assert.calledOnce(dereferenceStub); }); @@ -275,6 +274,7 @@ describe("SpecParser", () => { }, { type: ErrorType.NoSupportedApi, content: ConstantString.NoSupportedApi, data: [] }, ], + specHash: createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex"), }); sinon.assert.calledOnce(dereferenceStub); }); @@ -304,6 +304,7 @@ describe("SpecParser", () => { }, { type: ErrorType.NoSupportedApi, content: ConstantString.NoSupportedApi, data: [] }, ], + specHash: createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex"), }); sinon.assert.calledOnce(dereferenceStub); }); @@ -324,6 +325,7 @@ describe("SpecParser", () => { errors: [ { type: ErrorType.NoSupportedApi, content: ConstantString.NoSupportedApi, data: [] }, ], + specHash: createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex"), }); sinon.assert.calledOnce(dereferenceStub); }); @@ -381,6 +383,9 @@ describe("SpecParser", () => { expect(result.errors[0].type).equal(ErrorType.RemoteRefNotSupported); expect(result.status).equal(ValidationStatus.Error); + expect(result.specHash).to.equal( + createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex") + ); }); it("should return an warning result object if missing operation id", async function () { @@ -439,6 +444,7 @@ describe("SpecParser", () => { }, ], errors: [], + specHash: createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex"), }); sinon.assert.calledOnce(dereferenceStub); }); @@ -504,6 +510,7 @@ describe("SpecParser", () => { ], }, ], + specHash: createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex"), }); sinon.assert.calledOnce(dereferenceStub); }); @@ -557,6 +564,9 @@ describe("SpecParser", () => { expect(result.status).to.equal(ValidationStatus.Valid); expect(result.warnings).to.be.an("array").that.is.empty; expect(result.errors).to.be.an("array").that.is.empty; + expect(result.specHash).to.equal( + createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex") + ); sinon.assert.calledOnce(dereferenceStub); }); @@ -609,6 +619,9 @@ describe("SpecParser", () => { expect(result.status).to.equal(ValidationStatus.Valid); expect(result.warnings).to.be.an("array").that.is.empty; expect(result.errors).to.be.an("array").that.is.empty; + expect(result.specHash).to.equal( + createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex") + ); sinon.assert.calledOnce(dereferenceStub); }); @@ -709,6 +722,9 @@ describe("SpecParser", () => { expect(result.status).to.equal(ValidationStatus.Valid); expect(result.warnings).to.be.an("array").that.is.empty; expect(result.errors).to.be.an("array").that.is.empty; + expect(result.specHash).to.equal( + createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex") + ); }); it("should only create validator once if already created", async () => { @@ -814,6 +830,9 @@ describe("SpecParser", () => { ); expect(result.errors[0].data).equal("3.1.0"); expect(result.status).equal(ValidationStatus.Error); + expect(result.specHash).to.equal( + createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex") + ); sinon.assert.calledOnce(dereferenceStub); }); @@ -867,6 +886,9 @@ describe("SpecParser", () => { expect(result.status).to.equal(ValidationStatus.Valid); expect(result.warnings).to.be.an("array").that.is.empty; expect(result.errors).to.be.an("array").that.is.empty; + expect(result.specHash).to.equal( + createHash("sha256").update(JSON.stringify(spec.servers)).digest("hex") + ); sinon.assert.calledOnce(dereferenceStub); }); From 39776b8d3572a7059c7069aa4dbb03b4af96c5fd Mon Sep 17 00:00:00 2001 From: anchenyi <162104711+anchenyi@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:24:56 +0800 Subject: [PATCH 49/52] feat: server API of the "sync manifest" (#12316) * feat: server API of the "sync manifest" --- .../teamsApp/interfaces/SyncManifest.ts | 7 ++ packages/server/src/serverConnection.ts | 21 +++++ .../server/tests/serverConnection.test.ts | 76 ++++++++++++++++++- 3 files changed, 103 insertions(+), 1 deletion(-) diff --git a/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts b/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts index 1cb51a139e..f73d5d135f 100644 --- a/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts +++ b/packages/fx-core/src/component/driver/teamsApp/interfaces/SyncManifest.ts @@ -1,6 +1,9 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. +import { SyncManifestInputs } from "../../../../question"; +import { AppDefinition } from "./appdefinitions/appDefinition"; + export interface SyncManifestArgs { /** * Teams app project path @@ -15,3 +18,7 @@ export interface SyncManifestArgs { */ teamsAppId?: string; } + +export interface SyncManifestInputsForVS extends SyncManifestInputs { + teamsAppFromTdp: AppDefinition; +} diff --git a/packages/server/src/serverConnection.ts b/packages/server/src/serverConnection.ts index 4a3695f629..302915da16 100644 --- a/packages/server/src/serverConnection.ts +++ b/packages/server/src/serverConnection.ts @@ -28,6 +28,7 @@ import { FxCore, PackageService, QuestionNames, + SyncManifestInputs, TestToolInstallOptions, assembleError, environmentNameManager, @@ -45,6 +46,7 @@ import TelemetryReporter from "./providers/telemetry"; import TokenProvider from "./providers/tokenProvider"; import UserInteraction from "./providers/userInteraction"; import { standardizeResult } from "./utils"; +import { SyncManifestInputsForVS } from "@microsoft/teamsfx-core/build/component/driver/teamsApp/interfaces/SyncManifest"; export default class ServerConnection implements IServerConnection { public static readonly namespace = Namespaces.Server; @@ -91,6 +93,7 @@ export default class ServerConnection implements IServerConnection { this.listOpenAPISpecOperationsRequest.bind(this), this.checkAndInstallTestTool.bind(this), this.listPluginApiSpecs.bind(this), + this.syncTeamsAppManifestRequest.bind(this), ].forEach((fn) => { /// fn.name = `bound ${functionName}` connection.onRequest(`${ServerConnection.namespace}/${fn.name.split(" ")[1]}`, fn); @@ -190,6 +193,24 @@ export default class ServerConnection implements IServerConnection { return standardizeResult(res); } + public async syncTeamsAppManifestRequest( + inputs: SyncManifestInputsForVS, + token: CancellationToken + ): Promise> { + const corrId = inputs.correlationId ? inputs.correlationId : ""; + const teamsAppId = inputs.teamsAppFromTdp?.teamsAppId; + const coreInputs: SyncManifestInputs = { + ...inputs, + [QuestionNames.TeamsAppId]: teamsAppId, + }; + const res = await Correlator.runWithId( + corrId, + (params) => this.core.syncManifest(params), + coreInputs + ); + return standardizeResult(res); + } + public async provisionResourcesRequest( inputs: Inputs, token: CancellationToken diff --git a/packages/server/tests/serverConnection.test.ts b/packages/server/tests/serverConnection.test.ts index fbcbd7bf20..0273a8f497 100644 --- a/packages/server/tests/serverConnection.test.ts +++ b/packages/server/tests/serverConnection.test.ts @@ -1,11 +1,23 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { err, Inputs, ok, Platform, Stage, UserError, Void } from "@microsoft/teamsfx-api"; +import { + err, + FxError, + Inputs, + ok, + Platform, + Result, + Stage, + UserError, + Void, +} from "@microsoft/teamsfx-api"; import { DependencyStatus, DepsManager, NodeNotFoundError, + QuestionNames, + SyncManifestInputs, teamsDevPortalClient, TestToolInstallOptions, } from "@microsoft/teamsfx-core"; @@ -16,6 +28,7 @@ import { Duplex } from "stream"; import { CancellationToken, createMessageConnection } from "vscode-jsonrpc"; import { setFunc } from "../src/customizedFuncAdapter"; import ServerConnection from "../src/serverConnection"; +import { SyncManifestInputsForVS } from "@microsoft/teamsfx-core/build/component/driver/teamsApp/interfaces/SyncManifest"; class TestStream extends Duplex { _write(chunk: string, _encoding: string, done: () => void) { @@ -528,4 +541,65 @@ describe("serverConnections", () => { const res = await connection.listPluginApiSpecs({} as Inputs, {} as CancellationToken); assert.isTrue(res.isOk()); }); + + it("syncTeamsAppManifestRequest", async () => { + const connection = new ServerConnection(msgConn); + sandbox + .stub(connection["core"], "syncManifest") + .callsFake((inputs: SyncManifestInputs): Promise> => { + if (!inputs[QuestionNames.TeamsAppId]) { + return Promise.resolve(ok(undefined)); + } else { + return Promise.resolve(err(new UserError("source", "name", "", ""))); + } + }); + const res = await connection.syncTeamsAppManifestRequest( + { + correlationId: "123", + } as SyncManifestInputsForVS, + {} as CancellationToken + ); + assert.isTrue(res.isOk()); + }); + + it("syncTeamsAppManifestRequest with teamsApp Id", async () => { + const connection = new ServerConnection(msgConn); + sandbox + .stub(connection["core"], "syncManifest") + .callsFake((inputs: SyncManifestInputs): Promise> => { + if (inputs[QuestionNames.TeamsAppId] === "123") { + return Promise.resolve(ok(undefined)); + } else { + return Promise.resolve(err(new UserError("source", "name", "", ""))); + } + }); + const res = await connection.syncTeamsAppManifestRequest( + { + teamsAppFromTdp: { + teamsAppId: "123", + }, + } as SyncManifestInputsForVS, + {} as CancellationToken + ); + assert.isTrue(res.isOk()); + }); + it("syncTeamsAppManifestRequest with teamsAppFromTdp but no teamsAppId", async () => { + const connection = new ServerConnection(msgConn); + sandbox + .stub(connection["core"], "syncManifest") + .callsFake((inputs: SyncManifestInputs): Promise> => { + if (!inputs[QuestionNames.TeamsAppId]) { + return Promise.resolve(ok(undefined)); + } else { + return Promise.resolve(err(new UserError("source", "name", "", ""))); + } + }); + const res = await connection.syncTeamsAppManifestRequest( + { + teamsAppFromTdp: {}, + } as SyncManifestInputsForVS, + {} as CancellationToken + ); + assert.isTrue(res.isOk()); + }); }); From acb8134f27ae2428c140df6f0c6b4bc2703f9e28 Mon Sep 17 00:00:00 2001 From: Yuqi Zhou <86260893+yuqizhou77@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:47:14 +0800 Subject: [PATCH 50/52] refactor: add plugin improvement (#12324) * refactor: add help link * fix: cid * refactor: telemetry improvememnt * test: ut --- packages/cli/src/userInteraction.ts | 2 +- .../src/component/utils/envFunctionUtils.ts | 2 +- packages/fx-core/src/core/FxCore.ts | 10 ++--- .../src/telemetry/vscodeTelemetryReporter.ts | 4 +- .../vscodeTelemetryReporter.test.ts | 43 ++++++++++++++++--- 5 files changed, 46 insertions(+), 15 deletions(-) diff --git a/packages/cli/src/userInteraction.ts b/packages/cli/src/userInteraction.ts index cfecb4e033..5a25bc2952 100644 --- a/packages/cli/src/userInteraction.ts +++ b/packages/cli/src/userInteraction.ts @@ -474,7 +474,7 @@ class CLIUserInteraction implements UserInteraction { const newConfig: InputTextConfig = { name: config.name, title: config.title, - default: (config.default as string) || "./", + default: config.default as string, validation: config.validation || pathValidation, }; return this.inputText(newConfig); diff --git a/packages/fx-core/src/component/utils/envFunctionUtils.ts b/packages/fx-core/src/component/utils/envFunctionUtils.ts index d06e231553..cadf18d179 100644 --- a/packages/fx-core/src/component/utils/envFunctionUtils.ts +++ b/packages/fx-core/src/component/utils/envFunctionUtils.ts @@ -20,7 +20,7 @@ import { DriverContext } from "../driver/interface/commonArgs"; const source = "ResolveManifestFunction"; const telemetryEvent = "manifest-with-function"; -const helpLink = undefined; // TODO: update link +const helpLink = "https://aka.ms/teamsfx-customize-manifest"; enum TelemetryPropertyKey { manifestType = "manifest-type", diff --git a/packages/fx-core/src/core/FxCore.ts b/packages/fx-core/src/core/FxCore.ts index 1c6cab1977..78b3062433 100644 --- a/packages/fx-core/src/core/FxCore.ts +++ b/packages/fx-core/src/core/FxCore.ts @@ -19,9 +19,6 @@ import { CreateProjectResult, CryptoProvider, DefaultApiSpecFolderName, - DefaultApiSpecJsonFileName, - DefaultApiSpecYamlFileName, - DefaultPluginManifestFileName, Func, FxError, IGenerator, @@ -42,7 +39,6 @@ import { import { DotenvParseOutput } from "dotenv"; import fs from "fs-extra"; import * as jsonschema from "jsonschema"; -import { OpenAPIV3 } from "openapi-types"; import * as os from "os"; import * as path from "path"; import "reflect-metadata"; @@ -64,7 +60,7 @@ import { isValidProjectV3, } from "../common/projectSettingsHelper"; import { ProjectTypeResult, projectTypeChecker } from "../common/projectTypeChecker"; -import { TelemetryEvent, TelemetryProperty, telemetryUtils } from "../common/telemetry"; +import { TelemetryEvent, telemetryUtils } from "../common/telemetry"; import { MetadataV3, VersionSource, VersionState } from "../common/versionMetadata"; import { ActionInjector } from "../component/configManager/actionInjector"; import { ILifecycle, LifecycleName } from "../component/configManager/interface"; @@ -1741,7 +1737,7 @@ export class FxCore { manifestPath, inputs, context, - CoreTelemetryComponentName, + "copilotPluginAddAPI", isPlugin ? ProjectType.Copilot : ProjectType.SME, { destinationApiSpecFilePath: outputApiSpecPath, @@ -1943,7 +1939,7 @@ export class FxCore { teamsManifestPath, inputs, context, - CoreTelemetryComponentName, + Stage.addPlugin, ProjectType.Copilot, { destinationApiSpecFilePath: destinationApiSpecPath, diff --git a/packages/vscode-extension/src/telemetry/vscodeTelemetryReporter.ts b/packages/vscode-extension/src/telemetry/vscodeTelemetryReporter.ts index 8f28453463..ee1e4d5d1e 100644 --- a/packages/vscode-extension/src/telemetry/vscodeTelemetryReporter.ts +++ b/packages/vscode-extension/src/telemetry/vscodeTelemetryReporter.ts @@ -94,7 +94,9 @@ export class VSCodeTelemetryReporter extends vscode.Disposable implements Teleme } this.checkAndOverwriteSharedProperty(properties); - properties[TelemetryProperty.CorrelationId] = Correlator.getId(); + if (properties[TelemetryProperty.CorrelationId] == undefined) { + properties[TelemetryProperty.CorrelationId] = Correlator.getId(); + } const featureFlags = featureFlagManager.listEnabled(); properties[TelemetryProperty.FeatureFlags] = featureFlags ? featureFlags.join(";") : ""; diff --git a/packages/vscode-extension/test/extTelemetry/vscodeTelemetryReporter.test.ts b/packages/vscode-extension/test/extTelemetry/vscodeTelemetryReporter.test.ts index ffda3af7f0..cd55bd1d80 100644 --- a/packages/vscode-extension/test/extTelemetry/vscodeTelemetryReporter.test.ts +++ b/packages/vscode-extension/test/extTelemetry/vscodeTelemetryReporter.test.ts @@ -17,11 +17,11 @@ describe("vscodeTelemetryReporter", () => { let tester: VSCodeTelemetryReporter; const sandbox = sinon.createSandbox(); const reporterStub = new MockTelemetryReporter(); - const sendTelemetryErrorEventSpy = sandbox.spy(reporterStub, "sendTelemetryErrorEvent"); - const sendTelemetryEventSpy = sandbox.spy(reporterStub, "sendTelemetryEvent"); - const sendTelemetryExceptionSpy = sandbox.spy(reporterStub, "sendTelemetryException"); + let sendTelemetryEventSpy: sinon.SinonSpy; + let sendTelemetryExceptionSpy: sinon.SinonSpy; + let sendTelemetryErrorEventSpy: sinon.SinonSpy; - before(() => { + beforeEach(() => { tester = new VSCodeTelemetryReporter( "test", "1.0.0-rc.1", @@ -32,9 +32,13 @@ describe("vscodeTelemetryReporter", () => { tester.addSharedProperty("programming-language", ""); tester.addSharedProperty("host-type", ""); tester.addSharedProperty("is-from-sample", ""); + + sendTelemetryEventSpy = sandbox.spy(reporterStub, "sendTelemetryEvent"); + sendTelemetryExceptionSpy = sandbox.spy(reporterStub, "sendTelemetryException"); + sendTelemetryErrorEventSpy = sandbox.spy(reporterStub, "sendTelemetryErrorEvent"); }); - after(() => { + afterEach(() => { tester.dispose(); sandbox.restore(); }); @@ -90,6 +94,35 @@ describe("vscodeTelemetryReporter", () => { ); }); + it("sendTelemetryErrorEvent: not overwrite correlationId if existing", () => { + tester.sendTelemetryErrorEvent( + "sampleErrorEvent", + { + stringProp: "some string", + "error-stack": "some user stack trace at (C:/fake_path/fake_file:1:1)", + "correlation-id": "fakeId", + }, + { numericMeasure: 123 }, + ["error-stack"] + ); + + sinon.assert.calledOnceWithMatch( + sendTelemetryErrorEventSpy, + "sampleErrorEvent", + { + stringProp: "some string", + "error-stack": "some user stack trace at (/fake_file:1:1)", + "project-id": "", + "correlation-id": "fakeId", + "feature-flags": featureFlags, + "programming-language": "", + "host-type": "", + "is-from-sample": "", + }, + { numericMeasure: 123 } + ); + }); + it("sendTelemetryException", () => { const error = new Error("error for test"); tester.sendTelemetryException(error, { stringProp: "some string" }, { numericMeasure: 123 }); From e54770bc09ed93947c371380fcaa3702f15d9b30 Mon Sep 17 00:00:00 2001 From: Bowen Song Date: Wed, 4 Sep 2024 11:25:10 +0800 Subject: [PATCH 51/52] perf(kiota): add telemetry for vsc settings (#12328) * perf(kiota): add telemetry for vsc settings * test: update ut --- packages/vscode-extension/src/config.ts | 9 +++++++++ packages/vscode-extension/src/extension.ts | 4 ++-- .../vscode-extension/src/telemetry/extTelemetryEvents.ts | 1 + packages/vscode-extension/test/extension/config.test.ts | 9 +++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/vscode-extension/src/config.ts b/packages/vscode-extension/src/config.ts index aaf8feb0c5..7adfdeac6d 100644 --- a/packages/vscode-extension/src/config.ts +++ b/packages/vscode-extension/src/config.ts @@ -4,6 +4,8 @@ import * as vscode from "vscode"; import { CONFIGURATION_PREFIX, ConfigurationKey } from "./constants"; import VsCodeLogInstance from "./commonlib/log"; import { LogLevel } from "@microsoft/teamsfx-api"; +import { ExtTelemetry } from "./telemetry/extTelemetry"; +import { TelemetryEvent } from "./telemetry/extTelemetryEvents"; export class ConfigManager { registerConfigChangeCallback() { @@ -13,6 +15,13 @@ export class ConfigManager { loadConfigs() { this.loadLogLevel(); this.loadFeatureFlags(); + const vscConfigs: { [p: string]: string } = {}; + Object.values(ConfigurationKey).forEach((value) => { + vscConfigs[value] = this.getConfiguration(value, "").toString(); + }); + ExtTelemetry.sendTelemetryEvent(TelemetryEvent.Configuration, { + ...vscConfigs, + }); } loadFeatureFlags() { process.env["TEAMSFX_BICEP_ENV_CHECKER_ENABLE"] = this.getConfiguration( diff --git a/packages/vscode-extension/src/extension.ts b/packages/vscode-extension/src/extension.ts index 8ce38d9d1c..c53ea79403 100644 --- a/packages/vscode-extension/src/extension.ts +++ b/packages/vscode-extension/src/extension.ts @@ -208,10 +208,10 @@ export async function activate(context: vscode.ExtensionContext) { isVSCodeInsiderVersion(); featureFlagManager.setBooleanValue(FeatureFlags.ChatParticipant, value); - configMgr.registerConfigChangeCallback(); - context.subscriptions.push(new ExtTelemetry.Reporter(context)); + configMgr.registerConfigChangeCallback(); + initVSCodeUI(context); initializeGlobalVariables(context); loadLocalizedStrings(); diff --git a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts index 026a89fc3c..ebc228a686 100644 --- a/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts +++ b/packages/vscode-extension/src/telemetry/extTelemetryEvents.ts @@ -294,6 +294,7 @@ export enum TelemetryEvent { CreatePluginWithManifest = "create-plugin-with-manifest", InstallKiota = "install-kiota", + Configuration = "vsc-configuration", } export enum TelemetryProperty { diff --git a/packages/vscode-extension/test/extension/config.test.ts b/packages/vscode-extension/test/extension/config.test.ts index 93259a3f04..93cc24ab46 100644 --- a/packages/vscode-extension/test/extension/config.test.ts +++ b/packages/vscode-extension/test/extension/config.test.ts @@ -4,6 +4,7 @@ import * as sinon from "sinon"; import * as vscode from "vscode"; import VsCodeLogInstance from "../../src/commonlib/log"; import { configMgr } from "../../src/config"; +import { ExtTelemetry } from "../../src/telemetry/extTelemetry"; describe("configMgr", () => { const sanbox = sinon.createSandbox(); @@ -53,6 +54,14 @@ describe("configMgr", () => { }); }); describe("loadConfigs", () => { + beforeEach(async () => { + sanbox.stub(ExtTelemetry, "sendTelemetryEvent"); + sanbox.stub(vscode.workspace, "getConfiguration").returns({ + get: () => { + return "test"; + }, + } as any); + }); afterEach(() => { sanbox.restore(); }); From fe2e47f9c3123907c4048cafc5cb4ebc00bd6970 Mon Sep 17 00:00:00 2001 From: Huajie Zhang Date: Wed, 4 Sep 2024 13:04:56 +0800 Subject: [PATCH 52/52] perf: improve credential masker (#12330) --- .../src/common/secretmasker/feature.ts | 323 +++++++++++++++--- .../fx-core/src/common/secretmasker/masker.ts | 6 +- 2 files changed, 287 insertions(+), 42 deletions(-) diff --git a/packages/fx-core/src/common/secretmasker/feature.ts b/packages/fx-core/src/common/secretmasker/feature.ts index b53668e648..98a4dcde79 100644 --- a/packages/fx-core/src/common/secretmasker/feature.ts +++ b/packages/fx-core/src/common/secretmasker/feature.ts @@ -3,6 +3,273 @@ import { dictMatcher } from "./dict"; +export function combinations1(keys: string[]): string[] { + const expandedKeys: string[] = []; + keys.forEach((key) => { + if (key.endsWith("password")) { + expandedKeys.push(key.substring(0, key.length - 4)); + } + expandedKeys.push(key); + }); + + keys = expandedKeys; + + let results: string[] = []; + results = results.concat(keys); + + keys.forEach((key) => { + if (key.includes("_")) { + const key1 = key.split("_").join(""); + const key2 = key.split("_").join("-"); + results.push(key1); + results.push(key2); + } + }); + return Array.from(new Set(results)).sort(); +} + +export function combinations2(keys: string[]): string[] { + let results: string[] = []; + results = results.concat(keys); + keys.forEach((key) => { + results.push("-" + key); + results.push("--" + key); + }); + return Array.from(new Set(results)).sort(); +} + +export const CredKeywordsEndsWith: string[] = combinations1([ + "access_key", + "access_token", + "account_key", + "aci_token", + "ad_password", + "admin_key", + "admin_password", + "admin_token", + "api_key", + "api_key_id", + "api_secret", + "api_token", + "app_key", + "app_secret", + "application_token", + "auth_code", + "auth_header", + "auth_key", + "auth_password", + "auth_secret", + "auth_token", + "authenti", + "authorization", + "aws_access_key_id", + "aws_key", + "aws_secret_access_key", + "azure_cr", + "azure_secret", + "backup_key", + "bank_account_key", + "basic_auth", + "bearer_token", + "billing_key", + "cert_id", + "card_key", + "cert_password", + "certificate", + "client_certificate", + "client_id", + "client_key", + "client_secret", + "cloud_key", + "connection_secret", + "connection_string", + "consumer_id", + "consumer_key", + "consumer_secret", + "cookie_secret", + "credential", + "crypt_key", + "customer_key", + "data_encryption_key", + "db_password", + "db_secret", + "db_user", + "decryption_key", + "device_key", + "digital_signature", + "disk_encryption_key", + "docker_token", + "dropbox_token", + "encryption_cert", + "encryption_key", + "encryption_password", + "encryption_password_key", + "encryption_secret", + "env_key", + "firewall_password", + "ftp_password", + "ftp_user", + "gcp_credentials", + "gcp_key", + "gcp_private_key", + "git_token", + "gitlab_token", + "gpg_key", + "hash_key", + "hipaa_key", + "hmac_key", + "http_password", + "iam_access_key", + "id_token", + "install_key", + "integration_key", + "ipsec_key", + "jira_token", + "kerberos_key", + "key", + "keystore_password", + "kms_key", + "kube_config", + "kubernetes_token", + "ldap_bind_password", + "ldap_password", + "ldap_secret", + "license_key", + "login_key", + "mac_key", + "machine_key", + "management_certificate", + "master_key", + "merchant_key", + "mfa_key", + "mysql_password", + "oauth_id", + "oauth_secret", + "oauth_token", + "oracle_wallet_password", + "otp_key", + "passphrase", + "password", + "paypal_secret", + "pci_key", + "pem_key", + "pfx_password", + "pg_password", + "pgp_key", + "pre_shared_key", + "preshared_key", + "private_cert", + "private_encryption_key", + "private_key", + "private_key_password", + "private_password", + "private_ssh_key", + "private_token", + "proxy_password", + "rds_password", + "recovery_cert", + "recovery_key", + "recovery_password", + "redis_password", + "registry_key", + "registry_password", + "repo_token", + "rsa_private_key", + "s3_key", + "salt_key", + "saml_key", + "sas_key", + "sas_token", + "secret", + "secret_access_key", + "secret_id", + "secret_key_base", + "secure_string", + "security_key", + "security_token", + "sensitive_data_key", + "server_key", + "service_account", + "session_key", + "session_secret", + "session_token", + "sftp_password", + "shared_access_key", + "sign_in_key", + "sign_key", + "signing_cert", + "signing_key", + "signing_secret", + "slack_token", + "smtp_password", + "smtp_secret", + "social_security_key", + "ssh_cert", + "ssh_key", + "ssl_certificate", + "ssl_key", + "storage_account_key", + "storage_key", + "subscription_key", + "tfa_key", + "third_party_key", + "tls_key", + "tls_secret", + "token", + "token_key", + "token_secret", + "tpm_key", + "travis_token", + "trust_password", + "truststore_password", + "trust_store_password", + "two_factor_auth", + "two_factor_key", + "upload_token", + "user_key", + "user_pass", + "user_secret", + "username_password", + "validation_key", + "vault_cert", + "vault_password", + "vault_token", + "vcenter_password", + "vcs_token", + "vpn_key", + "vpn_password", + "web_auth_secret", + "webauthn_secret", + "webhook_secret", + "wifi_password", + "windows_password", + "windows_secret", + "wpa_password", + "x-functions-key", + "x509c", + "yubikey_password", +]); + +export const CredKeywordsEquals: string[] = combinations2([ + "p", + "auth", + "bearer", + "code", + "creds", + "dapi", + "encrypt", + "jwt", + "pat", + "pin", + "pw", + "pwd", + "sas", + "sig", + "sign_in", +]); + +// console.log(JSON.stringify(CredKeywordsEndsWith, null, 2)); + function extractCharFeatures(token: string) { let alphabetNum = 0; let numberNum = 0; @@ -48,48 +315,33 @@ function extractCharFeatures(token: string) { // Helper function to check if a token contains common secret-related keywords function containsSecretKeywords(token: string): number { - const keywords = [ - "password", - "pwd", - "apikey", - "api_key", - "auth_key", - "authkey", - "token", - "key", - "secret", - "credential", - "authorization", - "bearer", - "encrypt", - ]; - const weekKeywords = ["login", "auth"]; - if (keywords.some((keyword) => token.toLowerCase().includes(keyword))) return 1; - if (weekKeywords.some((keyword) => token.toLowerCase().includes(keyword))) return 0.5; + if (CredKeywordsEndsWith.some((keyword) => token.toLowerCase().endsWith(keyword))) return 1; + if (CredKeywordsEquals.some((keyword) => token.toLowerCase() === keyword)) return 1; return 0; } -interface SplitterToken { +export interface SplitterToken { type: "splitter"; token: string; } -interface FeatureToken { +export interface FeatureToken { type: "feature"; token: string; vector?: number[]; label?: number; + predict?: number; } export type Token = SplitterToken | FeatureToken; export function tokenize(input: string): Token[] { // Regular expression to match JSON-specific delimiters and whitespace - const tokens: string[] = input.split(/(\s+|[{}[\],:"])/).filter((t) => t.length > 0); // Retain and filter out empty tokens + const tokens: string[] = input.split(/(\s+|[{}[\],:"=;])/).filter((t) => t.length > 0); // Retain and filter out empty tokens // Map the tokens into an array of Token objects return tokens.map((t) => { - if (/\s+/.test(t) || /[{}[\],:"]/.test(t)) { + if (/\s+/.test(t) || /[{}[\],:"=;]/.test(t)) { return { type: "splitter", token: t, @@ -108,29 +360,22 @@ export function extractFeatures(text: string): Token[] { const featureTokens = allTokens.filter((t) => t.type === "feature"); for (let i = 0; i < featureTokens.length; i++) { const tokenObj = featureTokens[i] as FeatureToken; - const token = tokenObj.token; + let token = tokenObj.token; + + if (token.endsWith("")) { + token = token.slice(0, -8); + tokenObj.label = 1; + } else { + tokenObj.label = 0; + } // check if the previous token contains secret keyword let preIndicator = 0; - // check password=xxx pattern - for (const mark of ["=", ":"]) { - const index = token.indexOf(mark); - if (index >= 0) { - const preToken = token.substring(0, index - 1); - if (containsSecretKeywords(preToken)) { - preIndicator = 1; - } - } - } - if (i - 2 >= 0) { const preToken = featureTokens[i - 1].token; const prePreToken = featureTokens[i - 2].token; - if ( - containsSecretKeywords(preToken) === 1 || - (containsSecretKeywords(prePreToken) === 1 && (preToken === ":" || preToken === "=")) - ) { + if (containsSecretKeywords(preToken) === 1 || containsSecretKeywords(prePreToken) === 1) { preIndicator = 1; } } else if (i - 1 >= 0) { @@ -146,7 +391,7 @@ export function extractFeatures(text: string): Token[] { extractCharFeatures(token); tokenObj.vector = [ entropy, // 0 - specialCharRatio, // 1 + specialCharRatio ? 1 : 0, // 1 charDiversity, //2 charCatDiversity, //3 isDictWord, //4 diff --git a/packages/fx-core/src/common/secretmasker/masker.ts b/packages/fx-core/src/common/secretmasker/masker.ts index 347a41941f..a6404a845e 100644 --- a/packages/fx-core/src/common/secretmasker/masker.ts +++ b/packages/fx-core/src/common/secretmasker/masker.ts @@ -19,11 +19,11 @@ class SecretMasker { model: SVMModel = { coef_: [ [ - 0.8648359577916889, 0.612715668310322, -0.059693023942576584, 1.1417652344119453, - -0.12576782743439452, 1.1909328608363758, + 1.1407116640136614, -1.207072387304919, -0.42671866671203285, 1.760054415121175, 0.0, + 1.776337354749609, ], ], - intercept_: [-7.761273206603221], + intercept_: [-9.96020839830461], }; predict(features: number[]): number {