dressed
Version:
A sleek, serverless-ready Discord bot framework.
54 lines • 2.32 kB
JavaScript
import { relative } from "node:path";
import { errorSymbol, warnSymbol } from "../../../utils/log.js";
import logTree from "../log-tree.js";
export function createHandlerParser(options) {
return (files, base) => {
var _a;
if (files.length === 0)
return [];
const tree = logTree(...options.colNames);
let items = [];
for (const [i, file] of Object.entries(files)) {
let data;
let itemMessages = options.itemMessages;
if (typeof itemMessages === "function") {
itemMessages = itemMessages(file);
}
try {
tree.push(files.filter((f) => f.name === file.name).length > 1
? `${file.name} \x1b[2m(${relative(base !== null && base !== void 0 ? base : "", file.path)})\x1b[22m`
: file.name, ...((_a = itemMessages.cols) !== null && _a !== void 0 ? _a : []));
data = options.createData(file, tree);
const hasConflict = items.some((item) => { var _a, _b; return (_b = (_a = options.uniqueKeys) === null || _a === void 0 ? void 0 : _a.every((k) => data[k] === item.data[k])) !== null && _b !== void 0 ? _b : item.name === file.name; });
if (hasConflict) {
throw `${warnSymbol} ${itemMessages.confict}`;
}
if (typeof file.exports.default !== "function") {
throw `${errorSymbol} Every handler must export a default function, skipping`;
}
}
catch (e) {
const prefix = Number(i) !== files.length - 1 ? "│" : " ";
if (e && e instanceof Error) {
tree.aside(`${prefix} ${errorSymbol} Failed to parse ${file.path}: ${e.message}`);
tree.aside(e);
}
else if (typeof e === "string") {
tree.aside(`${prefix} ${e}`);
}
tree.chop();
continue;
}
items.push({
...file,
data,
});
}
if (options.postMortem) {
items = options.postMortem(items);
}
tree.log();
return items;
};
}
//# sourceMappingURL=index.js.map