From e28b6cd44aaadd3f4e88c2dd5c73b7be0060c8c8 Mon Sep 17 00:00:00 2001 From: Chris-MS-896 <64865559+Chris-MS-896@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:26:42 -0600 Subject: [PATCH] no message --- .../Hosted/Helpers/ConnectionStringParser.ts | 37 ++++++++++++------- src/Shared/DefaultExperienceUtility.ts | 12 +++--- tsconfig.strict.json | 2 + 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/Platform/Hosted/Helpers/ConnectionStringParser.ts b/src/Platform/Hosted/Helpers/ConnectionStringParser.ts index 423a85f09..1964df83e 100644 --- a/src/Platform/Hosted/Helpers/ConnectionStringParser.ts +++ b/src/Platform/Hosted/Helpers/ConnectionStringParser.ts @@ -2,33 +2,42 @@ import * as Constants from "../../../Common/Constants"; import * as DataModels from "../../../Contracts/DataModels"; export class ConnectionStringParser { - public static parseConnectionString(connectionString: string): DataModels.AccessInputMetadata { + public static parseConnectionString(connectionString: string): DataModels.AccessInputMetadata | undefined { if (!!connectionString) { try { const accessInput: DataModels.AccessInputMetadata = {} as DataModels.AccessInputMetadata; const connectionStringParts = connectionString.split(";"); connectionStringParts.forEach((connectionStringPart: string) => { - if (RegExp(Constants.EndpointsRegex.sql).test(connectionStringPart)) { - accessInput.accountName = connectionStringPart.match(Constants.EndpointsRegex.sql)[1]; + const sqlMatchResult = connectionStringPart.match(Constants.EndpointsRegex.sql); + const mongoMatchResult = connectionStringPart.match(Constants.EndpointsRegex.mongo); + const mongoComputeMatchResult = connectionStringPart.match(Constants.EndpointsRegex.mongoCompute); + const tableMatchResult = connectionStringPart.match(Constants.EndpointsRegex.table); + + if (sqlMatchResult && sqlMatchResult.length > 1) { + accessInput.accountName = sqlMatchResult[1]; accessInput.apiKind = DataModels.ApiKind.SQL; - } else if (RegExp(Constants.EndpointsRegex.mongo).test(connectionStringPart)) { - const matches: string[] = connectionStringPart.match(Constants.EndpointsRegex.mongo); - accessInput.accountName = matches && matches.length > 1 && matches[2]; + } else if (mongoMatchResult && mongoMatchResult.length > 2) { + accessInput.accountName = mongoMatchResult[2]; accessInput.apiKind = DataModels.ApiKind.MongoDB; - } else if (RegExp(Constants.EndpointsRegex.mongoCompute).test(connectionStringPart)) { - const matches: string[] = connectionStringPart.match(Constants.EndpointsRegex.mongoCompute); - accessInput.accountName = matches && matches.length > 1 && matches[2]; + } else if (mongoComputeMatchResult && mongoComputeMatchResult.length > 2) { + accessInput.accountName = mongoComputeMatchResult[2]; accessInput.apiKind = DataModels.ApiKind.MongoDBCompute; - } else if (Constants.EndpointsRegex.cassandra.some(regex => RegExp(regex).test(connectionStringPart))) { + } else if ( + Constants.EndpointsRegex.cassandra && + Constants.EndpointsRegex.cassandra.some(regex => RegExp(regex).test(connectionStringPart)) + ) { Constants.EndpointsRegex.cassandra.forEach(regex => { if (RegExp(regex).test(connectionStringPart)) { - accessInput.accountName = connectionStringPart.match(regex)[1]; - accessInput.apiKind = DataModels.ApiKind.Cassandra; + const connectionMatch = connectionStringPart.match(regex); + if (connectionMatch && connectionMatch.length > 1) { + accessInput.accountName = connectionMatch[1]; + accessInput.apiKind = DataModels.ApiKind.Cassandra; + } } }); - } else if (RegExp(Constants.EndpointsRegex.table).test(connectionStringPart)) { - accessInput.accountName = connectionStringPart.match(Constants.EndpointsRegex.table)[1]; + } else if (tableMatchResult && tableMatchResult.length > 1) { + accessInput.accountName = tableMatchResult[1]; accessInput.apiKind = DataModels.ApiKind.Table; } else if (connectionStringPart.indexOf("ApiKind=Gremlin") >= 0) { accessInput.apiKind = DataModels.ApiKind.Graph; diff --git a/src/Shared/DefaultExperienceUtility.ts b/src/Shared/DefaultExperienceUtility.ts index 81550466e..880f7c3df 100644 --- a/src/Shared/DefaultExperienceUtility.ts +++ b/src/Shared/DefaultExperienceUtility.ts @@ -4,7 +4,7 @@ import * as DataModels from "../Contracts/DataModels"; import { DefaultAccountExperienceType } from "../DefaultAccountExperienceType"; export class DefaultExperienceUtility { - public static getDefaultExperienceFromDatabaseAccount(databaseAccount: DataModels.DatabaseAccount): string { + public static getDefaultExperienceFromDatabaseAccount(databaseAccount: DataModels.DatabaseAccount): string | null { if (!databaseAccount) { return null; } @@ -81,10 +81,12 @@ export class DefaultExperienceUtility { private static _getDefaultExperience(kind: string, capabilities: DataModels.Capability[]): string { const defaultDefaultExperience: string = Constants.DefaultAccountExperience.DocumentDB; - const defaultExperienceFromKind: string = DefaultExperienceUtility._getDefaultExperienceFromAccountKind(kind); - const defaultExperienceFromCapabilities: string = DefaultExperienceUtility._getDefaultExperienceFromAccountCapabilities( + const defaultExperienceFromKindCheck = DefaultExperienceUtility._getDefaultExperienceFromAccountKind(kind); + const defaultExperienceFromKind: string = !defaultExperienceFromKindCheck ? "" : defaultExperienceFromKindCheck; + const defaultCheckforCapabilities = DefaultExperienceUtility._getDefaultExperienceFromAccountCapabilities( capabilities ); + const defaultExperienceFromCapabilities: string = !defaultCheckforCapabilities ? "" : defaultCheckforCapabilities; if (!!defaultExperienceFromKind) { return defaultExperienceFromKind; @@ -97,7 +99,7 @@ export class DefaultExperienceUtility { return defaultDefaultExperience; } - private static _getDefaultExperienceFromAccountKind(kind: string): string { + private static _getDefaultExperienceFromAccountKind(kind: string): string | null { if (!kind) { return null; } @@ -113,7 +115,7 @@ export class DefaultExperienceUtility { return null; } - private static _getDefaultExperienceFromAccountCapabilities(capabilities: DataModels.Capability[]): string { + private static _getDefaultExperienceFromAccountCapabilities(capabilities: DataModels.Capability[]): string | null { if (!capabilities) { return null; } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 03eb9e492..94bb1ecbd 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -61,6 +61,8 @@ "./src/GitHub/GitHubConnector.ts", "./src/Index.ts", "./src/NotebookWorkspaceManager/NotebookWorkspaceResourceProviderMockClients.ts", + "./src/Platform/Hosted/Helpers/ConnectionStringParser.ts", + "./src/Platform/Hosted/HostedUtils.ts", "./src/ReactDevTools.ts", "./src/ResourceProvider/IResourceProviderClient.ts", "./src/Shared/Constants.ts",