@@ -16,6 +16,7 @@ import {
16
16
chmod ,
17
17
symlink
18
18
} from "fs/promises" ;
19
+ import { EventEmitter } from "events" ;
19
20
20
21
import MakerBase from "@electron-forge/maker-base" ;
21
22
import sanitizeName from "@spacingbat3/lss" ;
@@ -93,11 +94,13 @@ const enum RemoteDefaults {
93
94
* ```
94
95
*/
95
96
export default class MakerAppImage < C extends MakerAppImageConfig > extends MakerBase < C > {
97
+ /** @internal */
98
+ readonly __VndReForgedAPI = 1 as const ;
96
99
defaultPlatforms :[ "linux" ] = [ "linux" ] ;
97
100
name = "AppImage" as const ;
98
101
override requiredExternalBinaries :[ "mksquashfs" ] = [ "mksquashfs" ] ;
99
102
override isSupportedOnCurrentPlatform :( ) => true = ( ) => true ;
100
- override async make ( { appName, dir, makeDir, packageJSON, targetArch} : MakerMeta ) {
103
+ override async make ( { appName, dir, makeDir, packageJSON, targetArch} : MakerMeta , ... vendorExt : unknown [ ] ) {
101
104
const {
102
105
actions,
103
106
categories,
@@ -339,12 +342,17 @@ export default class MakerAppImage<C extends MakerAppImageConfig> extends MakerB
339
342
) ;
340
343
await new Promise ( ( resolve , reject ) => {
341
344
mkdir ( dirname ( outFile ) , { recursive : true } ) . then ( ( ) => {
342
- mkSquashFs ( ...mkSquashFsArgs )
343
- . once ( "close" , ( code , _signal , msg ) => code !== 0 ?
344
- reject ( new Error ( `mksquashfs returned ${ msg ? `'${ msg } ' in stderr` : "non-zero code" } (${ code } ).` ) ) :
345
- resolve ( undefined )
346
- )
347
- . once ( "error" , ( error ) => reject ( error ) ) ;
345
+ const evtCh = mkSquashFs ( ...mkSquashFsArgs )
346
+ . once ( "close" , ( code , _signal , msg ) => code !== 0 ?
347
+ reject ( new Error ( `mksquashfs returned ${ msg ? `'${ msg } ' in stderr` : "non-zero code" } (${ code } ).` ) ) :
348
+ resolve ( undefined )
349
+ )
350
+ . once ( "error" , ( error ) => reject ( error ) ) ;
351
+ for ( let vndHead ; vndHead !== undefined && vndHead !== "RF1" ; vndHead = vendorExt . pop ( ) ) ;
352
+ const [ vndCh ] = vendorExt ;
353
+ // Leak current progress to API consumers if supported
354
+ if ( vndCh instanceof EventEmitter )
355
+ evtCh . on ( "progress" , percent => vndCh . emit ( "progress" , percent ) ) ;
348
356
} ) . catch ( error => reject ( error ) ) ;
349
357
} ) ;
350
358
// Append runtime to SquashFS image and wait for that task to finish
0 commit comments