Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
3bda688b1e | |||
446b1aa9db |
@ -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",
|
||||||
|
@ -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
12
src/color.ts
Normal 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';
|
||||||
|
}
|
@ -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';
|
||||||
|
Reference in New Issue
Block a user