@@ -3,8 +3,7 @@ import * as crypto from 'crypto'
3
3
import * as os from 'os'
4
4
import * as child_process from 'child_process'
5
5
import axios from 'axios'
6
- import * as convert from 'xml-js'
7
- import { Element } from 'xml-js'
6
+ import { XMLParser , XMLBuilder } from 'fast-xml-parser'
8
7
9
8
async function main ( ) {
10
9
console . log ( 'tag name: ' , process . env . RELEASE_VERSION )
@@ -101,43 +100,69 @@ async function main() {
101
100
)
102
101
103
102
const releaseNotesJson = JSON . parse ( releaseNotesStdOut )
104
- const releaseNotesComponents = releaseNotesJson . body . split ( '\n' )
103
+ const releaseNotesComponents : string [ ] = releaseNotesJson . body . split ( '\n' )
105
104
106
- const hpXmlJson = convert . xml2js ( hpXml , { compact : false } ) as Element
107
- const releaseNotesElements : Element [ ] = [ ]
105
+ // XML Modification with fast-xml-parser
106
+ hpXml = fs . readFileSync ( xmlFilePath ) . toString ( )
107
+
108
+ const parserOptions = {
109
+ ignoreAttributes : false ,
110
+ preserveOrder : true ,
111
+ format : true , // Enable formatting
112
+ indentBy : ' ' // Use two spaces for indentation
113
+ }
114
+
115
+ const parser = new XMLParser ( parserOptions )
116
+
117
+ const hpXmlJson = parser . parse ( hpXml )
118
+
119
+ const builder = new XMLBuilder ( parserOptions )
120
+
121
+ const releaseNotesElements : Record < string , Array < Record < string , string > > > [ ] =
122
+ [ ] // An array to hold generated <li> elements
108
123
109
124
for ( const [ i , releaseComponent_i ] of releaseNotesComponents . entries ( ) ) {
110
- //update metainfo hpXml
111
125
if ( i === 0 ) continue
112
126
if ( ! releaseComponent_i . startsWith ( '*' ) ) continue
113
127
if ( releaseComponent_i . includes ( 'http' ) ) continue
114
- const releaseNoteElement : Element = {
115
- type : 'element' ,
116
- name : 'li' ,
117
- elements : [
118
- {
119
- type : 'text' ,
120
- text : releaseComponent_i . slice ( 1 ) //remove the asterisk
121
- }
128
+
129
+ const li = releaseComponent_i
130
+ . replace ( / \n / g, '' )
131
+ . replace ( / \r / g, '' )
132
+ . replace ( / \t / g, '' )
133
+ . slice ( 1 )
134
+ . trim ( )
135
+
136
+ // Creating the <li> element (compatible with fast-xml-parser)
137
+ const releaseNoteElement = {
138
+ li : [
139
+ { '#text' : li } // Directly set the text within the <li> element
122
140
]
123
141
}
142
+
124
143
releaseNotesElements . push ( releaseNoteElement )
125
144
}
126
145
127
- const componentsTag = hpXmlJson . elements ?. [ 0 ]
128
- const releasesTag = componentsTag ?. elements ?. find (
129
- ( val ) => val . name === 'releases'
130
- ) //.releases.release.description.ul =
131
- const releaseListTag =
132
- releasesTag ?. elements ?. [ 0 ] . elements ?. [ 0 ] . elements ?. find (
133
- ( val ) => val . name === 'ul'
134
- )
146
+ const componentsTag = hpXmlJson [ 1 ] . component
147
+ // Locate the 'releases' element within the 'componentsTag'
148
+ const releasesTag = componentsTag . find ( ( val ) => val . releases !== undefined )
149
+
150
+ // Proceed to find the <ul> element as before
151
+ const releaseListTag = releasesTag ?. releases [ 0 ] . release [ 0 ] . description [ 1 ]
152
+
135
153
if ( releaseListTag === undefined ) {
136
154
throw 'releaseListTag ul undefined'
137
155
}
138
- releaseListTag . elements = releaseNotesElements
139
- hpXml = convert . js2xml ( hpXmlJson )
140
- fs . writeFileSync ( xmlFilePath , hpXml )
156
+
157
+ releaseListTag . ul = [ ...releaseNotesElements ] // Set the <ul> element to the generated <li> elements
158
+
159
+ console . log ( 'new releaseListTag = ' , JSON . stringify ( releaseListTag , null , 2 ) )
160
+
161
+ const updatedHpXml = builder . build ( hpXmlJson )
162
+
163
+ console . log ( 'updatedHpXml = ' , updatedHpXml )
164
+
165
+ fs . writeFileSync ( xmlFilePath , updatedHpXml )
141
166
142
167
console . log (
143
168
'Finished updating flathub release! Please review and merge the flathub repo PR manually.'
0 commit comments