src/cm/media/js/lib/yui/yui_3.10.3/build/io-nodejs/io-nodejs.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('io-nodejs', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/*global Y: false, Buffer: false, clearInterval: false, clearTimeout: false, console: false, exports: false, global: false, module: false, process: false, querystring: false, require: false, setInterval: false, setTimeout: false, __filename: false, __dirname: false */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    * Node.js override for IO, methods are mixed into `Y.IO`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
    * @module io-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
    * @main io-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
    * Passthru to the NodeJS <a href="https://github.com/mikeal/request">request</a> module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    * This method is return of `require('request')` so you can use it inside NodeJS without
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    * the IO abstraction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    * @method request
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    * @for IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    if (!Y.IO.request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
        // Default Request's cookie jar to `false`. This way cookies will not be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
        // maintained across requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
        Y.IO.request = require('request').defaults({jar: false});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    var codes = require('http').STATUS_CODES;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    Flatten headers object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    @method flatten
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    @for IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    @param {Object} o The headers object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    @return {String} The flattened headers object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    var flatten = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        var str = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
        Object.keys(o).forEach(function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
            str.push(name + ': ' + o[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
        return str.join('\n');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    NodeJS IO transport, uses the NodeJS <a href="https://github.com/mikeal/request">request</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    module under the hood to perform all network IO.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    @method transports.nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    @for IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    @return {Object} This object contains only a `send` method that accepts a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    `transaction object`, `uri` and the `config object`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
        Y.io('https://somedomain.com/url', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
            method: 'PUT',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
            data: '?foo=bar',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
            //Extra request module config options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
            request: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
                maxRedirects: 100,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
                strictSSL: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
                multipart: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
                    {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
                        'content-type': 'application/json',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
                        body: JSON.stringify({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
                            foo: 'bar',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
                            _attachments: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
                                'message.txt': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
                                    follows: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
                                    length: 18,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
                                    'content_type': 'text/plain'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
                        })
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
                    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
                    {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
                        body: 'I am an attachment'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
                ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
            on: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
                success: function(id, e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    Y.IO.transports.nodejs = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
            send: function (transaction, uri, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
                config.notify('start', transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
                config.method = config.method || 'GET';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
                config.method = config.method.toUpperCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
                var rconf = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
                    method: config.method,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
                    uri: uri
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
                if (config.data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
                    if (Y.Lang.isString(config.data)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
                        rconf.body = config.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
                    if (rconf.body && rconf.method === 'GET') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
                        rconf.uri += (rconf.uri.indexOf('?') > -1 ? '&' : '?') + rconf.body;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
                        rconf.body = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
                if (config.headers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
                    rconf.headers = config.headers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
                if (config.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
                    rconf.timeout = config.timeout;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
                if (config.request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                    Y.mix(rconf, config.request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
                Y.IO.request(rconf, function(err, data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
                    if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
                        transaction.c = err;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
                        config.notify(((err.code === 'ETIMEDOUT') ? 'timeout' : 'failure'), transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
                        return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                    if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                        transaction.c = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
                            status: data.statusCode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
                            statusCode: data.statusCode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
                            statusText: codes[data.statusCode],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
                            headers: data.headers,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
                            responseText: data.body || '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
                            responseXML: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
                            getResponseHeader: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
                                return this.headers[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
                            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
                            getAllResponseHeaders: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
                                return flatten(this.headers);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
                        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
                    config.notify('complete', transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
                    config.notify(((data && (data.statusCode >= 200 && data.statusCode <= 299)) ? 'success' : 'failure'), transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
                var ret = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                    io: transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    Y.IO.defaultTransport('nodejs');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
}, '3.10.3', {"requires": ["io-base"]});