123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- (function() {
- var ProgressBar, Request, format_url, http, https, iced, parse, request, request_mikeal, request_progress, single, urlmod, __iced_k, __iced_k_noop;
- iced = require('iced-runtime');
- __iced_k = __iced_k_noop = function() {};
- https = require('https');
- http = require('http');
- parse = require('url').parse;
- ProgressBar = require('progress');
- urlmod = require('url');
- request = require('request');
- Request = (function() {
- function Request(_arg) {
- var progress, uri, url;
- url = _arg.url, uri = _arg.uri, this.headers = _arg.headers, progress = _arg.progress;
- url = url || uri;
- this._res = null;
- this._data = [];
- this._err = null;
- this.uri = this.url = typeof url === 'string' ? parse(url) : url;
- this._bar = null;
- this._opts = {
- progress: progress
- };
- }
- Request.prototype.run = function(cb) {
- this._done_cb = cb;
- return this._launch();
- };
- Request.prototype._make_opts = function() {
- var opts;
- opts = {
- host: this.url.hostname,
- port: this.url.port || (this.url.protocol === 'https:' ? 443 : 80),
- path: this.url.path,
- method: 'GET',
- headers: this.headers
- };
- if (this.url.protocol === 'https:') {
- opts.mod = https;
- opts.agent = new https.Agent(opts);
- } else {
- opts.mod = http;
- }
- return opts;
- };
- Request.prototype._launch = function() {
- var opts, req;
- opts = this._make_opts();
- req = opts.mod.request(opts, (function(_this) {
- return function(res) {
- var l, _ref;
- if ((_this._opts.progress != null) && ((l = (_ref = res.headers) != null ? _ref["content-length"] : void 0) != null) && !(isNaN(l = parseInt(l, 10))) && l > _this._opts.progress) {
- _this._bar = new ProgressBar("Download " + _this.url.path + " [:bar] :percent :etas (" + l + " bytes total)", {
- complete: "=",
- incomplete: ' ',
- width: 50,
- total: l
- });
- }
- _this._res = res;
- res.request = _this;
- res.on('data', function(d) {
- var _ref1;
- _this._data.push(d);
- return (_ref1 = _this._bar) != null ? _ref1.tick(d.length) : void 0;
- });
- return res.on('end', function() {
- return _this._finish();
- });
- };
- })(this));
- req.end();
- return req.on('error', (function(_this) {
- return function(e) {
- _this._err = e;
- return _this._finish();
- };
- })(this));
- };
- Request.prototype._finish = function() {
- var cb;
- cb = this._done_cb;
- this._done_cb = null;
- return cb(this._err, this._res, Buffer.concat(this._data));
- };
- return Request;
- })();
- single = function(opts, cb) {
- return (new Request(opts)).run(cb);
- };
- format_url = function(u) {
- if (typeof u === 'string') {
- return u;
- } else {
- return urlmod.format(u);
- }
- };
- request_progress = function(opts, cb) {
- var body, err, found, i, lim, prev_url, res, url, ___iced_passed_deferral, __iced_deferrals, __iced_k, _begin, _end, _positive;
- __iced_k = __iced_k_noop;
- ___iced_passed_deferral = iced.findDeferral(arguments);
- lim = opts.maxRedirects || 10;
- res = body = null;
- found = false;
- if (typeof opts.url === 'string') {
- opts.url = parse(opts.url);
- }
- (function(_this) {
- return (function(__iced_k) {
- var _i, _results, _while;
- i = 0;
- _begin = 0;
- _end = lim;
- _positive = _end > _begin;
- _results = [];
- _while = function(__iced_k) {
- var _break, _continue, _next;
- _break = function() {
- return __iced_k(_results);
- };
- _continue = function() {
- return iced.trampoline(function() {
- if (_positive) {
- i += 1;
- } else {
- i -= 1;
- }
- return _while(__iced_k);
- });
- };
- _next = function(__iced_next_arg) {
- _results.push(__iced_next_arg);
- return _continue();
- };
- if (!!((_positive === true && i >= lim) || (_positive === false && i <= lim))) {
- return _break();
- } else {
- prev_url = opts.url;
- (function(__iced_k) {
- __iced_deferrals = new iced.Deferrals(__iced_k, {
- parent: ___iced_passed_deferral,
- filename: "/home/max/src/keybase/node-installer/src/request.iced"
- });
- single(opts, __iced_deferrals.defer({
- assign_fn: (function() {
- return function() {
- err = arguments[0];
- res = arguments[1];
- return body = arguments[2];
- };
- })(),
- lineno: 93
- }));
- __iced_deferrals._fulfill();
- })(function() {
- (function(__iced_k) {
- if (err != null) {
- (function(__iced_k) {
- _break()
- })(__iced_k);
- } else {
- (function(__iced_k) {
- var _ref;
- if (!((_ref = res.statusCode) === 301 || _ref === 302)) {
- found = true;
- (function(__iced_k) {
- _break()
- })(__iced_k);
- } else {
- (function(__iced_k) {
- var _ref1;
- if ((url = (_ref1 = res.headers) != null ? _ref1.location : void 0) == null) {
- err = new Error("Can't find a location in header for redirect");
- (function(__iced_k) {
- _break()
- })(__iced_k);
- } else {
- url = parse(url);
- if (!url.host) {
- url.host = prev_url.host;
- url.hostname = prev_url.hostname;
- url.port = prev_url.port;
- url.protocol = prev_url.protocol;
- }
- return __iced_k(opts.url = url);
- }
- })(__iced_k);
- }
- })(__iced_k);
- }
- })(_next);
- });
- }
- };
- _while(__iced_k);
- });
- })(this)((function(_this) {
- return function() {
- err = err != null ? err : !found ? new Error("Too many redirects") : res.statusCode >= 200 && res.statusCode < 300 ? null : new Error("In " + (format_url(opts.url)) + ": HTTP failure, code " + res.statusCode);
- return cb(err, res, body);
- };
- })(this));
- };
- request_mikeal = function(opts, cb) {
- var body, err, res, rv, url, url_s, which, ___iced_passed_deferral, __iced_deferrals, __iced_k;
- __iced_k = __iced_k_noop;
- ___iced_passed_deferral = iced.findDeferral(arguments);
- opts.encoding = null;
- rv = new iced.Rendezvous();
- url = opts.url || opts.uri;
- url_s = typeof url === 'object' ? url.format() : url;
- request(opts, rv.id(true).defer({
- assign_fn: (function(_this) {
- return function() {
- return function() {
- err = arguments[0];
- res = arguments[1];
- return body = arguments[2];
- };
- };
- })(this)(),
- lineno: 124,
- context: __iced_deferrals
- }));
- process.stderr.write("Downloading...");
- (function(_this) {
- return (function(__iced_k) {
- var _results, _while;
- _results = [];
- _while = function(__iced_k) {
- var _break, _continue, _next;
- _break = function() {
- return __iced_k(_results);
- };
- _continue = function() {
- return iced.trampoline(function() {
- return _while(__iced_k);
- });
- };
- _next = function(__iced_next_arg) {
- _results.push(__iced_next_arg);
- return _continue();
- };
- if (!true) {
- return _break();
- } else {
- setTimeout(rv.id(false).defer({
- lineno: 128,
- context: __iced_deferrals
- }), 100);
- (function(__iced_k) {
- __iced_deferrals = new iced.Deferrals(__iced_k, {
- parent: ___iced_passed_deferral,
- filename: "/home/max/src/keybase/node-installer/src/request.iced"
- });
- rv.wait(__iced_deferrals.defer({
- assign_fn: (function() {
- return function() {
- return which = arguments[0];
- };
- })(),
- lineno: 129
- }));
- __iced_deferrals._fulfill();
- })(function() {
- (function(__iced_k) {
- if (which) {
- (function(__iced_k) {
- _break()
- })(__iced_k);
- } else {
- return __iced_k();
- }
- })(function() {
- return _next(process.stderr.write("."));
- });
- });
- }
- };
- _while(__iced_k);
- });
- })(this)((function(_this) {
- return function() {
- process.stderr.write("..done\n");
- return cb(err, res, body);
- };
- })(this));
- };
- exports.request = function(opts, cb) {
- if (opts.proxy != null) {
- return request_mikeal(opts, cb);
- } else {
- return request_progress(opts, cb);
- }
- };
- }).call(this);
|