154 lines
3.3 KiB
TypeScript
Raw Normal View History

export class Chunk {
/**
*
*/
value: string = "";
/**
*
*/
private newline: boolean = false;
/**
*
*/
style: string[] = [];
constructor(v: string, newline: boolean = false) {
this.value = v
this.newline = newline
}
color(c: string) {
this.style.push(`color:${c}`);
return this;
}
background(c: string) {
this.style.push(`background:${c}`);
return this;
}
padding(c: string) {
this.style.push(`padding:${c}`);
return this;
}
fontwight(c: string) {
this.style.push(`font-weight:${c}`);
return this;
}
bold() {
return this.fontwight("bold");
}
margin(c: string) {
this.style.push(`margin:${c}`);
return this;
}
marginLeft(c: string) {
this.style.push(`margin-left:${c}`);
return this;
}
marginRight(c: string) {
this.style.push(`margin-right:${c}`);
return this;
}
toValue() {
return `%c${this.value}${this.newline ? '\n' : ''}`
}
toStyle() {
return this.style.join(';')
}
}
2024-12-15 19:59:51 +08:00
export class Terminal {
2024-12-24 21:09:13 +08:00
/**
*
*/
2024-12-15 19:59:51 +08:00
tag = 'terminal';
2024-12-24 21:23:04 +08:00
/**
*
*/
subTag = "";
2024-12-24 21:09:13 +08:00
/**
*
*/
tagColor = 'blue';
2024-12-24 21:09:13 +08:00
/**
*
*/
tagBackground = 'yellow';
/**
*
*/
txtColor = 'black';
private chunks: Chunk[] = [];
constructor(tag: string) {
2024-12-15 19:59:51 +08:00
this.tag = tag;
}
2024-12-24 17:31:26 +08:00
init(): string[] {
2024-12-24 21:23:04 +08:00
this.txtColor = 'black';
this.subTag = "init";
return this.log();
}
public log(message: string = "", newline: boolean = false): string[] {
const txt = new Chunk(message).color(this.txtColor).background('#e6e6e6').marginLeft("5px")
return this.doChunk(newline, [txt]);
}
public chunk(chunk: Chunk[]) {
this.subTag = "message";
return this.doChunk(false, chunk)
}
private doChunk(newline: boolean = false, chunks: Chunk[]) {
this.chunks = [];
const tag = new Chunk(this.tag).color(this.tagColor).background(this.tagBackground).padding("0 4px")
this.chunks.push(tag);
const subTag = new Chunk(this.subTag, newline).color(this.tagBackground).background(this.tagColor).padding("0 3px")
this.chunks.push(subTag);
chunks.forEach((c) => {
this.chunks.push(c);
})
let head = '*';
for (let i = 0; i < this.chunks.length; i++) {
const chunk = this.chunks[i];
head += chunk.toValue();
}
const ret = [head];
this.chunks.forEach((chunk) => {
ret.push(chunk.toStyle());
})
this.reset();
return ret;
}
private reset() {
this.subTag = "";
2024-12-15 19:59:51 +08:00
}
2024-12-24 17:31:26 +08:00
public blue(message: string): string[] {
2024-12-24 21:09:13 +08:00
this.txtColor = 'blue';
2024-12-24 21:23:04 +08:00
this.subTag = "";
2024-12-24 17:31:26 +08:00
return this.log(message);
}
public green(message: string): string[] {
2024-12-24 21:09:13 +08:00
this.txtColor = 'green';
2024-12-24 21:23:04 +08:00
this.subTag = "";
2024-12-24 17:31:26 +08:00
return this.log(message);
}
public red(message: string): string[] {
2024-12-24 21:09:13 +08:00
this.txtColor = 'red';
2024-12-24 21:23:04 +08:00
this.subTag = "";
2024-12-24 17:31:26 +08:00
return this.log(message);
}
2024-12-24 21:09:13 +08:00
message(msg: string): string[] {
this.txtColor = 'black';
2024-12-24 21:23:04 +08:00
this.subTag = 'message';
return this.log(`${msg}`);
2024-12-24 21:09:13 +08:00
}
2024-12-24 17:31:26 +08:00
connect(msg: string): string[] {
2024-12-24 21:09:13 +08:00
this.txtColor = 'black';
2024-12-24 21:23:04 +08:00
this.subTag = 'connect';
return this.log(`${msg}`);
2024-12-24 17:31:26 +08:00
}
disconnect(msg: string): string[] {
2024-12-24 21:09:13 +08:00
this.txtColor = 'black';
2024-12-24 21:23:04 +08:00
this.subTag = 'disconnect';
return this.log(`${msg}`);
2024-12-15 19:59:51 +08:00
}
}