Skip to content

Commit 3b368a3

Browse files
search endpoints in map instead array, refactoring client part (#25)
1 parent 4010528 commit 3b368a3

38 files changed

+266
-2020
lines changed

README.md

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,28 @@ const {
1515
LoggedServer,
1616
endpoint: {
1717
Endpoint,
18-
LoggedEndpoint,
1918
Endpoints
2019
},
2120
request: {
2221
InputRequest,
23-
JsonInputRequest,
2422
LoggedInputRequest,
2523
},
2624
response: {
2725
OutputResponse,
28-
JsonOutputResponse,
2926
LoggedOutputResponse
3027
}
3128
} = require('objective-http').server;
3229

3330
new LoggedServer(
3431
new Server(
3532
new Endpoints([
36-
new LoggedEndpoint(new MyFirstEndpoint(), console),
37-
new LoggedEndpoint(new MySecondEndpoint(), console),
38-
new LoggedEndpoint(new MyThirdEndpoint(), console)
33+
new MyFirstEndpoint(),
34+
new MySecondEndpoint(),
35+
new MyThirdEndpoint()
3936
]),
4037
{port: server_port},
41-
new LoggedInputRequest(new JsonInputRequest(new InputRequest()), console),
42-
new LoggedOutputResponse(new JsonOutputResponse(new OutputResponse()), console),
38+
new LoggedInputRequest(new InputRequest(), console),
39+
new LoggedOutputResponse(new OutputResponse(), console),
4340
createServerFunction
4441
),
4542
console
@@ -139,31 +136,28 @@ const {
139136
LoggedServer,
140137
endpoint: {
141138
Endpoint,
142-
LoggedEndpoint,
143139
Endpoints
144140
},
145141
request: {
146142
InputRequest,
147-
JsonInputRequest,
148143
LoggedInputRequest,
149144
},
150145
response: {
151146
OutputResponse,
152-
JsonOutputResponse,
153147
LoggedOutputResponse
154148
}
155149
} = require('objective-http').server;
156150

157151
new LoggedServer(
158152
new Server(
159153
new Endpoints([
160-
new LoggedEndpoint(new MyFirstEndpoint(), console),
161-
new LoggedEndpoint(new MySecondEndpoint(), console),
162-
new LoggedEndpoint(new MyThirdEndpoint(), console)
154+
new MyFirstEndpoint(),
155+
new MySecondEndpoint(),
156+
new MyThirdEndpoint()
163157
]),
164158
{port: server_port},
165-
new LoggedInputRequest(new JsonInputRequest(new InputRequest()), console),
166-
new LoggedOutputResponse(new JsonOutputResponse(new OutputResponse()), console),
159+
new LoggedInputRequest(new InputRequest(), console),
160+
new LoggedOutputResponse(new OutputResponse(), console),
167161
createServerFunction
168162
),
169163
console
@@ -181,15 +175,12 @@ const {
181175
LoggedServer,
182176
endpoint: {
183177
Endpoint,
184-
LoggedEndpoint,
185178
Endpoints
186179
},
187180
request: {
188-
JsonInputRequest,
189181
LoggedInputRequest,
190182
},
191183
response: {
192-
JsonOutputResponse,
193184
LoggedOutputResponse
194185
}
195186
} = require('objective-http').server;

src/js/bun/Bunttp.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@ module.exports = class Bunttp {
1212
}
1313

1414
listen(options, cb) {
15-
const config = {...this.#serverConfig, port: options.port};
16-
const server = Bun.serve(config);
15+
this.#server = Bun.serve({...this.#serverConfig, port: options.port});
1716
cb();
18-
return new Bunttp(config, server);
1917
}
2018

2119
close(cb) {
22-
const server = this.#server.stop();
20+
this.#server.stop();
2321
cb();
24-
return new Bunttp(this.#serverConfig, server);
2522
}
2623

2724
request = fetch;

src/js/bun/server/request/InputRequest.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ module.exports = class InputRequest {
1616
return new InputRequest(
1717
this.#inputStream,
1818
{
19-
method: this.#inputStream.method,
20-
path: new URL(this.#inputStream.url).pathname,
19+
route: {
20+
method: this.#inputStream.method,
21+
path: new URL(this.#inputStream.url).pathname
22+
},
2123
query: new URL(this.#inputStream.url).searchParams,
2224
headers: this.#inputStream.headers,
2325
body: Buffer.from(await (await this.#inputStream.blob()).arrayBuffer())
@@ -30,10 +32,7 @@ module.exports = class InputRequest {
3032
}
3133

3234
route() {
33-
return {
34-
method: this.#options.method.toString().toUpperCase(),
35-
path: this.#options.path.toString().toLowerCase()
36-
}
35+
return this.#options.route;
3736
}
3837

3938
query() {

src/js/bun/server/response/OutputResponse.js

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,10 @@ module.exports = class OutputResponse {
77
this.#outputStream = outputStream;
88
}
99

10-
copy(options = this.#options, outputStream = this.#outputStream) {
10+
copy(outputStream = this.#outputStream, options = this.#options) {
1111
return new OutputResponse({...{statusCode: 200, headers: {}}, ...options}, outputStream);
1212
}
1313

14-
update(options) {
15-
return new OutputResponse(this.#mergeOptions(this.#options, options), this.#outputStream);
16-
}
17-
1814
flush() {
1915
try {
2016
return new Response(this.#options.body, {
@@ -26,24 +22,4 @@ module.exports = class OutputResponse {
2622
throw new Error(e.message, {cause: 'INVALID_RESPONSE'});
2723
}
2824
}
29-
30-
#mergeOptions(existedOptions, newOptions) {
31-
if (newOptions == null) {
32-
return existedOptions;
33-
}
34-
35-
if (newOptions.statusCode != null) {
36-
existedOptions.statusCode = newOptions.statusCode;
37-
}
38-
39-
if (newOptions.body != null) {
40-
existedOptions.body = newOptions.body;
41-
}
42-
43-
if (newOptions.headers != null) {
44-
existedOptions.headers = {...existedOptions.headers, ...newOptions.headers};
45-
}
46-
47-
return existedOptions;
48-
}
4925
}

src/js/client/request/OutputRequest.js

Lines changed: 27 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -10,72 +10,44 @@ module.exports = class OutputRequest {
1010
}
1111

1212
copy(options = this.#options, response = this.#response, http = this.#requestFunction) {
13-
return new OutputRequest(response, http, {method: 'GET', ...options});
13+
return new OutputRequest(response, http, {method: 'GET', ...options});
1414
}
1515

16-
async send() {
17-
try {
18-
return await new Promise((resolve, reject) => {
19-
this.#sendRequestOutputStream(
20-
this.#configureRequestOutputStream(this.#requestFunction, this.#response, this.#options, resolve, reject),
16+
send() {
17+
return new Promise((resolve, reject) => {
18+
try {
19+
const requestOutputStream = this.#requestFunction(
20+
this.#options.url,
2121
this.#options,
22-
reject);
23-
});
24-
25-
} catch (e) {
26-
if (e.cause == null) {
27-
throw new Error(e.message, {cause: 'INVALID_REQUEST'});
28-
}
22+
async (responseInputStream) => {
23+
try {
24+
resolve(await this.#response
25+
.copy(responseInputStream)
26+
.flush());
27+
28+
} catch (e) {
29+
reject(new Error(e.message, {cause: 'INVALID_REQUEST'}));
30+
}
31+
});
32+
33+
requestOutputStream.once('error', e => {
34+
reject(new Error(e.message, {cause: 'INVALID_REQUEST'}));
35+
});
2936

30-
throw e;
31-
}
32-
}
37+
if (this.#needToByWritten(this.#options)) {
38+
requestOutputStream.write(this.#options.body);
39+
}
3340

34-
#sendRequestOutputStream(requestOutputStream, options, reject) {
35-
try {
36-
requestOutputStream.once('error', e => reject(e));
41+
requestOutputStream.end();
3742

38-
if (this.#needToByWritten(options)) {
39-
requestOutputStream.write(options.body);
43+
} catch (e) {
44+
reject(new Error(e.message, {cause: 'INVALID_REQUEST'}));
4045
}
41-
42-
requestOutputStream.end();
43-
44-
} catch (e) {
45-
reject(e);
46-
}
46+
});
4747
}
4848

4949
#needToByWritten(options) {
5050
return ['POST', 'PUT'].some(method => method === options.method.toString().toUpperCase())
5151
&& (options.body != null && typeof options.body === 'string');
5252
}
53-
54-
#configureRequestOutputStream(requestFunction, response, options, resolve, reject) {
55-
if (options.url != null) {
56-
return requestFunction(
57-
options.url,
58-
options,
59-
async (responseInputStream) => {
60-
await this.#flushResponseInputStream(responseInputStream, response, resolve, reject);
61-
});
62-
}
63-
64-
return requestFunction(
65-
options,
66-
async (responseInputStream) => {
67-
await this.#flushResponseInputStream(responseInputStream, response, resolve, reject);
68-
});
69-
}
70-
71-
async #flushResponseInputStream(responseInputStream, response, resolve, reject) {
72-
try {
73-
resolve(await response
74-
.copy(responseInputStream)
75-
.flush());
76-
77-
} catch (e) {
78-
reject(e);
79-
}
80-
}
8153
};

src/js/client/response/InputResponse.js

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,25 @@ module.exports = class InputResponse {
2424
}
2525

2626
async flush() {
27-
try {
28-
return await new Promise((resolve, reject) => {
29-
this.#flushResponseInputStream(this.#inputStream, resolve, reject);
30-
});
31-
32-
} catch (e) {
33-
throw new Error(e.message, {cause: 'INVALID_RESPONSE'});
34-
}
35-
}
36-
37-
#flushResponseInputStream(inputStream, resolve, reject) {
38-
try {
39-
inputStream.once('error', (e) => reject(e));
40-
41-
let chunks = [];
42-
inputStream.on('data', (chunk) => chunks.push(chunk));
43-
inputStream.on('end', () => resolve(
44-
new InputResponse(
45-
inputStream,
46-
{
47-
statusCode: inputStream.statusCode,
48-
headers: new Headers(inputStream.headers),
49-
body: Buffer.concat(chunks)
50-
}
51-
)
52-
));
53-
54-
} catch (e) {
55-
reject(e);
56-
}
27+
return await new Promise((resolve, reject) => {
28+
try {
29+
this.#inputStream.once('error', (e) => reject(new Error(e.message, {cause: 'INVALID_RESPONSE'})));
30+
31+
let chunks = [];
32+
this.#inputStream.on('data', (chunk) => chunks.push(chunk));
33+
this.#inputStream.on('end', () => resolve(
34+
new InputResponse(
35+
this.#inputStream,
36+
{
37+
statusCode: this.#inputStream.statusCode,
38+
headers: new Headers(this.#inputStream.headers),
39+
body: Buffer.concat(chunks)
40+
}
41+
)
42+
));
43+
} catch (e) {
44+
throw new Error(e.message, {cause: 'INVALID_RESPONSE'});
45+
}
46+
});
5747
}
5848
};

src/js/index.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
module.exports = {
22
server: require('./server'),
33
client: require('./client'),
4-
bun: {
5-
server: {...require('./server'), ...require('./bun').server},
6-
client: {...require('./client'), ...require('./bun').client},
7-
bunttp: require('./bun').bunttp
8-
}
4+
bun: require('./bun')
95
}

src/js/server/LoggedServer.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,23 @@ module.exports = class LoggedServer {
77
this.#logger = logger;
88
}
99

10+
options() {
11+
return this.#origin.options();
12+
}
13+
1014
async start() {
1115
const server = await this.#origin.start();
1216

13-
this.#logger.debug(`HttpServer is running at port: ${server.options().port}`);
17+
this.#logger.debug(`HttpServer is running at port: ${this.#origin.options().port}`);
1418

1519
return new LoggedServer(server, this.#logger);
1620
}
1721

1822
async stop() {
1923
const server = await this.#origin.stop();
2024

21-
this.#logger.debug(`HttpServer at port: ${server.options().port} is stopped`);
25+
this.#logger.debug(`HttpServer at port: ${this.#origin.options().port} is stopped`);
2226

2327
return new LoggedServer(server, this.#logger);
2428
}
25-
26-
27-
options() {
28-
return this.#origin.options();
29-
}
3029
}

0 commit comments

Comments
 (0)