// for CMD declare var require: any; declare var module: any; declare var Promise: any; var DEFAULT_RULES = [ function(xhr, resolve, reject) { if (!/^[1-3]/.test(xhr.status)) { reject('HTTP Response code: ' + xhr.status); } else { resolve(xhr.responseText); } } ]; function simpleDecorator(xhr, rule, deferred) { var result = { error: false, msg: undefined }; rule(xhr, deferred.resolve, deferred.reject); return deferred; } class Ajax { ajax: any; deferred: any; constructor($service: any) { var self = this; var xhr = new XMLHttpRequest(); var promise = new Promise(function(resolve, reject) { xhr.onload = function() { $service.rules.every(function(filter, index) { var result = simpleDecorator(xhr, filter, { resolve: resolve, reject: reject }); if (result.error) { reject(result.msg); return false; } else { if (index === $service.rules.length - 1) resolve(xhr.responseText); return true; } }); }; }); this.ajax = xhr; this.deferred = promise; } } export = Ajax;