From bb97e3fe10e99aca6123a68190d7824998708e69 Mon Sep 17 00:00:00 2001 From: Ulf Nilsson Date: Tue, 25 Jun 2019 15:46:29 +0200 Subject: [PATCH] Use async fs methods --- 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) {