arnaucube
arnaucube/comunicationLeapPublic Self-hosted repository
comunicationLeap/node_modules/connect/lib/patch.js
node_modules/connect/lib/patch.jsRaw
 1
 2/*!
 3 * Connect
 4 * Copyright(c) 2011 TJ Holowaychuk
 5 * MIT Licensed
 6 */
 7
 8/**
 9 * Module dependencies.
10 */
11
12var http = require('http')
13  , res = http.ServerResponse.prototype
14  , setHeader = res.setHeader
15  , _renderHeaders = res._renderHeaders
16  , writeHead = res.writeHead;
17
18// apply only once
19
20if (!res._hasConnectPatch) {
21
22  /**
23   * Provide a public "header sent" flag
24   * until node does.
25   *
26   * @return {Boolean}
27   * @api public
28   */
29
30  res.__defineGetter__('headerSent', function(){
31    return this._header;
32  });
33
34  /**
35   * Set header `field` to `val`, special-casing
36   * the `Set-Cookie` field for multiple support.
37   *
38   * @param {String} field
39   * @param {String} val
40   * @api public
41   */
42
43  res.setHeader = function(field, val){
44    var key = field.toLowerCase()
45      , prev;
46
47    // special-case Set-Cookie
48    if (this._headers && 'set-cookie' == key) {
49      if (prev = this.getHeader(field)) {
50        val = Array.isArray(prev)
51          ? prev.concat(val)
52          : [prev, val];
53      }
54    // charset
55    } else if ('content-type' == key && this.charset) {
56      val += '; charset=' + this.charset;
57    }
58
59    return setHeader.call(this, field, val);
60  };
61
62  /**
63   * Proxy to emit "header" event.
64   */
65
66  res._renderHeaders = function(){
67    if (!this._emittedHeader) this.emit('header');
68    this._emittedHeader = true;
69    return _renderHeaders.call(this);
70  };
71
72  res.writeHead = function(){
73    if (!this._emittedHeader) this.emit('header');
74    this._emittedHeader = true;
75    return writeHead.apply(this, arguments);
76  };
77
78  res._hasConnectPatch = true;
79}