@@ -88,8 +88,8 @@ export default class UpgradeInteractiveCommand extends BaseCommand {
88
88
if ( from === to )
89
89
return to ;
90
90
91
- const parsedFrom = structUtils . parseRange ( from ) ;
92
- const parsedTo = structUtils . parseRange ( to ) ;
91
+ const parsedFrom = structUtils . parseRange ( from . replace ( / ^ p a t c h : / , '' ) ) ;
92
+ const parsedTo = structUtils . parseRange ( to . replace ( / ^ p a t c h : / , '' ) ) ;
93
93
94
94
const matchedFrom = parsedFrom . selector . match ( SIMPLE_SEMVER ) ;
95
95
const matchedTo = parsedTo . selector . match ( SIMPLE_SEMVER ) ;
@@ -133,34 +133,43 @@ export default class UpgradeInteractiveCommand extends BaseCommand {
133
133
} ;
134
134
135
135
const fetchSuggestions = async ( descriptor : Descriptor ) : Promise < UpgradeSuggestions > => {
136
- const referenceRange = semver . valid ( descriptor . range )
137
- ? `^${ descriptor . range } `
138
- : descriptor . range ;
136
+ // patch:@amplitude /analytics-browser@npm%3A2.11.0#~/.yarn/patches/@amplitude-analytics-browser-npm-2.11.0-790ed576a5.patch
137
+ const { protocol, source, selector, params } = structUtils . parseRange ( descriptor . range ) ;
138
+ const isPatched = protocol === 'patch:' && source ;
139
+ const [ patchPackageName , descriptorRange ] = isPatched
140
+ ? source . split ( ':' )
141
+ : [ undefined , descriptor . range ] ;
142
+
143
+ const referenceRange = semver . valid ( descriptorRange )
144
+ ? `^${ descriptorRange } `
145
+ : descriptorRange
139
146
140
147
const [ resolution , latest ] = await Promise . all ( [
141
- fetchUpdatedDescriptor ( descriptor , descriptor . range , referenceRange ) . catch ( ( ) => null ) ,
142
- fetchUpdatedDescriptor ( descriptor , descriptor . range , `latest` ) . catch ( ( ) => null ) ,
148
+ fetchUpdatedDescriptor ( descriptor , descriptorRange , referenceRange ) . catch ( ( ) => null ) ,
149
+ fetchUpdatedDescriptor ( descriptor , descriptorRange , `latest` ) . catch ( ( ) => null ) ,
143
150
] ) ;
144
151
145
152
const suggestions : Array < { value : string | null , label : string } > = [ {
146
153
value : null ,
147
- label : descriptor . range ,
154
+ label : isPatched ? `patch: ${ descriptorRange } ` : descriptorRange ,
148
155
} ] ;
149
156
150
- if ( resolution && resolution !== descriptor . range ) {
151
- suggestions . push ( {
152
- value : resolution ,
153
- label : colorizeVersionDiff ( descriptor . range , resolution ) ,
154
- } ) ;
157
+ if ( resolution && resolution !== descriptorRange ) {
158
+ const value = isPatched
159
+ ? `patch:${ patchPackageName } %3A${ resolution } #${ selector } ${ params ? `?${ params } ` : `` } `
160
+ : resolution ;
161
+ const label = `${ isPatched ? 'patch:' : '' } ${ colorizeVersionDiff ( descriptorRange , resolution ) } ` ;
162
+ suggestions . push ( { value, label } ) ;
155
163
} else {
156
164
suggestions . push ( { value : null , label : `` } ) ;
157
165
}
158
166
159
- if ( latest && latest !== resolution && latest !== descriptor . range ) {
160
- suggestions . push ( {
161
- value : latest ,
162
- label : colorizeVersionDiff ( descriptor . range , latest ) ,
163
- } ) ;
167
+ if ( latest && latest !== resolution && latest !== descriptorRange ) {
168
+ const value = isPatched
169
+ ? `patch:${ patchPackageName } %3A:${ latest } #${ selector } ${ params ? `?${ params } ` : `` } `
170
+ : latest ;
171
+ const label = `${ isPatched ? 'patch:' : '' } ${ colorizeVersionDiff ( descriptorRange , latest ) } ` ;
172
+ suggestions . push ( { value, label } ) ;
164
173
} else {
165
174
suggestions . push ( { value : null , label : `` } ) ;
166
175
}
0 commit comments