function asServerCapabilities()

in src/protocolConverter.ts [88:190]


function asServerCapabilities(result: types.CapabiltiesDiscoveryResult): azdata.DataProtocolServerCapabilities {
	let capabilities: azdata.DataProtocolServerCapabilities = {
		protocolVersion: result.capabilities.protocolVersion,
		providerName: result.capabilities.providerName,
		providerDisplayName: result.capabilities.providerDisplayName,
		connectionProvider: undefined,
		adminServicesProvider: undefined,
		features: []
	};

	if (result.capabilities.adminServicesProvider) {
		capabilities.adminServicesProvider = <azdata.AdminServicesOptions>{
			databaseInfoOptions: new Array<azdata.ServiceOption>(),
			databaseFileInfoOptions: new Array<azdata.ServiceOption>(),
			fileGroupInfoOptions: new Array<azdata.ServiceOption>()
		};

		if (result.capabilities.adminServicesProvider.databaseInfoOptions
			&& result.capabilities.adminServicesProvider.databaseInfoOptions.length > 0) {
			for (let i = 0; i < result.capabilities.adminServicesProvider.databaseInfoOptions.length; ++i) {
				let srcOption: any = result.capabilities.adminServicesProvider.databaseInfoOptions[i];
				let descOption: azdata.ServiceOption = buildServiceOption(srcOption);
				capabilities.adminServicesProvider.databaseInfoOptions.push(descOption);
			}
		}

		if (result.capabilities.adminServicesProvider.databaseFileInfoOptions
			&& result.capabilities.adminServicesProvider.databaseFileInfoOptions.length > 0) {
			for (let i = 0; i < result.capabilities.adminServicesProvider.databaseFileInfoOptions.length; ++i) {
				let srcOption: any = result.capabilities.adminServicesProvider.databaseFileInfoOptions[i];
				let descOption: azdata.ServiceOption = buildServiceOption(srcOption);
				capabilities.adminServicesProvider.databaseFileInfoOptions.push(descOption);
			}
		}

		if (result.capabilities.adminServicesProvider.fileGroupInfoOptions
			&& result.capabilities.adminServicesProvider.fileGroupInfoOptions.length > 0) {
			for (let i = 0; i < result.capabilities.adminServicesProvider.fileGroupInfoOptions.length; ++i) {
				let srcOption: any = result.capabilities.adminServicesProvider.fileGroupInfoOptions[i];
				let descOption: azdata.ServiceOption = buildServiceOption(srcOption);
				capabilities.adminServicesProvider.fileGroupInfoOptions.push(descOption);
			}
		}
	}

	if (result.capabilities.connectionProvider
		&& result.capabilities.connectionProvider.options
		&& result.capabilities.connectionProvider.options.length > 0) {
		capabilities.connectionProvider = <azdata.ConnectionProviderOptions>{
			options: new Array<azdata.ConnectionOption>()
		};
		for (let i = 0; i < result.capabilities.connectionProvider.options.length; ++i) {
			let srcOption: any = result.capabilities.connectionProvider.options[i];
			let descOption: azdata.ConnectionOption = {
				name: srcOption.name,
				displayName: srcOption.displayName ? srcOption.displayName : srcOption.name,
				description: srcOption.description,
				groupName: srcOption.groupName,
				defaultValue: srcOption.defaultValue,
				categoryValues: srcOption.categoryValues,
				isIdentity: srcOption.isIdentity,
				isRequired: srcOption.isRequired,
				valueType: asServiceOptionType(srcOption.valueType),
				specialValueType: undefined
			};

			if (srcOption.specialValueType === 'serverName') {
				descOption.specialValueType = azdata.ConnectionOptionSpecialType.serverName;
			} else if (srcOption.specialValueType === 'databaseName') {
				descOption.specialValueType = azdata.ConnectionOptionSpecialType.databaseName;
			} else if (srcOption.specialValueType === 'authType') {
				descOption.specialValueType = azdata.ConnectionOptionSpecialType.authType;
			} else if (srcOption.specialValueType === 'userName') {
				descOption.specialValueType = azdata.ConnectionOptionSpecialType.userName;
			} else if (srcOption.specialValueType === 'password') {
				descOption.specialValueType = azdata.ConnectionOptionSpecialType.password;
			} else if (srcOption.specialValueType === 'appName') {
				descOption.specialValueType = azdata.ConnectionOptionSpecialType.appName;
			}

			capabilities.connectionProvider.options.push(descOption);
		}
	}

	if (result.capabilities.features
		&& result.capabilities.features.length > 0) {
		result.capabilities.features.forEach(feature => {
			let descFeature: azdata.FeatureMetadataProvider = {
				enabled: feature.enabled,
				featureName: feature.featureName,
				optionsMetadata: []
			};
			capabilities.features.push(descFeature);
			if (feature.optionsMetadata) {
				feature.optionsMetadata.forEach(srcOption => {
					descFeature.optionsMetadata.push(buildServiceOption(<any>srcOption));
				});
			}
		});
	}

	return capabilities;
}