mirror of
https://github.com/discourse/discourse.git
synced 2025-09-06 10:50:21 +08:00
Fixes issues with composer
This commit is contained in:
parent
14fa033288
commit
ed398e65e0
16 changed files with 121 additions and 55 deletions
76
vendor/assets/javascripts/pretender.js
vendored
76
vendor/assets/javascripts/pretender.js
vendored
|
@ -3,9 +3,10 @@
|
|||
var isNode = typeof process !== 'undefined' && process.toString() === '[object process]';
|
||||
var RouteRecognizer = isNode ? require('route-recognizer')['default'] : window.RouteRecognizer;
|
||||
var FakeXMLHttpRequest = isNode ? require('./bower_components/FakeXMLHttpRequest/fake_xml_http_request') : window.FakeXMLHttpRequest;
|
||||
var slice = [].slice;
|
||||
|
||||
function Pretender(maps){
|
||||
maps = maps || function(){};
|
||||
function Pretender(/* routeMap1, routeMap2, ...*/){
|
||||
maps = slice.call(arguments);
|
||||
// Herein we keep track of RouteRecognizer instances
|
||||
// keyed by HTTP method. Feel free to add more as needed.
|
||||
this.registry = {
|
||||
|
@ -21,6 +22,7 @@ function Pretender(maps){
|
|||
this.handledRequests = [];
|
||||
this.passthroughRequests = [];
|
||||
this.unhandledRequests = [];
|
||||
this.requestReferences = [];
|
||||
|
||||
// reference the native XMLHttpRequest object so
|
||||
// it can be restored later
|
||||
|
@ -34,7 +36,9 @@ function Pretender(maps){
|
|||
this.running = true;
|
||||
|
||||
// trigger the route map DSL.
|
||||
maps.call(this);
|
||||
for(i=0; i < arguments.length; i++){
|
||||
this.map(arguments[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function interceptor(pretender) {
|
||||
|
@ -51,8 +55,8 @@ function interceptor(pretender) {
|
|||
'a pretender earlier than you intended to');
|
||||
}
|
||||
|
||||
FakeXMLHttpRequest.prototype.send.apply(this, arguments);
|
||||
if (!pretender.checkPassthrough(this)) {
|
||||
FakeXMLHttpRequest.prototype.send.apply(this, arguments);
|
||||
pretender.handleRequest(this);
|
||||
}
|
||||
else {
|
||||
|
@ -86,6 +90,9 @@ function interceptor(pretender) {
|
|||
xhr.open(fakeXHR.method, fakeXHR.url, fakeXHR.async, fakeXHR.username, fakeXHR.password);
|
||||
xhr.timeout = fakeXHR.timeout;
|
||||
xhr.withCredentials = fakeXHR.withCredentials;
|
||||
for (var h in fakeXHR.requestHeaders) {
|
||||
xhr.setRequestHeader(h, fakeXHR.requestHeaders[h]);
|
||||
}
|
||||
return xhr;
|
||||
}
|
||||
proto._passthroughCheck = function(method, arguments) {
|
||||
|
@ -109,8 +116,8 @@ function interceptor(pretender) {
|
|||
}
|
||||
|
||||
function verbify(verb){
|
||||
return function(path, handler){
|
||||
this.register(verb, path, handler);
|
||||
return function(path, handler, async){
|
||||
this.register(verb, path, handler, async);
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -137,8 +144,16 @@ Pretender.prototype = {
|
|||
'delete': verbify('DELETE'),
|
||||
patch: verbify('PATCH'),
|
||||
head: verbify('HEAD'),
|
||||
register: function register(verb, path, handler){
|
||||
map: function(maps){
|
||||
maps.call(this);
|
||||
},
|
||||
register: function register(verb, path, handler, async){
|
||||
if (!handler) {
|
||||
throw new Error("The function you tried passing to Pretender to handle " + verb + " " + path + " is undefined or missing.");
|
||||
}
|
||||
|
||||
handler.numberOfCalls = 0;
|
||||
handler.async = async;
|
||||
this.handlers.push(handler);
|
||||
|
||||
var registry = this.registry[verb];
|
||||
|
@ -171,24 +186,65 @@ Pretender.prototype = {
|
|||
|
||||
if (handler) {
|
||||
handler.handler.numberOfCalls++;
|
||||
var async = handler.handler.async;
|
||||
this.handledRequests.push(request);
|
||||
|
||||
try {
|
||||
var statusHeadersAndBody = handler.handler(request),
|
||||
status = statusHeadersAndBody[0],
|
||||
headers = this.prepareHeaders(statusHeadersAndBody[1]),
|
||||
body = this.prepareBody(statusHeadersAndBody[2]);
|
||||
request.respond(status, headers, body);
|
||||
body = this.prepareBody(statusHeadersAndBody[2]),
|
||||
pretender = this;
|
||||
|
||||
this.handledRequest(verb, path, request);
|
||||
this.handleResponse(request, async, function() {
|
||||
request.respond(status, headers, body);
|
||||
pretender.handledRequest(verb, path, request);
|
||||
});
|
||||
} catch (error) {
|
||||
this.erroredRequest(verb, path, request, error);
|
||||
this.resolve(request);
|
||||
}
|
||||
} else {
|
||||
this.unhandledRequests.push(request);
|
||||
this.unhandledRequest(verb, path, request);
|
||||
}
|
||||
},
|
||||
handleResponse: function handleResponse(request, strategy, callback) {
|
||||
strategy = typeof strategy === 'function' ? strategy() : strategy;
|
||||
|
||||
if (strategy === false) {
|
||||
callback();
|
||||
} else {
|
||||
var pretender = this;
|
||||
pretender.requestReferences.push({
|
||||
request: request,
|
||||
callback: callback
|
||||
});
|
||||
|
||||
if (strategy !== true) {
|
||||
setTimeout(function() {
|
||||
pretender.resolve(request);
|
||||
}, typeof strategy === 'number' ? strategy : 0);
|
||||
}
|
||||
}
|
||||
},
|
||||
resolve: function resolve(request) {
|
||||
for(var i = 0, len = this.requestReferences.length; i < len; i++) {
|
||||
var res = this.requestReferences[i];
|
||||
if (res.request === request) {
|
||||
res.callback();
|
||||
this.requestReferences.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
requiresManualResolution: function(verb, path) {
|
||||
var handler = this._handlerFor(verb.toUpperCase(), path, {});
|
||||
if (!handler) { return false; }
|
||||
|
||||
var async = handler.handler.async;
|
||||
return typeof async === 'function' ? async() === true : async === true;
|
||||
},
|
||||
prepareBody: function(body) { return body; },
|
||||
prepareHeaders: function(headers) { return headers; },
|
||||
handledRequest: function(verb, path, request) { /* no-op */},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue