Skip to content

Commit 57991e1

Browse files
authored
lib: make headerByGetter a Map (#171)
This commit turns the headerByGetter Object into a Map to reduces some code duplication an hopefully improve readability a little. Signed-off-by: Daniel Bevenius <[email protected]>
1 parent 2c469ef commit 57991e1

File tree

4 files changed

+66
-111
lines changed

4 files changed

+66
-111
lines changed

lib/bindings/http/emitter_binary.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ class BinaryHTTPEmitter {
3434
*/
3535
constructor(version) {
3636
if (version === SPEC_V1) {
37-
this.headerByGetter = EmitterV1;
37+
this.headerParserMap = EmitterV1;
3838
this.extensionPrefix = BINARY_HEADERS_1.EXTENSIONS_PREFIX;
3939
} else if (version === SPEC_V03) {
40-
this.headerByGetter = EmitterV3;
40+
this.headerParserMap = EmitterV3;
4141
this.extensionPrefix = BINARY_HEADERS_03.EXTENSIONS_PREFIX;
4242
}
4343
}
@@ -56,12 +56,12 @@ class BinaryHTTPEmitter {
5656
const config = { ...options, ...defaults };
5757
const headers = config[HEADERS];
5858

59-
Object.keys(this.headerByGetter)
60-
.filter((getter) => cloudevent[getter]())
61-
.forEach((getter) => {
62-
const header = this.headerByGetter[getter];
63-
headers[header.name] = header.parser(cloudevent[getter]());
64-
});
59+
this.headerParserMap.forEach((parser, getterName) => {
60+
const value = cloudevent[getterName]();
61+
if (value) {
62+
headers[parser.headerName] = parser.parse(value);
63+
}
64+
});
6565

6666
// Set the cloudevent payload
6767
const formatted = cloudevent.format();

lib/bindings/http/http_emitter.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ class HTTPEmitter {
7777
headers(event) {
7878
const headers = {};
7979

80-
Object.keys(this.binary.headerByGetter)
81-
.filter((getter) => event[getter]())
82-
.forEach((getter) => {
83-
const header = this.binary.headerByGetter[getter];
84-
headers[header.name] = header.parser(event[getter]());
85-
});
80+
this.binary.headerParserMap.forEach((parser, getterName) => {
81+
const value = event[getterName]();
82+
if (value) {
83+
headers[parser.headerName] = parser.parse(value);
84+
}
85+
});
8686

8787
return headers;
8888
}
Lines changed: 27 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,35 @@
11
const {
22
HEADER_CONTENT_TYPE,
3-
BINARY_HEADERS_03
3+
BINARY_HEADERS_03 : {
4+
CONTENT_ENCODING,
5+
SUBJECT,
6+
TYPE,
7+
SPEC_VERSION,
8+
SOURCE,
9+
ID,
10+
TIME,
11+
SCHEMA_URL
12+
}
413
} = require("../constants.js");
514

6-
const passThroughParser = (v) => v;
15+
function parser(header, parser = (v) => v) {
16+
return { headerName: header, parse: parser };
17+
}
18+
const passThroughParser = parser;
719

820
/**
9-
* A utility object used to retrieve the header names for a CloudEvent
21+
* A utility Map used to retrieve the header names for a CloudEvent
1022
* using the CloudEvent getter function.
1123
*/
12-
const headerByGetter = {
13-
getDataContentType: {
14-
name: HEADER_CONTENT_TYPE,
15-
parser: passThroughParser
16-
},
17-
18-
getDataContentEncoding: {
19-
name: BINARY_HEADERS_03.CONTENT_ENCODING,
20-
parser: passThroughParser
21-
},
22-
23-
getSubject: {
24-
name: BINARY_HEADERS_03.SUBJECT,
25-
parser: passThroughParser
26-
},
27-
28-
getType: {
29-
name: BINARY_HEADERS_03.TYPE,
30-
parser: passThroughParser
31-
},
32-
33-
getSpecversion: {
34-
name: BINARY_HEADERS_03.SPEC_VERSION,
35-
parser: passThroughParser
36-
},
37-
38-
getSource: {
39-
name: BINARY_HEADERS_03.SOURCE,
40-
parser: passThroughParser
41-
},
42-
43-
getId: {
44-
name: BINARY_HEADERS_03.ID,
45-
parser: passThroughParser
46-
},
47-
48-
getTime: {
49-
name: BINARY_HEADERS_03.TIME,
50-
parser: passThroughParser
51-
},
52-
53-
getSchemaurl: {
54-
name: BINARY_HEADERS_03.SCHEMA_URL,
55-
parser: passThroughParser
56-
}
57-
};
58-
59-
module.exports = headerByGetter;
24+
const headerMap = new Map();
25+
headerMap.set('getDataContentType', passThroughParser(HEADER_CONTENT_TYPE));
26+
headerMap.set('getDataContentEncoding', passThroughParser(CONTENT_ENCODING));
27+
headerMap.set('getSubject', passThroughParser(SUBJECT));
28+
headerMap.set('getType', passThroughParser(TYPE));
29+
headerMap.set('getSpecversion', passThroughParser(SPEC_VERSION));
30+
headerMap.set('getSource', passThroughParser(SOURCE));
31+
headerMap.set('getId', passThroughParser(ID));
32+
headerMap.set('getTime', passThroughParser(TIME));
33+
headerMap.set('getSchemaurl', passThroughParser(SCHEMA_URL));
34+
35+
module.exports = headerMap;
Lines changed: 25 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,33 @@
11
const {
22
HEADER_CONTENT_TYPE,
3-
BINARY_HEADERS_1
3+
BINARY_HEADERS_1 : {
4+
SUBJECT,
5+
TYPE,
6+
SPEC_VERSION,
7+
SOURCE,
8+
ID,
9+
TIME,
10+
DATA_SCHEMA
11+
}
412
} = require("../constants.js");
513

6-
const passThroughParser = (v) => v;
14+
function parser(header, parser = v => v) {
15+
return { headerName: header, parse: parser };
16+
}
17+
const passThroughParser = parser;
718

819
/**
9-
* A utility object used to retrieve the header names for a CloudEvent
20+
* A utility Map used to retrieve the header names for a CloudEvent
1021
* using the CloudEvent getter function.
1122
*/
12-
const headerByGetter = {
13-
getDataContentType: {
14-
name: HEADER_CONTENT_TYPE,
15-
parser: passThroughParser
16-
},
17-
18-
getSubject: {
19-
name: BINARY_HEADERS_1.SUBJECT,
20-
parser: passThroughParser
21-
},
22-
23-
getType: {
24-
name: BINARY_HEADERS_1.TYPE,
25-
parser: passThroughParser
26-
},
27-
28-
getSpecversion: {
29-
name: BINARY_HEADERS_1.SPEC_VERSION,
30-
parser: passThroughParser
31-
},
32-
33-
getSource: {
34-
name: BINARY_HEADERS_1.SOURCE,
35-
parser: passThroughParser
36-
},
37-
38-
getId: {
39-
name: BINARY_HEADERS_1.ID,
40-
parser: passThroughParser
41-
},
42-
43-
getTime: {
44-
name: BINARY_HEADERS_1.TIME,
45-
parser: passThroughParser
46-
},
47-
48-
getDataschema: {
49-
name: BINARY_HEADERS_1.DATA_SCHEMA,
50-
parser: passThroughParser
51-
}
52-
};
53-
54-
module.exports = headerByGetter;
23+
const headerMap = new Map();
24+
headerMap.set('getDataContentType', passThroughParser(HEADER_CONTENT_TYPE));
25+
headerMap.set('getSubject', passThroughParser(SUBJECT));
26+
headerMap.set('getType', passThroughParser(TYPE));
27+
headerMap.set('getSpecversion', passThroughParser(SPEC_VERSION));
28+
headerMap.set('getSource', passThroughParser(SOURCE));
29+
headerMap.set('getId', passThroughParser(ID));
30+
headerMap.set('getTime', passThroughParser(TIME));
31+
headerMap.set('getDataschema', passThroughParser(DATA_SCHEMA));
32+
33+
module.exports = headerMap;

0 commit comments

Comments
 (0)