index.d.ts 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /// <reference types="node" />
  2. import { BaseConfig, BaseConfigOptions, PackageJson, ParsedArgs } from '@ionic/cli-framework';
  3. import { PromptModule } from '@ionic/cli-framework-prompts';
  4. import { IClient, IConfig, IIntegration, ILogger, IMultiProjectConfig, IProject, IProjectConfig, ISession, IShell, InfoItem, IntegrationName, IonicContext, IonicEnvironmentFlags, ProjectIntegration, ProjectPersonalizationDetails, ProjectType } from '../../definitions';
  5. import { BaseException } from '../errors';
  6. import type { Integration as CapacitorIntegration } from '../integrations/capacitor';
  7. import type { Integration as CordovaIntegration } from '../integrations/cordova';
  8. import type { Integration as EnterpriseIntegration } from '../integrations/enterprise';
  9. export interface ProjectDetailsResultBase {
  10. readonly type?: ProjectType;
  11. readonly errors: readonly ProjectDetailsError[];
  12. }
  13. export interface ProjectDetailsSingleAppResult extends ProjectDetailsResultBase {
  14. readonly context: 'app';
  15. }
  16. export interface ProjectDetailsMultiAppResult extends ProjectDetailsResultBase {
  17. readonly context: 'multiapp';
  18. readonly id?: string;
  19. }
  20. export interface ProjectDetailsUnknownResult extends ProjectDetailsResultBase {
  21. readonly context: 'unknown';
  22. }
  23. export declare type ProjectDetailsResult = (ProjectDetailsSingleAppResult | ProjectDetailsMultiAppResult | ProjectDetailsUnknownResult) & {
  24. readonly configPath: string;
  25. };
  26. export declare type ProjectDetailsErrorCode = 'ERR_INVALID_PROJECT_FILE' | 'ERR_INVALID_PROJECT_TYPE' | 'ERR_MISSING_PROJECT_TYPE' | 'ERR_MULTI_MISSING_CONFIG' | 'ERR_MULTI_MISSING_ID';
  27. export declare class ProjectDetailsError extends BaseException {
  28. /**
  29. * Unique code for this error.
  30. */
  31. readonly code: ProjectDetailsErrorCode;
  32. constructor(msg: string,
  33. /**
  34. * Unique code for this error.
  35. */
  36. code: ProjectDetailsErrorCode,
  37. /**
  38. * The underlying error that caused this error.
  39. */
  40. cause?: Error);
  41. }
  42. export interface ProjectDetailsDeps {
  43. readonly rootDirectory: string;
  44. readonly args?: ParsedArgs;
  45. readonly e: ProjectDeps;
  46. }
  47. export declare class ProjectDetails {
  48. readonly rootDirectory: string;
  49. protected readonly e: ProjectDeps;
  50. protected readonly args: ParsedArgs;
  51. constructor({ rootDirectory, args, e }: ProjectDetailsDeps);
  52. getIdFromArgs(): Promise<string | undefined>;
  53. getIdFromPathMatch(config: IMultiProjectConfig): Promise<string | undefined>;
  54. getIdFromDefaultProject(config: IMultiProjectConfig): Promise<string | undefined>;
  55. getTypeFromConfig(config: IProjectConfig): Promise<ProjectType | undefined>;
  56. getTypeFromDetection(): Promise<ProjectType | undefined>;
  57. protected determineSingleApp(config: IProjectConfig): Promise<ProjectDetailsSingleAppResult>;
  58. protected determineMultiApp(config: IMultiProjectConfig): Promise<ProjectDetailsMultiAppResult>;
  59. processResult(result: ProjectDetailsResult): void;
  60. readConfig(p: string): Promise<{
  61. [key: string]: any;
  62. }>;
  63. /**
  64. * Gather project details from specified configuration.
  65. *
  66. * This method will always resolve with a result object, with an array of
  67. * errors. Use `processResult()` to log warnings & errors.
  68. */
  69. result(): Promise<ProjectDetailsResult>;
  70. }
  71. export declare function createProjectFromDetails(details: ProjectDetailsResult, deps: ProjectDeps): Promise<IProject>;
  72. export declare function findProjectDirectory(cwd: string): Promise<string | undefined>;
  73. export interface CreateProjectFromDirectoryOptions {
  74. logErrors?: boolean;
  75. }
  76. export declare function createProjectFromDirectory(rootDirectory: string, args: ParsedArgs, deps: ProjectDeps, { logErrors }?: CreateProjectFromDirectoryOptions): Promise<IProject | undefined>;
  77. export interface ProjectConfigOptions extends BaseConfigOptions {
  78. readonly type?: ProjectType;
  79. }
  80. export declare class ProjectConfig extends BaseConfig<IProjectConfig> {
  81. protected readonly type?: ProjectType;
  82. constructor(p: string, { type, ...options }?: ProjectConfigOptions);
  83. provideDefaults(c: Partial<Readonly<IProjectConfig>>): IProjectConfig;
  84. }
  85. export declare class MultiProjectConfig extends BaseConfig<IMultiProjectConfig> {
  86. provideDefaults(c: Partial<Readonly<IMultiProjectConfig>>): IMultiProjectConfig;
  87. }
  88. export interface ProjectDeps {
  89. readonly client: IClient;
  90. readonly config: IConfig;
  91. readonly flags: IonicEnvironmentFlags;
  92. readonly log: ILogger;
  93. readonly prompt: PromptModule;
  94. readonly session: ISession;
  95. readonly shell: IShell;
  96. readonly ctx: IonicContext;
  97. }
  98. export declare abstract class Project implements IProject {
  99. readonly details: ProjectDetailsResult;
  100. protected readonly e: ProjectDeps;
  101. readonly rootDirectory: string;
  102. abstract readonly type: ProjectType;
  103. protected originalConfigFile?: {
  104. [key: string]: any;
  105. };
  106. constructor(details: ProjectDetailsResult, e: ProjectDeps);
  107. get filePath(): string;
  108. get directory(): string;
  109. get pathPrefix(): string[];
  110. get config(): ProjectConfig;
  111. abstract detected(): Promise<boolean>;
  112. abstract requireBuildRunner(): Promise<import('../build').BuildRunner<any>>;
  113. abstract requireServeRunner(): Promise<import('../serve').ServeRunner<any>>;
  114. abstract requireGenerateRunner(): Promise<import('../generate').GenerateRunner<any>>;
  115. getBuildRunner(): Promise<import('../build').BuildRunner<any> | undefined>;
  116. getServeRunner(): Promise<import('../serve').ServeRunner<any> | undefined>;
  117. getGenerateRunner(): Promise<import('../generate').GenerateRunner<any> | undefined>;
  118. requireAppflowId(): Promise<string>;
  119. get packageJsonPath(): string;
  120. getPackageJson(pkgName?: string, { logErrors }?: {
  121. logErrors?: boolean;
  122. }): Promise<[PackageJson | undefined, string | undefined]>;
  123. requirePackageJson(pkgName?: string): Promise<PackageJson>;
  124. getSourceDir(): Promise<string>;
  125. getDefaultDistDir(): Promise<string>;
  126. getDistDir(): Promise<string>;
  127. getInfo(): Promise<InfoItem[]>;
  128. personalize(details: ProjectPersonalizationDetails): Promise<void>;
  129. setPrimaryTheme(_themeColor: string): Promise<void>;
  130. writeThemeColor(variablesPath: string, themeColor: string): Promise<void>;
  131. setAppResources(appIcon: Buffer, splash: Buffer): Promise<void>;
  132. createIntegration(name: 'capacitor'): Promise<CapacitorIntegration>;
  133. createIntegration(name: 'cordova'): Promise<CordovaIntegration>;
  134. createIntegration(name: 'enterprise'): Promise<EnterpriseIntegration>;
  135. createIntegration(name: IntegrationName): Promise<CapacitorIntegration | CordovaIntegration | EnterpriseIntegration>;
  136. getIntegration(name: IntegrationName): Required<ProjectIntegration> | undefined;
  137. requireIntegration(name: IntegrationName): Required<ProjectIntegration>;
  138. protected getIntegrations(): Promise<IIntegration<ProjectIntegration>[]>;
  139. }
  140. export declare function prettyProjectName(type?: string): string;
  141. export declare function isValidProjectId(projectId: string): boolean;