1
- import * as path from 'path' ;
2
1
import { GetMemberInfo } from './components/getMemberInfo' ;
3
- import { IBMiMember , SearchHit , SearchResults } from './types' ;
4
- import { Tools } from './Tools' ;
5
2
import IBMi from './IBMi' ;
3
+ import { Tools } from './Tools' ;
4
+ import { IBMiMember , SearchHit , SearchResults } from './types' ;
6
5
7
6
export namespace Search {
8
- export async function searchMembers ( connection : IBMi , library : string , sourceFile : string , searchTerm : string , members : string | IBMiMember [ ] , readOnly ?: boolean , ) : Promise < SearchResults > {
7
+
8
+ function parseHitPath ( hit : SearchHit ) : IBMiMember {
9
+ const parts = hit . path . split ( '/' ) ;
10
+ if ( parts . length == 4 ) {
11
+ parts . shift ( ) ;
12
+ }
13
+ return {
14
+ library : parts [ 0 ] ,
15
+ file : parts [ 1 ] ,
16
+ name : parts [ 2 ] ,
17
+ extension : ''
18
+ } ;
19
+ }
20
+
21
+ export async function searchMembers ( connection : IBMi , library : string , sourceFile : string , searchTerm : string , members : string | IBMiMember [ ] , readOnly ?: boolean , ) : Promise < SearchResults > {
9
22
const config = connection . getConfig ( ) ;
10
23
const content = connection . getContent ( ) ;
11
24
12
25
if ( connection && config && content ) {
13
- let detailedMembers : IBMiMember [ ] | undefined ;
14
- let memberFilter : string | undefined ;
26
+ let detailedMembers : IBMiMember [ ] | undefined ;
27
+ let memberFilter : string | undefined ;
15
28
16
29
if ( typeof members === `string` ) {
17
30
memberFilter = connection . sysNameInAmerican ( `${ members } .MBR` ) ;
18
31
} else
19
- if ( Array . isArray ( members ) ) {
20
- if ( members . length > connection . maximumArgsLength ) {
21
- detailedMembers = members ;
22
- memberFilter = "*.MBR" ;
23
- } else {
24
- memberFilter = members . map ( member => `${ member . name } .MBR` ) . join ( ` ` ) ;
32
+ if ( Array . isArray ( members ) ) {
33
+ if ( members . length > connection . maximumArgsLength ) {
34
+ detailedMembers = members ;
35
+ memberFilter = "*.MBR" ;
36
+ } else {
37
+ memberFilter = members . map ( member => `${ member . name } .MBR` ) . join ( ` ` ) ;
38
+ }
25
39
}
26
- }
27
-
40
+
28
41
// First, let's fetch the ASP info
29
42
const asp = await connection . lookupLibraryIAsp ( library ) ;
30
43
@@ -43,38 +56,23 @@ export namespace Search {
43
56
if ( detailedMembers ) {
44
57
// If the user provided a list of members, we need to filter the results to only include those members
45
58
hits = hits . filter ( hit => {
46
- const { name, dir } = path . parse ( hit . path ) ;
47
- const [ lib , spf ] = dir . split ( `/` ) ;
48
- return detailedMembers ! . some ( member => member . name === name && member . library === lib && member . file === spf ) ;
59
+ const hitMember = parseHitPath ( hit ) ;
60
+ return detailedMembers ! . some ( member => member . name === hitMember . name && member . library === hitMember . library && member . file === hitMember . file ) ;
49
61
} ) ;
50
62
51
63
} else {
52
64
// Else, we need to fetch the member info for each hit so we can display the correct extension
53
65
const infoComponent = connection ?. getComponent < GetMemberInfo > ( GetMemberInfo . ID ) ;
54
- const memberInfos : IBMiMember [ ] = hits . map ( hit => {
55
- const { name, dir } = path . parse ( hit . path ) ;
56
- const [ library , file ] = dir . split ( `/` ) ;
57
-
58
- return {
59
- name,
60
- library,
61
- file,
62
- extension : ``
63
- } ;
64
- } ) ;
65
-
66
- detailedMembers = await infoComponent ?. getMultipleMemberInfo ( connection , memberInfos ) ;
66
+ detailedMembers = await infoComponent ?. getMultipleMemberInfo ( connection , hits . map ( parseHitPath ) ) ;
67
67
}
68
68
69
69
// Then fix the extensions in the hit
70
70
for ( const hit of hits ) {
71
- const { name, dir } = path . parse ( hit . path ) ;
72
- const [ lib , spf ] = dir . split ( `/` ) ;
73
-
74
- const foundMember = detailedMembers ?. find ( member => member . name === name && member . library === lib && member . file === spf ) ;
71
+ const hitMember = parseHitPath ( hit ) ;
72
+ const foundMember = detailedMembers ?. find ( member => member . name === hitMember . name && member . library === hitMember . library && member . file === hitMember . file ) ;
75
73
76
74
if ( foundMember ) {
77
- hit . path = connection . sysNameInLocal ( `${ asp ? `${ asp } /` : `` } ${ lib } /${ spf } /${ name } .${ foundMember . extension } ` ) ;
75
+ hit . path = connection . sysNameInLocal ( `${ asp ? `${ asp } /` : `` } ${ foundMember . library } /${ foundMember . file } /${ foundMember . name } .${ foundMember . extension } ` ) ;
78
76
}
79
77
}
80
78
0 commit comments