import { ChildProcessWithoutNullStreams } from "child_process";
import { Environment } from "./environment";
/**
* @description Defines the structure for promise resolution and rejection.
* @summary Provides methods to resolve or reject a promise.
* @template R - The type of the resolved value.
* @template E - The type of the error value, defaulting to Error.
* @typedef {Object} PromiseExecutor
* @property {function(R): void} resolve - Function to resolve the promise.
* @property {function(E): void} reject - Function to reject the promise.
* @memberOf module:utils
*/
export interface PromiseExecutor<R, E = Error> {
resolve: (value: R | PromiseLike<R>) => void;
reject: (error: E) => void;
}
/**
* @description Represents the result of a command execution.
* @summary Extends Promise with additional properties related to the command execution.
* This interface provides a comprehensive way to handle and interact with the results
* of an asynchronous command execution, including access to the command details,
* output logs, and the ability to abort the execution.
*
* @template R - The type of the resolved value, defaulting to void.
* @interface CommandResult
* @extends Promise<R>
* @memberOf module:utils
*/
export interface CommandResult<R = void> {
promise: Promise<R>;
/**
* @description Controller to abort the command execution.
* @summary Provides a mechanism to cancel the ongoing command execution.
*/
abort: AbortController;
/**
* @description The executed command string.
* @summary Contains the actual command that was executed.
*/
command: string;
/**
* @description The child process object.
* @summary Represents the Node.js child process that was spawned to execute the command.
*/
cmd?: ChildProcessWithoutNullStreams;
/**
* @description Array of stdout logs.
* @summary Contains all the standard output messages produced during the command execution.
*/
logs: string[];
/**
* @description Array of stderr logs.
* @summary Contains all the standard error messages produced during the command execution.
*/
errs: string[];
/**
* @description allows chaining commands.
* @summary allows chaining commands (or piping).
*/
pipe: <E>(cb: (r: R) => E) => Promise<E>;
}
/**
* @description Factory type for creating Environment instances.
* @summary Defines a function type that creates and returns Environment instances.
*
* @template T - The type of object the Environment will accumulate.
* @template E - The specific Environment type to be created, extending Environment<T>.
* @typedef {function(...unknown[]): E} EnvironmentFactory
* @memberOf module:utils
*/
export type EnvironmentFactory<T extends object, E extends Environment<T>> = (
...args: unknown[]
) => E;
/**
* @description Map of project dependencies with detailed information.
* @summary Represents the structure of project dependencies categorized by type (production, development, peer).
* Each category contains an array of objects with name and version information.
*
* @typedef {Object} DependencyMap
* @property {Array<{name: string, version: string}>} prod - Production dependencies with name and version.
* @property {Array<{name: string, version: string}>} dev - Development dependencies with name and version.
* @property {Array<{name: string, version: string}>} peer - Peer dependencies with name and version.
* @memberOf module:utils
*/
export type DependencyMap = {
prod: { name: string; version: string }[];
dev: { name: string; version: string }[];
peer: { name: string; version: string }[];
};
/**
* @description Simplified map of project dependencies.
* @summary Represents a simplified structure of project dependencies categorized by type.
* Each category contains an optional array of dependency names without version information.
*
* @typedef {Object} SimpleDependencyMap
* @property {string[]} [prod] - Optional array of production dependency names.
* @property {string[]} [dev] - Optional array of development dependency names.
* @property {string[]} [peer] - Optional array of peer dependency names.
* @memberOf module:utils
*/
export type SimpleDependencyMap = {
prod?: string[];
dev?: string[];
peer?: string[];
};
Source