@ts-for-gir/cli
Version:
TypeScript type definition generator for GObject introspection GIR files
155 lines (154 loc) • 6.65 kB
TypeScript
/**
* The ModuleLoader is used for reading gir modules from the file system and to solve conflicts (e.g. Gtk-3.0 and Gtk-4.0 would be a conflict)
*/
import { type Question } from 'inquirer';
import { DependencyManager, ResolveType, GirModule, Logger } from '@ts-for-gir/lib';
import type { GirModulesGroupedMap, OptionsGeneration, GirModuleResolvedBy, GirModulesGrouped, DependencyMap, Dependency, AnswerVersion } from '@ts-for-gir/lib';
export declare class ModuleLoader {
protected readonly config: OptionsGeneration;
log: Logger;
dependencyManager: DependencyManager;
/** Transitive module dependencies */
modDependencyMap: DependencyMap;
constructor(config: OptionsGeneration);
/**
* Groups Gir modules by name id
* E.g. Gtk-3.0 and Gtk-4.0 will be grouped
* @param girFiles
*/
protected groupGirFiles(resolveGirModules: Set<GirModuleResolvedBy> | GirModuleResolvedBy[]): GirModulesGroupedMap;
/**
* Sorts out the module the user has not selected via cli prompt
* @param girModulesGrouped
* @param selected Users selected module packageName
*/
protected sortVersionsByAnswer(girModulesGrouped: GirModulesGrouped, selected: string[]): {
keep: Set<GirModuleResolvedBy>;
ignore: string[];
};
protected generateContinueQuestion(message?: string, choices?: string[]): {
message: string;
choices: string[];
};
protected generateIgnoreDepsQuestion(message?: string, choices?: string[]): {
message: string;
choices: string[];
};
protected askIgnoreDepsPrompt(deps: GirModuleResolvedBy[] | Set<GirModuleResolvedBy>): Promise<'Yes' | 'No' | 'Go back'>;
/**
* Ask for duplicates / multiple versions of a module
* @param girModuleGrouped
* @param message
*/
protected generateModuleVersionQuestion(girModuleGrouped: GirModulesGrouped, message?: string): Question;
/**
* Find modules that depend on the module with the name 'packageName'
* @param girModulesGroupedMap
* @param packageName
*/
protected findGirFilesDependOnPackage(girModulesGroupedMap: GirModulesGroupedMap, packageName: string): GirModuleResolvedBy[];
/**
* Find modules that depend on the module with the names in `packageNames`
* @param girModulesGroupedMap
* @param packageName
*/
protected findGirFilesDependOnPackages(girModulesGroupedMap: GirModulesGroupedMap, packageNames: string[]): GirModuleResolvedBy[];
protected askForVersionsPrompt(girModulesGrouped: GirModulesGrouped): Promise<AnswerVersion>;
/**
* If multiple versions of the same module are found, this will aks the user with input prompts for the version he wish to use.
* Ignores also modules that depend on a module that should be ignored
* @param resolveFirModules
*/
protected askForEachConflictVersionsPrompt(girModulesGroupedMap: GirModulesGroupedMap, ignore: string[]): Promise<{
keep: Set<GirModuleResolvedBy>;
ignore: string[];
}>;
/**
* Asks via cli prompt if the user wants to add the ignored modules to his config file
* @param ignoredModules
*/
protected askAddToIgnoreToConfigPrompt(ignoredModules: string[] | Set<string>): Promise<void>;
/**
* Figure out transitive module dependencies
* @param packageName
* @param result
*/
protected traverseDependencies(packageName: string, result?: {
[name: string]: Dependency;
}): void;
/**
* Extends the modDependencyMap by the current Module,
* should be called for each girModule so that the modDependencyMap is complete
* @param girModule
*/
protected extendDependencyMapByGirModule(girModule: GirModule): void;
/**
* Sets the traverse dependencies for the current girModule,
* is required so that all dependencies can be found internally when generating the dependency imports for the module .d.ts file
* @param girModules
*/
protected initGirModules(girModules: GirModuleResolvedBy[]): Promise<void>;
/**
* Reads a gir xml module file and creates an object of GirModule.
* Also sets the setDependencyMap
* @param fillName
* @param config
*/
protected loadAndCreateGirModule(dependency: Dependency): Promise<GirModule | null>;
/**
* Returns a girModule found by `packageName` property
* @param girModules Array of girModules
* @param packageNames Full name like 'Gtk-3.0' you are looking for
*/
protected findGirModuleByFullNames(girModules: (GirModuleResolvedBy | GirModule)[], packageNames: string[]): Array<GirModuleResolvedBy | GirModule>;
/**
* Checks if a girModules with the `packageNames` exists
* @param girModules
* @param packageName
*/
protected existsGirModules(girModules: (GirModuleResolvedBy | GirModule)[], packageName: string): boolean;
/**
* Reads the gir xml module files and creates an object of GirModule for each module
* @param dependencies
* @param girModules
* @param resolvedBy
* @param failedGirModules
* @param ignoreDependencies
* @returns
*/
protected loadGirModules(dependencies: Dependency[], ignoreDependencies?: string[], girModules?: GirModuleResolvedBy[], resolvedBy?: ResolveType, failedGirModules?: Set<string>): Promise<{
loaded: GirModuleResolvedBy[];
failed: Set<string>;
}>;
/**
* Find modules with the possibility to use wild cards for module names. E.g. `Gtk*` or `'*'`
* @param modules
* @param ignore
*/
protected findGirFiles(globPackageNames: string[], ignore?: string[]): Promise<Set<string>>;
protected girFilePathToDependencies(girFiles: Set<string>): Promise<Dependency[]>;
/**
* Loads all found `packageNames`
* @param girDirectories
* @param packageNames
* @param doNotAskForVersionOnConflict Set this to false if you want to get a prompt for each version conflict
*/
getModulesResolved(packageNames: string[], ignore?: string[], doNotAskForVersionOnConflict?: boolean): Promise<{
keep: GirModuleResolvedBy[];
grouped: GirModulesGroupedMap;
ignore: string[];
failed: Set<string>;
}>;
/**
* Find modules
* @param girDirectories
* @param modules
*/
getModules(modules: string[], ignore?: string[]): Promise<{
grouped: GirModulesGroupedMap;
loaded: GirModuleResolvedBy[];
failed: string[];
}>;
/** Start parsing the gir modules */
parse(girModules: GirModuleResolvedBy[]): void;
}