1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-29 10:39:10 -05:00
denoland-deno/io/writers.ts
2019-02-10 18:49:48 -05:00

38 lines
965 B
TypeScript

// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
import { Writer } from "deno";
import { decode, encode } from "../strings/strings.ts";
/** Writer utility for buffering string chunks */
export class StringWriter implements Writer {
private chunks: Uint8Array[] = [];
private byteLength: number = 0;
constructor(private base: string = "") {
const c = encode(base);
this.chunks.push(c);
this.byteLength += c.byteLength;
}
async write(p: Uint8Array): Promise<number> {
this.chunks.push(p);
this.byteLength += p.byteLength;
this.cache = null;
return p.byteLength;
}
private cache: string;
toString(): string {
if (this.cache) {
return this.cache;
}
const buf = new Uint8Array(this.byteLength);
let offs = 0;
for (const chunk of this.chunks) {
buf.set(chunk, offs);
offs += chunk.byteLength;
}
this.cache = decode(buf);
return this.cache;
}
}