Skip to content

Commit d9f4c8a

Browse files
committed
maker-apimage: Implement custom extensions.
This is for a (possibly) future implementation of Forge's unofficial maker extensions, allowing for a set of integrations with third-party Forge Core/CLI implementations.
1 parent 85f474b commit d9f4c8a

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

Diff for: makers/appimage/src/main.ts

+15-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
chmod,
1717
symlink
1818
} from "fs/promises";
19+
import { EventEmitter } from "events";
1920

2021
import MakerBase from "@electron-forge/maker-base";
2122
import sanitizeName from "@spacingbat3/lss";
@@ -93,11 +94,13 @@ const enum RemoteDefaults {
9394
* ```
9495
*/
9596
export default class MakerAppImage<C extends MakerAppImageConfig> extends MakerBase<C> {
97+
/** @internal */
98+
readonly __VndReForgedAPI = 1 as const;
9699
defaultPlatforms:["linux"] = ["linux"];
97100
name = "AppImage" as const;
98101
override requiredExternalBinaries:["mksquashfs"] = ["mksquashfs"];
99102
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[]) {
101104
const {
102105
actions,
103106
categories,
@@ -339,12 +342,17 @@ export default class MakerAppImage<C extends MakerAppImageConfig> extends MakerB
339342
);
340343
await new Promise((resolve, reject) => {
341344
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));
348356
}).catch(error => reject(error));
349357
});
350358
// Append runtime to SquashFS image and wait for that task to finish

0 commit comments

Comments
 (0)