@@ -40,11 +40,13 @@ function getSvelteDependencies(
4040 const localRequire = createRequire ( `${ pkgDir } /package.json` ) ;
4141 const resolvedDeps = deps
4242 . map ( ( dep ) => resolveDependencyData ( dep , localRequire ) )
43- . filter ( ( depData ) => ! ! depData && isSvelte ( depData . pkg ) ) as DependencyData [ ] ;
44- // @ts -ignore
43+ . filter ( Boolean ) as DependencyData [ ] ;
4544 for ( const { pkg, dir } of resolvedDeps ) {
46- result . push ( { name : pkg . name , pkg, dir, path } ) ;
47- if ( pkg . dependencies ) {
45+ const type = getSvelteDependencyType ( pkg ) ;
46+ if ( ! type ) continue ;
47+ result . push ( { name : pkg . name , type, pkg, dir, path } ) ;
48+ // continue crawling for component libraries so we can optimize them, js libraries are fine
49+ if ( type === 'component-library' && pkg . dependencies ) {
4850 let dependencyNames = Object . keys ( pkg . dependencies ) ;
4951 const circular = dependencyNames . filter ( ( name ) => path . includes ( name ) ) ;
5052 if ( circular . length > 0 ) {
@@ -102,10 +104,24 @@ function parsePkg(dir: string, silent = false): Pkg | void {
102104 }
103105}
104106
105- function isSvelte ( pkg : Pkg ) {
107+ function getSvelteDependencyType ( pkg : Pkg ) : SvelteDependencyType | undefined {
108+ if ( isSvelteComponentLib ( pkg ) ) {
109+ return 'component-library' ;
110+ } else if ( isSvelteLib ( pkg ) ) {
111+ return 'js-library' ;
112+ } else {
113+ return undefined ;
114+ }
115+ }
116+
117+ function isSvelteComponentLib ( pkg : Pkg ) {
106118 return ! ! pkg . svelte ;
107119}
108120
121+ function isSvelteLib ( pkg : Pkg ) {
122+ return ! ! pkg . dependencies ?. svelte || ! ! pkg . peerDependencies ?. svelte ;
123+ }
124+
109125const COMMON_DEPENDENCIES_WITHOUT_SVELTE_FIELD = [
110126 '@lukeed/uuid' ,
111127 '@sveltejs/vite-plugin-svelte' ,
@@ -178,16 +194,22 @@ interface DependencyData {
178194
179195export interface SvelteDependency {
180196 name : string ;
197+ type : SvelteDependencyType ;
181198 dir : string ;
182199 pkg : Pkg ;
183200 path : string [ ] ;
184201}
185202
203+ // component-library => exports svelte components
204+ // js-library => only uses svelte api, no components
205+ export type SvelteDependencyType = 'component-library' | 'js-library' ;
206+
186207export interface Pkg {
187208 name : string ;
188209 svelte ?: string ;
189210 dependencies ?: DependencyList ;
190211 devDependencies ?: DependencyList ;
212+ peerDependencies ?: DependencyList ;
191213 [ key : string ] : any ;
192214}
193215
0 commit comments