@@ -22,6 +22,10 @@ setter_reflections[Constants.BINARY_HEADERS_02.TYPE] = {
22
22
name : "type" ,
23
23
parser : ( v ) => v
24
24
} ;
25
+ setter_reflections [ Constants . BINARY_HEADERS_02 . SPEC_VERSION ] = {
26
+ name : "specversion" ,
27
+ parser : ( v ) => "0.2"
28
+ } ;
25
29
setter_reflections [ Constants . BINARY_HEADERS_02 . SOURCE ] = {
26
30
name : "source" ,
27
31
parser : ( v ) => v
@@ -102,6 +106,7 @@ Receiver.prototype.parse = function(payload, headers) {
102
106
// Clone and low case all headers names
103
107
var sanity_headers = Commons . sanity_and_clone ( headers ) ;
104
108
109
+ var processed_headers = [ ] ;
105
110
var cloudevent = new Cloudevent ( Spec02 ) ;
106
111
for ( header in setter_reflections ) {
107
112
// dont worry, check() have seen what was required or not
@@ -111,16 +116,31 @@ Receiver.prototype.parse = function(payload, headers) {
111
116
112
117
// invoke the setter function
113
118
cloudevent [ setter_name ] ( parser_fn ( sanity_headers [ header ] ) ) ;
119
+
120
+ // to use ahead, for extensions processing
121
+ processed_headers . push ( header ) ;
114
122
}
115
123
}
116
124
117
125
// Parses the payload
118
- var parsedPayload =
126
+ var parsed_payload =
119
127
parser_by_type [ sanity_headers [ Constants . HEADER_CONTENT_TYPE ] ]
120
128
. parse ( payload ) ;
121
129
130
+ // Every unprocessed header should be an extension
131
+ Array . from ( Object . keys ( sanity_headers ) )
132
+ . filter ( value => ! processed_headers . includes ( value ) )
133
+ . filter ( value =>
134
+ value . startsWith ( Constants . BINARY_HEADERS_02 . EXTENSIONS_PREFIX ) )
135
+ . map ( extension =>
136
+ extension . substring ( Constants . BINARY_HEADERS_02 . EXTENSIONS_PREFIX . length )
137
+ ) . forEach ( extension =>
138
+ cloudevent . addExtension ( extension ,
139
+ sanity_headers [ Constants . BINARY_HEADERS_02 . EXTENSIONS_PREFIX + extension ] )
140
+ ) ;
141
+
122
142
// Sets the data
123
- cloudevent . data ( parsedPayload ) ;
143
+ cloudevent . data ( parsed_payload ) ;
124
144
125
145
// Checks the event spec
126
146
cloudevent . format ( ) ;
0 commit comments