mecano
Version:
Common functions for system deployment.
160 lines (154 loc) • 4.36 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var load, merge, registry;
load = function(middleware) {
var ref;
if (!(typeof middleware === 'object' && (middleware != null) && !Array.isArray(middleware))) {
middleware = {
handler: middleware
};
}
if ((ref = typeof middleware.handler) !== 'function' && ref !== 'string') {
throw Error("Invalid middleware handler: got " + (JSON.stringify(middleware.handler)));
}
if (typeof middleware.handler !== 'string') {
return middleware;
}
middleware.module = middleware.handler;
middleware.handler = /^mecano\//.test(middleware.handler) ? require("." + (middleware.handler.substr(6))) : require.main.require(middleware.handler);
return middleware;
};
registry = function(obj) {
Object.defineProperty(obj, 'get', {
configurable: true,
enumerable: false,
get: function() {
return function(name) {
var cnames, i, j, len, n;
if (!name) {
return merge({}, obj);
}
if (typeof name === 'string') {
name = [name];
}
cnames = obj;
for (i = j = 0, len = name.length; j < len; i = ++j) {
n = name[i];
if (!cnames[n]) {
return null;
}
if (cnames[n] && cnames[n][''] && i === name.length - 1) {
return cnames[n][''];
}
cnames = cnames[n];
}
return null;
};
}
});
Object.defineProperty(obj, 'register', {
configurable: true,
enumerable: false,
get: function() {
return function(name, handler) {
var cnames, j, n, name1, names, ref, walk;
if (typeof name === 'string') {
name = [name];
}
if (Array.isArray(name)) {
handler = load(handler);
cnames = names = obj;
for (n = j = 0, ref = name.length - 1; 0 <= ref ? j < ref : j > ref; n = 0 <= ref ? ++j : --j) {
n = name[n];
if (cnames[n] == null) {
cnames[n] = {};
}
cnames = cnames[n];
}
if (cnames[name1 = name[name.length - 1]] == null) {
cnames[name1] = {};
}
cnames[name[name.length - 1]][''] = handler;
return merge(obj, names);
} else {
walk = function(obj) {
var k, results, v;
results = [];
for (k in obj) {
v = obj[k];
if (k !== '' && v && typeof v === 'object' && !Array.isArray(v) && !v.handler) {
results.push(walk(v));
} else {
v = load(v);
results.push(obj[k] = k === '' ? v : {
'': v
});
}
}
return results;
};
walk(name);
return merge(obj, name);
}
};
}
});
Object.defineProperty(obj, 'registered', {
configurable: true,
enumerable: false,
get: function() {
return function(name) {
var cnames, i, j, len, n;
if (module.exports !== obj && module.exports.registered(name)) {
return true;
}
if (typeof name === 'string') {
name = [name];
}
cnames = obj;
for (i = j = 0, len = name.length; j < len; i = ++j) {
n = name[i];
if (!cnames[n]) {
return false;
}
if (cnames[n][''] && i === name.length - 1) {
return true;
}
cnames = cnames[n];
}
return false;
};
}
});
return Object.defineProperty(obj, 'unregister', {
configurable: true,
enumerable: false,
get: function() {
return function(name) {
var cnames, i, j, len, n;
if (typeof name === 'string') {
name = [name];
}
cnames = obj;
for (i = j = 0, len = name.length; j < len; i = ++j) {
n = name[i];
if (i === name.length - 1) {
delete cnames[n];
}
cnames = cnames[n];
if (!cnames) {
return;
}
}
};
}
});
};
registry(module.exports);
Object.defineProperty(module.exports, 'registry', {
configurable: true,
enumerable: false,
get: function() {
return registry;
}
});
merge = require('./misc').merge;