webpack-build-notifier
Version:
A Webpack plugin that generates OS notifications for build steps using node-notifier.
210 lines (206 loc) • 8.73 kB
TypeScript
import webpack from 'webpack';
import NotificationCenter from 'node-notifier/notifiers/notificationcenter';
import { NodeNotifier } from 'node-notifier';
/**
* Enum representing valid compilation result statuses.
*/
declare enum CompilationStatus {
SUCCESS = "success",
WARNING = "warning",
ERROR = "error"
}
type CompilationResult = {
details?: string;
message?: string;
module?: {
rawRequest?: string;
resource?: string;
};
};
type Config = {
/**
* The notification title prefix. Defaults to `Webpack Build`.
*/
title?: string;
/**
* The absolute path to the project logo to be displayed as a content image in the notification. Optional.
*/
logo?: string;
/**
* The sound to play for notifications. Set to false to play no sound. Valid sounds are listed
* in the node-notifier project: https://github.com/mikaelbr/node-notifier. Defaults to `Submarine`.
*/
sound?: string | false;
/**
* The sound to play for success notifications. Defaults to the value of the *sound* configuration option.
* Set to false to play no sound for success notifications. Takes precedence over the *sound* configuration option.
*/
successSound?: string | false;
/**
* The sound to play for warning notifications. Defaults to the value of the *sound* configuration option.
* Set to false to play no sound for warning notifications. Takes precedence over the *sound* configuration option.
*/
warningSound?: string | false;
/**
* The sound to play for failure notifications. Defaults to the value of the *sound* configuration option.
* Set to false to play no sound for failure notifications. Takes precedence over the *sound* configuration option.
*/
failureSound?: string | false;
/**
* The sound to play for compilation notifications. Defaults to the value of the *sound* configuration option.
* Set to false to play no sound for compilation notifications. Takes precedence over the *sound* configuration option.
*/
compilationSound?: string | false;
/**
* A function which is invoked when compilation starts. Optional. The function is passed one parameter:
* 1. {webpack.compiler.Compiler} compiler - The webpack Compiler instance.
* Note that `suppressCompileStart` must be `false`.
*/
onCompileStart?: (compilation: webpack.Compiler) => void;
/**
* A function which is invoked when compilation completes. Optional. The function is passed two parameters:
* 1. {webpack.compilation.Compilation} compilation - The webpack Compilation instance.
* 2. {CompilationStatus} status - one of 'success', 'warning', or 'error'
*/
onComplete?: (compilation: webpack.Compilation, status: CompilationStatus) => void;
/**
* True to show the duration of a successful compilation, otherwise false (default).
*/
showDuration?: boolean;
/**
* Defines when success notifications are shown. Can be one of the following values:
*
* * `false` - Show success notification for each successful compilation (default).
* * `true` - Only show success notification for initial successful compilation and after failed compilations.
* * `"always"` - Never show the success notifications.
* * `"initial"` - Same as true, but suppresses the initial success notification.
*/
suppressSuccess?: boolean | 'always' | 'initial';
/**
* True to suppress the warning notifications, otherwise false (default).
*/
suppressWarning?: boolean;
/**
* True to suppress the compilation started notifications (default), otherwise false.
*/
suppressCompileStart?: boolean;
/**
* True to activate (focus) the terminal window when a compilation error occurs.
* Note that this only works on Mac OSX. Defaults to `false`.
*/
activateTerminalOnError?: boolean;
/**
* The absolute path to the icon to be displayed for success notifications.
* Defaults to `./icons/success.png`.
*/
successIcon?: string;
/**
* The absolute path to the icon to be displayed for warning notifications.
* Defaults to `./icons/warning.png`.
*/
warningIcon?: string;
/**
* The absolute path to the icon to be displayed for failure notifications.
* Defaults to `./icons/failure.png`.
*/
failureIcon?: string;
/**
* The absolute path to the icon to be displayed for compilation started notifications.
* Defaults to `./icons/compile.png`.
*/
compileIcon?: string;
/**
* A function called when clicking on a warning or error notification. By default, it activates the Terminal application.
* The function is passed two parameters:
*
* 1. {NotificationCenter} notifierObject - The notifier object instance.
* 2. {NotificationCenter.Notification} options - The notifier object options.
*/
onClick?: (notifier: NodeNotifier, options: NotificationCenter.Notification) => void;
/**
* A function called when the notification times out (closes). Undefined by default. The function is passed
* two parameters:
*
* 1. {NotificationCenter} notifierObject - The notifier object instance.
* 2. {NotificationCenter.Notification} options - The notifier object options.
*/
onTimeout?: (notifier: NotificationCenter, options: NotificationCenter.Notification) => void;
/**
* A function which returns a formatted notification message on successful compilation.
*
* This function must return a String.
*
* The default formatter will display "Build successful!".
*
* Note that the message will always be limited to 256 characters.
*/
formatSuccess?: () => string | undefined;
/**
* A function which returns a formatted notification message on error or warning.
* The function is passed 4 parameters:
*
* 1. {CompilationResult} error/warning - The raw error or warning object.
* 2. {string} filepath - The path to the file containing the error/warning (if available).
* 3. {CompilationStatus} status - Error or warning
* 4. {number} count - How many errors or warnings were raised
*
* This function must return a String.
*
* The default messageFormatter will display the filename which contains the error/warning followed by the
* error/warning message.
*
* Note that the message will always be limited to 256 characters.
*/
messageFormatter?: (error: CompilationResult, filepath: string, status: CompilationStatus, count: number) => string;
/**
* Any additional node-notifier options as documented in the node-notifier documentation:
* https://github.com/mikaelbr/node-notifier
*
* This config option can either be provided as a node-notifier `Notification` object, _OR_ a
* function which accepts the `CompilationStatus` and returns a `Notification` object.
*
* Note that options provided here will only be applied to the success/warning/error notifications
* (not the "compilation started" notification). The `title`, `message`, `sound`, `contentImage` (logo), and `icon`
* options will be ignored, as they will be set via the corresponding {WebpackBuildNotifierConfig} options
* (either user-specified or default).
*/
notifyOptions?: NotificationCenter.Notification | ((status: CompilationStatus) => NotificationCenter.Notification | undefined);
};
declare class WebpackBuildNotifierPlugin {
private appName;
private buildSuccessful;
private hasRun;
private title;
private logo?;
private sound;
private successSound;
private warningSound;
private failureSound;
private compilationSound;
private suppressSuccess;
private suppressWarning;
private suppressCompileStart;
private activateTerminalOnError;
private showDuration;
private successIcon;
private warningIcon;
private failureIcon;
private compileIcon;
private onCompileStart?;
private onComplete?;
private onClick;
private onTimeout?;
private formatSuccess?;
private messageFormatter?;
private notifyOptions?;
constructor(cfg?: Config);
apply(compiler: webpack.Compiler): void;
private readonly activateTerminalWindow;
private readonly formatMessage;
private readonly onCompilationDone;
private readonly onCompilationWatchRun;
private readonly registerSnoreToast;
private readonly getFirstWarningOrError;
private readonly getWarningOrErrorCount;
}
export { WebpackBuildNotifierPlugin as default };