diff --git a/vscode/microsoft-kiota/src/commands/generate/generateClientCommand.ts b/vscode/microsoft-kiota/src/commands/generate/generateClientCommand.ts index 99b896ede6..d570a8bee8 100644 --- a/vscode/microsoft-kiota/src/commands/generate/generateClientCommand.ts +++ b/vscode/microsoft-kiota/src/commands/generate/generateClientCommand.ts @@ -62,7 +62,7 @@ export class GenerateClientCommand extends Command { if (!deepLinkParams.name && this._openApiTreeProvider.apiTitle) { deepLinkParams.name = getSanitizedString(this._openApiTreeProvider.apiTitle); } - availableStateInfo = transformToGenerationConfig(deepLinkParams); + availableStateInfo = await transformToGenerationConfig(deepLinkParams); } else { const pluginName = getSanitizedString(this._openApiTreeProvider.apiTitle); availableStateInfo = { diff --git a/vscode/microsoft-kiota/src/test/suite/commands/generateClientCommand.test.ts b/vscode/microsoft-kiota/src/test/suite/commands/generateClientCommand.test.ts index edc0337b60..448448c9d3 100644 --- a/vscode/microsoft-kiota/src/test/suite/commands/generateClientCommand.test.ts +++ b/vscode/microsoft-kiota/src/test/suite/commands/generateClientCommand.test.ts @@ -173,7 +173,7 @@ suite('GenerateClientCommand Test Suite', () => { assert.strictEqual(!treeProvider.descriptionUrl, false); vscodeWindowSpy.verify(); sinon.assert.calledOnceWithMatch(getlanguageInfoFn, context); - let stateInfo = transformToGenerationConfig(pluginParams); + let stateInfo = await transformToGenerationConfig(pluginParams); sinon.assert.calledOnceWithMatch(generateStepsFn, stateInfo, undefined , pluginParams); sinon.assert.calledOnce(showUpgradeWarningMessageStub); sinon.assert.calledOnceWithMatch(getExtensionSettingsStub, "kiota"); diff --git a/vscode/microsoft-kiota/src/utilities/deep-linking.ts b/vscode/microsoft-kiota/src/utilities/deep-linking.ts index c7b5dbfc30..d9d2c2567f 100644 --- a/vscode/microsoft-kiota/src/utilities/deep-linking.ts +++ b/vscode/microsoft-kiota/src/utilities/deep-linking.ts @@ -1,3 +1,6 @@ +import * as path from 'path'; +import { promises as fs } from 'fs'; + import { GenerateState } from "../modules/steps/generateSteps"; import { KiotaGenerationLanguage, KiotaPluginType } from "../types/enums"; import { allGenerationLanguagesToString, getSanitizedString, parseGenerationLanguage, parsePluginType } from "../util"; @@ -8,8 +11,8 @@ export function isDeeplinkEnabled(deepLinkParams: Partial): b return Object.values(deepLinkParams).filter(property => property).length >= minimumNumberOfParams; } -export function transformToGenerationConfig(deepLinkParams: Partial) - : Partial { +export async function transformToGenerationConfig(deepLinkParams: Partial) + : Promise> { const generationConfig: Partial = {}; if (deepLinkParams.kind === "client") { generationConfig.generationType = "client"; @@ -34,7 +37,7 @@ export function transformToGenerationConfig(deepLinkParams: Partial): @@ -59,6 +63,8 @@ export function validateDeepLinkQueryParams(queryParameters: Partial -1 ? lowercasedKind : undefined; if (!validKind) { @@ -103,14 +109,38 @@ export function validateDeepLinkQueryParams(queryParameters: Partial): Promise { + if (deepLinkParams.projectPath) { + try { + const exists = await fs.access(deepLinkParams.projectPath).then(() => true).catch(() => false); + if (!exists) { + try { + await fs.mkdir(deepLinkParams.projectPath); + } catch (err: unknown) { + throw new Error(`Error creating directory: ${(err as Error).message}`); + } + } + return deepLinkParams.projectPath; + } catch (error) { + return createTemporaryFolder(); + } + } + return createTemporaryFolder(); +}