{"version":3,"file":"AppImageTarget.js","sourceRoot":"","sources":["../../../src/targets/appimage/AppImageTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { IconInfo } from \"../../platformPackager\"\nimport { Arch, log, serializeToYaml } from \"builder-util\"\nimport { outputFile } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Target } from \"../../core\"\nimport { LinuxPackager } from \"../../linuxPackager\"\nimport { AppImageOptions } from \"../../options/linuxOptions\"\nimport { getAppUpdatePublishConfiguration } from \"../../publish/PublishManager\"\nimport { executeAppBuilderAsJson, objectToArgs } from \"../../util/appBuilder\"\nimport { getNotLocalizedLicenseFile } from \"../../util/license\"\nimport { LinuxTargetHelper } from \"../LinuxTargetHelper\"\nimport { createStageDir, StageDir } from \"../targetUtil\"\nimport { buildAppImage } from \"./appImageUtil\"\nimport { BlockMapDataHolder } from \"builder-util-runtime\"\n\n// https://unix.stackexchange.com/questions/375191/append-to-sub-directory-inside-squashfs-file\n\nexport const APP_RUN_ENTRYPOINT = \"AppRun\"\n\nexport default class AppImageTarget extends Target {\n  readonly options: AppImageOptions = { ...this.packager.platformSpecificBuildOptions, ...(this.packager.config as any)[this.name] }\n\n  private readonly desktopEntry: Lazy<string>\n\n  constructor(\n    _ignored: string,\n    private readonly packager: LinuxPackager,\n    private readonly helper: LinuxTargetHelper,\n    readonly outDir: string\n  ) {\n    super(\"appImage\")\n\n    this.desktopEntry = new Lazy<string>(() => {\n      const args = this.options.executableArgs?.join(\" \") || \"--no-sandbox\"\n      return helper.computeDesktopEntry(this.options, `${APP_RUN_ENTRYPOINT} ${args} %U`, {\n        \"X-AppImage-Version\": `${packager.appInfo.buildVersion}`,\n      })\n    })\n  }\n\n  async build(appOutDir: string, arch: Arch): Promise<any> {\n    const packager = this.packager\n\n    const options = this.options\n    // https://github.com/electron-userland/electron-builder/issues/775\n    // https://github.com/electron-userland/electron-builder/issues/1726\n    const artifactName = packager.expandArtifactNamePattern(options, \"AppImage\", arch)\n    const artifactPath = path.join(this.outDir, artifactName)\n\n    await packager.info.emitArtifactBuildStarted({\n      targetPresentableName: \"AppImage\",\n      file: artifactPath,\n      arch,\n    })\n\n    // Parallelize independent async operations\n    const [publishConfig, stageDir, desktopEntry, icons, license] = await Promise.all([\n      getAppUpdatePublishConfiguration(packager, options, arch, false),\n      createStageDir(this, packager, arch),\n      this.desktopEntry.value,\n      this.helper.icons,\n      getNotLocalizedLicenseFile(options.license, this.packager, [\"txt\", \"html\"]),\n    ])\n\n    if (publishConfig != null) {\n      await outputFile(path.join(packager.getResourcesDir(appOutDir), \"app-update.yml\"), serializeToYaml(publishConfig))\n    }\n\n    if (this.packager.packagerOptions.effectiveOptionComputed != null && (await this.packager.packagerOptions.effectiveOptionComputed({ desktop: desktopEntry }))) {\n      await stageDir.cleanup()\n      return\n    }\n\n    let updateInfo: BlockMapDataHolder\n    try {\n      const appimageTool = this.packager.config.toolsets?.appimage\n      if (appimageTool == null || appimageTool === \"0.0.0\") {\n        updateInfo = await this.buildFuse2AppImage({ stageDir, arch, artifactPath, appOutDir, options, packager, desktopEntry, icons, license })\n      } else {\n        updateInfo = await buildAppImage({\n          appDir: appOutDir,\n          stageDir: stageDir.dir,\n          arch,\n          output: artifactPath,\n          options: {\n            productName: this.packager.appInfo.productName,\n            productFilename: this.packager.appInfo.productFilename,\n            executableName: this.packager.executableName,\n            license,\n            desktopEntry,\n            icons,\n            fileAssociations: this.packager.fileAssociations,\n            compression: this.packager.compression === \"maximum\" ? \"xz\" : undefined,\n          },\n        })\n      }\n    } catch (error: any) {\n      log.error({ error: error.message }, \"failed to build AppImage\")\n      await stageDir.cleanup().catch(() => {})\n      throw error\n    }\n    await stageDir.cleanup()\n\n    await packager.info.emitArtifactBuildCompleted({\n      file: artifactPath,\n      safeArtifactName: packager.computeSafeArtifactName(artifactName, \"AppImage\", arch, false),\n      target: this,\n      arch,\n      packager,\n      isWriteUpdateInfo: true,\n      updateInfo,\n    })\n  }\n\n  private async buildFuse2AppImage(props: {\n    stageDir: StageDir\n    arch: Arch\n    artifactPath: string\n    appOutDir: string\n    options: AppImageOptions\n    packager: LinuxPackager\n    desktopEntry: string\n    icons: IconInfo[]\n    license: string | null\n  }): Promise<BlockMapDataHolder> {\n    const { stageDir, arch, artifactPath, appOutDir, options, packager, desktopEntry, icons, license } = props\n\n    const args = [\n      \"appimage\",\n      \"--stage\",\n      stageDir.dir,\n      \"--arch\",\n      Arch[arch],\n      \"--output\",\n      artifactPath,\n      \"--app\",\n      appOutDir,\n      \"--configuration\",\n      JSON.stringify({\n        productName: this.packager.appInfo.productName,\n        productFilename: this.packager.appInfo.productFilename,\n        desktopEntry,\n        executableName: this.packager.executableName,\n        icons,\n        fileAssociations: this.packager.fileAssociations,\n        ...options,\n      }),\n    ]\n    objectToArgs(args, {\n      license,\n    })\n    if (packager.compression === \"maximum\") {\n      args.push(\"--compression\", \"xz\")\n    }\n\n    const updateInfo = await executeAppBuilderAsJson<BlockMapDataHolder>(args)\n    return updateInfo\n  }\n}\n"]}