// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.// Based on https://github.com/golang/go/blob/0452f9460f50f0f0aba18df43dc2b31906fb66cc/src/io/io.go// Copyright 2009 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file. import{Buffer}from"./buffer.ts"; /** Reader utility for strings */exportclassStringReaderextendsBuffer{constructor(s:string){super(newTextEncoder().encode(s).buffer);}} /** Reader utility for combining multiple readers */exportclassMultiReaderimplementsDeno.Reader{privatereadonly readers:Deno.Reader[];private currentIndex =0; constructor(...readers:Deno.Reader[]){this.readers= readers;} asyncread(p:Uint8Array):Promise<number|null>{const r =this.readers[this.currentIndex];if(!r)returnnull;const result =await r.read(p);if(result ===null){this.currentIndex++;return0;}return result;}} /** * A `LimitedReader` reads from `reader` but limits the amount of data returned to just `limit` bytes. * Each call to `read` updates `limit` to reflect the new amount remaining. * `read` returns `null` when `limit` <= `0` or * when the underlying `reader` returns `null`. */exportclassLimitedReaderimplementsDeno.Reader{constructor(public reader:Deno.Reader,public limit:number){} asyncread(p:Uint8Array):Promise<number|null>{if(this.limit<=0){returnnull;} if(p.length>this.limit){ p = p.subarray(0,this.limit);}const n =awaitthis.reader.read(p);if(n ==null){returnnull;} this.limit-= n;return n;}}