diff options
| author | Igor Minar | 2013-07-01 17:23:24 -0700 |
|---|---|---|
| committer | Igor Minar | 2013-07-02 11:05:30 -0700 |
| commit | 4f0f2437712a5ae3e79780e2d6fa32b70abe1a52 (patch) | |
| tree | 7df06087f943728120c66052b23ffd8bb109e5cc /src/auto/injector.js | |
| parent | 48eb297c1130fd08b22ba2bae032d3a5339c8615 (diff) | |
| download | angular.js-4f0f2437712a5ae3e79780e2d6fa32b70abe1a52.tar.bz2 | |
fix($injector): refactor module loading code and use minErr
Diffstat (limited to 'src/auto/injector.js')
| -rw-r--r-- | src/auto/injector.js | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/auto/injector.js b/src/auto/injector.js index e43f2df7..6399dca8 100644 --- a/src/auto/injector.js +++ b/src/auto/injector.js @@ -494,37 +494,36 @@ function createInjector(modulesToLoad) { forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; loadedModules.put(module, true); - if (isString(module)) { - var moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - try { + try { + if (isString(module)) { + var moduleFn = angularModule(module); + runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); + for(var invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { var invokeArgs = invokeQueue[i], provider = providerInjector.get(invokeArgs[0]); provider[invokeArgs[1]].apply(provider, invokeArgs[2]); } - } catch (e) { - if (e.message) e.message += ' from ' + module; - throw e; + } else if (isFunction(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else if (isArray(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else { + assertArgFn(module, 'module'); } - } else if (isFunction(module)) { - try { - runBlocks.push(providerInjector.invoke(module)); - } catch (e) { - if (e.message) e.message += ' from ' + module; - throw e; + } catch (e) { + if (isArray(module)) { + module = module[module.length - 1]; } - } else if (isArray(module)) { - try { - runBlocks.push(providerInjector.invoke(module)); - } catch (e) { - if (e.message) e.message += ' from ' + String(module[module.length - 1]); - throw e; + if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { + // Safari & FF's stack traces don't contain error.message content unlike those of Chrome and IE + // So if stack doesn't contain message, we create a new string that contains both. + // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. + e = e.message + '\n' + e.stack; } - } else { - assertArgFn(module, 'module'); + throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", module, e.stack || e.message || e); } }); return runBlocks; |
