1*8d3f3824SCedric van Puttenimport { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/spawn-async';
2b939fa09SCedric van Putten
3*8d3f3824SCedric van Puttenimport { PendingSpawnPromise } from './utils/spawn';
4*8d3f3824SCedric van Putten
5*8d3f3824SCedric van Puttenexport interface PackageManagerOptions extends SpawnOptions {
6*8d3f3824SCedric van Putten  /**
7*8d3f3824SCedric van Putten   * If the package manager should run in silent mode.
8*8d3f3824SCedric van Putten   * Note, this will hide possible error output from executed commands.
9*8d3f3824SCedric van Putten   * When running in silent mode, make sure you handle them properly.
10*8d3f3824SCedric van Putten   */
11*8d3f3824SCedric van Putten  silent?: boolean;
12*8d3f3824SCedric van Putten
13*8d3f3824SCedric van Putten  /**
14*8d3f3824SCedric van Putten   * The logging method used to communicate the command which is executed.
15*8d3f3824SCedric van Putten   * Without `silent`, this defaults to `console.log`.
16*8d3f3824SCedric van Putten   * When `silent` is set to `true`, this defaults to a no-op.
17*8d3f3824SCedric van Putten   */
18*8d3f3824SCedric van Putten  log?: (...args: any[]) => void;
19*8d3f3824SCedric van Putten}
20b939fa09SCedric van Putten
21b939fa09SCedric van Puttenexport interface PackageManager {
22*8d3f3824SCedric van Putten  /** The options for this package manager */
23*8d3f3824SCedric van Putten  readonly options: PackageManagerOptions;
24*8d3f3824SCedric van Putten
25*8d3f3824SCedric van Putten  /** Run any command using the package manager */
26*8d3f3824SCedric van Putten  runAsync(command: string[]): SpawnPromise<SpawnResult>;
27*8d3f3824SCedric van Putten
28*8d3f3824SCedric van Putten  /** Get the version of the used package manager */
29b939fa09SCedric van Putten  versionAsync(): Promise<string>;
30*8d3f3824SCedric van Putten  /** Get a single configuration property from the package manager */
31b939fa09SCedric van Putten  getConfigAsync(key: string): Promise<string>;
32*8d3f3824SCedric van Putten  /** Remove the lock file within the project, if any */
33b939fa09SCedric van Putten  removeLockfileAsync(): Promise<void>;
34*8d3f3824SCedric van Putten  /** Get the workspace root package manager, if this project is within a workspace/monorepo */
35*8d3f3824SCedric van Putten  workspaceRoot(): PackageManager | null;
36b939fa09SCedric van Putten
37*8d3f3824SCedric van Putten  /** Install all current dependencies using the package manager */
38*8d3f3824SCedric van Putten  installAsync():
39*8d3f3824SCedric van Putten    | Promise<SpawnResult>
40*8d3f3824SCedric van Putten    | SpawnPromise<SpawnResult>
41*8d3f3824SCedric van Putten    | PendingSpawnPromise<SpawnResult>;
42*8d3f3824SCedric van Putten  /** Uninstall all current dependencies by removing the folder containing the packages */
43*8d3f3824SCedric van Putten  uninstallAsync(): Promise<void>;
44b939fa09SCedric van Putten
45*8d3f3824SCedric van Putten  /** Add a normal dependency to the project */
46*8d3f3824SCedric van Putten  addAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
47*8d3f3824SCedric van Putten  /** Add a development dependency to the project */
48*8d3f3824SCedric van Putten  addDevAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
49*8d3f3824SCedric van Putten  /** Add a global dependency to the environment */
50*8d3f3824SCedric van Putten  addGlobalAsync(
51*8d3f3824SCedric van Putten    namesOrFlags: string[]
52*8d3f3824SCedric van Putten  ): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
53*8d3f3824SCedric van Putten
54*8d3f3824SCedric van Putten  /** Remove a normal dependency from the project */
55*8d3f3824SCedric van Putten  removeAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
56*8d3f3824SCedric van Putten  /** Remove a development dependency from the project */
57*8d3f3824SCedric van Putten  removeDevAsync(
58*8d3f3824SCedric van Putten    namesOrFlags: string[]
59*8d3f3824SCedric van Putten  ): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
60*8d3f3824SCedric van Putten  /** Remove a global dependency from the environments */
61*8d3f3824SCedric van Putten  removeGlobalAsync(
62*8d3f3824SCedric van Putten    namesOrFlags: string[]
63*8d3f3824SCedric van Putten  ): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
64b939fa09SCedric van Putten}
65