Skip to content

Instantly share code, notes, and snippets.

@deleteme
Created October 1, 2014 18:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deleteme/4a48522eccd4f8b1e3ca to your computer and use it in GitHub Desktop.
Save deleteme/4a48522eccd4f8b1e3ca to your computer and use it in GitHub Desktop.
ds.define() registers a module under a name. The module's function is called on demand by require().
ds.define = do ->
modules = {
ds
$
_: _.noConflict()
Backbone
Breakpoints
Raven: window.Raven
key: key.noConflict()
}
initializedModules = modules._.clone modules
stack = []
make = (name, required)->
_ = modules._
if typeof name is 'string'
if _.include stack, name
# This would otherwise go into an infinite loop and throw a
# "Maximum call stack exceeded error"
throw new Error "require error: Circular import detected in module #{ name }: #{ stack.join ' > ' } > #{ name }"
else
stack.push name
module = initializedModules[name] or= modules[name]?(require)
required[name] = module if required
stack.splice stack.length - 1, 1
module
else
throw new Error "require error: #{ _.toString name } is not a String"
require = (names...)->
if names.length is 1
required = make names[0]
else
required = {}
make(name, required) for name in names
required
ds.require = ->
require.apply null, arguments
define = (name, module) ->
modules[name] = ->
module.call window, require
define
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment