dailyprogrammer
Version:
The /r/dailyprogrammer Tool provides you with a cli to quickly initialize programming challenges and publish them.
37 lines (31 loc) • 1.3 kB
text/typescript
import {IConsoleFormatter} from "./IConsoleFormatter";
import {EOL} from "os";
export class TextConsoleFormatter implements IConsoleFormatter {
format(object: any, oneLine: boolean = false, pick?: string[]): string {
let result = "";
if (typeof object === "string") {
result += object;
} else if (["number", "boolean", "function"].indexOf(typeof object) !== -1) {
result += object.toString();
} else if (Array.isArray(object) && object.length > 0) {
if (oneLine && pick && pick.length > 0) {
result += pick.join("\t") + EOL;
}
result += object.map(o => this.format(o, oneLine, pick)).join(EOL) + EOL;
} else {
let lf = !oneLine ? EOL : "\t";
let keys = pick ? pick : Object.keys( object );
for ( let key of keys ) {
if (!object.hasOwnProperty(key)) {
continue;
}
// if pick array is provided and key is not in it skip
if (pick && pick.length > 0 && pick.indexOf(key) === -1) {
continue;
}
result += `${!oneLine ? key + ":\t" : ""}${object[key]}${lf}`;
}
}
return result;
}
}