From 9da2f9cd0dd1193fdbdedb13fc7389ac43e460ab Mon Sep 17 00:00:00 2001 From: Christoph Tavan Date: Tue, 19 May 2020 00:15:01 +0200 Subject: [PATCH] Handle ERR_PACKAGE_PATH_NOT_EXPORTED gracefully Fixes #104 Closes #108 --- index.js | 4 ++++ .../esm-module-without-svelte-config/index.js | 0 .../package.json | 6 ++++++ test/node_modules/esm-widget/index.js | 0 test/node_modules/esm-widget/package.json | 8 ++++++++ test/node_modules/esm-widget/src/Widget.html | 1 + test/test.js | 16 ++++++++++++++++ 7 files changed, 35 insertions(+) create mode 100644 test/node_modules/esm-module-without-svelte-config/index.js create mode 100644 test/node_modules/esm-module-without-svelte-config/package.json create mode 100644 test/node_modules/esm-widget/index.js create mode 100644 test/node_modules/esm-widget/package.json create mode 100644 test/node_modules/esm-widget/src/Widget.html diff --git a/index.js b/index.js index 0d52cfb..5009f60 100644 --- a/index.js +++ b/index.js @@ -50,6 +50,10 @@ function tryResolve(pkg, importer) { return relative.resolve(pkg, importer); } catch (err) { if (err.code === 'MODULE_NOT_FOUND') return null; + if (err.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') { + console.warn(`WARNING: Could not read svelte config from ${pkg}. Reason: ${err.message}`); + return null; + } throw err; } } diff --git a/test/node_modules/esm-module-without-svelte-config/index.js b/test/node_modules/esm-module-without-svelte-config/index.js new file mode 100644 index 0000000..e69de29 diff --git a/test/node_modules/esm-module-without-svelte-config/package.json b/test/node_modules/esm-module-without-svelte-config/package.json new file mode 100644 index 0000000..f30f103 --- /dev/null +++ b/test/node_modules/esm-module-without-svelte-config/package.json @@ -0,0 +1,6 @@ +{ + "main": "./index.js", + "exports": { + ".": "./index.js" + } +} diff --git a/test/node_modules/esm-widget/index.js b/test/node_modules/esm-widget/index.js new file mode 100644 index 0000000..e69de29 diff --git a/test/node_modules/esm-widget/package.json b/test/node_modules/esm-widget/package.json new file mode 100644 index 0000000..d5d6d33 --- /dev/null +++ b/test/node_modules/esm-widget/package.json @@ -0,0 +1,8 @@ +{ + "main": "./index.js", + "svelte": "src/Widget.html", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + } +} diff --git a/test/node_modules/esm-widget/src/Widget.html b/test/node_modules/esm-widget/src/Widget.html new file mode 100644 index 0000000..9b44ef5 --- /dev/null +++ b/test/node_modules/esm-widget/src/Widget.html @@ -0,0 +1 @@ +

i am a widget

\ No newline at end of file diff --git a/test/test.js b/test/test.js index c48e0e0..f96c26f 100644 --- a/test/test.js +++ b/test/test.js @@ -33,6 +33,22 @@ describe('rollup-plugin-svelte', () => { ); }); + it('ignores esm module not exporting package.json', () => { + const { resolveId } = plugin(); + assert.equal( + resolveId('esm-module-without-svelte-config', path.resolve('test/foo/main.js')), + null + ); + }); + + it('resolves esm module exporting package.json', () => { + const { resolveId } = plugin(); + assert.equal( + resolveId('esm-widget', path.resolve('test/foo/main.js')), + path.resolve('test/node_modules/esm-widget/src/Widget.html') + ); + }); + it('ignores virtual modules', () => { const { resolveId } = plugin(); assert.equal(