Skip to content

Commit

Permalink
Add error to output when module loaded as resolver has invalid API
Browse files Browse the repository at this point in the history
  • Loading branch information
balazsczap authored and ljharb committed Jul 31, 2018
1 parent f5bff7b commit 8252344
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
1 change: 1 addition & 0 deletions tests/files/foo-bar-resolver-invalid.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exports = {};
17 changes: 16 additions & 1 deletion tests/src/core/resolve.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,22 @@ describe('resolve', function () {
expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 })
})

it('reports loaded resolver with invalid interface', function () {
const resolverName = './foo-bar-resolver-invalid';
const testContext = utils.testContext({ 'import/resolver': resolverName });
const testContextReports = []
testContext.report = function (reportInfo) {
testContextReports.push(reportInfo)
}
testContextReports.length = 0
expect(resolve( '../files/foo'
, Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js') } })
)).to.equal(undefined)
expect(testContextReports[0]).to.be.an('object')
expect(testContextReports[0].message).to.equal(`Resolve error: ${resolverName} with invalid interface loaded as resolver`)
expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 })
})

it('respects import/resolve extensions', function () {
const testContext = utils.testContext({ 'import/resolve': { 'extensions': ['.jsx'] }})

Expand All @@ -119,7 +135,6 @@ describe('resolve', function () {
})

it('reports load exception in a user resolver', function () {

const testContext = utils.testContext({ 'import/resolver': './load-error-resolver' })
const testContextReports = []
testContext.report = function (reportInfo) {
Expand Down
13 changes: 12 additions & 1 deletion utils/resolve.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,19 @@ function requireResolver(name, sourceFile) {

if (!resolver) {
throw new Error(`unable to load resolver "${name}".`)
}
if (!isResolverValid(resolver)) {
throw new Error(`${name} with invalid interface loaded as resolver`)
}

return resolver
}

function isResolverValid(resolver) {
if (resolver.interfaceVersion === 2) {
return resolver.resolve && typeof resolver.resolve === 'function'
} else {
return resolver;
return resolver.resolveImport && typeof resolver.resolveImport === 'function'
}
}

Expand Down

0 comments on commit 8252344

Please sign in to comment.