Skip to content

Commit

Permalink
fix package resolution
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich-Harris committed Feb 9, 2023
1 parent dd64bab commit 82d3697
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 69 deletions.
68 changes: 12 additions & 56 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
const path = require('path');
const fs = require('fs');
const relative = require('require-relative');
const { createFilter } = require('@rollup/pluginutils');
const { compile, preprocess } = require('svelte/compiler');

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

const parse_pkg = function (dir) {
const pkg_file = path.join(dir, 'package.json');

try {
return JSON.parse(fs.readFileSync(pkg_file, 'utf-8'));
} catch (e) {
return false;
}
};

const get_dir = (file, importer) =>
relative.resolve(file, path.dirname(importer));

const find_pkg = function (name, importer) {
let dir, pkg;

const file = `${name}/package.json`;

try {
const resolved = get_dir(file, importer);
dir = path.dirname(resolved);
pkg = require(resolved);
} catch (err) {
if (err.code === 'MODULE_NOT_FOUND') return { pkg: null, dir };
if (err.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') {
dir = path.dirname(get_dir(file, importer));

while (dir) {
pkg = parse_pkg(dir);

if (pkg && pkg.name === name) {
return { pkg, dir };
}

const parent = path.dirname(dir);
if (parent === dir) {
break;
}
dir = parent;
}

return { pkg: null, dir };
}

throw err;
}

return { pkg, dir };
};

/**
* @param [options] {Partial<import('.').Options>}
* @returns {import('rollup').Plugin}
Expand Down Expand Up @@ -120,11 +69,18 @@ module.exports = function (options = {}) {
name += `/${parts.shift()}`;
}

const { pkg, dir } = find_pkg(name, importer);

// use pkg.svelte
if (parts.length === 0 && pkg && pkg.svelte) {
return path.resolve(dir, pkg.svelte);
if (parts.length > 0) return;

let search_dir = importer;
while (search_dir !== (search_dir = path.dirname(search_dir))) {
const dir = path.join(search_dir, 'node_modules', name);
const file = path.join(dir, 'package.json');
if (fs.existsSync(file)) {
const pkg = JSON.parse(fs.readFileSync(file, 'utf-8'));
if (pkg.svelte) {
return path.resolve(dir, pkg.svelte);
}
}
}
},

Expand Down
13 changes: 1 addition & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
"node": ">=10"
},
"dependencies": {
"require-relative": "^0.8.7",
"@rollup/pluginutils": "^4.1.0"
},
"peerDependencies": {
Expand Down

0 comments on commit 82d3697

Please sign in to comment.