Skip to content

Commit 282be74

Browse files
authored
Merge pull request #198 from traed/master
Add option to ignore warnings
2 parents 607e0a9 + c127e26 commit 282be74

File tree

1 file changed

+52
-26
lines changed

1 file changed

+52
-26
lines changed

index.js

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
const path = require('path');
2+
const fs = require('fs');
23
const relative = require('require-relative');
34
const { createFilter } = require('@rollup/pluginutils');
45
const { compile, preprocess } = require('svelte/compiler');
56

67
const PREFIX = '[rollup-plugin-svelte]';
7-
const pkg_export_errors = new Set();
88

99
const plugin_options = new Set([
1010
'emitCss',
@@ -15,6 +15,54 @@ const plugin_options = new Set([
1515
'preprocess'
1616
]);
1717

18+
const parse_pkg = function(dir) {
19+
const pkg_file = path.join(dir, 'package.json');
20+
21+
try {
22+
return JSON.parse(fs.readFileSync(pkg_file, 'utf-8'));
23+
} catch (e) {
24+
return false;
25+
}
26+
}
27+
28+
const get_dir = (file, importer) => relative.resolve(file, path.dirname(importer));
29+
30+
const find_pkg = function(name, importer) {
31+
let dir, pkg;
32+
33+
try {
34+
const file = `${name}/package.json`;
35+
const resolved = get_dir(file, importer);
36+
dir = path.dirname(resolved);
37+
pkg = require(resolved);
38+
} catch (err) {
39+
if (err.code === 'MODULE_NOT_FOUND') return {pkg: null, dir};
40+
if (err.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') {
41+
dir = path.dirname(get_dir(file, importer));
42+
43+
while (dir) {
44+
pkg = parse_pkg(dir);
45+
46+
if (pkg && pkg.name === name) {
47+
return {pkg, dir};
48+
}
49+
50+
const parent = path.dirname(dir);
51+
if (parent === dir) {
52+
break;
53+
}
54+
dir = parent;
55+
}
56+
57+
return {pkg: null, dir};
58+
}
59+
60+
throw err;
61+
}
62+
63+
return {pkg, dir};
64+
}
65+
1866
/**
1967
* @param [options] {Partial<import('.').Options>}
2068
* @returns {import('rollup').Plugin}
@@ -55,27 +103,15 @@ module.exports = function (options = {}) {
55103
// if this is a bare import, see if there's a valid pkg.svelte
56104
const parts = importee.split('/');
57105

58-
let dir, pkg, name = parts.shift();
106+
let name = parts.shift();
59107
if (name && name[0] === '@') {
60108
name += `/${parts.shift()}`;
61109
}
62110

63-
try {
64-
const file = `${name}/package.json`;
65-
const resolved = relative.resolve(file, path.dirname(importer));
66-
dir = path.dirname(resolved);
67-
pkg = require(resolved);
68-
} catch (err) {
69-
if (err.code === 'MODULE_NOT_FOUND') return null;
70-
if (err.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') {
71-
pkg_export_errors.add(name);
72-
return null;
73-
}
74-
throw err;
75-
}
111+
const {pkg, dir} = find_pkg(name, importer);
76112

77113
// use pkg.svelte
78-
if (parts.length === 0 && pkg.svelte) {
114+
if (parts.length === 0 && pkg && pkg.svelte) {
79115
return path.resolve(dir, pkg.svelte);
80116
}
81117
},
@@ -129,16 +165,6 @@ module.exports = function (options = {}) {
129165
}
130166

131167
return compiled.js;
132-
},
133-
134-
/**
135-
* All resolutions done; display warnings wrt `package.json` access.
136-
*/
137-
generateBundle() {
138-
if (pkg_export_errors.size > 0) {
139-
console.warn(`\n${PREFIX} The following packages did not export their \`package.json\` file so we could not check the "svelte" field. If you had difficulties importing svelte components from a package, then please contact the author and ask them to export the package.json file.\n`);
140-
console.warn(Array.from(pkg_export_errors, s => `- ${s}`).join('\n') + '\n');
141-
}
142168
}
143169
};
144170
};

0 commit comments

Comments
 (0)