From 84471e46903d1d7a0606352d895b1d51da3fad14 Mon Sep 17 00:00:00 2001 From: Ulf Nilsson Date: Wed, 26 Jun 2019 06:57:06 +0000 Subject: [PATCH] Use async fs methods (#230) --- src/index.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index 46b6920..9012e12 100644 --- a/src/index.js +++ b/src/index.js @@ -13,8 +13,12 @@ const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; // which deploy both ESM .mjs and CommonJS .js files as ESM. const DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; +const existsAsync = file => new Promise(fulfil => fs.exists(file, fulfil)); + const readFileAsync = file => new Promise((fulfil, reject) => fs.readFile(file, (err, contents) => err ? reject(err) : fulfil(contents))); +const realpathAsync = file => new Promise((fulfil, reject) => fs.realpath(file, (err, contents) => err ? reject(err) : fulfil(contents))); + const statAsync = file => new Promise((fulfil, reject) => fs.stat(file, (err, contents) => err ? reject(err) : fulfil(contents))); const cache = fn => { @@ -306,11 +310,14 @@ export default function nodeResolve ( options = {} ) { browserMapCache.set(resolved, packageBrowserField); } + if ( hasPackageEntry && !preserveSymlinks && resolved ) { + return existsAsync( resolved ) + .then(exists => exists ? realpathAsync( resolved ) : resolved); + } + return resolved; + }) + .then(resolved => { if ( hasPackageEntry ) { - if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { - resolved = fs.realpathSync( resolved ); - } - if (builtins.has(resolved) && preferBuiltins && isPreferBuiltinsSet) { return null; } else if (importeeIsBuiltin && preferBuiltins) {