File: Installer\IInstaller.cs
Web Access
Project: src\src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Abstractions\Microsoft.TemplateEngine.Abstractions.csproj (Microsoft.TemplateEngine.Abstractions)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.TemplateEngine.Abstractions.TemplatePackage;

namespace Microsoft.TemplateEngine.Abstractions.Installer
{
    /// <summary>
    /// Template package installer interface.
    /// To implement installer compatible with built-in template package providers, implement this interface.
    /// </summary>
    public interface IInstaller
    {
        /// <summary>
        /// Gets the <see cref="IInstallerFactory"/> that created this installer.
        /// </summary>
        IInstallerFactory Factory { get; }

        /// <summary>
        /// Determines if the installer can install specific <see cref="InstallRequest"/>.
        /// </summary>
        /// <remarks>
        /// Ideally it should go as far as calling backend server to determine if such identifier exists.
        /// </remarks>
        Task<bool> CanInstallAsync(InstallRequest installationRequest, CancellationToken cancellationToken);

        /// <summary>
        /// Gets latest versions for <paramref name="templatePackages"/>.
        /// </summary>
        /// <param name="templatePackages">the template packages to get latest versions for.</param>
        /// <param name="provider"><see cref="IManagedTemplatePackageProvider"/> requesting latest version.</param>
        /// <param name="cancellationToken"></param>
        /// <returns>list of <see cref="CheckUpdateResult"/> containing latest versions for the sources.</returns>
        Task<IReadOnlyList<CheckUpdateResult>> GetLatestVersionAsync(IEnumerable<IManagedTemplatePackage> templatePackages, IManagedTemplatePackageProvider provider, CancellationToken cancellationToken);

        /// <summary>
        /// Installs the template package defined by <paramref name="installRequest"/>.
        /// </summary>
        /// <param name="installRequest">the template package to be installed.</param>
        /// <param name="provider"><see cref="IManagedTemplatePackageProvider"/> installing the package.</param>
        /// <param name="cancellationToken"></param>
        /// <returns><see cref="InstallResult"/> containing installation results and installed <see cref="InstallerOperationResult.TemplatePackage"/> if installation was successful.</returns>
        Task<InstallResult> InstallAsync(InstallRequest installRequest, IManagedTemplatePackageProvider provider, CancellationToken cancellationToken);

        /// <summary>
        /// Uninstalls the <paramref name="templatePackage"/>.
        /// </summary>
        /// <param name="templatePackage">the template package to uninstall.</param>
        /// <param name="provider"><see cref="IManagedTemplatePackageProvider"/> uninstalling the template package.</param>
        /// <param name="cancellationToken"></param>
        /// <returns><see cref="UninstallResult"/> containing the result for operation.</returns>
        Task<UninstallResult> UninstallAsync(IManagedTemplatePackage templatePackage, IManagedTemplatePackageProvider provider, CancellationToken cancellationToken);

        /// <summary>
        /// Updates the template package defined by <paramref name="updateRequest"/>.
        /// </summary>
        /// <param name="updateRequest"><see cref="UpdateRequest"/> defining the template package to update and target version.</param>
        /// <param name="provider"><see cref="IManagedTemplatePackageProvider"/> updating the package.</param>
        /// <param name="cancellationToken"></param>
        /// <returns><see cref="UpdateResult"/> containing the result for operation and installed <see cref="InstallerOperationResult.TemplatePackage"/> if update was successful.</returns>
        Task<UpdateResult> UpdateAsync(UpdateRequest updateRequest, IManagedTemplatePackageProvider provider, CancellationToken cancellationToken);
    }
}