UNPKG

gdal-async

Version:

Bindings to GDAL (Geospatial Data Abstraction Library) with full async support

460 lines (455 loc) 17 kB
type SelectOption = { label: string; value: string; hint?: string; }; declare const kCancel: unique symbol; type PromptCommonOptions = { /** * Specify how to handle a cancelled prompt (e.g. by pressing Ctrl+C). * * Default strategy is `"default"`. * * - `"default"` - Resolve the promise with the `default` value or `initial` value. * - `"undefined`" - Resolve the promise with `undefined`. * - `"null"` - Resolve the promise with `null`. * - `"symbol"` - Resolve the promise with a symbol `Symbol.for("cancel")`. * - `"reject"` - Reject the promise with an error. */ cancel?: "reject" | "default" | "undefined" | "null" | "symbol"; }; type TextPromptOptions = PromptCommonOptions & { /** * Specifies the prompt type as text. * @optional * @default "text" */ type?: "text"; /** * The default text value. * @optional */ default?: string; /** * A placeholder text displayed in the prompt. * @optional */ placeholder?: string; /** * The initial text value. * @optional */ initial?: string; }; type ConfirmPromptOptions = PromptCommonOptions & { /** * Specifies the prompt type as confirm. */ type: "confirm"; /** * The initial value for the confirm prompt. * @optional */ initial?: boolean; }; type SelectPromptOptions = PromptCommonOptions & { /** * Specifies the prompt type as select. */ type: "select"; /** * The initial value for the select prompt. * @optional */ initial?: string; /** * The options to select from. See {@link SelectOption}. */ options: (string | SelectOption)[]; }; type MultiSelectOptions = PromptCommonOptions & { /** * Specifies the prompt type as multiselect. */ type: "multiselect"; /** * The options to select from. See {@link SelectOption}. */ initial?: string[]; /** * The options to select from. See {@link SelectOption}. */ options: (string | SelectOption)[]; /** * Whether the prompt requires at least one selection. */ required?: boolean; }; /** * Defines a combined type for all prompt options. */ type PromptOptions = TextPromptOptions | ConfirmPromptOptions | SelectPromptOptions | MultiSelectOptions; type inferPromptReturnType<T extends PromptOptions> = T extends TextPromptOptions ? string : T extends ConfirmPromptOptions ? boolean : T extends SelectPromptOptions ? T["options"][number] extends SelectOption ? T["options"][number]["value"] : T["options"][number] : T extends MultiSelectOptions ? T["options"] : unknown; type inferPromptCancalReturnType<T extends PromptOptions> = T extends { cancel: "reject"; } ? never : T extends { cancel: "default"; } ? inferPromptReturnType<T> : T extends { cancel: "undefined"; } ? undefined : T extends { cancel: "null"; } ? null : T extends { cancel: "symbol"; } ? typeof kCancel : inferPromptReturnType<T>; /** * Asynchronously prompts the user for input based on specified options. * Supports text, confirm, select and multi-select prompts. * * @param {string} message - The message to display in the prompt. * @param {PromptOptions} [opts={}] - The prompt options. See {@link PromptOptions}. * @returns {Promise<inferPromptReturnType<T>>} - A promise that resolves with the user's response, the type of which is inferred from the options. See {@link inferPromptReturnType}. */ declare function prompt<_ = any, __ = any, T extends PromptOptions = TextPromptOptions>(message: string, opts?: PromptOptions): Promise<inferPromptReturnType<T> | inferPromptCancalReturnType<T>>; /** * Defines the level of logs as specific numbers or special number types. * * @type {0 | 1 | 2 | 3 | 4 | 5 | (number & {})} LogLevel - Represents the log level. * @default 0 - Represents the default log level. */ type LogLevel = 0 | 1 | 2 | 3 | 4 | 5 | (number & {}); /** * A mapping of `LogType` to its corresponding numeric log level. * * @type {Record<LogType, number>} LogLevels - key-value pairs of log types to their numeric levels. See {@link LogType}. */ declare const LogLevels: Record<LogType, number>; /** * Lists the types of log messages supported by the system. * * @type {"silent" | "fatal" | "error" | "warn" | "log" | "info" | "success" | "fail" | "ready" | "start" | "box" | "debug" | "trace" | "verbose"} LogType - Represents the specific type of log message. */ type LogType = "silent" | "fatal" | "error" | "warn" | "log" | "info" | "success" | "fail" | "ready" | "start" | "box" | "debug" | "trace" | "verbose"; /** * Maps `LogType` to a `Partial<LogObject>`, primarily defining the log level. * * @type {Record<LogType, Partial<LogObject>>} LogTypes - key-value pairs of log types to partial log objects, specifying log levels. See {@link LogType} and {@link LogObject}. */ declare const LogTypes: Record<LogType, Partial<LogObject>>; interface ConsolaOptions { /** * An array of ConsolaReporter instances used to handle and output log messages. */ reporters: ConsolaReporter[]; /** * A record mapping LogType to InputLogObject, defining the log configuration for each log type. * See {@link LogType} and {@link InputLogObject}. */ types: Record<LogType, InputLogObject>; /** * The minimum log level to output. See {@link LogLevel}. */ level: LogLevel; /** * Default properties applied to all log messages unless overridden. See {@link InputLogObject}. */ defaults: InputLogObject; /** * The maximum number of times a log message can be repeated within a given timeframe. */ throttle: number; /** * The minimum time in milliseconds that must elapse before a throttled log message can be logged again. */ throttleMin: number; /** * The Node.js writable stream for standard output. See {@link NodeJS.WriteStream}. * @optional */ stdout?: NodeJS.WriteStream; /** * The Node.js writeable stream for standard error output. See {@link NodeJS.WriteStream}. * @optional */ stderr?: NodeJS.WriteStream; /** * A function that allows you to mock log messages for testing purposes. * @optional */ mockFn?: (type: LogType, defaults: InputLogObject) => (...args: any) => void; /** * Custom prompt function to use. It can be undefined. * @optional */ prompt?: typeof prompt | undefined; /** * Configuration options for formatting log messages. See {@link FormatOptions}. */ formatOptions: FormatOptions; } /** * @see https://nodejs.org/api/util.html#util_util_inspect_object_showhidden_depth_colors */ interface FormatOptions { /** * The maximum number of columns to output, affects formatting. * @optional */ columns?: number; /** * Whether to include timestamp information in log messages. * @optional */ date?: boolean; /** * Whether to use colors in the output. * @optional */ colors?: boolean; /** * Specifies whether or not the output should be compact. Accepts a boolean or numeric level of compactness. * @optional */ compact?: boolean | number; /** * Error cause level. */ errorLevel?: number; /** * Allows additional custom formatting options. */ [key: string]: unknown; } interface InputLogObject { /** * The logging level of the message. See {@link LogLevel}. * @optional */ level?: LogLevel; /** * A string tag to categorise or identify the log message. * @optional */ tag?: string; /** * The type of log message, which affects how it's processed and displayed. See {@link LogType}. * @optional */ type?: LogType; /** * The main log message text. * @optional */ message?: string; /** * Additional text or texts to be logged with the message. * @optional */ additional?: string | string[]; /** * Additional arguments to be logged with the message. * @optional */ args?: any[]; /** * The date and time when the log message was created. * @optional */ date?: Date; } interface LogObject extends InputLogObject { /** * The logging level of the message, overridden if required. See {@link LogLevel}. */ level: LogLevel; /** * The type of log message, overridden if required. See {@link LogType}. */ type: LogType; /** * A string tag to categorise or identify the log message, overridden if necessary. */ tag: string; /** * Additional arguments to be logged with the message, overridden if necessary. */ args: any[]; /** * The date and time the log message was created, overridden if necessary. */ date: Date; /** * Allows additional custom properties to be set on the log object. */ [key: string]: unknown; } interface ConsolaReporter { /** * Defines how a log message is processed and displayed by this reporter. * @param logObj The LogObject containing the log information to process. See {@link LogObject}. * @param ctx An object containing context information such as options. See {@link ConsolaOptions}. */ log: (logObj: LogObject, ctx: { options: ConsolaOptions; }) => void; } /** * Consola class for logging management with support for pause/resume, mocking and customisable reporting. * Provides flexible logging capabilities including level-based logging, custom reporters and integration options. * * @class Consola */ declare class Consola { options: ConsolaOptions; _lastLog: { serialized?: string; object?: LogObject; count?: number; time?: Date; timeout?: ReturnType<typeof setTimeout>; }; _mockFn?: ConsolaOptions["mockFn"]; /** * Creates an instance of Consola with specified options or defaults. * * @param {Partial<ConsolaOptions>} [options={}] - Configuration options for the Consola instance. */ constructor(options?: Partial<ConsolaOptions>); /** * Gets the current log level of the Consola instance. * * @returns {number} The current log level. */ get level(): LogLevel; /** * Sets the minimum log level that will be output by the instance. * * @param {number} level - The new log level to set. */ set level(level: LogLevel); /** * Displays a prompt to the user and returns the response. * Throw an error if `prompt` is not supported by the current configuration. * * @template T * @param {string} message - The message to display in the prompt. * @param {T} [opts] - Optional options for the prompt. See {@link PromptOptions}. * @returns {promise<T>} A promise that infer with the prompt options. See {@link PromptOptions}. */ prompt<T extends PromptOptions>(message: string, opts?: T): Promise<(T extends TextPromptOptions ? string : T extends ConfirmPromptOptions ? boolean : T extends SelectPromptOptions ? T["options"][number] extends { label: string; value: string; hint?: string; } ? T["options"][number]["value"] : T["options"][number] : T extends MultiSelectOptions ? T["options"] : unknown) | (T extends { cancel: "reject"; } ? never : T extends { cancel: "default"; } ? T extends infer T_1 ? T_1 extends T ? T_1 extends TextPromptOptions ? string : T_1 extends ConfirmPromptOptions ? boolean : T_1 extends SelectPromptOptions ? T_1["options"][number] extends { label: string; value: string; hint?: string; } ? T_1["options"][number]["value"] : T_1["options"][number] : T_1 extends MultiSelectOptions ? T_1["options"] : unknown : never : never : T extends { cancel: "undefined"; } ? undefined : T extends { cancel: "null"; } ? null : T extends { cancel: "symbol"; } ? typeof kCancel : T extends TextPromptOptions ? string : T extends ConfirmPromptOptions ? boolean : T extends SelectPromptOptions ? T["options"][number] extends { label: string; value: string; hint?: string; } ? T["options"][number]["value"] : T["options"][number] : T extends MultiSelectOptions ? T["options"] : unknown)>; /** * Creates a new instance of Consola, inheriting options from the current instance, with possible overrides. * * @param {Partial<ConsolaOptions>} options - Optional overrides for the new instance. See {@link ConsolaOptions}. * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}. */ create(options: Partial<ConsolaOptions>): ConsolaInstance; /** * Creates a new Consola instance with the specified default log object properties. * * @param {InputLogObject} defaults - Default properties to include in any log from the new instance. See {@link InputLogObject}. * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}. */ withDefaults(defaults: InputLogObject): ConsolaInstance; /** * Creates a new Consola instance with a specified tag, which will be included in every log. * * @param {string} tag - The tag to include in each log of the new instance. * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}. */ withTag(tag: string): ConsolaInstance; /** * Adds a custom reporter to the Consola instance. * Reporters will be called for each log message, depending on their implementation and log level. * * @param {ConsolaReporter} reporter - The reporter to add. See {@link ConsolaReporter}. * @returns {Consola} The current Consola instance. */ addReporter(reporter: ConsolaReporter): this; /** * Removes a custom reporter from the Consola instance. * If no reporter is specified, all reporters will be removed. * * @param {ConsolaReporter} reporter - The reporter to remove. See {@link ConsolaReporter}. * @returns {Consola} The current Consola instance. */ removeReporter(reporter: ConsolaReporter): ConsolaReporter[] | this; /** * Replaces all reporters of the Consola instance with the specified array of reporters. * * @param {ConsolaReporter[]} reporters - The new reporters to set. See {@link ConsolaReporter}. * @returns {Consola} The current Consola instance. */ setReporters(reporters: ConsolaReporter[]): this; wrapAll(): void; restoreAll(): void; /** * Overrides console methods with Consola logging methods for consistent logging. */ wrapConsole(): void; /** * Restores the original console methods, removing Consola overrides. */ restoreConsole(): void; /** * Overrides standard output and error streams to redirect them through Consola. */ wrapStd(): void; _wrapStream(stream: NodeJS.WriteStream | undefined, type: LogType): void; /** * Restores the original standard output and error streams, removing the Consola redirection. */ restoreStd(): void; _restoreStream(stream?: NodeJS.WriteStream): void; /** * Pauses logging, queues incoming logs until resumed. */ pauseLogs(): void; /** * Resumes logging, processing any queued logs. */ resumeLogs(): void; /** * Replaces logging methods with mocks if a mock function is provided. * * @param {ConsolaOptions["mockFn"]} mockFn - The function to use for mocking logging methods. See {@link ConsolaOptions["mockFn"]}. */ mockTypes(mockFn?: ConsolaOptions["mockFn"]): void; _wrapLogFn(defaults: InputLogObject, isRaw?: boolean): (...args: any[]) => false | undefined; _logFn(defaults: InputLogObject, args: any[], isRaw?: boolean): false | undefined; _log(logObj: LogObject): void; } interface LogFn { (message: InputLogObject | any, ...args: any[]): void; raw: (...args: any[]) => void; } type ConsolaInstance = Consola & Record<LogType, LogFn>; /** * Utility for creating a new Consola instance with optional configuration. * * @param {Partial<ConsolaOptions>} [options={}] - Optional configuration options for the new Consola instance. See {@link ConsolaOptions}. * @returns {ConsolaInstance} A new instance of Consola. See {@link ConsolaInstance}. */ declare function createConsola(options?: Partial<ConsolaOptions>): ConsolaInstance; export { type ConfirmPromptOptions, Consola, type ConsolaInstance, type ConsolaOptions, type ConsolaReporter, type FormatOptions, type InputLogObject, type LogLevel, LogLevels, type LogObject, type LogType, LogTypes, type MultiSelectOptions, type PromptOptions, type SelectPromptOptions, type TextPromptOptions, createConsola };