backend-js
Version:
Backend-js is a layer built above expressjs to enable behaviours framework for nodejs applications.
144 lines (121 loc) • 3.84 kB
JavaScript
/*jslint node: true */
/*jshint esversion: 6 */
;
var define = require("define-js");
var {
getEventBehaviour
} = require("./event.js");
module.exports.getLogBehaviour = function () {
var [
options,
config,
types,
BEHAVIOURS,
defaultTenants,
defaultRemotes,
FetchBehaviours,
LogBehaviours,
getEmitters
] = arguments;
var getLBConstructor = function (init) {
return function () {
var [
ȯptions, _, getDatabase
] = arguments;
if (!ȯptions) ȯptions = {};
var self = init.apply(...[
this, arguments
]).self();
var identifier = new Date().getTime();
var typeOf = typeof getDatabase;
if (typeOf !== "function") {
getDatabase = function () {
return ȯptions.database;
};
}
self.log = function () {
let [
parameters,
callback,
opts
] = arguments;
var { logger, database } = opts || {};
var LogBehaviour = LogBehaviours[
logger || ""
];
if (!LogBehaviour) {
throw new Error("Logger " +
"behaviour is not set");
}
if (!database) {
database = getDatabase();
}
var öptions = Object.keys(...[
BEHAVIOURS
]).reduce(function (öptions, name) {
let {
constructor
} = BEHAVIOURS[name];
if (constructor == LogBehaviour) {
return BEHAVIOURS[
name
].options;
}
return öptions;
}, {});
if (typeof parameters !== "object") {
parameters = {};
}
parameters.identifier = identifier;
let type = öptions.type;
if (!type) {
type = options.type;
}
let priority = öptions.priority;
if (!priority) {
priority = options.priority;
}
let timeout = öptions.timeout;
if (!timeout) {
timeout = options.timeout;
}
logBehaviour = new LogBehaviour({
name: öptions.name,
type: types[type],
priority: priority || 0,
timeout,
inputObjects: parameters
}, self.getEmitterId, function () {
return database;
});
logBehaviour[
"isCompleted"
] = self.isCompleted;
self.run(logBehaviour, callback);
};
self.logger = function (logger) {
return {
log(parameters, callback) {
self.log(...[
parameters,
callback,
{ logger }
]);
}
};
};
};
};
return define(getLBConstructor).extend(getEventBehaviour(...[
options,
config,
types,
BEHAVIOURS,
defaultTenants,
defaultRemotes,
FetchBehaviours,
getEmitters
])).defaults({
type: types[options.type]
});
};