feat: init

This commit is contained in:
Darwin Cereska
2026-03-27 19:39:50 +01:00
commit fb3c0a7474
9 changed files with 262 additions and 0 deletions

8
lib/bolt.dart Normal file
View File

@@ -0,0 +1,8 @@
/// Support for doing something awesome.
///
/// More dartdocs go here.
library;
export 'src/bolt_base.dart';
// TODO: Export any libraries intended for clients of this package.

101
lib/src/bolt_base.dart Normal file
View File

@@ -0,0 +1,101 @@
import 'dart:io';
List<void Function()> initializers = [];
List<void Function()> finalizers = [];
/// enablePrefixMatching allows for automatic prefix matching.
/// Automatic prefix matching can be a dangerous thing to automatically enable in CLI tools.
var enablePrefixMatching = false;
/// enableCommandSorting controls sorting of the slice of commands, which is turned on by default.
var enableCommandSorting = true;
/// enableCaseInsensitive allows case-insensitve command names. (case sensitive by default)
var enableCaseInsensitive = false;
/// enableTraverseRunHooks executes persistent pre-run and post-run hooks from all parents.
/// By default this is disabled, which means only the first run hook to be found is executed.
var enableTraverseRunHooks = false;
/// mousetrapHelpText enables an information splash screen on Windows
/// if the CLI is started from explorer.exe.
/// To disable the mousetrap, just set this variable to blank string ("").
// Works only on Microsoft Windows.
String mousetrapHelpText = """This is a command line tool.
You need to open cmd.exe and run it from there.
""";
/// mousetrapDisplayDuration controls how long the mousetrapHelpText message is displayed on Windows
/// if the CLI is started from explorer.exe. Set to 0 to wait for the return key to be pressed.
/// To disable the mousetrap, just set mousetrapHelpText to a blank string ("").
Duration mousetrapDisplayDuration = Duration(seconds: 5);
/// onInitialize sets the passed functions to be run when each command's
/// execute method is called.
void onInitialize(List<void Function()> y) {
initializers.addAll(y);
}
/// onFinalize sets the passed functions to be run when each command's
/// execute method is terminated.
void onFinalize(List<void Function()> y) {
finalizers.addAll(y);
}
/// ld compares two strings and returns the levenshtein distance between them.
int ld(String s, String t, bool ignoreCase) {
if (ignoreCase) {
s.toLowerCase();
t.toLowerCase();
}
List<List<int>> d = List.generate(
s.length + 1,
(_) => List<int>.filled(t.length + 1, 0),
);
for (int i = 0; i < d.length; i++) {
d[i][0] = i;
}
for (int j = 0; j < d[0].length; j++) {
d[0][j] = j;
}
for (int j = 1; j <= t.length; j++) {
for (int i = 1; i <= s.length; i++) {
if (s[i - 1] == t[j - 1]) {
d[i][j] = d[i - 1][j - 1];
} else {
int min = d[i - 1][j - 1];
if (d[i][j - 1] < min) {
min = d[i][j - 1];
}
if (d[i - 1][j - 1] < min) {
min = d[i - 1][j - 1];
}
d[i][j] = min + 1;
}
}
}
return d[s.length][t.length];
}
/// checkError print the msg with the prefix 'Error:' and exits with error code 1. If the msg is null, it does nothing.
void checkError(Object? msg) {
if (msg != null) {
stderr.write("Error: $msg");
exit(1);
}
}
/// writeStringAndCheck writes a string into a buffer, and checks if the error is not null.
void writeStringAndCheck(StringBuffer b, String s) {
try {
b.write(s);
} catch (e) {
checkError(e);
}
}