Skip to content

Commit 66b806b

Browse files
authored
Merge pull request #205 from sveltejs/fix-pkg-resolution
fix package resolution
2 parents dd64bab + 82d3697 commit 66b806b

File tree

3 files changed

+13
-69
lines changed

3 files changed

+13
-69
lines changed

index.js

Lines changed: 12 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const path = require('path');
22
const fs = require('fs');
3-
const relative = require('require-relative');
43
const { createFilter } = require('@rollup/pluginutils');
54
const { compile, preprocess } = require('svelte/compiler');
65

@@ -15,56 +14,6 @@ const plugin_options = new Set([
1514
'preprocess'
1615
]);
1716

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) =>
29-
relative.resolve(file, path.dirname(importer));
30-
31-
const find_pkg = function (name, importer) {
32-
let dir, pkg;
33-
34-
const file = `${name}/package.json`;
35-
36-
try {
37-
const resolved = get_dir(file, importer);
38-
dir = path.dirname(resolved);
39-
pkg = require(resolved);
40-
} catch (err) {
41-
if (err.code === 'MODULE_NOT_FOUND') return { pkg: null, dir };
42-
if (err.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') {
43-
dir = path.dirname(get_dir(file, importer));
44-
45-
while (dir) {
46-
pkg = parse_pkg(dir);
47-
48-
if (pkg && pkg.name === name) {
49-
return { pkg, dir };
50-
}
51-
52-
const parent = path.dirname(dir);
53-
if (parent === dir) {
54-
break;
55-
}
56-
dir = parent;
57-
}
58-
59-
return { pkg: null, dir };
60-
}
61-
62-
throw err;
63-
}
64-
65-
return { pkg, dir };
66-
};
67-
6817
/**
6918
* @param [options] {Partial<import('.').Options>}
7019
* @returns {import('rollup').Plugin}
@@ -120,11 +69,18 @@ module.exports = function (options = {}) {
12069
name += `/${parts.shift()}`;
12170
}
12271

123-
const { pkg, dir } = find_pkg(name, importer);
124-
125-
// use pkg.svelte
126-
if (parts.length === 0 && pkg && pkg.svelte) {
127-
return path.resolve(dir, pkg.svelte);
72+
if (parts.length > 0) return;
73+
74+
let search_dir = importer;
75+
while (search_dir !== (search_dir = path.dirname(search_dir))) {
76+
const dir = path.join(search_dir, 'node_modules', name);
77+
const file = path.join(dir, 'package.json');
78+
if (fs.existsSync(file)) {
79+
const pkg = JSON.parse(fs.readFileSync(file, 'utf-8'));
80+
if (pkg.svelte) {
81+
return path.resolve(dir, pkg.svelte);
82+
}
83+
}
12884
}
12985
},
13086

package-lock.json

Lines changed: 1 addition & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
"node": ">=10"
2626
},
2727
"dependencies": {
28-
"require-relative": "^0.8.7",
2928
"@rollup/pluginutils": "^4.1.0"
3029
},
3130
"peerDependencies": {

0 commit comments

Comments
 (0)