11const path = require ( 'path' ) ;
22const fs = require ( 'fs' ) ;
3- const relative = require ( 'require-relative' ) ;
43const { createFilter } = require ( '@rollup/pluginutils' ) ;
54const { 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
0 commit comments