@contextjs/text
Version:
String manipulation utilities for ContextJS applications
73 lines (72 loc) • 2.48 kB
JavaScript
import { ArgumentOutOfRangeException, StringExtensions, Throw } from "@contextjs/system";
export class StringBuilder {
_segments = [];
_length = 0;
append(value) {
this._segments.push(value);
this._length += value.length;
return this;
}
appendLine(text = StringExtensions.empty) {
this._segments.push(text, StringExtensions.newLine);
this._length += text.length + StringExtensions.newLine.length;
return this;
}
appendFormat(format, ...args) {
Throw.ifNullOrWhiteSpace(format);
const formatted = StringExtensions.format(format, ...args);
this._segments.push(formatted);
this._length += formatted.length;
return this;
}
insert(index, value) {
if (index < 0 || index > this._segments.length)
throw new ArgumentOutOfRangeException(`Index out of range: ${index}. Valid range: 0 to ${this._segments.length - 1}`);
this._segments.splice(index, 0, value);
this._length += value.length;
return this;
}
removeSegment(index, count = 1) {
if (index < 0 || index >= this._segments.length)
throw new ArgumentOutOfRangeException(`Index out of range: ${index}. Valid range: 0 to ${this._segments.length - 1}`);
const removed = this._segments.splice(index, count);
removed.forEach(seg => this._length -= seg.length);
return this;
}
replaceSegment(index, value) {
if (index < 0 || index >= this._segments.length)
throw new ArgumentOutOfRangeException(`Index out of range: ${index}. Valid range: 0 to ${this._segments.length - 1}`);
const old = this._segments[index];
this._segments[index] = value;
this._length += value.length - old.length;
return this;
}
clear() {
this._segments.length = 0;
this._length = 0;
}
toString() {
return this._segments.join(StringExtensions.empty);
}
toArray() {
return [...this._segments];
}
clone() {
const builder = new StringBuilder();
builder._segments = [...this._segments];
builder._length = this._length;
return builder;
}
get length() {
return this._length;
}
get segmentCount() {
return this._segments.length;
}
get isEmpty() {
return this._length === 0;
}
[Symbol.toPrimitive](_hint) {
return this.toString();
}
}