6
6
*/
7
7
import { Logger } from '@salesforce/core' ;
8
8
import { isString } from '@salesforce/ts-types' ;
9
- import { MetadataResolver , VirtualTreeContainer , ForceIgnore } from '@salesforce/source-deploy-retrieve' ;
9
+ import {
10
+ MetadataResolver ,
11
+ VirtualTreeContainer ,
12
+ ForceIgnore ,
13
+ RegistryAccess ,
14
+ } from '@salesforce/source-deploy-retrieve' ;
10
15
import { ChangeResult } from './types' ;
11
16
import { isChangeResultWithNameAndType , sourceComponentGuard } from './guards' ;
12
17
import {
@@ -26,67 +31,71 @@ import {
26
31
* @input excludeUnresolvable: boolean Filter out components where you can't get the name and type (that is, it's probably not a valid source component)
27
32
* @input resolveDeleted: constructs a virtualTree instead of the actual filesystem--useful when the files no longer exist
28
33
*/
29
- export const populateTypesAndNames = ( {
30
- elements,
31
- projectPath,
32
- forceIgnore,
33
- excludeUnresolvable = false ,
34
- resolveDeleted = false ,
35
- } : {
36
- elements : ChangeResult [ ] ;
37
- projectPath : string ;
38
- forceIgnore ?: ForceIgnore ;
39
- excludeUnresolvable ?: boolean ;
40
- resolveDeleted ?: boolean ;
41
- } ) : ChangeResult [ ] => {
42
- if ( elements . length === 0 ) {
43
- return [ ] ;
44
- }
45
- const logger = Logger . childFromRoot ( 'SourceTracking.PopulateTypesAndNames' ) ;
46
- logger . debug ( `populateTypesAndNames for ${ elements . length } change elements` ) ;
47
- const filenames = elements . flatMap ( ( element ) => element . filenames ) . filter ( isString ) ;
34
+ export const populateTypesAndNames =
35
+ ( {
36
+ projectPath,
37
+ forceIgnore,
38
+ excludeUnresolvable = false ,
39
+ resolveDeleted = false ,
40
+ registry,
41
+ } : {
42
+ projectPath : string ;
43
+ forceIgnore ?: ForceIgnore ;
44
+ excludeUnresolvable ?: boolean ;
45
+ resolveDeleted ?: boolean ;
46
+ registry : RegistryAccess ;
47
+ } ) =>
48
+ ( elements : ChangeResult [ ] ) : ChangeResult [ ] => {
49
+ if ( elements . length === 0 ) {
50
+ return [ ] ;
51
+ }
52
+ const logger = Logger . childFromRoot ( 'SourceTracking.PopulateTypesAndNames' ) ;
53
+ logger . debug ( `populateTypesAndNames for ${ elements . length } change elements` ) ;
54
+ const filenames = elements . flatMap ( ( element ) => element . filenames ) . filter ( isString ) ;
48
55
49
- // component set generated from the filenames on all local changes
50
- const resolver = new MetadataResolver (
51
- undefined ,
52
- resolveDeleted ? VirtualTreeContainer . fromFilePaths ( filenames ) : undefined ,
53
- ! ! forceIgnore
54
- ) ;
55
- const sourceComponents = filenames
56
- . flatMap ( ( filename ) => {
57
- try {
58
- return resolver . getComponentsFromPath ( filename ) ;
59
- } catch ( e ) {
60
- logger . warn ( `unable to resolve ${ filename } ` ) ;
61
- return undefined ;
62
- }
63
- } )
64
- . filter ( sourceComponentGuard ) ;
56
+ // component set generated from the filenames on all local changes
57
+ const resolver = new MetadataResolver (
58
+ registry ,
59
+ resolveDeleted ? VirtualTreeContainer . fromFilePaths ( filenames ) : undefined ,
60
+ ! ! forceIgnore
61
+ ) ;
62
+ const sourceComponents = filenames
63
+ . flatMap ( ( filename ) => {
64
+ try {
65
+ return resolver . getComponentsFromPath ( filename ) ;
66
+ } catch ( e ) {
67
+ logger . warn ( `unable to resolve ${ filename } ` ) ;
68
+ return undefined ;
69
+ }
70
+ } )
71
+ . filter ( sourceComponentGuard ) ;
65
72
66
- logger . debug ( ` matching SourceComponents have ${ sourceComponents . length } items from local` ) ;
73
+ logger . debug ( ` matching SourceComponents have ${ sourceComponents . length } items from local` ) ;
67
74
68
- const elementMap = new Map (
69
- elements . flatMap ( ( e ) => ( e . filenames ?? [ ] ) . map ( ( f ) => [ ensureRelative ( projectPath ) ( f ) , e ] ) )
70
- ) ;
75
+ const elementMap = new Map (
76
+ elements . flatMap ( ( e ) => ( e . filenames ?? [ ] ) . map ( ( f ) => [ ensureRelative ( projectPath ) ( f ) , e ] ) )
77
+ ) ;
71
78
72
- // iterates the local components and sets their filenames
73
- sourceComponents . filter ( sourceComponentHasFullNameAndType ) . map ( ( matchingComponent ) => {
74
- const filenamesFromMatchingComponent = getAllFiles ( matchingComponent ) ;
75
- const ignored = filenamesFromMatchingComponent . filter ( excludeLwcLocalOnlyTest ) . some ( forceIgnoreDenies ( forceIgnore ) ) ;
76
- filenamesFromMatchingComponent . map ( ( filename ) => {
77
- if ( filename && elementMap . has ( filename ) ) {
78
- // add the type/name from the componentSet onto the element
79
- elementMap . set ( filename , {
80
- origin : 'remote' ,
81
- ...elementMap . get ( filename ) ,
82
- type : matchingComponent . type . name ,
83
- name : matchingComponent . fullName ,
84
- ignored,
85
- } ) ;
86
- }
79
+ // iterates the local components and sets their filenames
80
+ sourceComponents . filter ( sourceComponentHasFullNameAndType ) . map ( ( matchingComponent ) => {
81
+ const filenamesFromMatchingComponent = getAllFiles ( matchingComponent ) ;
82
+ const ignored = filenamesFromMatchingComponent
83
+ . filter ( excludeLwcLocalOnlyTest )
84
+ . some ( forceIgnoreDenies ( forceIgnore ) ) ;
85
+ filenamesFromMatchingComponent . map ( ( filename ) => {
86
+ if ( filename && elementMap . has ( filename ) ) {
87
+ // add the type/name from the componentSet onto the element
88
+ elementMap . set ( filename , {
89
+ origin : 'remote' ,
90
+ ...elementMap . get ( filename ) ,
91
+ type : matchingComponent . type . name ,
92
+ name : matchingComponent . fullName ,
93
+ ignored,
94
+ } ) ;
95
+ }
96
+ } ) ;
87
97
} ) ;
88
- } ) ;
89
- return excludeUnresolvable
90
- ? Array . from ( new Set ( elementMap . values ( ) ) ) . filter ( isChangeResultWithNameAndType )
91
- : Array . from ( new Set ( elementMap . values ( ) ) ) ;
92
- } ;
98
+ return excludeUnresolvable
99
+ ? Array . from ( new Set ( elementMap . values ( ) ) ) . filter ( isChangeResultWithNameAndType )
100
+ : Array . from ( new Set ( elementMap . values ( ) ) ) ;
101
+ } ;
0 commit comments