@resin/pinejs
Version:
Pine.js is a sophisticated rules-driven API engine that enables you to define rules in a structured subset of English. Those rules are used in order for Pine.js to generate a database schema and the associated [OData](http://www.odata.org/) API. This make
203 lines (199 loc) • 6.56 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var slice = [].slice;
define(['bluebird', 'lodash'], function(Promise, _) {
var app, express;
if (typeof window !== "undefined" && window !== null) {
window.GLOBAL_PERMISSIONS = ['resource.all'];
}
app = (function() {
var addHandler, appVars, enabled, handlers, process;
enabled = {};
enabled.promise = new Promise(function(resolve) {
return enabled.resolve = resolve;
});
appVars = {
env: 'development'
};
handlers = {
USE: [],
POST: [],
PUT: [],
DELETE: [],
GET: [],
PATCH: [],
MERGE: [],
OPTIONS: []
};
addHandler = function() {
var handlerName, match, middleware, newMatch, paramMatch, paramName;
handlerName = arguments[0], match = arguments[1], middleware = 3 <= arguments.length ? slice.call(arguments, 2) : [];
match = match.toLowerCase();
newMatch = match.replace(/[\/\*]*$/, '');
if (newMatch !== match) {
match = newMatch;
paramName = '*';
} else {
paramMatch = /:(.*)$/.exec(match);
paramName = paramMatch == null ? null : paramMatch[1];
}
return handlers[handlerName].push({
match: match,
paramName: paramName,
middleware: _.flattenDeep(middleware)
});
};
process = function(method, uri, headers, body) {
var req;
if (body == null) {
body = '';
}
if (!handlers[method]) {
return Promise.rejected(404);
}
req = {
user: {
permissions: window.GLOBAL_PERMISSIONS
},
method: method,
body: body,
headers: headers,
url: uri,
params: {},
query: {},
login: function(user, callback) {
return callback();
}
};
console.log(method, uri, body);
if (uri.slice(-1) === '/') {
uri = uri.slice(0, uri.length - 1);
}
uri = uri.toLowerCase();
return new Promise(function(resolve, reject) {
var checkMethodHandlers, i, j, methodHandlers, next, res;
res = {
statusCode: 200,
status: function(statusCode1) {
this.statusCode = statusCode1;
return this;
},
json: function(obj) {
obj = JSON.parse(JSON.stringify(obj));
if (this.statusCode >= 400) {
return reject([this.statusCode, obj, null]);
} else {
return resolve([this.statusCode, obj, null]);
}
},
send: function(data) {
data = _.cloneDeep(data);
if (this.statusCode >= 400) {
return reject([this.statusCode, data, null]);
} else {
return resolve([this.statusCode, data, null]);
}
},
sendStatus: function(statusCode) {
if (statusCode == null) {
statusCode = this.statusCode;
}
if (statusCode >= 400) {
return reject([statusCode, null, null]);
} else {
return resolve([statusCode, null, null]);
}
},
redirect: function() {
return reject([307]);
},
set: function() {},
type: function() {}
};
methodHandlers = handlers.USE.concat(handlers[method]);
i = -1;
j = -1;
next = function(route) {
j++;
if (route === 'route' || j >= methodHandlers[i].middleware.length) {
return checkMethodHandlers();
} else {
return methodHandlers[i].middleware[j](req, res, next);
}
};
checkMethodHandlers = function() {
i++;
if (i < methodHandlers.length) {
if (uri.slice(0, methodHandlers[i].match.length) === methodHandlers[i].match) {
j = -1;
req.params = {};
if (methodHandlers[i].paramName != null) {
req.params[methodHandlers[i].paramName] = uri.slice(methodHandlers[i].match.length);
return next();
} else if (uri.length !== methodHandlers[i].match.length) {
return checkMethodHandlers();
} else {
return next();
}
} else {
return checkMethodHandlers();
}
} else {
return res.sendStatus(404);
}
};
return checkMethodHandlers();
});
};
return {
use: _.partial(addHandler, 'USE', '/*'),
get: function() {
var callback, name;
name = arguments[0], callback = arguments[arguments.length - 1];
if (_.isFunction(callback)) {
return addHandler.apply(null, ['GET'].concat(slice.call(arguments)));
} else {
return appVars[name];
}
},
post: _.partial(addHandler, 'POST'),
put: _.partial(addHandler, 'PUT'),
"delete": _.partial(addHandler, 'DELETE'),
patch: _.partial(addHandler, 'PATCH'),
merge: _.partial(addHandler, 'MERGE'),
options: _.partial(addHandler, 'OPTIONS'),
all: function() {
var args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
this.post.apply(this, args);
this.get.apply(this, args);
this.put.apply(this, args);
return this["delete"].apply(this, args);
},
process: function() {
var args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return enabled.promise.then(function() {
return process.apply(null, args);
});
},
listen: function() {
var callback;
callback = arguments[arguments.length - 1];
enabled.resolve();
if (_.isFunction(callback)) {
return enabled.promise.then(callback);
}
},
set: function(name, value) {
return appVars[name] = value;
}
};
})();
express = function() {
return app;
};
return express;
});
}).call(this);
//# sourceMappingURL=express.js.map