{"version":3,"file":"LinuxTargetHelper.js","sourceRoot":"","sources":["../../src/targets/LinuxTargetHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, exists, InvalidConfigurationError, isEmptyOrSpaces, log } from \"builder-util\"\nimport { deepAssign } from \"builder-util-runtime\"\nimport { outputFile } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport { join } from \"path\"\nimport * as semver from \"semver\"\nimport { CompressionLevel } from \"../core\"\nimport { LinuxPackager } from \"../linuxPackager\"\nimport { CommonLinuxOptions } from \"../options/linuxOptions\"\nimport { SnapCore } from \"./snap/SnapTarget\"\nimport { SnapCore24 } from \"./snap/core24\"\nimport { SnapCoreCustom } from \"./snap/coreCustom\"\nimport { SnapCoreLegacy } from \"./snap/coreLegacy\"\nimport { IconInfo } from \"../util/iconConverter\"\n\n/**\n * Escape a string value for use in a freedesktop .desktop file string field\n * (Name, Comment, StartupWMClass, etc.).\n *\n * The freedesktop Desktop Entry Specification requires that the following\n * characters be escaped in string / localestring values:\n *   \\n  →  \\\\n      (newline — would inject new key=value lines otherwise)\n *   \\r  →  \\\\r\n *   \\t  →  \\\\t\n *   \\\\  →  \\\\\\\\\n *\n * Without escaping, a productName or description containing a literal newline\n * can inject arbitrary key=value pairs into the generated .desktop file,\n * potentially overriding the Exec key.\n *\n * @see https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#value-types\n */\nfunction desktopStringEscape(value: string): string {\n  return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/\\t/g, \"\\\\t\")\n}\n\n/**\n * Characters that require an Exec argument to be double-quoted per the\n * freedesktop Desktop Entry Specification.  Plain alphanumeric args and\n * field codes must NOT be wrapped in quotes.\n *\n * @see https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables\n */\nconst EXEC_RESERVED_RE = /[\\s\"'`\\\\<>~|&;$*?#()]/\n\n/**\n * Quote a single argument for use in a .desktop file Exec key.\n *\n * Field codes (`%f`, `%u`, `%F`, `%U`, etc.) MUST be left unquoted — the\n * desktop launcher only expands them in unquoted token positions.  Wrapping\n * them in `\"…\"` causes the launcher to treat them as literal strings, which\n * breaks file-association / drag-and-drop functionality.\n *\n * For all other arguments, double-quoting is used when the argument contains\n * any character that would be misinterpreted by the launcher without quoting\n * (spaces, shell metacharacters, etc.).  Safe plain-word args are passed\n * through unchanged to keep the Exec line readable.\n *\n * @see https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables\n */\nfunction desktopExecArgEscape(arg: string): string {\n  // Field codes (%f, %u, %F, %U, %i, %c, %k, …) must never be quoted.\n  if (/^%[a-zA-Z]$/.test(arg)) {\n    return arg\n  }\n  // Only quote when the arg actually contains characters that need it.\n  if (EXEC_RESERVED_RE.test(arg)) {\n    return `\"${arg.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n  }\n  return arg\n}\n\nfunction mapLinuxCompressionToSnap(level: CompressionLevel | null | undefined): \"xz\" | \"lzo\" | undefined {\n  if (level === \"store\") {\n    return \"lzo\"\n  }\n  if (level === \"maximum\") {\n    return \"xz\"\n  }\n  return undefined\n}\n\nexport const installPrefix = \"/opt\"\n\nexport class LinuxTargetHelper {\n  private readonly iconPromise = new Lazy(() => this.computeDesktopIcons())\n\n  private readonly mimeTypeFilesPromise = new Lazy(() => this.computeMimeTypeFiles())\n\n  maxIconPath: string | null = null\n\n  constructor(private packager: LinuxPackager) {}\n\n  get icons(): Promise<Array<IconInfo>> {\n    return this.iconPromise.value\n  }\n\n  get mimeTypeFiles(): Promise<string | null> {\n    return this.mimeTypeFilesPromise.value\n  }\n\n  getSnapCore(): SnapCore<any> {\n    const { snapcraft, snap: legacySnap } = this.packager.config\n    if (snapcraft != null && legacySnap != null) {\n      log.warn(\"Both `snapcraft` and `snap` configurations are present. `snapcraft` takes precedence; please remove the `snap` key to silence this warning.\")\n    }\n\n    // Merge linux-level options (category, description, mimeTypes, etc.) as the base so they\n    // propagate into the generated snapcraft.yaml and .desktop file without requiring users to\n    // duplicate them under core24/core18/etc. Per-core options always win for conflicts.\n    // linux.compression is a CompressionLevel (\"store\"/\"normal\"/\"maximum\"); snap compression is an\n    // algorithm (\"xz\"/\"lzo\"). Map the level to the nearest algorithm; per-core options override.\n    const { compression: linuxCompression, ...linuxOptions } = this.packager.platformSpecificBuildOptions\n    const snapLinuxOptions = { ...linuxOptions, compression: mapLinuxCompressionToSnap(linuxCompression) }\n\n    if (snapcraft != null) {\n      const core = snapcraft.base\n      const options = snapcraft[core] || {}\n      switch (core) {\n        case \"core18\":\n        case \"core20\":\n        case \"core22\":\n          if (!this.isElectronVersionGreaterOrEqualThan(\"4.0.0\")) {\n            if (!this.isElectronVersionGreaterOrEqualThan(\"2.0.0-beta.1\")) {\n              throw new InvalidConfigurationError(\"Electron 2 and higher is required to build Snap with core18/core20/core22\")\n            }\n            log.warn(null, \"electron 4 and higher is highly recommended for Snap with core18/core20/core22\")\n          }\n          return new SnapCoreLegacy(this.packager, this, deepAssign({}, snapLinuxOptions, { base: core, ...options }))\n        case \"core24\":\n          if (!this.isElectronVersionGreaterOrEqualThan(\"28.0.0\")) {\n            if (!this.isElectronVersionGreaterOrEqualThan(\"25.0.0\")) {\n              throw new InvalidConfigurationError(\"Electron 25 and higher is required to build Snap with core24\")\n            }\n            log.warn(null, \"electron 28 and higher is highly recommended for Snap with core24\")\n          }\n          return new SnapCore24(this.packager, this, deepAssign({}, snapLinuxOptions, options))\n        case \"custom\":\n          // Pass-through: do not inject linux options into user-supplied yaml\n          return new SnapCoreCustom(this.packager, this, snapcraft.custom || {})\n      }\n    }\n\n    if (legacySnap != null) {\n      log.warn(\n        {\n          reason: \"`snap` configuration is deprecated\",\n          docs: \"https://www.electron.build/snapcraft\",\n        },\n        \"please consider migrating `snap` configuration to `snapcraft.<core>` and remove `snap` configuration\"\n      )\n    }\n    return new SnapCoreLegacy(this.packager, this, deepAssign({}, snapLinuxOptions, legacySnap ?? {}))\n  }\n\n  isElectronVersionGreaterOrEqualThan(version: string, fallback?: string): boolean {\n    const electronVersion = this.packager.config.electronVersion\n    if (!electronVersion) {\n      return fallback ? semver.gte(fallback, version) : true\n    }\n    return semver.gte(electronVersion, version)\n  }\n\n  private async computeMimeTypeFiles(): Promise<string | null> {\n    const items: Array<string> = []\n    for (const fileAssociation of this.packager.fileAssociations) {\n      if (!fileAssociation.mimeType) {\n        continue\n      }\n\n      const data = `<mime-type type=\"${fileAssociation.mimeType}\">\n  <glob pattern=\"*.${fileAssociation.ext}\"/>\n    ${fileAssociation.description ? `<comment>${fileAssociation.description}</comment>` : \"\"}\n  <icon name=\"x-office-document\" />\n</mime-type>`\n      items.push(data)\n    }\n\n    if (items.length === 0) {\n      return null\n    }\n\n    const file = await this.packager.getTempFile(\".xml\")\n    await outputFile(\n      file,\n      '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">\\n' + items.join(\"\\n\") + \"\\n</mime-info>\"\n    )\n    return file\n  }\n\n  // must be name without spaces and other special characters, but not product name used\n  private async computeDesktopIcons(): Promise<Array<IconInfo>> {\n    const packager = this.packager\n    const { platformSpecificBuildOptions, config } = packager\n\n    const sources = [platformSpecificBuildOptions.icon, config.mac?.icon ?? config.icon].filter(str => !!str) as string[]\n\n    // If no explicit sources are defined, fallback to buildResources directory, then default framework icon\n    let fallbackSources = [...asArray(packager.getDefaultFrameworkIcon())]\n    const buildResources = config.directories?.buildResources\n    if (buildResources && (await exists(join(buildResources, \"icons\")))) {\n      fallbackSources = [buildResources, ...fallbackSources]\n    }\n\n    // need to put here and not as default because need to resolve image size\n    const result = await packager.resolveIcon(sources, fallbackSources, \"set\")\n    this.maxIconPath = result[result.length - 1].file\n\n    // Ignore .icon files for linux (they are exclusive for macOS)\n    return result.filter(icon => !icon.file.endsWith(\".icon\"))\n  }\n\n  getDescription(options: CommonLinuxOptions) {\n    return options.description || this.packager.appInfo.description\n  }\n\n  getSanitizedVersion(target: string) {\n    const {\n      appInfo: { version },\n    } = this.packager\n    switch (target) {\n      case \"pacman\":\n        return version.replace(/-/g, \"_\")\n      case \"rpm\":\n      case \"deb\":\n        return version.replace(/-/g, \"~\")\n      default:\n        return version\n    }\n  }\n\n  async writeDesktopEntry(targetSpecificOptions: CommonLinuxOptions, exec?: string, destination?: string | null, extra?: Record<string, string>): Promise<string> {\n    const data = await this.computeDesktopEntry(targetSpecificOptions, exec, extra)\n    const file = destination || (await this.packager.getTempFile(`${this.packager.appInfo.productFilename}.desktop`))\n    await outputFile(file, data)\n    return file\n  }\n\n  getDesktopFileName(fallback: string = this.packager.executableName): string {\n    if (!this.packager.platformSpecificBuildOptions.syncDesktopName) {\n      return fallback\n    }\n    const trimmedDesktopName = this.packager.info.metadata.desktopName?.trim()\n    if (isEmptyOrSpaces(trimmedDesktopName)) {\n      return fallback\n    }\n    const basename = trimmedDesktopName.replace(/\\.desktop$/, \"\")\n    // Guard against path traversal: desktopName flows into filesystem paths\n    // (snap/gui/<name>.desktop, /usr/share/applications/<name>.desktop, etc.).\n    if (/[/\\\\]/.test(basename) || [...basename].some(c => c.charCodeAt(0) === 0)) {\n      throw new InvalidConfigurationError(`desktopName \"${trimmedDesktopName}\" produces an invalid .desktop filename — remove any path separators or NUL characters`)\n    }\n    return basename\n  }\n\n  computeDesktopEntry(targetSpecificOptions: CommonLinuxOptions, exec?: string, extra?: Record<string, string>): Promise<string> {\n    if (exec != null && exec.length === 0) {\n      throw new Error(\"Specified exec is empty\")\n    }\n    // https://github.com/electron-userland/electron-builder/issues/3418\n    if (targetSpecificOptions.desktop?.entry?.Exec) {\n      throw new Error(\"Please specify executable name as linux.executableName instead of linux.desktop.Exec\")\n    }\n\n    const packager = this.packager\n    const appInfo = packager.appInfo\n\n    const executableArgs = targetSpecificOptions.executableArgs\n    if (exec == null) {\n      exec = `${installPrefix}/${appInfo.sanitizedProductName}/${packager.executableName}`\n      if (!/^[/0-9A-Za-z._-]+$/.test(exec)) {\n        exec = `\"${exec}\"`\n      }\n      if (executableArgs) {\n        exec += \" \"\n        // Each arg is double-quoted per the freedesktop Exec key spec so that\n        // spaces, $, ;, & and other reserved characters are not misinterpreted.\n        exec += executableArgs.map(desktopExecArgEscape).join(\" \")\n      }\n      // https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables\n      const execCodes = [\"%f\", \"%u\", \"%F\", \"%U\"]\n      if (executableArgs == null || executableArgs.findIndex(arg => execCodes.includes(arg)) === -1) {\n        exec += \" %U\"\n      }\n    }\n\n    // https://github.com/electron-userland/electron-builder/issues/9103\n    // Electron derives app_id from desktopName in package.json; StartupWMClass must match.\n    // https://github.com/electron/electron/blob/9a7b73b5334f1d72c08e2d5e94106706ed751186/lib/browser/init.ts#L128-L133\n    const trimmedDesktopName = packager.info.metadata.desktopName?.trim()\n    if (isEmptyOrSpaces(trimmedDesktopName)) {\n      log.warn(\n        {\n          reason: \"desktopName is not set in package.json\",\n          docs: \"https://www.electron.build/linux#window-association-desktopname--syncdesktopname\",\n        },\n        \"electron uses desktopName as app_id / WM_CLASS for window association. Without it desktop environments may not link running windows to this .desktop entry. Set desktopName in package.json and linux.syncDesktopName: true to fix.\"\n      )\n    }\n    const wmClass = !isEmptyOrSpaces(trimmedDesktopName) ? trimmedDesktopName.replace(/\\.desktop$/, \"\") : appInfo.productName\n\n    const desktopMeta = deepAssign<any>(\n      {\n        // String values are escaped per the freedesktop spec (\\\\, \\n, \\r, \\t)\n        // so that a product name containing a newline cannot inject new key=value\n        // pairs into the .desktop file (e.g. overriding the Exec key).\n        Name: desktopStringEscape(appInfo.productName),\n        Exec: exec,\n        Terminal: \"false\",\n        Type: \"Application\",\n        Icon: packager.executableName,\n        // https://askubuntu.com/questions/367396/what-represent-the-startupwmclass-field-of-a-desktop-file\n        // Set to desktopName (minus .desktop suffix) when provided, so it matches Electron's\n        // app_id and desktop environments can associate running windows with this entry.\n        // Falls back to productName for apps that don't set desktopName.\n        // to get WM_CLASS of running window: xprop WM_CLASS\n        // StartupWMClass doesn't work for unicode\n        // https://github.com/electron/electron/blob/2-0-x/atom/browser/native_window_views.cc#L226\n        StartupWMClass: desktopStringEscape(wmClass),\n      },\n      extra,\n      targetSpecificOptions.desktop?.entry ?? {}\n    )\n\n    const description = this.getDescription(targetSpecificOptions)\n    if (!isEmptyOrSpaces(description)) {\n      desktopMeta.Comment = desktopStringEscape(description)\n    }\n\n    const mimeTypes: Array<string> = asArray(targetSpecificOptions.mimeTypes)\n    for (const fileAssociation of packager.fileAssociations) {\n      if (fileAssociation.mimeType != null) {\n        mimeTypes.push(fileAssociation.mimeType)\n      }\n    }\n\n    for (const protocol of asArray(packager.config.protocols).concat(asArray(packager.platformSpecificBuildOptions.protocols))) {\n      for (const scheme of asArray(protocol.schemes)) {\n        mimeTypes.push(`x-scheme-handler/${scheme}`)\n      }\n    }\n\n    if (mimeTypes.length !== 0) {\n      desktopMeta.MimeType = mimeTypes.join(\";\") + \";\"\n    }\n\n    let category = targetSpecificOptions.category\n    if (isEmptyOrSpaces(category)) {\n      const macCategory = (packager.config.mac || {}).category\n      if (macCategory != null) {\n        category = macToLinuxCategory[macCategory]\n      }\n\n      if (category == null) {\n        // https://github.com/develar/onshape-desktop-shell/issues/48\n        if (macCategory != null) {\n          log.warn({ macCategory }, \"cannot map macOS category to Linux. If possible mapping is known for you, please file issue to add it.\")\n        }\n        log.warn(\n          {\n            reason: \"linux.category is not set and cannot map from macOS\",\n            docs: \"https://www.electron.build/linux\",\n          },\n          'application Linux category is set to default \"Utility\"'\n        )\n        category = \"Utility\"\n      }\n    }\n    desktopMeta.Categories = `${category}${category.endsWith(\";\") ? \"\" : \";\"}`\n\n    let data = `[Desktop Entry]`\n    for (const name of Object.keys(desktopMeta)) {\n      data += `\\n${name}=${desktopMeta[name]}`\n    }\n    data += \"\\n\"\n    const desktopActions = targetSpecificOptions.desktop?.desktopActions ?? {}\n    for (const [actionName, config] of Object.entries(desktopActions)) {\n      if (!Object.keys(config ?? {}).length) {\n        continue\n      }\n      data += `\\n[Desktop Action ${actionName}]`\n      for (const [key, value] of Object.entries(config ?? {})) {\n        data += `\\n${key}=${value}`\n      }\n      data += \"\\n\"\n    }\n    return Promise.resolve(data)\n  }\n}\n\nconst macToLinuxCategory: any = {\n  \"public.app-category.graphics-design\": \"Graphics\",\n  \"public.app-category.developer-tools\": \"Development\",\n  \"public.app-category.education\": \"Education\",\n  \"public.app-category.games\": \"Game\",\n  \"public.app-category.video\": \"Video;AudioVideo\",\n  \"public.app-category.utilities\": \"Utility\",\n  \"public.app-category.social-networking\": \"Network;Chat\",\n  \"public.app-category.finance\": \"Office;Finance\",\n  \"public.app-category.music\": \"Audio;AudioVideo\",\n}\n"]}