summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Bedford <guybedford@gmail.com>2018-03-16 13:17:42 +0200
committerguybedford <guybedford@gmail.com>2018-04-01 17:32:26 +0200
commit141be923f3249af870f274524dd0dacd3faf22c8 (patch)
tree7d4baf5438217c50588e270e5dfa0a57a9fc0b80
parent254058109f469f64b8ca23bb65a206abab380604 (diff)
downloadandroid-node-v8-141be923f3249af870f274524dd0dacd3faf22c8.tar.gz
android-node-v8-141be923f3249af870f274524dd0dacd3faf22c8.tar.bz2
android-node-v8-141be923f3249af870f274524dd0dacd3faf22c8.zip
module: skip preserveSymlinks for main
PR-URL: https://github.com/nodejs/node/pull/19388 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--lib/internal/modules/esm/default_resolve.js5
-rw-r--r--test/es-module/test-esm-symlink-main.js25
-rw-r--r--test/fixtures/es-modules/symlink.mjs1
3 files changed, 29 insertions, 2 deletions
diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js
index 00461e7df1..60516535e9 100644
--- a/lib/internal/modules/esm/default_resolve.js
+++ b/lib/internal/modules/esm/default_resolve.js
@@ -69,7 +69,9 @@ function resolve(specifier, parentURL) {
throw e;
}
- if (!preserveSymlinks) {
+ const isMain = parentURL === undefined;
+
+ if (!preserveSymlinks || isMain) {
const real = realpathSync(getPathFromURL(url), {
[internalFS.realpathCacheKey]: realpathCache
});
@@ -83,7 +85,6 @@ function resolve(specifier, parentURL) {
let format = extensionFormatMap[ext];
if (!format) {
- const isMain = parentURL === undefined;
if (isMain)
format = 'cjs';
else
diff --git a/test/es-module/test-esm-symlink-main.js b/test/es-module/test-esm-symlink-main.js
new file mode 100644
index 0000000000..f7631ef2e5
--- /dev/null
+++ b/test/es-module/test-esm-symlink-main.js
@@ -0,0 +1,25 @@
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const path = require('path');
+const { spawn } = require('child_process');
+const tmpdir = require('../common/tmpdir');
+const fs = require('fs');
+tmpdir.refresh();
+
+const realPath = path.resolve(__dirname, '../fixtures/es-modules/symlink.mjs');
+const symlinkPath = path.resolve(tmpdir.path, 'symlink.js');
+
+try {
+ fs.symlinkSync(realPath, symlinkPath);
+} catch (err) {
+ if (err.code !== 'EPERM') throw err;
+ common.skip('insufficient privileges for symlinks');
+}
+
+spawn(process.execPath,
+ ['--experimental-modules', '--preserve-symlinks', symlinkPath],
+ { stdio: 'inherit' }).on('exit', (code) => {
+ assert.strictEqual(code, 0);
+});
diff --git a/test/fixtures/es-modules/symlink.mjs b/test/fixtures/es-modules/symlink.mjs
new file mode 100644
index 0000000000..8ce1299d16
--- /dev/null
+++ b/test/fixtures/es-modules/symlink.mjs
@@ -0,0 +1 @@
+export var symlinked = true;