@@ -40,11 +40,13 @@ function getSvelteDependencies(
40
40
const localRequire = createRequire ( `${ pkgDir } /package.json` ) ;
41
41
const resolvedDeps = deps
42
42
. map ( ( dep ) => resolveDependencyData ( dep , localRequire ) )
43
- . filter ( ( depData ) => ! ! depData && isSvelte ( depData . pkg ) ) as DependencyData [ ] ;
44
- // @ts -ignore
43
+ . filter ( Boolean ) as DependencyData [ ] ;
45
44
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 ) {
48
50
let dependencyNames = Object . keys ( pkg . dependencies ) ;
49
51
const circular = dependencyNames . filter ( ( name ) => path . includes ( name ) ) ;
50
52
if ( circular . length > 0 ) {
@@ -102,10 +104,24 @@ function parsePkg(dir: string, silent = false): Pkg | void {
102
104
}
103
105
}
104
106
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 ) {
106
118
return ! ! pkg . svelte ;
107
119
}
108
120
121
+ function isSvelteLib ( pkg : Pkg ) {
122
+ return ! ! pkg . dependencies ?. svelte || ! ! pkg . peerDependencies ?. svelte ;
123
+ }
124
+
109
125
const COMMON_DEPENDENCIES_WITHOUT_SVELTE_FIELD = [
110
126
'@lukeed/uuid' ,
111
127
'@sveltejs/vite-plugin-svelte' ,
@@ -178,16 +194,22 @@ interface DependencyData {
178
194
179
195
export interface SvelteDependency {
180
196
name : string ;
197
+ type : SvelteDependencyType ;
181
198
dir : string ;
182
199
pkg : Pkg ;
183
200
path : string [ ] ;
184
201
}
185
202
203
+ // component-library => exports svelte components
204
+ // js-library => only uses svelte api, no components
205
+ export type SvelteDependencyType = 'component-library' | 'js-library' ;
206
+
186
207
export interface Pkg {
187
208
name : string ;
188
209
svelte ?: string ;
189
210
dependencies ?: DependencyList ;
190
211
devDependencies ?: DependencyList ;
212
+ peerDependencies ?: DependencyList ;
191
213
[ key : string ] : any ;
192
214
}
193
215
0 commit comments