Index: pkg/dev_compiler/lib/js/legacy/dart_library.js |
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_library.js b/pkg/dev_compiler/lib/js/legacy/dart_library.js |
index 89549ae240d6475f998a2f371ab4fc99a8d71436..9c6a376eb12b3a15931ffc07a565e73660efa08a 100644 |
--- a/pkg/dev_compiler/lib/js/legacy/dart_library.js |
+++ b/pkg/dev_compiler/lib/js/legacy/dart_library.js |
@@ -67,11 +67,7 @@ dart_library = |
loadImports() { |
let results = []; |
for (let name of this._imports) { |
- let lib = libraries.get(name); |
- if (!lib) { |
- throwLibraryError('Library not available: ' + name); |
- } |
- results.push(lib.load()); |
+ results.push(import_(name)); |
} |
return results; |
} |
@@ -152,12 +148,27 @@ dart_library = |
} |
dart_library.library = library; |
- function import_(libraryName) { |
- let loader = libraries.get(libraryName); |
- // TODO(vsm): A user might call this directly from JS (as we do in tests). |
- // We may want a different error type. |
- if (!loader) throwLibraryError('Library not found: ' + libraryName); |
- return loader.load(); |
+ // Maintain a stack of active imports. If a requested library/module is not |
+ // available, print the stack to show where/how it was requested. |
+ let _stack = []; |
+ function import_(name) { |
+ let lib = libraries.get(name); |
+ if (!lib) { |
+ let message = 'Module ' + name + ' not loaded in the browser.'; |
+ if (_stack != []) { |
+ message += '\nDependency via:'; |
+ let indent = ''; |
+ for (let last = _stack.length - 1; last >= 0; last--) { |
+ indent += ' '; |
+ message += '\n' + indent + '- ' + _stack[last]; |
+ } |
+ } |
+ throwLibraryError(message); |
+ } |
+ _stack.push(name); |
+ let result = lib.load(); |
+ _stack.pop(); |
+ return result; |
} |
dart_library.import = import_; |