MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / read

Method read

examples/io/tcp/httpclient/httpclient.js:32–82  ·  view source on GitHub ↗
(count = this.#client.#readable)

Source from the content-addressed store, hash-verified

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)

Callers

nothing calls this directly

Calls 4

readMethod · 0.65
setMethod · 0.65
#onReadableMethod · 0.45
#doneMethod · 0.45

Tested by

no test coverage detected