1
1
import { pipeline } from "node:stream/promises" ;
2
2
import { Extract } from "unzip-stream" ;
3
3
import MetadataProvider from "./MetadataProvider.js" ;
4
- import { writeFile } from "node:fs/promises" ;
4
+ import { writeFile , readdir } from "node:fs/promises" ;
5
+ import { createRequire } from "module" ;
6
+ const require = createRequire ( import . meta. url ) ;
5
7
6
8
import type { UI5Enum , UI5EnumValue } from "@ui5-language-assistant/semantic-model-types" ;
9
+ import path from "node:path" ;
7
10
8
11
const RAW_API_JSON_FILES_FOLDER = "tmp/apiJson" ;
9
12
@@ -20,13 +23,35 @@ async function downloadAPIJsons(url: string) {
20
23
}
21
24
}
22
25
26
+ async function extractPseudoModuleNames ( ) {
27
+ const apiJsonList = await readdir ( RAW_API_JSON_FILES_FOLDER ) ;
28
+
29
+ return apiJsonList . flatMap ( ( library ) => {
30
+ const libApiJson = require ( path . resolve ( RAW_API_JSON_FILES_FOLDER , library ) ) ;
31
+ return libApiJson . symbols ;
32
+ } ) . reduce ( ( acc : Record < string , boolean > , symbol ) => {
33
+ if ( symbol . kind === "enum" && symbol . resource . endsWith ( "library.js" ) ) {
34
+ acc [ symbol . name ] = true ;
35
+ }
36
+
37
+ return acc ;
38
+ } , Object . create ( null ) as Record < string , boolean > ) ;
39
+ }
40
+
23
41
async function transformFiles ( ) {
24
42
const metadataProvider = new MetadataProvider ( ) ;
25
- await metadataProvider . init ( RAW_API_JSON_FILES_FOLDER ) ;
43
+ await metadataProvider . init ( RAW_API_JSON_FILES_FOLDER , "1.120.12" /** TODO: Extract it from URL */ ) ;
44
+
45
+ const pseudoModuleNames = await extractPseudoModuleNames ( ) ;
26
46
27
47
const { enums} = metadataProvider . getModel ( ) ;
28
48
29
49
const groupedEnums = Object . keys ( enums ) . reduce ( ( acc : Record < string , UI5Enum [ ] > , enumKey : string ) => {
50
+ // Filter only real pseudo modules i.e. defined within library.js files
51
+ if ( ! pseudoModuleNames [ enumKey ] ) {
52
+ return acc ;
53
+ }
54
+
30
55
const curEnum = enums [ enumKey ] ;
31
56
32
57
acc [ curEnum . library ] = acc [ curEnum . library ] ?? [ ] ;
0 commit comments