Skip to content

Commit 0b6ae27

Browse files
committed
fix: cleanup
1 parent 255f3bc commit 0b6ae27

File tree

6 files changed

+15
-190
lines changed

6 files changed

+15
-190
lines changed

response.txt

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/http/response/parse.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export function parse(response : string) : Response {
1313
if (headers.get('transfer-encoding') === 'chunked') {
1414
body = parseChunkedBody(body);
1515
} else {
16-
body = body.replace(/\r\n\r\n$/gm, '');
16+
body = body.replace(/\r\n$/gm, '');
1717
}
1818

1919
return new Response(

src/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ import { Socket } from './socket.ts';
44
const socket = new Socket('/var/run/docker.sock');
55

66

7-
socket.request("/containers/json")
7+
await socket.request("/containers/json")
88
.then(res => res.json())
99
.then(json => console.log(json));
10+
11+
await socket.request("/containers/json")
12+
.then(res => res.json())
13+
.then(json => console.log(json));
14+
15+
await socket.request("/containers/0954fa1ee0b11120eeabb22c2b4bc924221840a8d8d8a408ac8881616019161a/logs?stdout=true")
16+
.then(res => res.text())
17+
.then(json => console.log(json));

src/parse_http_response.ts

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/parsed_response.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/socket.ts

Lines changed: 5 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { method } from './method.ts';
22
import { SocketRequestInit } from './socket_request_init.ts';
33
import { SocketOptions } from './socket_options.ts';
4-
import { parseHttpResponse } from './parse_http_response.ts';
5-
import * as error from './error/index.ts'
4+
import { parse } from './http/response/parse.ts';
65

76
const textEncoder = new TextEncoder();
87
const textDecoder = new TextDecoder();
@@ -61,62 +60,6 @@ export class Socket {
6160
return connection.write(textEncoder.encode(requestPayload));
6261
}
6362

64-
private decodeChunkedBody(
65-
bodyStart : string,
66-
reader : ReadableStreamDefaultReader<Uint8Array>
67-
) : ReadableStream<Uint8Array> {
68-
let buffer = bodyStart;
69-
70-
return new ReadableStream<Uint8Array>({
71-
async pull(controller) : Promise<void> {
72-
while (true) {
73-
const chunkSizeEnd = buffer.indexOf("\r\n");
74-
75-
if (chunkSizeEnd === -1) {
76-
const { value, done } = await reader.read();
77-
if (done) {
78-
controller.close();
79-
return;
80-
}
81-
buffer += textDecoder.decode(value);
82-
continue;
83-
}
84-
85-
const chunkSizeHex = buffer.slice(0, chunkSizeEnd).trim();
86-
const chunkSize = parseInt(chunkSizeHex, 16);
87-
88-
if (chunkSize === 0) {
89-
controller.close();
90-
return;
91-
}
92-
93-
buffer = buffer.slice(chunkSizeEnd + 2);
94-
95-
while (buffer.length < chunkSize + 2) {
96-
const { value, done } = await reader.read();
97-
if (done) {
98-
controller.close();
99-
return;
100-
}
101-
buffer += textDecoder.decode(value);
102-
}
103-
104-
const chunkData = buffer.slice(0, chunkSize);
105-
buffer = buffer.slice(chunkSize + 2);
106-
107-
controller.enqueue(textEncoder.encode(chunkData));
108-
109-
if (buffer.length === 0) {
110-
return;
111-
}
112-
}
113-
},
114-
cancel() : void {
115-
reader.releaseLock();
116-
}
117-
});
118-
}
119-
12063
public async request(
12164
path : string,
12265
init : SocketRequestInit = {
@@ -127,63 +70,11 @@ export class Socket {
12770
const connection = await this.connection;
12871
await this.write(path, init);
12972

130-
const reader = connection.readable.getReader();
131-
let buffer = '';
132-
133-
const firstChunk = await reader.read();
134-
if (firstChunk.done) {
135-
throw new error.ConnectionClosedError();
136-
}
137-
138-
buffer = textDecoder.decode(firstChunk.value);
139-
140-
while (buffer.indexOf("\r\n\r\n") === -1) {
141-
const chunk = await reader.read();
142-
if (chunk.done) {
143-
break
144-
};
145-
buffer += textDecoder.decode(
146-
chunk.value,
147-
{stream: true}
148-
);
149-
}
150-
151-
const parsedResponse = parseHttpResponse(buffer);
152-
153-
const isChunked = parsedResponse.headers['transfer-encoding'] === 'chunked';
154-
155-
let bodyStream : ReadableStream<Uint8Array>;
156-
157-
if (isChunked) {
158-
bodyStream = this.decodeChunkedBody(parsedResponse.bodyStart, reader);
159-
} else {
160-
bodyStream = new ReadableStream<Uint8Array>({
161-
start(controller) : void {
162-
if (parsedResponse.bodyStart) {
163-
controller.enqueue(textEncoder.encode(parsedResponse!.bodyStart));
164-
}
165-
},
166-
async pull(controller) : Promise<void> {
167-
const { value, done } = await reader.read();
168-
if (done) {
169-
controller.close();
170-
return;
171-
}
172-
controller.enqueue(value);
173-
},
174-
cancel() : void {
175-
reader.releaseLock();
176-
}
177-
});
73+
let buffer = new Uint8Array()
74+
for await (const chunk of connection.readable) {
75+
buffer = new Uint8Array([...buffer, ...chunk])
17876
}
17977

180-
return new Response(
181-
bodyStream,
182-
{
183-
status: parsedResponse.statusCode,
184-
statusText: parsedResponse.statusText,
185-
headers: new Headers(parsedResponse.headers)
186-
}
187-
);
78+
return parse(textDecoder.decode(buffer));
18879
}
18980
}

0 commit comments

Comments
 (0)