{"version":3,"file":"dmg.js","sourceRoot":"","sources":["../src/dmg.ts"],"names":[],"mappings":"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","sourcesContent":["import { DmgOptions, Target } from \"app-builder-lib\"\nimport { findIdentity, isSignAllowed } from \"app-builder-lib/out/codeSign/macCodeSign\"\nimport { MacPackager } from \"app-builder-lib/out/macPackager\"\nimport { createBlockmap } from \"app-builder-lib/out/targets/differentialUpdateInfoBuilder\"\nimport { Arch, exec, getArchSuffix, InvalidConfigurationError, isEmptyOrSpaces } from \"builder-util\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport { release as getOsRelease } from \"os\"\nimport * as path from \"path\"\nimport { addLicenseToDmg } from \"./dmgLicense\"\nimport { computeBackground, customizeDmg } from \"./dmgUtil\"\nimport { hdiUtil } from \"./hdiuil\"\n\nexport interface DmgBuildConfig {\n  title: string\n  icon?: string | null\n  \"badge-icon\"?: string | null\n  background?: string | null\n  \"background-color\"?: string | null\n  \"icon-size\"?: number | null\n  \"text-size\"?: number | null\n  window?: {\n    position?: {\n      x?: number\n      y?: number\n    }\n    size?: {\n      width?: number\n      height?: number\n    }\n  }\n  format?: string\n  size?: string | null\n  shrink?: boolean\n  filesystem?: string\n  \"compression-level\"?: number | null\n  license?: string | null\n  contents?: Array<{\n    path: string\n    x: number\n    y: number\n    name?: string\n    type?: \"file\" | \"link\" | \"position\"\n    hide_extension?: boolean\n    hidden?: boolean\n  }>\n}\nexport class DmgTarget extends Target {\n  readonly options: DmgOptions = this.packager.config.dmg || Object.create(null)\n\n  isAsyncSupported = false\n\n  constructor(\n    private readonly packager: MacPackager,\n    readonly outDir: string\n  ) {\n    super(\"dmg\")\n  }\n\n  async build(appPath: string, arch: Arch) {\n    const packager = this.packager\n    // tslint:disable-next-line:no-invalid-template-strings\n    const artifactName = packager.expandArtifactNamePattern(\n      this.options,\n      \"dmg\",\n      arch,\n      \"${productName}-\" + (packager.platformSpecificBuildOptions.bundleShortVersion || \"${version}\") + \"-${arch}.${ext}\",\n      true,\n      packager.platformSpecificBuildOptions.defaultArch\n    )\n    const artifactPath = path.join(this.outDir, artifactName)\n    await packager.info.emitArtifactBuildStarted({\n      targetPresentableName: \"DMG\",\n      file: artifactPath,\n      arch,\n    })\n\n    const volumeName = sanitizeFileName(this.computeVolumeName(arch, this.options.title))\n\n    const specification = await this.computeDmgOptions(appPath)\n\n    if (!(await customizeDmg({ appPath, artifactPath, volumeName, specification, packager }))) {\n      return\n    }\n\n    if (this.options.internetEnabled && parseInt(getOsRelease().split(\".\")[0], 10) < 19) {\n      await hdiUtil(addLogLevel([\"internet-enable\"]).concat(artifactPath))\n    }\n\n    const licenseData = await addLicenseToDmg(packager, artifactPath)\n    if (packager.packagerOptions.effectiveOptionComputed != null) {\n      await packager.packagerOptions.effectiveOptionComputed({ licenseData })\n    }\n\n    if (this.options.sign === true) {\n      await this.signDmg(artifactPath)\n    }\n\n    const safeArtifactName = packager.computeSafeArtifactName(artifactName, \"dmg\")\n    const updateInfo = this.options.writeUpdateInfo === false ? null : await createBlockmap(artifactPath, this, packager, safeArtifactName)\n    await packager.info.emitArtifactBuildCompleted({\n      file: artifactPath,\n      safeArtifactName,\n      target: this,\n      arch,\n      packager,\n      isWriteUpdateInfo: updateInfo != null,\n      updateInfo,\n    })\n  }\n\n  private async signDmg(artifactPath: string) {\n    if (!isSignAllowed(false)) {\n      return\n    }\n\n    const packager = this.packager\n    const qualifier = packager.platformSpecificBuildOptions.identity\n    // explicitly disabled if set to null\n    if (qualifier === null) {\n      // macPackager already somehow handle this situation, so, here just return\n      return\n    }\n\n    const keychainFile = (await packager.codeSigningInfo.value).keychainFile\n    const certificateType = \"Developer ID Application\"\n    let identity = await findIdentity(certificateType, qualifier, keychainFile)\n    if (identity == null) {\n      identity = await findIdentity(\"Mac Developer\", qualifier, keychainFile)\n      if (identity == null) {\n        return\n      }\n    }\n\n    const args = [\"--sign\", identity.hash!]\n    if (keychainFile != null) {\n      args.push(\"--keychain\", keychainFile)\n    }\n    args.push(artifactPath)\n    await exec(\"codesign\", args)\n  }\n\n  computeVolumeName(arch: Arch, custom?: string | null): string {\n    const appInfo = this.packager.appInfo\n    const shortVersion = this.packager.platformSpecificBuildOptions.bundleShortVersion || appInfo.version\n    const archString = getArchSuffix(arch, this.packager.platformSpecificBuildOptions.defaultArch)\n\n    if (custom == null) {\n      return `${appInfo.productFilename} ${shortVersion}${archString}`\n    }\n\n    return custom\n      .replace(/\\${arch}/g, archString)\n      .replace(/\\${shortVersion}/g, shortVersion)\n      .replace(/\\${version}/g, appInfo.version)\n      .replace(/\\${name}/g, appInfo.name)\n      .replace(/\\${productName}/g, appInfo.productName)\n  }\n\n  // public to test\n  async computeDmgOptions(appPath: string): Promise<DmgOptions> {\n    const packager = this.packager\n    const specification: DmgOptions = { ...this.options }\n    if (specification.icon == null && specification.icon !== null) {\n      specification.icon = await packager.getIconPath()\n    }\n\n    if (specification.icon != null && isEmptyOrSpaces(specification.icon)) {\n      throw new InvalidConfigurationError(\"dmg.icon cannot be specified as empty string\")\n    }\n\n    const background = specification.background\n    if (specification.backgroundColor != null) {\n      if (background != null) {\n        throw new InvalidConfigurationError(\"Both dmg.backgroundColor and dmg.background are specified — please set the only one\")\n      }\n    } else if (background == null) {\n      specification.background = await computeBackground(packager)\n    } else {\n      specification.background = await packager.getResource(background)\n    }\n\n    if (specification.format == null) {\n      if (process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL != null) {\n        specification.format = \"UDZO\"\n      } else if (packager.compression === \"store\") {\n        specification.format = \"UDRO\"\n      } else {\n        specification.format = packager.compression === \"maximum\" ? \"UDBZ\" : \"UDZO\"\n      }\n    }\n\n    if (specification.contents == null) {\n      specification.contents = [\n        {\n          x: 130,\n          y: 220,\n          path: appPath,\n          type: \"file\",\n          name: `${packager.appInfo.productFilename}.app`,\n        },\n        {\n          x: 410,\n          y: 220,\n          type: \"link\",\n          path: \"/Applications\",\n        },\n      ]\n    }\n    return specification\n  }\n}\n\nfunction addLogLevel(args: Array<string>, isVerbose = process.env.DEBUG_DMG === \"true\"): Array<string> {\n  args.push(isVerbose ? \"-verbose\" : \"-quiet\")\n  return args\n}\n"]}