Skip to content

Commit 27b14e6

Browse files
committed
feat(log): implement some log methods
1 parent 619aa48 commit 27b14e6

File tree

2 files changed

+134
-11
lines changed

2 files changed

+134
-11
lines changed

lib/src/commander.dart

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'dart:async';
2-
import 'dart:io' as io;
2+
import 'dart:io';
33

44
import 'package:commander_ui/src/application/components/ask.dart';
55
import 'package:commander_ui/src/application/components/checkbox.dart';
@@ -10,33 +10,54 @@ import 'package:commander_ui/src/application/components/task.dart';
1010
import 'package:commander_ui/src/application/components/swap.dart';
1111
import 'package:commander_ui/src/application/terminals/terminal.dart';
1212
import 'package:commander_ui/src/application/utils/terminal_tools.dart';
13+
import 'package:commander_ui/src/domains/models/commander_theme.dart';
1314
import 'package:commander_ui/src/level.dart';
1415

1516
/// Type definition for a function which accepts a log message
1617
/// and returns a styled version of that message.
1718
///
1819
/// Generally, [AnsiCode] values are used to generate a [LogStyle].
1920
///
20-
/// ```dart
21-
/// final alertStyle = (m) => backgroundRed.wrap(styleBold.wrap(white.wrap(m)));
22-
/// ```
23-
typedef LogStyle = String? Function(String? message);
24-
2521
/// A basic Logger which wraps `stdio` and applies various styles.
2622
class Commander with TerminalTools {
27-
Commander({
28-
this.level = Level.info,
29-
});
23+
late final CommanderTheme _theme;
3024

31-
/// The current log level for this logger.
3225
Level level;
3326

3427
final _queue = <String?>[];
3528

3629
final _terminal = Terminal();
3730

31+
Commander({
32+
this.level = Level.info,
33+
CommanderTheme? theme,
34+
}) {
35+
_theme = theme ?? CommanderTheme.initial();
36+
}
37+
38+
/// Write message via `stdout.write`.
39+
void write(String? message) => stdout.write(message);
40+
3841
/// Write message via `stdout.write`.
39-
void write(String? message) => io.stdout.write(message);
42+
void writeln(String? message) => stdout.writeln(message);
43+
44+
/// Write info message to stdout.
45+
void info(String? message, {StdoutStyle? style}) => writeln((style ?? _theme.info)(message));
46+
47+
/// Write success message to stdout.
48+
void success(String? message, {StdoutStyle? style}) => writeln((style ?? _theme.success)(message));
49+
50+
/// Write warning message to stdout.
51+
void warn(String? message, {StdoutStyle? style}) => writeln((style ?? _theme.warn)(message));
52+
53+
/// Write error message to stdout.
54+
void error(String? message, {StdoutStyle? style}) => writeln((style ?? _theme.error)(message));
55+
56+
/// Write alert message to stdout.
57+
void alert(String? message, {StdoutStyle? style}) => writeln((style ?? _theme.alert)(message));
58+
59+
/// Write debug message to stdout.
60+
void debug(String? message, {StdoutStyle? style}) => writeln((style ?? _theme.debug)(message));
4061

4162
/// Writes delayed message to stdout.
4263
void delayed(String? message) => _queue.add(message);
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import 'package:mansion/mansion.dart';
2+
3+
typedef StdoutStyle = String? Function(String? message);
4+
5+
final class CommanderTheme {
6+
late final StdoutStyle info;
7+
late final StdoutStyle warn;
8+
late final StdoutStyle error;
9+
late final StdoutStyle success;
10+
late final StdoutStyle alert;
11+
late final StdoutStyle debug;
12+
13+
CommanderTheme({
14+
StdoutStyle? info,
15+
StdoutStyle? warn,
16+
StdoutStyle? error,
17+
StdoutStyle? success,
18+
StdoutStyle? alert,
19+
StdoutStyle? debug,
20+
}) {
21+
this.info = info ?? (message) => message;
22+
this.warn = warn ?? (message) => message;
23+
this.error = error ?? (message) => message;
24+
this.success = success ?? (message) => message;
25+
this.alert = alert ?? (message) => message;
26+
this.debug = debug ?? (message) => message;
27+
}
28+
29+
factory CommanderTheme.initial() => CommanderTheme(
30+
info: infoFormatter,
31+
success: successFormatter,
32+
warn: warnFormatter,
33+
error: errorFormatter,
34+
alert: alertFormatter,
35+
debug: debugFormatter);
36+
}
37+
38+
String infoFormatter(String? message) {
39+
final buffer = StringBuffer()..writeAnsi(Print(' $message'));
40+
return buffer.toString();
41+
}
42+
43+
String successFormatter(String? message) {
44+
final buffer = StringBuffer()
45+
..writeAnsiAll([
46+
SetStyles(Style.foreground(Color.green)),
47+
Print('✔'),
48+
SetStyles.reset,
49+
Print(' $message'),
50+
SetStyles.reset,
51+
]);
52+
53+
return buffer.toString();
54+
}
55+
56+
String warnFormatter(String? message) {
57+
final buffer = StringBuffer()
58+
..writeAnsiAll([
59+
SetStyles(Style.foreground(Color.yellow), Style.bold),
60+
Print('⚠'),
61+
SetStyles.reset,
62+
Print(' $message'),
63+
SetStyles.reset,
64+
]);
65+
66+
return buffer.toString();
67+
}
68+
69+
String errorFormatter(String? message) {
70+
final buffer = StringBuffer()
71+
..writeAnsiAll([
72+
SetStyles(Style.foreground(Color.brightRed), Style.bold),
73+
Print('✘'),
74+
SetStyles.reset,
75+
Print(' $message'),
76+
SetStyles.reset,
77+
]);
78+
79+
return buffer.toString();
80+
}
81+
82+
String alertFormatter(String? message) {
83+
final buffer = StringBuffer()
84+
..writeAnsiAll([
85+
SetStyles(Style.background(Color.red), Style.foreground(Color.white)),
86+
Print(' $message'),
87+
SetStyles.reset,
88+
]);
89+
90+
return buffer.toString();
91+
}
92+
93+
String debugFormatter(String? message) {
94+
final buffer = StringBuffer()
95+
..writeAnsiAll([
96+
SetStyles(Style.foreground(Color.brightBlack)),
97+
Print(' $message'),
98+
SetStyles.reset,
99+
]);
100+
101+
return buffer.toString();
102+
}

0 commit comments

Comments
 (0)