diff --git a/src/Module.js b/src/Module.js index 96d6869..3a5350e 100644 --- a/src/Module.js +++ b/src/Module.js @@ -76,6 +76,14 @@ class SyntheticNamespaceDeclaration { const original = this.originals[ reference.name ]; + // throw with an informative error message if the reference doesn't exist. + if ( !original ) { + const err = new Error( `Export '${reference.name}' is not defined by '${this.module.id}'` ); + err.code = 'MISSING_EXPORT'; + err.file = this.module.id; + throw err; + } + original.addReference( reference ); return; } diff --git a/test/function/namespace-missing-export/_config.js b/test/function/namespace-missing-export/_config.js new file mode 100644 index 0000000..963724b --- /dev/null +++ b/test/function/namespace-missing-export/_config.js @@ -0,0 +1,9 @@ +var assert = require( 'assert' ); +var path = require( 'path' ); + +module.exports = { + error: function ( err ) { + assert.equal( path.normalize( err.file ), path.resolve( __dirname, 'empty.js' ) ); + assert.ok( /Export 'foo' is not defined by/.test( err.message ) ); + } +}; diff --git a/test/function/namespace-missing-export/empty.js b/test/function/namespace-missing-export/empty.js new file mode 100644 index 0000000..e69de29 diff --git a/test/function/namespace-missing-export/main.js b/test/function/namespace-missing-export/main.js new file mode 100644 index 0000000..bfb885d --- /dev/null +++ b/test/function/namespace-missing-export/main.js @@ -0,0 +1,3 @@ +import * as mod from './empty.js'; + +mod.foo();