@apistudio/apim-cli
Version:
CLI for API Management Products
112 lines • 6.65 kB
TypeScript
/**
* Copyright Super iPaaS Integration LLC, an IBM Company 2024
*/
import { Response } from "../../common/models/response-wrapper.js";
import { PinnedProject } from "../../lfs/models/pinned-project.model.js";
import { Project } from "../../lfs/models/project.model.js";
import { RootDirectoryInfo } from "../../lfs/models/root-directory-info.model.js";
import { VCSProject } from "../../vcs/models/vcs-project.model.js";
import { ProjectDuplicateRequest } from "../models/project-operations.model.js";
export interface IProjectsHandler {
/**
* Loads all local projects and its corresponding assets from the configured root directories and returns as a list of project objects
*
* @returns A promise of list of projects wrapped in the response-wrapper
*/
loadAllProjects(): Promise<Response<Project[]>>;
/**
* Loads all local projects and its corresponding assets from the given root directory and returns as a list of project objects
*
* @param parentFolder The root directory info / repository data to load projects from
* @returns A promise of list of projects wrapped in the response-wrapper
*/
loadProjectsForParentsFolder(parentFolder: RootDirectoryInfo): Promise<Response<Project[]>>;
/**
* Loads all local projects and its corresponding assets from the given root directory and returns as a list of project objects
*
* @param parentFolder The root directory info / repository data to load projects from
* @returns A promise of list of projects wrapped in the response-wrapper
*/
loadProjectsForParentsFolders(parentFolders: RootDirectoryInfo[]): Promise<Response<Project[]>>;
/**
* Creates a new project entry in studio meta data file, returns the updated list of projects to use in store
* @param newProject New project object
* @returns A promise of updated list of projects wrapped in response-wrapper to use in store
*/
createNewProject(newProject: Project, fileList?: File[]): Promise<Response<Project>>;
/**
* Returns a list of projects by filtering based on the parent folder name
* @param projects List of projects to filter from
* @param uniqueParentFolderName Unique parent folder name to filter projects with, which could be either a repository name or a root directory alias
* @returns A list of filtered projects
*/
filterProjectsByUniqueParentFolderName(projects: (Project | VCSProject)[], uniqueParentFolderName: string): (Project | VCSProject)[];
/**
* Reloads all assets present in local project folder into the project argument.
* @param project Project object to be refreshed
* @returns A Promise of reloaded project with updated assets as per local project folder.
*/
refreshProject(project: Project): Promise<Response<Project>>;
/**
* Checks and returns the given project as a VCSProject
* @param project Local or VCS Project type
* @returns A boolean to indicate whether the project is Local or VCS project, in addition it also informs ts compiler to treat project as VCS project if return type is true.
*/
isVCSProject(project: Project | VCSProject): project is VCSProject;
/**
* Checks whether the given project is already present in project list.
* @param existingProjectList Existing list of projects from store
* @param rootDirectoryAlias Unique label for the root directory / repository.
* @param projectName Name of the project to be searched for duplication
* @returns A boolean to indicate whether the project is duplicate or not.
*/
isDuplicateProject(existingProjectList: (Project | VCSProject)[], rootDirectoryAlias: string, projectName: string): boolean;
/**
* Searches through the project list and returns the index of specified project.
* @param projects List of Local or VCS projects.
* @param rootDirectoryAlias Unique label for the root directory / repository.
* @param projectName Name of the project to be searched.
* @returns Index of the first element in the projects list which matches with provided projectName and rootDirectoryAlias.
* Returns -1 if no match is found.
*/
findProjectIndex(projects: (Project | VCSProject)[], rootDirectoryAlias: string, projectName: string): number;
/**
* Sorts the projects based on pinned projects.
* @param pinnedProjects List of pinned projects
* @param projects List of projects
* @returns Sorted list of projects
*/
getSortedProjects(pinnedProjects: PinnedProject[], projects: (Project | VCSProject)[], sortColumn: string | null, sortOrder: 'asc' | 'desc'): (Project | VCSProject)[];
/**
* Filters and returns the list of projects after removing projects belonging to any of the given parent folders
* @param parentFolders The parent folder aliases for which the projects are to be deleted
* @param projects List of all projects
* @returns List of projects that do not belong to any of the given parents folders
*/
removeProjectsByParentFolders(parentFolderAlias: string[], projects: (Project | VCSProject)[]): (Project | VCSProject)[];
/**
* Identifies whether the project is local or vcs and orchestrates the flow accordingly to update the project
* @param existingProject The original version of project
* @param updatedProject Project with updated metadata
*/
updateProject(existingProject: (Project | VCSProject), updatedProject: (Project | VCSProject)): Promise<void>;
/**
* Identifes whether the project is local or vcs and orchestrates the flow accordingly to delete the projects
* @param projects List of projects to be deleted
*/
deleteProjects(projects: (Project | VCSProject)[]): Promise<void>;
/**
* Identifes whether the project is local or vcs and orchestrates the flow accordingly to duplicate the projects
* @param duplicateRequestData Contains details aboout project source to be duplicated and target destination
* @param newProjectName A unique project name for duplicated project
*/
duplicateProject(duplicateRequestData: ProjectDuplicateRequest, newProjectName: string): Promise<Response<Project | VCSProject>>;
/**
* Generates a unique project name for duplicate project creation
* @param name Current project name
* @param projectList List of existing projects
* @returns Newly generated unique project name
*/
generateUniqueProjectName(name: string, projectList: (Project | VCSProject)[]): string;
}
//# sourceMappingURL=projects-handler.interface.d.ts.map