/** * @since 0.1.1 * * @packageDocumentation */ /*! * @maddimathon/utility-typescript@2.0.0-beta.2 * @license MIT */ import type { RecursivePartial } from '../types/index.js'; import { timestamp } from '../functions/strings/timestamp.js'; /** * A configurable class for formatting message strings for various outputs. * * @since 0.1.1 — Experimental * * @experimental */ export declare class MessageMaker { /** * Returns the default painter callback function for the given format. * * `'html'` and `'markdown'` default painters currently do not apply any * colours. * * Used only by {@link MessageMaker.buildArgs}. * * @category Static * * @param classArgs A complete arguments object. Requires complete to * avoid building complete arguments multiple times. */ protected static defaultPainter(classArgs: MessageMaker.Args): MessageMaker.Args['painter']; /** * A completed args object. * * @category Args */ readonly args: MessageMaker.Args; get ARGS_DEFAULT(): { readonly ansiColours: { readonly 4: { readonly fg: { readonly black: "30"; readonly grey: "30"; readonly 'light-grey': "37"; readonly white: "37"; readonly red: "31"; readonly orange: "33"; readonly yellow: "33"; readonly green: "32"; readonly turquoise: "36"; readonly blue: "34"; readonly purple: "35"; readonly pink: "35"; }; readonly bg: { readonly black: "40"; readonly grey: "40"; readonly 'light-grey': "47"; readonly white: "47"; readonly red: "41"; readonly orange: "43"; readonly yellow: "43"; readonly green: "42"; readonly turquoise: "46"; readonly blue: "44"; readonly purple: "45"; readonly pink: "45"; }; }; readonly 8: { readonly black: "5;232"; readonly grey: "5;241"; readonly 'light-grey': "5;247"; readonly white: "5;255"; readonly red: "5;124"; readonly orange: "5;166"; readonly yellow: "5;208"; readonly green: "5;28"; readonly turquoise: "5;30"; readonly blue: "5;20"; readonly purple: "5;55"; readonly pink: "5;162"; }; readonly 24: { readonly black: "2;26;26;26"; readonly grey: "2;108;108;108"; readonly 'light-grey': "2;208;208;208"; readonly white: "2;248;248;248"; readonly red: "2;168;36;36"; readonly orange: "2;174;84;4"; readonly yellow: "2;204;182;0"; readonly green: "2;24;118;10"; readonly turquoise: "2;0;128;98"; readonly blue: "2;60;84;157"; readonly purple: "2;129;75;155"; readonly pink: "2;179;77;145"; }; }; readonly msg: { readonly bold: false; readonly clr: null; readonly depth: 0; readonly flag: false; readonly fullWidth: false; readonly hangingIndent: ""; readonly indent: ""; readonly italic: false; readonly linesIn: 0; readonly linesOut: 1; readonly minWidth: 20; readonly maxWidth: null; readonly tab: " "; }; readonly painter: null; readonly paintFormat: null; readonly paintIfEmpty: false; }; /** * Build a complete args object. * * @category Args */ buildArgs(args?: RecursivePartial): MessageMaker.Args; /** * Build a complete {@link MessageMaker.MsgArgs} object. * * @category Args */ msgArgs>(args?: InputArgs): MessageMaker.MsgArgs & InputArgs; constructor(args?: RecursivePartial); /** * Joins string arrays with a single new line and adds an indent to the * beginning of every line, and adds next level of indent for child arrays. * * @category Formatters * * @param lines String to implode. Arrays are joined with `'\n'`. * @param indent Optional. Default `this.args.msg.tab`. * * @return The same text, but with an indent added after every new line. */ implodeWithIndent(lines: (string | string[])[], indent?: string): string; /** * Used to map each line of a message in {@link MessageMaker.msg}. * * Does not wrap or split it (assumes this has already been done). Applies * {@link MessageMaker.painter} and {@link MessageMaker.Args.depth} indent. * * @category Messagers * * @param line String to map. Already wrapped to line width, if applicable. * @param args Message arguments that apply to this line. Also passed to {@link MessageMaker.painter}. * @param prefix Optional. Unpainted string added before the line. Helpful for hanging indents. Default ''. */ protected lineMapper(line: string, args: MessageMaker.MsgArgs, prefix?: string): string; /** * Formats the given message according to options. * * @category Messagers * * @param msg Message to display. If it's an array, the strings are joined with `'\n'`. * @param _args Optional. Overrides for default arguments in {@link MessageMaker.args}. */ msg(msg: string | string[], _args?: Partial): string; /** * Formats given messages individually and then joins them on return. * * @category Messagers * * @param messages Messages to display, each with their own personal override arguments. Joined with `universalArgs.joiner` (default `'\n\n'`) before return. * @param universalArgs Optional. Overrides for default arguments in {@link MessageMaker.args} for all messages. */ msgs(messages: MessageMaker.BulkMsgs, universalArgs?: Partial): string; /** * Applies colour and font styles to an message for output. * * @category Stylers */ painter(msg: string, args?: Partial): string; /** * Formats the given message according to options. * * @category Messagers * * @param msg Message to display. If it's an array, the strings are joined with `'\n'`. * @param msgArgs Optional. Overrides for default arguments in {@link MessageMaker['msgArgs']}. Used for the whole message. * @param timeArgs Optional. Overrides for default arguments in {@link MessageMaker['msgArgs']}. Used only for the timestamp. */ timestampMsg(msg: string | string[] | MessageMaker.BulkMsgs, msgArgs?: RecursivePartial, timeArgs?: Partial & Partial<{ date: Date; stamp: timestamp.Args_Input; }>): string; } /** * Used only for {@link MessageMaker}. * * @since 0.1.1 */ export declare namespace MessageMaker { /** * Ansi colour codes for the default node `{@link MessageMaker.Args}.painter` * function. * * @since 0.1.1 */ interface AnsiColours { /** * 4-bit colours to be used. * * e.g., `4.fg.white = '37'` */ 4: { /** Codes used for foreground colours. */ fg: { [C in Colour | "light-grey" | "white"]: string; }; /** Codes used for background colours. */ bg: { [C in Colour | "light-grey" | "white"]: string; }; }; /** * 8-bit colours to be used for foreground or background. * * e.g., `8.white = '5;7'` */ 8: { [C in Colour | "light-grey" | "white"]: string; }; /** * 24-bit colours to be used for foreground or background. * * e.g., `24.white = '2;245;245;245'` */ 24: { [C in Colour | "light-grey" | "white"]: string; }; } /** * Optional configuration for {@link MessageMaker}. * * @since 0.1.1 */ interface Args { /** * Ansi colour codes for the default node `{@link MessageMaker.Args}.painter` function. * * @see {@link MessageMaker.ARGS_DEFAULT} For default values. * @see {@link MessageMaker.buildArgs} For default node `{@link MessageMaker.Args}.painter`. */ ansiColours: AnsiColours; /** * Default arguments for {@link MessageMaker.msg}. Merged with the * default value recursively. * * @see {@link MessageMaker.buildArgs} For default value. */ msg: MsgArgs; /** * Function used to apply formatting to the messages. * * @see {@link MessageMaker.buildArgs} For default values. */ painter: null | ((line: string, args?: Partial) => string); /** * Defines the default `{@link MessageMaker.Args}.painter` value. * * @default null */ paintFormat: null | "html" | "markdown" | "node"; /** * Whether even empty strings (or strings with only spaces) should be * painted with {@link MessageMaker.painter}. * * @default false */ paintIfEmpty: boolean; } /** * Input value for multiple individually-formatted messages. Used by * {@link MessageMaker.msg}. * * `{@link MessageMaker.MsgArgs}.linesIn` and * `{@link MessageMaker.MsgArgs}.linesOut` are omitted from args because in * bulk messages, they should just be a string in the `messages` param * array. * * @since 0.1.1 */ type BulkMsgs = ([string | string[], RecursivePartial> | undefined] | [string | string[]])[]; /** * Colour slugs that can be used for formatting. * * @since 0.1.1 */ type Colour = "red" | "orange" | "yellow" | "green" | "turquoise" | "blue" | "purple" | "pink" | "grey" | "black"; /** * Optional configuration for {@link MessageMaker.msg}. * * @since 0.1.1 */ interface MsgArgs extends PainterArgs { /** * If defined, an indent is added to every line. This is best for * creating visual hierarchies. Indents count towards the * `{@link MessageMaker.MsgArgs}.maxWidth`. * * Starts at zero (no indent). * * @default 0 */ depth: number; /** * Pads each line to be at least equal to * `{@link MessageMaker.MsgArgs}.maxWidth`. * * Useful for flags that you want to take up a certain width. * * @default false */ fullWidth: boolean; /** * String to be used as a hanging indent. Not painted. * * @default '' */ hangingIndent: string; /** * String to be used as an indent (every line). Not painted. * * @default '' */ indent: string; /** * Number of blank lines after the message, if any. * * @default 0 */ linesIn: number; /** * Number of blank lines after the message, if any. * * @default 1 */ linesOut: number; /** * Max width of messages (in characters), if any. * * @default null */ maxWidth: null | number; /** * Minimum width of messages (in characters). * * Minimum value is 10. * * @default 20 */ minWidth: number; /** * String used to represent a tab (e.g., with * `{@link MessageMaker.MsgArgs}.depth`). * * @default ' ' */ tab: string; } /** * Optional configuration for {@link MessageMaker.msgs}. * * @since 0.1.1 */ interface BulkMsgArgs extends MsgArgs { /** * Used to join bulk strings together. * * @default '\n\n' */ joiner: string; } /** * Optional configuration for {@link MessageMaker.painter}. * * @since 0.1.1 */ interface PainterArgs { /** * If true, applies bold font styles. * * @default false */ bold: boolean; /** * Applies the given colour to the text. * * Default painter function for `{@link MessageMaker.Args}.paintFormat` * options `"html"` and `"markdown"` do not currently support colours. * To use colour with those outputs formats, you must provide your own * `{@link MessageMaker.Args}.painter` argument. * * @default null */ clr: null | Colour; /** * Colours the message in the inverse -- clr is the background. If ``, * the flag background should be solid black and the foreground is the * chosen colour. * * @default false */ flag: boolean | "reverse"; /** * If true, applies italic font styles. * * @default false */ italic: boolean; } } //# sourceMappingURL=MessageMaker.d.ts.map