Skip to content

Instantly share code, notes, and snippets.

@ddoronin
Last active August 29, 2015 14:23
Show Gist options
  • Save ddoronin/61e9bfea1d62b0052403 to your computer and use it in GitHub Desktop.
Save ddoronin/61e9bfea1d62b0052403 to your computer and use it in GitHub Desktop.
Require Light
(function(global) {
var serviceRegistrar = {};
function resolve(serviceName) {
if (typeof serviceRegistrar[serviceName] === 'undefined') {
throw new Error('Service "' + serviceName + '" cannot be instantiated.');
}
return serviceRegistrar[serviceName];
}
function require(args, cb) {
var resolvedArgs = [];
for(var i = 0, len = args.length; i< len; i++) {
resolvedArgs.push(resolve(args[i]));
}
cb.apply(this, resolvedArgs);
};
function define(serviceName, service) {
if (typeof serviceRegistrar[serviceName] !== 'undefined') {
throw new Error('The Service with the same name "' + serviceName + '" has been already registered.');
}
serviceRegistrar[serviceName] = service;
};
global.require2 = require;
global.define2 = define;
})(this);
(function(global) {
var NAMESPACE_SEPARATOR = global.NAMESPACE_SEPARATOR || '.';
var deps = {};
function getNamespaceParts(namespace){
return namespace.split(NAMESPACE_SEPARATOR);
}
function require(namespace) {
var nsParts = getNamespaceParts(namespace);
var func = deps;
for (var i = 0, len = nsParts.length; i < len; i++) {
var func = func[nsParts[i]];
if (typeof func === 'undefined') {
throw new Error('Required namespace has not been defined.');
}
}
return func;
};
function define(namespace, cb) {
var nsParts = getNamespaceParts(namespace);
var ns = deps;
for (var i = 0, len = nsParts.length - 1; i < len; i++) {
ns[nsParts[i]] = ns[nsParts[i]] || {};
ns = ns[nsParts[i]];
}
ns[nsParts[nsParts.length - 1]] = cb;
};
global.require = require;
global.define = define;
})(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment