///
///
import { packageJson } from 'mrm-core';
import { SpawnSyncReturns, StdioOptions } from 'child_process';
import { File } from '../Base/File';
declare type InstallerNotifier = (list: string[], dev: boolean) => void;
declare type Dependencies = {
list: string[];
versions?: any;
dev: boolean;
};
declare type SupportedPackageManager = 'yarn' | 'pnpm' | 'npm';
/**
* Exposes the API to work with `package.json` file. The file is
* same as a standard JSON file, but with some special methods
* related to package file itself.
*/
export declare class PackageJsonFile extends File {
private installerOutput;
filePointer: ReturnType;
/**
* Collection of actions to be executed on package file
*/
protected actions: never[];
/**
* A copy of install instructions
*/
protected packages: {
install: {
dependency: string;
version: string;
dev: boolean;
}[];
uninstall: {
dependency: string;
dev: boolean;
}[];
};
/**
* Explicitly force to use another client instead of npm
*/
private packageManager;
/**
* Method invoked before installing dependencies
*/
private beforeInstallHooks?;
/**
* Method invoked before uninstalling dependencies
*/
private beforeUninstallHooks?;
constructor(basePath: string, installerOutput?: StdioOptions);
/**
* Run hooks for action or uninstall action
*/
private runHooks;
/**
* Sets installation client
*/
private setClient;
/**
* Executes the installer `install` or `uninstall` action. Use
* `this.installerFnAsync` for async version
*/
private installerFn;
/**
* Executes the installer `install` or `uninstall` action. Use
* `this.installerFn` for sync version
*/
private installerFnAsync;
/**
* Install and uninstall packages defined via `this.install`
* and `this.uninstall`
*/
private commitDependencies;
/**
* Performing uninstalling as a rollback step. Which means, this method
* will remove packages marked for installation.
*/
private rollbackDependencies;
/**
* Same as `commitInstalls` but async
*/
private commitDependenciesAsync;
/**
* Same as `rollbackInstalls` but async.
*/
private rollbackDependenciesAsync;
/**
* Commits actions defined on the given file
*/
private commitActions;
/**
* Rollsback actions defined on the package file
*/
private rollbackActions;
/**
* Set key/value pair in the package.json file
*/
set(key: string, value: any): this;
/**
* Set a specific client to be used
*/
useClient(client: SupportedPackageManager): this;
/**
* Enable/disable use of yarn
* @deprecated The "yarn" method is deprecated. Please use "useClient('yarn')" instead.
*/
yarn(_useYarn: boolean): this;
/**
* Unset key/value pair from the package.json file
*/
unset(key: string): this;
/**
* Set package.json script
*/
setScript(name: string, script: string): this;
/**
* Append to existing package.json script
*/
appendScript(name: string, script: string): this;
/**
* Prepend to existing package.json script
*/
prependScript(name: string, script: string): this;
/**
* Remove existing script or remove a given action from an
* existing script
*/
removeScript(name: string, script?: string | RegExp): this;
/**
* Install dependencies
*/
install(dependency: string, version?: string, dev?: boolean): this;
/**
* Uninstall dependencies
*/
uninstall(dependency: string, dev?: boolean): this;
/**
* Remove file
*/
delete(): this;
/**
* Returns value for a given key from the file
*/
get(): any;
get(address: string | string[], defaultValue?: any): any;
/**
* A boolean telling if the file already exists
*/
exists(): boolean;
/**
* Returns a list of dependencies along with specific versions (if any)
*/
getInstalls(dev?: boolean): Dependencies;
/**
* Returns uninstalls list for prod or development
* dependencies.
*/
getUninstalls(dev: boolean): Dependencies;
/**
* Define a function to be called before installing dependencies
*/
beforeInstall(callback: InstallerNotifier): this;
/**
* Define a function to be called before uninstalling dependencies
*/
beforeUninstall(callback: InstallerNotifier): this;
/**
* Commit mutations
*/
commit(): SpawnSyncReturns | undefined;
/**
* Commits async. The files are still written using synchronous
* API. However, the install and uninstall becomes async.
*/
commitAsync(): Promise | undefined>;
/**
* Rollback mutations
*/
rollback(): SpawnSyncReturns | undefined;
/**
* Rollsback async. The files are still written using synchronous
* API. However, the uninstall becomes async.
*/
rollbackAsync(): Promise | undefined>;
}
export {};