@@ -56,18 +56,28 @@ export function createPackageJson(
56
56
} ) ;
57
57
Object . entries ( npmDeps . peerDependencies ) . forEach ( ( [ packageName , version ] ) => {
58
58
if ( ! packageJson . peerDependencies ?. [ packageName ] ) {
59
- packageJson . dependencies ??= { } ;
60
- packageJson . dependencies [ packageName ] = version ;
59
+ if ( rootPackageJson . dependencies ?. [ packageName ] ) {
60
+ packageJson . dependencies ??= { } ;
61
+ packageJson . dependencies [ packageName ] = version ;
62
+ return ;
63
+ }
64
+
65
+ const isOptionalPeer =
66
+ npmDeps . peerDependenciesMeta [ packageName ] ?. optional ;
67
+ if ( ! isOptionalPeer ) {
68
+ packageJson . peerDependencies ??= { } ;
69
+ packageJson . peerDependencies [ packageName ] = version ;
70
+ } else if ( ! options . isProduction ) {
71
+ // add peer optional dependencies if not in production
72
+ packageJson . peerDependencies ??= { } ;
73
+ packageJson . peerDependencies [ packageName ] = version ;
74
+ packageJson . peerDependenciesMeta ??= { } ;
75
+ packageJson . peerDependenciesMeta [ packageName ] = {
76
+ optional : true ,
77
+ } ;
78
+ }
61
79
}
62
80
} ) ;
63
- if ( options . isProduction && packageJson . peerDependencies ) {
64
- const mandatoryPeedDeps = filterOptionalPeerDependencies ( packageJson ) ;
65
- if ( mandatoryPeedDeps ) {
66
- packageJson . peerDependencies = mandatoryPeedDeps ;
67
- } else {
68
- delete packageJson . peerDependencies ;
69
- }
70
- }
71
81
72
82
packageJson . devDependencies &&= sortObjectByKeys ( packageJson . devDependencies ) ;
73
83
packageJson . dependencies &&= sortObjectByKeys ( packageJson . dependencies ) ;
@@ -87,7 +97,8 @@ function findAllNpmDeps(
87
97
list : {
88
98
dependencies : Record < string , string > ;
89
99
peerDependencies : Record < string , string > ;
90
- } = { dependencies : { } , peerDependencies : { } } ,
100
+ peerDependenciesMeta : Record < string , { optional : boolean } > ;
101
+ } = { dependencies : { } , peerDependencies : { } , peerDependenciesMeta : { } } ,
91
102
seen = new Set < string > ( )
92
103
) {
93
104
const node = graph . externalNodes [ projectName ] ;
@@ -125,6 +136,7 @@ function recursivelyCollectPeerDependencies(
125
136
list : {
126
137
dependencies : Record < string , string > ;
127
138
peerDependencies : Record < string , string > ;
139
+ peerDependenciesMeta : Record < string , { optional : boolean } > ;
128
140
} ,
129
141
seen = new Set < string > ( )
130
142
) {
@@ -145,13 +157,18 @@ function recursivelyCollectPeerDependencies(
145
157
. map ( ( dependency ) => graph . externalNodes [ dependency ] )
146
158
. filter ( Boolean )
147
159
. forEach ( ( node ) => {
148
- if (
149
- ! packageJson . peerDependenciesMeta ?. [ node . data . packageName ]
150
- ?. optional &&
151
- ! seen . has ( node . name )
152
- ) {
160
+ if ( ! seen . has ( node . name ) ) {
153
161
seen . add ( node . name ) ;
154
162
list . peerDependencies [ node . data . packageName ] = node . data . version ;
163
+ if (
164
+ packageJson . peerDependenciesMeta &&
165
+ packageJson . peerDependenciesMeta [ node . data . packageName ] &&
166
+ packageJson . peerDependenciesMeta [ node . data . packageName ] . optional
167
+ ) {
168
+ list . peerDependenciesMeta [ node . data . packageName ] = {
169
+ optional : true ,
170
+ } ;
171
+ }
155
172
recursivelyCollectPeerDependencies ( node . name , graph , list , seen ) ;
156
173
}
157
174
} ) ;
0 commit comments