@@ -21,6 +21,7 @@ import {
21
21
RegistryAccess ,
22
22
VirtualTreeContainer ,
23
23
} from '@salesforce/source-deploy-retrieve' ;
24
+ import { trimUntil } from '@salesforce/source-deploy-retrieve/lib/src/utils/path' ;
24
25
import { RemoteSourceTrackingService , remoteChangeElementToChangeResult } from './shared/remoteSourceTrackingService' ;
25
26
import { ShadowRepo } from './shared/localShadowRepo' ;
26
27
@@ -128,6 +129,30 @@ export class SourceTracking extends AsyncCreatable {
128
129
undefined ,
129
130
VirtualTreeContainer . fromFilePaths ( grouping . deletes )
130
131
) ;
132
+
133
+ allDeletes
134
+ . flatMap ( ( filename ) => resolverForDeletes . getComponentsFromPath ( filename ) )
135
+ . filter ( sourceComponentGuard )
136
+ . map ( ( component ) => {
137
+ // if the component is a file in a bundle type AND there are files from the bundle that are not deleted, set the bundle for deploy, not for delete
138
+ if ( component . type . strategies ?. adapter === 'bundle' ) {
139
+ const filename = component . xml ?? component . content ?? component . walkContent ( ) ?. [ 0 ] ;
140
+ // all bundle types have a directory name
141
+ if ( fs . existsSync ( trimUntil ( filename , component . type . directoryName as string ) ) ) {
142
+ try {
143
+ resolverForNonDeletes
144
+ . getComponentsFromPath ( resolve ( filename ) )
145
+ . filter ( sourceComponentGuard )
146
+ . map ( ( nonDeletedComponent ) => componentSet . add ( nonDeletedComponent ) ) ;
147
+ } catch ( e ) {
148
+ this . logger . warn ( `unable to resolve ${ filename } ` ) ;
149
+ }
150
+ }
151
+ } else {
152
+ componentSet . add ( component , DestructiveChangesType . POST ) ;
153
+ }
154
+ } ) ;
155
+
131
156
allNonDeletes
132
157
. flatMap ( ( filename ) => {
133
158
try {
@@ -140,10 +165,6 @@ export class SourceTracking extends AsyncCreatable {
140
165
. filter ( sourceComponentGuard )
141
166
. map ( ( component ) => componentSet . add ( component ) ) ;
142
167
143
- allDeletes
144
- . flatMap ( ( filename ) => resolverForDeletes . getComponentsFromPath ( filename ) )
145
- . filter ( sourceComponentGuard )
146
- . map ( ( component ) => componentSet . add ( component , DestructiveChangesType . POST ) ) ;
147
168
return componentSet ;
148
169
} )
149
170
. filter ( ( componentSet ) => componentSet . size > 0 ) ;
0 commit comments