Last active
August 29, 2015 14:23
-
-
Save ddoronin/61e9bfea1d62b0052403 to your computer and use it in GitHub Desktop.
Require Light
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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