@chan_alston/headers
Version:
Generate perfect code headers every time.
82 lines (73 loc) • 2.78 kB
JavaScript
/**
* The length of the border line (stars) to generate.
* The actual border length will be this value plus 1
* (to account for the slashes).
* @constant {number}
*/
const LENGTH = 64;
/**
*
* @param {string} message The message to display in the box.
* @param {boolean} uppercase Whether to convert the message to uppercase.
* Defaults to true.
* @param {boolean} singleLine Whether to output a single line header.
* Defaults to false.
* @param {boolean} slashesOnly Whether to use slashes instead of asterisks.
* Defaults to false.
* @return {void}
* @example
* main("hello world");
* main("hello world", true, true); // single line
* main("hello world", true, true, true); // slashes only
*/
function main(message, uppercase = true, singleLine = false, slashesOnly = false) {
if (uppercase) message = message.toUpperCase();
const fillChar = slashesOnly ? "/" : "*";
if (singleLine) {
// Single line format: /*** MESSAGE ***/ or //// MESSAGE ////
const totalLength = LENGTH + 1; // +1 to match the original border length
const contentLength = message.length + 2; // +2 for spaces around message
const fillNeeded = totalLength - contentLength - 2; // -2 for the outer slashes
const leftFill = Math.floor(fillNeeded / 2);
const rightFill = fillNeeded - leftFill;
const result = `/${fillChar.repeat(leftFill)} ${message} ${fillChar.repeat(
rightFill
)}/`;
console.log(result);
} else {
// Three-line format with asterisks or slashes
const border = fillChar.repeat(LENGTH);
const content = `${" ".repeat(
Math.max(0, Math.floor((LENGTH - message.length) / 2))
)}${message}`;
const result = `/${border}\n${content}\n${border}/`;
console.log(result);
}
}
// Parse command line arguments
const args = process.argv.slice(2);
let singleLine = false;
let slashesOnly = false;
let messageArgs = [];
// Check for flags
for (let i = 0; i < args.length; i++) {
if (args[i] === "-s") {
singleLine = true;
} else if (args[i] === "--slashes") {
slashesOnly = true;
} else {
messageArgs.push(args[i]);
}
}
const message = messageArgs.join(" ");
if (!message) {
console.error("Please provide a message as an argument.");
console.error("Example: npx @chan_alston/headers@latest hello world");
console.error("Example: npx @chan_alston/headers@latest -s hello world");
console.error("Example: npx @chan_alston/headers@latest --slashes hello world");
console.error("Example: npx @chan_alston/headers@latest -s --slashes hello world");
process.exit(1);
}
// If this file is run directly, execute the main function
main(message, true, singleLine, slashesOnly);