Compare commits

..

2 Commits

Author SHA1 Message Date
3bda688b1e added blackOrWhite color contrast function
All checks were successful
Build / Build NPM Project (push) Successful in 41s
Build / Tag Version (push) Successful in 8s
Build / Publish Documentation (push) Successful in 36s
2024-12-26 10:40:39 -05:00
446b1aa9db Updated arg-parser help output
All checks were successful
Build / Build NPM Project (push) Successful in 1m2s
Build / Tag Version (push) Successful in 16s
Build / Publish Documentation (push) Successful in 57s
2024-11-29 18:26:09 -05:00
4 changed files with 23 additions and 11 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@ztimson/utils", "name": "@ztimson/utils",
"version": "0.23.4", "version": "0.23.6",
"description": "Utility library", "description": "Utility library",
"author": "Zak Timson", "author": "Zak Timson",
"license": "MIT", "license": "MIT",

View File

@ -14,8 +14,6 @@ export type Arg<T = any> = {
} }
export class ArgParser { export class ArgParser {
static readonly helpArg: Arg = {name: 'help', desc: 'Display command\'s help message', flags: ['-h', '--help'], default: false};
commands: ArgParser[] = []; commands: ArgParser[] = [];
args: Arg[] = []; args: Arg[] = [];
flags: Arg[] = []; flags: Arg[] = [];
@ -37,7 +35,8 @@ export class ArgParser {
// Arguments // Arguments
this.commands = argList.filter(arg => arg instanceof ArgParser); this.commands = argList.filter(arg => arg instanceof ArgParser);
this.args = <Arg[]>argList.filter(arg => !(arg instanceof ArgParser) && !arg.flags?.length); this.args = <Arg[]>argList.filter(arg => !(arg instanceof ArgParser) && !arg.flags?.length);
this.flags = <Arg[]>[...argList.filter(arg => !(arg instanceof ArgParser) && arg.flags && arg.flags.length), ...this.flags]; this.flags = <Arg[]>[...argList.filter(arg => !(arg instanceof ArgParser) && arg.flags && arg.flags.length),
{name: 'help', desc: 'Display command\'s help message', flags: ['-h', '--help'], default: false}];
this.defaults = argList.reduce((acc, arg: any) => ({...acc, [arg.name]: arg['extras'] ? [] : (arg.default ?? null)}), {}); this.defaults = argList.reduce((acc, arg: any) => ({...acc, [arg.name]: arg['extras'] ? [] : (arg.default ?? null)}), {});
// Examples // Examples
@ -125,18 +124,18 @@ export class ArgParser {
// Description // Description
let msg = `\n\n${opts.message || this.desc}`; let msg = `\n\n${opts.message || this.desc}`;
// Examples // Examples
msg += '\n\nUsage:\t' + this.examples.map(ex => `run ${this.name} ${ex}`).join('\n\t\t'); msg += '\n\nUsage:\t' + this.examples.map(ex => `${this.name} ${ex}`).join('\n\t');
// Arguments // Arguments
if(this.args.length) msg += '\n\n\t\t' + this.args.map(arg => if(this.args.length) msg += '\n\n\t' + this.args.map(arg =>
`${arg.name.toUpperCase()}${spacer(arg.name)}${arg.desc}`).join('\n\t\t'); `${arg.name.toUpperCase()}${spacer(arg.name)}${arg.desc}`).join('\n\t');
// Flags // Flags
msg += '\n\nOptions:\n\t\t' + this.flags.map(flag => { msg += '\n\nOptions:\n\t' + this.flags.map(flag => {
const flags = flag.flags?.join(', ') || ''; const flags = flag.flags?.join(', ') || '';
return `${flags}${spacer(flags)}${flag.desc}`; return `${flags}${spacer(flags)}${flag.desc}`;
}).join('\n\t\t'); }).join('\n\t');
// Commands // Commands
if(this.commands.length) msg += '\n\nCommands:\n\t\t' + this.commands.map(command => if(this.commands.length) msg += '\n\nCommands:\n\t' + this.commands.map(command =>
`${command.name}${spacer(command.name)}${command.desc}`).join('\n\t\t'); `${command.name}${spacer(command.name)}${command.desc}`).join('\n\t');
return `${msg}\n\n`; return `${msg}\n\n`;
} }
} }

12
src/color.ts Normal file
View File

@ -0,0 +1,12 @@
/**
* Determine if either black or white provides more contrast to the provided color
* @param {string} background Color to compare against
* @return {"white" | "black"} Color with the most contrast
*/
export function blackOrWhite(background: string): 'white' | 'black' {
const exploded = background.match(background.length >= 6 ? /\w\w/g : /\w/g);
if(!exploded) return 'black';
const [r, g, b] = exploded.map(hex => parseInt(hex, 16));
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
return luminance > 0.5 ? 'black' : 'white';
}

View File

@ -2,6 +2,7 @@ export * from './arg-parser';
export * from './array'; export * from './array';
export * from './aset'; export * from './aset';
export * from './cache'; export * from './cache';
export * from './color';
export * from './csv'; export * from './csv';
export * from './files'; export * from './files';
export * from './emitter'; export * from './emitter';