Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to properly type updater events #8211

Open
Stanzilla opened this issue May 11, 2024 · 0 comments
Open

How to properly type updater events #8211

Stanzilla opened this issue May 11, 2024 · 0 comments

Comments

@Stanzilla
Copy link

  • Electron-Builder Version: 24.13.3
  • Node Version: 21
  • Electron Version: 30.0.3
  • Electron Type (current, beta, nightly): current

6.1.8

  • Target: Windows

I'm using Vue and am trying to handle an ipcRenderer event that uses different electron-updater args but am failing to properly type them, currently I'm using this:

type UpdaterEventArg =
  | { status: "error"; error: Error; message?: string }
  | { status: "download-progress"; progressInfo: ProgressInfo }
  | { status: "update-downloaded"; event: UpdateDownloadedEvent }
  | { status: "update-not-available"; updateInfo: UpdateInfo }
  | { status: "checking-for-update" }
  | { status: "update-available"; updateInfo: UpdateInfo };

ipcRenderer.on(
      "updaterHandler",
      (_event, status: string, arg: UpdaterEventArg) => {
        console.log(`updaterHandler: ${status}`);

        if (status === "checking-for-update") {
          // No additional data for this status
          return;
        }

        this.updater.status = status;

        if (status === "download-progress" && "progressInfo" in arg) {
          this.updater.progress = Math.floor(arg.progressInfo.percent);
        }

        if (
          (status === "update-available" ||
            status === "update-not-available" ||
            status === "update-downloaded") &&
          "updateInfo" in arg
        ) {
          this.updater.path = `https://github.com/WeakAuras/WeakAuras-Companion/releases/download/v${arg.updateInfo.version}/${arg.updateInfo.path}`;
          this.updater.version = arg.updateInfo.version;

          // List if `updater.fullChangelog` is set to `true`, `string` otherwise.
          if (typeof arg.updateInfo.releaseNotes === "string") {
            this.updater.releaseNotes = arg.updateInfo.releaseNotes;
          } else if (Array.isArray(arg.updateInfo.releaseNotes)) {
            // Convert the array of ReleaseNoteInfo to a string
            this.updater.releaseNotes = arg.updateInfo.releaseNotes
              .map((note) => note.note)
              .join("\n");
          } else {
            this.updater.releaseNotes = "";
          }

          console.log(JSON.stringify(arg));
        }

        if (status === "error" && "error" in arg) {
          console.error(arg.error);
        }
      },
    );

There are several problems with this:

  1. UpdateInfo is not available on update-available, instead the fields are on arc directly, see this dump:
{
    "tag": "v5.2.4",
    "version": "5.2.4",
    "files": [
        {
            "url": "WeakAuras-Companion-Setup-5.2.4.exe",
            "sha512": "rZTRAK77HoJzDxpvEFc7JgsT4tFoiuU+RymZ7rIsHmz51X/BhtnaAUf59dp272XfteZr6izGNOgD8apH2j1OcA==",
            "size": 95556822
        }
    ],
    "path": "WeakAuras-Companion-Setup-5.2.4.exe",
    "sha512": "rZTRAK77HoJzDxpvEFc7JgsT4tFoiuU+RymZ7rIsHmz51X/BhtnaAUf59dp272XfteZr6izGNOgD8apH2j1OcA==",
    "releaseDate": "2024-05-08T23:25:27.812Z",
    "releaseName": "5.2.4",
    "releaseNotes": "<p>Update wow version dropdown for Cataclysm &amp; TWW<br>\nHousekeeping</p>"
}

But when I try to adjust my code to use arg.version instead of arg.updateInfo.version the types fail. I'm unsure how to fix this type declaration and was hoping for some help from the community. Also the docs confused me here, https://www.electron.build/auto-update.html#event-update-available says there should be updateInfo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant