UNPKG

blackbird-server

Version:
876 lines (875 loc) 26.5 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for modules/Message.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../index.html">all files</a> / <a href="index.html">modules/</a> Message.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">89.89% </span> <span class="quiet">Statements</span> <span class='fraction'>80/89</span> </div> <div class='fl pad1y space-right2'> <span class="strong">69.57% </span> <span class="quiet">Branches</span> <span class='fraction'>32/46</span> </div> <div class='fl pad1y space-right2'> <span class="strong">91.67% </span> <span class="quiet">Functions</span> <span class='fraction'>22/24</span> </div> <div class='fl pad1y space-right2'> <span class="strong">89.89% </span> <span class="quiet">Lines</span> <span class='fraction'>80/89</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271</td><td class="line-coverage quiet"><span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes">373×</span> <span class="cline-any cline-yes">373×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">553×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">388×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">388×</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">388×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">74×</span> <span class="cline-any cline-yes">74×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">95×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">95×</span> <span class="cline-any cline-yes">95×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">93×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">143×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">108×</span> <span class="cline-any cline-yes">108×</span> <span class="cline-any cline-yes">67×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">41×</span> <span class="cline-any cline-yes">41×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">156×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">445×</span> <span class="cline-any cline-yes">309×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">445×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">392×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">445×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">153×</span> <span class="cline-any cline-yes">153×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">153×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">96×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">96×</span> <span class="cline-any cline-yes">93×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes"></span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const bodec = require("bodec"); const d = require("describe-property"); const Stream = require("bufferedstream"); const bufferStream = require("./utils/bufferStream"); const normalizeHeaderName = require("./utils/normalizeHeaderName"); const parseCookie = require("./utils/parseCookie"); const parseQuery = require("./utils/parseQuery"); const R = require("ramda"); &nbsp; /** * The default content to use for new messages. */ const DEFAULT_CONTENT = bodec.fromString(""); &nbsp; /** * The default maximum length (in bytes) to use in Message#parseContent. */ const DEFAULT_MAX_CONTENT_LENGTH = Math.pow(2, 20); // 1M &nbsp; const HEADERS_LINE_SEPARATOR = /\r?\n/; const HEADER_SEPARATOR = ": "; &nbsp; function defaultParser(message, maxLength) { return message.stringifyContent(maxLength); } &nbsp; /** * An HTTP message. */ function Message(content, headers) { this.headers = headers; this.content = content; } &nbsp; Object.defineProperties(Message, { &nbsp; PARSERS: d({ enumerable: true, value: { "application/json"(message, maxLength) { return message.stringifyContent(maxLength).then(JSON.parse); }, "application/x-www-form-urlencoded"(message, maxLength) { return message.stringifyContent(maxLength).then(parseQuery); } } }) &nbsp; }); &nbsp; Object.defineProperties(Message.prototype, { &nbsp; /** * The headers of this message as { headerName, value }. */ headers: d.gs(function () { return this._headers; }, function (value) { this._headers = {}; &nbsp; <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof value === "string") { <span class="cstat-no" title="statement not covered" > value.split(HEADERS_LINE_SEPARATOR).forEach(<span class="fstat-no" title="function not covered" >function (line) {</span></span> <span class="cstat-no" title="statement not covered" > const index = line.indexOf(HEADER_SEPARATOR);</span> &nbsp; <span class="cstat-no" title="statement not covered" > if (index === -1) {</span> <span class="cstat-no" title="statement not covered" > this.addHeader(line, true);</span> } else { <span class="cstat-no" title="statement not covered" > this.addHeader(line.substring(0, index), line.substring(index + HEADER_SEPARATOR.length));</span> } }, this); } else if (!R.isNil(value)) { for (const headerName in value) { <span class="missing-if-branch" title="else path not taken" >E</span>if (value.hasOwnProperty(headerName)) { this.addHeader(headerName, value[headerName]); } } } }), &nbsp; /** * Returns the value of the header with the given name. */ getHeader: d(<span class="fstat-no" title="function not covered" >function (headerName) {</span> <span class="cstat-no" title="statement not covered" > return this.headers[normalizeHeaderName(headerName)];</span> }), &nbsp; /** * Sets the value of the header with the given name. */ setHeader: d(function (headerName, value) { this.headers[normalizeHeaderName(headerName)] = value; }), &nbsp; /** * Adds the value to the header with the given name. */ addHeader: d(function (headerName, value) { headerName = normalizeHeaderName(headerName); &nbsp; const headers = this.headers; if (headerName in headers) { <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(headers[headerName])) { <span class="cstat-no" title="statement not covered" > headers[headerName].push(value);</span> } else { headers[headerName] = [headers[headerName], value]; } } else { headers[headerName] = value; } }), &nbsp; /** * An object containing cookies in this message, keyed by name. */ cookies: d.gs(function () { <span class="missing-if-branch" title="else path not taken" >E</span>if (!this._cookies) { const header = this.headers.Cookie; &nbsp; if (header) { const cookies = parseCookie(header); &nbsp; // From RFC 2109: // If multiple cookies satisfy the criteria above, they are ordered in // the Cookie header such that those with more specific Path attributes // precede those with less specific. Ordering with respect to other // attributes (e.g., Domain) is unspecified. for (const cookieName in cookies) { <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(cookies[cookieName])) { <span class="cstat-no" title="statement not covered" > cookies[cookieName] = cookies[cookieName][0] || "";</span> } } &nbsp; this._cookies = cookies; } else { this._cookies = {}; } } &nbsp; return this._cookies; }), &nbsp; /** * Gets/sets the value of the Content-Type header. */ contentType: d.gs(function () { return this.headers["Content-Type"]; }, function (value) { this.headers["Content-Type"] = value; }), &nbsp; /** * The media type (type/subtype) portion of the Content-Type header without any * media type parameters. e.g. when Content-Type is "text/plain;charset=utf-8", * the mediaType is "text/plain". * * See http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7 */ mediaType: d.gs(function () { const contentType = this.contentType; if (!contentType) { return null; } const match = contentType.match(/^([^;,]+)/); return match ? match[1].toLowerCase() : <span class="branch-1 cbranch-no" title="branch not covered" >null;</span> }, function (value) { this.contentType = value + (this.charset ? `;charset=${this.charset}` : <span class="branch-1 cbranch-no" title="branch not covered" >"")</span>; }), &nbsp; /** * Returns the character set used to encode the content of this message. e.g. * when Content-Type is "text/plain;charset=utf-8", charset is "utf-8". * * See http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.4 */ charset: d.gs(function () { const contentType = this.contentType; if (!contentType) { return null; } const match = contentType.match(/\bcharset=([\w-]+)/); return match ? match[1] : null; }, function (value) { this.contentType = this.mediaType + (value ? `;charset=${value}` : <span class="branch-1 cbranch-no" title="branch not covered" >"")</span>; }), &nbsp; /** * The content of this message as a binary stream. */ content: d.gs(function () { return this._content; }, function (value) { if (R.isNil(value)) { value = DEFAULT_CONTENT; } &nbsp; if (value instanceof Stream) { this._content = value; value.pause(); } else { this._content = new Stream(value); } &nbsp; Reflect.deleteProperty(this, "_bufferedContent"); }), &nbsp; /** * True if the content of this message is buffered, false otherwise. */ isBuffered: d.gs(function () { return !R.isNil(this._bufferedContent); }), &nbsp; /** * Returns a binary representation of the content of this message up to * the given length. This is useful in applications that need to access the * entire message body at once, instead of as a stream. * * Note: 0 is a valid value for maxLength. It means "no limit". */ bufferContent: d(function (maxLength) { <span class="missing-if-branch" title="else path not taken" >E</span>if (R.isNil(this._bufferedContent)) { this._bufferedContent = bufferStream(this.content, maxLength); } &nbsp; return this._bufferedContent; }), &nbsp; /** * Returns the content of this message up to the given length as a string * with the given encoding. * * Note: 0 is a valid value for maxLength. It means "no limit". */ stringifyContent: d(function (maxLength, encoding) { encoding = encoding || this.charset; &nbsp; return this.bufferContent(maxLength).then(function (chunk) { return bodec.toString(chunk, encoding); }); }), &nbsp; /** * Returns a promise for an object of data contained in the content body. * * The maxLength argument specifies the maximum length (in bytes) that the * parser will accept. If the content stream exceeds the maximum length, the * promise is rejected with a MaxLengthExceededError. The appropriate response * to send to the client in this case is 413 Request Entity Too Large, but * many HTTP clients including most web browsers may not understand it. * * Note: 0 is a valid value for maxLength. It means "no limit". */ parseContent: d(function (maxLength) { <span class="missing-if-branch" title="if path not taken" >I</span>if (this._parsedContent) { <span class="cstat-no" title="statement not covered" > return this._parsedContent;</span> } &nbsp; if (!R.is(Number, maxLength)) { maxLength = DEFAULT_MAX_CONTENT_LENGTH; } &nbsp; const parser = Message.PARSERS[this.mediaType] || defaultParser; this._parsedContent = parser(this, maxLength); &nbsp; return this._parsedContent; }) &nbsp; }); &nbsp; module.exports = Message; &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Wed Jul 06 2016 20:37:18 GMT-0500 (CDT) </div> </div> <script src="../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../sorter.js"></script> </body> </html>