(count = this.#client.#readable)
| 30 | this.#client = client; |
| 31 | } |
| 32 | read(count = this.#client.#readable) { |
| 33 | const client = this.#client; |
| 34 | if (client.#current.request !== this) |
| 35 | throw new Error("bad state"); |
| 36 | |
| 37 | if ("receiveBody" !== client.#state) |
| 38 | return undefined; |
| 39 | |
| 40 | let buffer; |
| 41 | if ("object" === typeof count) { |
| 42 | buffer = count; |
| 43 | count = buffer.byteLength; |
| 44 | |
| 45 | if (buffer.BYTES_PER_ELEMENT > 1) // allows ArrayBuffer, SharedArrayBuffer, Uint8Array, Int8Array, DataView. disallows multi-byte element arrays. |
| 46 | throw new Error("invalid buffer"); |
| 47 | } |
| 48 | const available = Math.min(client.#readable, client.#chunk ?? ((Infinity === client.#remaining) ? client.#readable : client.#remaining)); |
| 49 | if (count > available) { |
| 50 | count = available; |
| 51 | if (buffer) { |
| 52 | if (ArrayBuffer.isView(buffer)) |
| 53 | buffer = new Uint8Array(buffer.buffer, buffer.byteOffset, count); |
| 54 | else |
| 55 | buffer = new Uint8Array(buffer, 0, count); |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | client.#readable -= count; |
| 60 | if (undefined === client.#chunk) |
| 61 | client.#remaining -= count; |
| 62 | else |
| 63 | client.#chunk -= count; |
| 64 | |
| 65 | const result = client.#socket.read(buffer ?? count); |
| 66 | |
| 67 | if (0 === client.#chunk) { |
| 68 | client.#line = ""; |
| 69 | if (client.#readable) { |
| 70 | client.#timer = Timer.set(() => { |
| 71 | client.#timer = undefined; |
| 72 | client.#onReadable(client.#readable); |
| 73 | }); |
| 74 | } |
| 75 | } |
| 76 | else if (0 === client.#remaining) { |
| 77 | client.#state = "receivedBody"; |
| 78 | client.#timer = Timer.set(() => client.#done()); |
| 79 | } |
| 80 | |
| 81 | return result; |
| 82 | } |
| 83 | write(data) { |
| 84 | const client = this.#client; |
| 85 | if (client.#current.request !== this) |
nothing calls this directly
no test coverage detected