Skip to content
This repository has been archived by the owner on Aug 4, 2021. It is now read-only.

Commit

Permalink
fix(browser-resolve): fix regressions from refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
keithamus committed Jan 15, 2018
1 parent 1b26066 commit 7529f70
Show file tree
Hide file tree
Showing 20 changed files with 120 additions and 9 deletions.
26 changes: 17 additions & 9 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,14 @@ export default function nodeResolve ( options = {} ) {
if ( !importer ) return null;

if (options.browser && browserMapCache[importer]) {
const resolvedImportee = resolve( dirname( importer ), importee );
const browser = browserMapCache[importer];
if (browser[importee]) {
importee = browser[importee];
}
if (browser[importee] === false) {
if (browser[importee] === false || browser[resolvedImportee] === false) {
return ES6_BROWSER_EMPTY;
}
if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) {
importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json'];
}
}


Expand All @@ -66,19 +67,26 @@ export default function nodeResolve ( options = {} ) {
importee,
Object.assign({
basedir: dirname( importer ),
packageFilter ( pkg ) {
packageFilter ( pkg, pkgPath ) {
const pkgRoot = dirname( pkgPath );
if (options.browser && typeof pkg[ 'browser' ] === 'object') {
packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce((browser, key) => {
browser[ key ] = pkg[ 'browser' ][key];
if (key[0] === '.' && !extname(key)) browser[ key + '.js'] = browser[ key + '.json' ] = browser[ key ];
const resolved = pkg[ 'browser' ][ key ] === false ? false : resolve( pkgRoot, pkg[ 'browser' ][ key ] );
browser[ key ] = resolved;
if ( key[0] === '.' ) {
const absoluteKey = resolve( pkgRoot, key );
browser[ absoluteKey ] = resolved;
if (!extname(key)) browser[ absoluteKey + '.js'] = browser[ absoluteKey+ '.json' ] = browser[ key ];
}
return browser;
}, {});
}

const absoluteMain = pkg[ 'main' ] ? resolve( pkgRoot, pkg[ 'main' ] ) : false;
if (options.browser && typeof pkg[ 'browser' ] === 'string') {
pkg[ 'main' ] = pkg[ 'browser' ];
} else if (options.browser && typeof pkg[ 'browser' ] === 'object' && pkg[ 'browser' ][ pkg[ 'main' ] ]) {
pkg[ 'main' ] = pkg[ 'browser' ][ pkg[ 'main' ] ];
} else if (options.browser && packageBrowserField && (packageBrowserField[ pkg[ 'main' ] ] || packageBrowserField[ absoluteMain ])) {
pkg[ 'main' ] = packageBrowserField[ pkg[ 'main' ] ] || packageBrowserField[ absoluteMain ];
} else if ( useModule && pkg[ 'module' ] ) {
pkg[ 'main' ] = pkg[ 'module' ];
} else if ( useJsnext && pkg[ 'jsnext:main' ] ) {
Expand Down
1 change: 1 addition & 0 deletions test/node_modules/builtins-browser/fs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions test/node_modules/builtins-browser/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions test/node_modules/builtins-browser/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/isomorphic-nested/lib/browser-dep.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/isomorphic-nested/lib/browser-test.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions test/node_modules/isomorphic-nested/lib/browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/isomorphic-nested/lib/dep.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions test/node_modules/isomorphic-nested/lib/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions test/node_modules/isomorphic-nested/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/isomorphic-object-main/browser-dep.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/isomorphic-object-main/browser-test.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions test/node_modules/isomorphic-object-main/browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/isomorphic-object-main/dep.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions test/node_modules/isomorphic-object-main/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions test/node_modules/isomorphic-object-main/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions test/samples/browser-object-builtin/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import main from 'builtins-browser';
export default main;
2 changes: 2 additions & 0 deletions test/samples/browser-object-main/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { env, dep, test } from 'isomorphic-object-main';
export { env, dep, test };
2 changes: 2 additions & 0 deletions test/samples/browser-object-nested/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { env, dep, test } from 'isomorphic-nested';
export { env, dep, test };
46 changes: 46 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,52 @@ describe( 'rollup-plugin-node-resolve', function () {
});
});

it( 'allows use of object browser field, resolving `main`', function () {
return rollup.rollup({
entry: 'samples/browser-object-main/main.js',
plugins: [
nodeResolve({
main: true,
browser: true
})
]
}).then( executeBundle ).then( module => {
assert.equal( module.exports.env, 'browser' );
assert.equal( module.exports.dep, 'browser-dep' );
assert.equal( module.exports.test, 43 );
});
});

it( 'allows use of object browser field, resolving replaced builtins', function () {
return rollup.rollup({
entry: 'samples/browser-object-builtin/main.js',
plugins: [
nodeResolve({
main: true,
browser: true
})
]
}).then( executeBundle ).then( module => {
assert.equal( module.exports, 'browser-fs' );
});
});

it( 'allows use of object browser field, resolving nested directories', function () {
return rollup.rollup({
entry: 'samples/browser-object-nested/main.js',
plugins: [
nodeResolve({
main: true,
browser: true
})
]
}).then( executeBundle ).then( module => {
assert.equal( module.exports.env, 'browser' );
assert.equal( module.exports.dep, 'browser-dep' );
assert.equal( module.exports.test, 43 );
});
});

it( 'supports `false` in browser field', function () {
return rollup.rollup({
entry: 'samples/browser-false/main.js',
Expand Down

0 comments on commit 7529f70

Please sign in to comment.