UNPKG

@contextjs/text

Version:

String manipulation utilities for ContextJS applications

73 lines (72 loc) 2.48 kB
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(); } }