| var require, define; |
| (function () { |
| var mods = {}; |
| |
| define = function (id, deps, factory) { |
| mods[id] = { |
| id: id, |
| deps: deps, |
| factory: factory, |
| defined: 0, |
| exports: {}, |
| require: createRequire(id) |
| }; |
| }; |
| |
| require = createRequire(''); |
| |
| function normalize(id, baseId) { |
| if (!baseId) { |
| return id; |
| } |
| |
| if (id.indexOf('.') === 0) { |
| var basePath = baseId.split('/'); |
| var namePath = id.split('/'); |
| var baseLen = basePath.length - 1; |
| var nameLen = namePath.length; |
| var cutBaseTerms = 0; |
| var cutNameTerms = 0; |
| |
| pathLoop: for (var i = 0; i < nameLen; i++) { |
| switch (namePath[i]) { |
| case '..': |
| if (cutBaseTerms < baseLen) { |
| cutBaseTerms++; |
| cutNameTerms++; |
| } |
| else { |
| break pathLoop; |
| } |
| break; |
| case '.': |
| cutNameTerms++; |
| break; |
| default: |
| break pathLoop; |
| } |
| } |
| |
| basePath.length = baseLen - cutBaseTerms; |
| namePath = namePath.slice(cutNameTerms); |
| |
| return basePath.concat(namePath).join('/'); |
| } |
| |
| return id; |
| } |
| |
| function createRequire(baseId) { |
| var cacheMods = {}; |
| |
| function localRequire(id, callback) { |
| if (typeof id === 'string') { |
| var exports = cacheMods[id]; |
| if (!exports) { |
| exports = getModExports(normalize(id, baseId)); |
| cacheMods[id] = exports; |
| } |
| |
| return exports; |
| } |
| else if (id instanceof Array) { |
| callback = callback || function () {}; |
| callback.apply(this, getModsExports(id, callback, baseId)); |
| } |
| }; |
| |
| return localRequire; |
| } |
| |
| function getModsExports(ids, factory, baseId) { |
| var es = []; |
| var mod = mods[baseId]; |
| |
| for (var i = 0, l = Math.min(ids.length, factory.length); i < l; i++) { |
| var id = normalize(ids[i], baseId); |
| var arg; |
| switch (id) { |
| case 'require': |
| arg = (mod && mod.require) || require; |
| break; |
| case 'exports': |
| arg = mod.exports; |
| break; |
| case 'module': |
| arg = mod; |
| break; |
| default: |
| arg = getModExports(id); |
| } |
| es.push(arg); |
| } |
| |
| return es; |
| } |
| |
| function getModExports(id) { |
| var mod = mods[id]; |
| if (!mod) { |
| throw new Error('No ' + id); |
| } |
| |
| if (!mod.defined) { |
| var factory = mod.factory; |
| var factoryReturn = factory.apply( |
| this, |
| getModsExports(mod.deps || [], factory, id) |
| ); |
| if (typeof factoryReturn !== 'undefined') { |
| mod.exports = factoryReturn; |
| } |
| mod.defined = 1; |
| } |
| |
| return mod.exports; |
| } |
| }()); |