umodule-js/umodule.coffee

39 lines
877 B
CoffeeScript

###
# umodule.js v0.5
# (c) 2013 Loic Nageleisen
# Licensed under 3-clause BSD
###
root = global ? window
require = (id) ->
target = Module.root
target = target[item] for item in id.split('/')
throw new Error("module not found: #{id}") if typeof target is 'undefined'
target.exports
class Module
constructor: (@id) ->
@exports = {}
@define: (target, name, block) ->
if arguments.length < 3
[target, name, block] = [Module.root, arguments...]
top = target
target = target[item] or= new Module(item) for item in name.split '/'
block.call(target, target.exports, target.require, target)
target
require: -> require()
Module.root = new Module('root')
Module.root.exports = root
Module.root.module = new Module('module')
Module.root.module.exports = Module
root.require = require