{"version":3,"file":"coreLegacy.js","sourceRoot":"","sources":["../../../src/targets/snap/coreLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceDefault as _replaceDefault, Arch, copyDir, exec, log, serializeToYaml, toLinuxArchString } from \"builder-util\"\nimport { asArray, deepAssign, isValidKey, Nullish } from \"builder-util-runtime\"\nimport { chmod, copyFile, mkdir, readdir, rename, rm, writeFile } from \"fs/promises\"\nimport { outputFile, readFile } from \"fs-extra\"\nimport * as path from \"path\"\nimport { PlugDescriptor, SnapOptions } from \"../../options/SnapOptions\"\nimport { getAppImageTools } from \"../../toolsets/linux\"\nimport { downloadBuilderToolset } from \"../../util/electronGet\"\nimport { getTemplatePath } from \"../../util/pathManager\"\nimport { validateShellEmbeddable } from \"../../frameworks/LibUiFramework\"\nimport { SnapCore } from \"./SnapTarget\"\nimport { SnapcraftYAML } from \"./snapcraft\"\nimport { DEFAULT_STAGE_PACKAGES } from \"./snapcraftBuilder\"\nimport { load } from \"js-yaml\"\n\n// Snap template release info from electron-userland/electron-builder-binaries\nconst SNAP_TEMPLATES = {\n  amd64: {\n    releaseName: \"snap-template-4.0-2\",\n    filenameWithExt: \"snap-template-electron-4.0-2-amd64.tar.7z\",\n    checksums: { \"snap-template-electron-4.0-2-amd64.tar.7z\": \"5e3ab4e09364ac06f0072b1c2dab9138318c933f6b2c7374f893b5ec44d19e6f\" },\n  },\n  armhf: {\n    releaseName: \"snap-template-4.0-1\",\n    filenameWithExt: \"snap-template-electron-4.0-1-armhf.tar.7z\",\n    checksums: { \"snap-template-electron-4.0-1-armhf.tar.7z\": \"6f7553e904f4e043bc3019f0899d05e01a283b00b61fec22e932296490e3be6b\" },\n  },\n} as const\n\n// Handles core18/core20/core22 snaps via mksquashfs (template) or snapcraft CLI (no-template).\n// See: https://github.com/develar/app-builder/blob/master/pkg/package-format/snap\nexport class SnapCoreLegacy extends SnapCore<SnapOptions> {\n  private isUseTemplateApp = false\n\n  defaultPlugs = [\"desktop\", \"desktop-legacy\", \"home\", \"x11\", \"wayland\", \"unity7\", \"browser-support\", \"network\", \"gsettings\", \"audio-playback\", \"pulseaudio\", \"opengl\"]\n\n  private replaceDefault(inList: Array<string> | Nullish, defaultList: Array<string>) {\n    const result = _replaceDefault(inList, defaultList)\n    if (result !== defaultList) {\n      this.isUseTemplateApp = false\n    }\n    return result\n  }\n\n  async createDescriptor(arch: Arch): Promise<SnapcraftYAML> {\n    const appInfo = this.packager.appInfo\n    const snapName = this.packager.executableName.toLowerCase()\n    const options = this.options\n\n    const plugs = this.normalizePlugConfiguration(this.options.plugs)\n\n    const plugNames = this.replaceDefault(plugs == null ? null : Object.getOwnPropertyNames(plugs), this.defaultPlugs)\n\n    const slots = this.normalizePlugConfiguration(this.options.slots)\n\n    const buildPackages = asArray(options.buildPackages)\n    const stagePackages = this.replaceDefault(options.stagePackages, DEFAULT_STAGE_PACKAGES)\n\n    const stageSet = new Set(stagePackages)\n    const stageMatchesDefaults = stagePackages.length === DEFAULT_STAGE_PACKAGES.length && DEFAULT_STAGE_PACKAGES.every((p: string) => stageSet.has(p))\n\n    // Template app is only available for x64/armv7l, and only when no packages are customised.\n    this.isUseTemplateApp = this.options.useTemplateApp !== false && (arch === Arch.x64 || arch === Arch.armv7l) && buildPackages.length === 0 && stageMatchesDefaults\n\n    const appDescriptor: any = {\n      command: \"command.sh\",\n      plugs: plugNames,\n      adapter: \"none\",\n    }\n\n    const snap: any = load(await readFile(path.join(getTemplatePath(\"snap\"), \"snapcraft.yaml\"), \"utf-8\"))\n    if (this.isUseTemplateApp) {\n      delete appDescriptor.adapter\n    }\n    if (options.base != null) {\n      snap.base = options.base\n      if (Number(snap.base.split(\"core\")[1]) >= 22) {\n        delete appDescriptor.adapter\n      }\n    }\n    if (options.grade != null) {\n      snap.grade = options.grade\n    }\n    if (options.confinement != null) {\n      snap.confinement = options.confinement\n    }\n    if (options.appPartStage != null) {\n      snap.parts.app.stage = options.appPartStage\n    }\n    if (options.layout != null) {\n      snap.layout = options.layout\n    }\n    if (slots != null) {\n      appDescriptor.slots = Object.getOwnPropertyNames(slots)\n      for (const slotName of appDescriptor.slots) {\n        if (!isValidKey(slotName)) {\n          throw new Error(`Invalid plug/slot name: ${slotName}`)\n        }\n        const slotOptions = slots[slotName]\n        if (slotOptions == null) {\n          continue\n        }\n        if (!snap.slots) {\n          snap.slots = {}\n        }\n        snap.slots[slotName] = slotOptions\n      }\n    }\n\n    deepAssign(snap, {\n      name: snapName,\n      version: appInfo.version,\n      title: options.title || appInfo.productName,\n      summary: options.summary || appInfo.productName,\n      compression: options.compression,\n      description: this.helper.getDescription(options),\n      architectures: [toLinuxArchString(arch, \"snap\")],\n      apps: {\n        [snapName]: appDescriptor,\n      },\n      parts: {\n        app: {\n          \"stage-packages\": stagePackages,\n        },\n      },\n    })\n\n    if (options.autoStart) {\n      appDescriptor.autostart = `${this.helper.getDesktopFileName(snap.name)}.desktop`\n    }\n\n    if (options.confinement === \"classic\") {\n      delete appDescriptor.plugs\n      delete snap.plugs\n    } else {\n      const archTriplet = this.archNameToTriplet(arch)\n      const environment: Record<string, string> = {\n        PATH: \"$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH\",\n        SNAP_DESKTOP_RUNTIME: \"$SNAP/gnome-platform\",\n        LD_LIBRARY_PATH: [\n          \"$SNAP_LIBRARY_PATH\",\n          \"$SNAP/lib:$SNAP/usr/lib:$SNAP/lib/\" + archTriplet + \":$SNAP/usr/lib/\" + archTriplet,\n          \"$LD_LIBRARY_PATH:$SNAP/lib:$SNAP/usr/lib\",\n          \"$SNAP/lib/\" + archTriplet + \":$SNAP/usr/lib/\" + archTriplet,\n        ].join(\":\"),\n        ...options.environment,\n      }\n      const allow = options.allowNativeWayland\n      const isOldElectron = !this.helper.isElectronVersionGreaterOrEqualThan(\"38.0.0\", \"7.0.0\")\n      if ((allow == null && isOldElectron) || allow === false) {\n        environment.DISABLE_WAYLAND = \"1\"\n      }\n\n      appDescriptor.environment = environment\n\n      if (plugs != null) {\n        for (const plugName of plugNames) {\n          if (!isValidKey(plugName)) {\n            throw new Error(`Invalid plug/slot name: ${plugName}`)\n          }\n          const plugOptions = plugs[plugName]\n          if (plugOptions == null) {\n            continue\n          }\n          if (!snap.plugs) {\n            snap.plugs = {}\n          }\n          snap.plugs[plugName] = plugOptions\n        }\n      }\n    }\n\n    if (buildPackages.length > 0) {\n      snap.parts.app[\"build-packages\"] = buildPackages\n    }\n    if (options.after != null) {\n      snap.parts.app.after = options.after\n    }\n\n    if (options.assumes != null) {\n      snap.assumes = asArray(options.assumes)\n    }\n\n    return snap\n  }\n\n  async buildSnap(props: { snap: any; appOutDir: string; stageDir: string; snapArch: Arch; artifactPath: string }): Promise<void> {\n    const { snap, appOutDir, stageDir, snapArch, artifactPath } = props\n\n    // Build the args array for effectiveOptionComputed compatibility — tests inspect this.\n    const args = [\n      \"snap\",\n      \"--app\",\n      appOutDir,\n      \"--stage\",\n      stageDir,\n      \"--arch\",\n      toLinuxArchString(snapArch, \"snap\"),\n      \"--output\",\n      artifactPath,\n      \"--executable\",\n      this.packager.executableName,\n    ]\n\n    await this.helper.icons\n    if (this.helper.maxIconPath != null) {\n      if (!this.isUseTemplateApp) {\n        snap.icon = \"snap/gui/icon.png\"\n      }\n      args.push(\"--icon\", this.helper.maxIconPath)\n    }\n\n    const snapMetaDir = path.join(stageDir, this.isUseTemplateApp ? \"meta\" : \"snap\")\n    const desktopFile = path.join(snapMetaDir, \"gui\", `${this.helper.getDesktopFileName(snap.name)}.desktop`)\n    await this.helper.writeDesktopEntry(this.options, this.packager.executableName + \" %U\", desktopFile, {\n      Icon: \"${SNAP}/meta/gui/icon.png\",\n    })\n\n    const extraAppArgs: Array<string> = this.options.executableArgs ?? []\n    if (this.helper.isElectronVersionGreaterOrEqualThan(\"5.0.0\") && !this.isBrowserSandboxAllowed(snap)) {\n      const noSandboxArg = \"--no-sandbox\"\n      if (!extraAppArgs.includes(noSandboxArg)) {\n        extraAppArgs.push(noSandboxArg)\n      }\n      if (this.isUseTemplateApp) {\n        args.push(\"--exclude\", \"chrome-sandbox\")\n      }\n    }\n    if (extraAppArgs.length > 0) {\n      args.push(\"--extraAppArgs=\" + extraAppArgs.join(\" \"))\n    }\n\n    // Capture compression BEFORE it gets stripped from snap for template builds.\n    const compression = this.options.compression ?? \"xz\"\n    if (snap.compression != null) {\n      args.push(\"--compression\", snap.compression)\n    }\n\n    if (this.isUseTemplateApp) {\n      const fieldsToStrip = [\"compression\", \"contact\", \"donation\", \"issues\", \"parts\", \"source-code\", \"website\"]\n      for (const field of fieldsToStrip) {\n        delete snap[field]\n      }\n    }\n\n    if (this.packager.packagerOptions.effectiveOptionComputed != null && (await this.packager.packagerOptions.effectiveOptionComputed({ snap, desktopFile, args }))) {\n      return\n    }\n\n    await outputFile(path.join(snapMetaDir, this.isUseTemplateApp ? \"snap.yaml\" : \"snapcraft.yaml\"), serializeToYaml(snap))\n\n    const hooksDir = await this.packager.getResource(this.options.hooks, \"snap-hooks\")\n    if (hooksDir != null) {\n      args.push(\"--hooks\", hooksDir)\n    }\n\n    if (this.isUseTemplateApp) {\n      const templateArch = snapArch === Arch.x64 ? \"amd64\" : \"armhf\"\n      args.push(\"--template-url\", `electron4:${templateArch}`)\n      await this.buildWithTemplate({ appOutDir, stageDir, snapArch, artifactPath, compression, hooksDir, extraAppArgs })\n    } else {\n      await this.buildWithoutTemplate({ appOutDir, stageDir, artifactPath, hooksDir, extraAppArgs })\n    }\n  }\n\n  private async buildWithTemplate(opts: {\n    appOutDir: string\n    stageDir: string\n    snapArch: Arch\n    artifactPath: string\n    compression: string\n    hooksDir: string | null\n    extraAppArgs: string[]\n  }): Promise<void> {\n    const { appOutDir, stageDir, snapArch, artifactPath, compression, hooksDir, extraAppArgs } = opts\n    const templateArch = snapArch === Arch.x64 ? \"amd64\" : \"armhf\"\n    const { releaseName, filenameWithExt, checksums } = SNAP_TEMPLATES[templateArch]\n\n    log.info({ releaseName }, \"downloading snap template\")\n    const templateDir = await downloadBuilderToolset({ releaseName, filenameWithExt, checksums, githubOrgRepo: \"electron-userland/electron-builder-binaries\" })\n\n    await this.stageSnapFiles({ stageDir, appOutDir, hooksDir, extraAppArgs, isTemplate: true })\n\n    // Best-effort: remove chrome-sandbox from app dir before mksquashfs scans it.\n    await rm(path.join(appOutDir, \"chrome-sandbox\"), { force: true })\n\n    // chmod -R g-s to avoid setgid bits in final image\n    for (const dir of [stageDir, appOutDir, templateDir]) {\n      await exec(\"chmod\", [\"-R\", \"g-s\", dir]).catch(err => log.warn({ error: err.message }, \"chmod g-s failed\"))\n    }\n\n    const mksquashfsPath = await getMksquashfsPath(snapArch)\n\n    // Collect top-level entries from each dir as individual path args (mirrors Go ReadDirContentTo)\n    const mksquashfsArgs: string[] = [\n      ...(await readDirPaths(templateDir)),\n      ...(await readDirPaths(stageDir)),\n      ...(await readDirPaths(appOutDir, name => name !== \"LICENSES.chromium.html\" && name !== \"LICENSE.electron.txt\" && name !== \"chrome-sandbox\")),\n      artifactPath,\n      \"-no-progress\",\n      \"-quiet\",\n      \"-noappend\",\n      \"-comp\",\n      compression,\n      \"-no-xattrs\",\n      \"-no-fragments\",\n      \"-all-root\",\n    ]\n\n    await exec(mksquashfsPath, mksquashfsArgs, { cwd: stageDir })\n  }\n\n  private async buildWithoutTemplate(opts: { appOutDir: string; stageDir: string; artifactPath: string; hooksDir: string | null; extraAppArgs: string[] }): Promise<void> {\n    const { appOutDir, stageDir, artifactPath, hooksDir, extraAppArgs } = opts\n\n    await this.stageSnapFiles({ stageDir, appOutDir, hooksDir, extraAppArgs, isTemplate: false })\n\n    // Write desktop integration scripts (embedded in the Go binary, now in our templates)\n    const snapTemplateDir = getTemplatePath(\"snap\")\n    for (const script of [\"desktop-init.sh\", \"desktop-common.sh\", \"desktop-gnome-specific.sh\"]) {\n      const src = path.join(snapTemplateDir, script)\n      const dest = path.join(stageDir, \"scripts\", script)\n      await copyFile(src, dest)\n      // copyFile doesn't preserve mode; chmod 755 explicitly\n      await chmod(dest, 0o755)\n    }\n\n    // Copy app dir into stage/app/ so snapcraft can pick it up\n    await copyDir(appOutDir, path.join(stageDir, \"app\"))\n\n    // Run snapcraft (legacy `snap` subcommand)\n    const isDestructiveMode = process.env.SNAP_DESTRUCTIVE_MODE === \"true\"\n    const snapOutputName = \"out.snap\"\n    const snapArgs = [\"snap\", \"--output\", isDestructiveMode ? artifactPath : snapOutputName]\n    if (isDestructiveMode) {\n      snapArgs.push(\"--destructive-mode\")\n    }\n\n    await exec(\"snapcraft\", snapArgs, {\n      cwd: stageDir,\n      env: { ...process.env, SNAPCRAFT_HAS_TTY: \"false\" },\n    })\n\n    if (!isDestructiveMode) {\n      await rename(path.join(stageDir, snapOutputName), artifactPath)\n    }\n  }\n\n  private async stageSnapFiles(opts: { stageDir: string; appOutDir: string; hooksDir: string | null; extraAppArgs: string[]; isTemplate: boolean }): Promise<void> {\n    const { stageDir, hooksDir, extraAppArgs, isTemplate } = opts\n\n    const snapMetaDir = path.join(stageDir, isTemplate ? \"meta\" : \"snap\")\n    // No-template builds place command.sh + desktop scripts in scripts/ which snapcraft stages to snap root.\n    // Template builds write command.sh to the stage root directly; no scripts/ dir is needed.\n    const scriptDir = path.join(stageDir, \"scripts\")\n    if (!isTemplate) {\n      await mkdir(scriptDir, { recursive: true })\n    }\n\n    if (this.helper.maxIconPath != null) {\n      const iconDest = path.join(snapMetaDir, \"gui\", `icon${path.extname(this.helper.maxIconPath)}`)\n      await mkdir(path.dirname(iconDest), { recursive: true })\n      await copyFile(this.helper.maxIconPath, iconDest)\n    }\n\n    if (hooksDir != null) {\n      await copyDir(hooksDir, path.join(snapMetaDir, \"hooks\"))\n    }\n\n    // command.sh — template builds write to stage root; no-template writes to scripts/\n    const commandWrapperPath = isTemplate ? path.join(stageDir, \"command.sh\") : path.join(scriptDir, \"command.sh\")\n    const commandContent = buildCommandShContent({ isTemplate, executableName: this.packager.executableName, extraAppArgs })\n    await writeFile(commandWrapperPath, commandContent, { mode: 0o755 })\n    await chmod(commandWrapperPath, 0o755)\n  }\n\n  private normalizePlugConfiguration(raw: Array<string | PlugDescriptor> | PlugDescriptor | Nullish): Record<string, Record<string, any> | null> | null {\n    if (raw == null) {\n      return null\n    }\n\n    const result: any = {}\n    for (const item of Array.isArray(raw) ? raw : [raw]) {\n      if (typeof item === \"string\") {\n        if (!isValidKey(item)) {\n          throw new Error(`Invalid plug/slot name: ${item}`)\n        }\n        result[item] = null\n      } else {\n        deepAssign(result, item)\n      }\n    }\n    return result\n  }\n\n  private isBrowserSandboxAllowed(snap: any): boolean {\n    if (snap.plugs != null) {\n      for (const plugName of Object.keys(snap.plugs)) {\n        const plug = snap.plugs[plugName]\n        if (plug.interface === \"browser-support\" && plug[\"allow-sandbox\"] === true) {\n          return true\n        }\n      }\n    }\n    return false\n  }\n\n  private archNameToTriplet(arch: Arch): string {\n    switch (arch) {\n      case Arch.x64:\n        return \"x86_64-linux-gnu\"\n      case Arch.ia32:\n        return \"i386-linux-gnu\"\n      case Arch.armv7l:\n        return \"arm-linux-gnueabihf\"\n      case Arch.arm64:\n        return \"aarch64-linux-gnu\"\n\n      default:\n        throw new Error(`Unsupported arch ${arch}`)\n    }\n  }\n}\n\nasync function getMksquashfsPath(arch: Arch): Promise<string> {\n  const envPath = process.env.MKSQUASHFS_PATH\n  if (envPath) {\n    return envPath\n  }\n  const { mksquashfs } = await getAppImageTools(\"0.0.0\", arch)\n  return mksquashfs\n}\n\nasync function readDirPaths(dir: string, filter?: (name: string) => boolean): Promise<string[]> {\n  const entries = await readdir(dir)\n  const result: string[] = []\n  for (const name of entries) {\n    if (!filter || filter(name)) {\n      result.push(path.join(dir, name))\n    }\n  }\n  return result\n}\n\n/** Single-quote a shell argument, escaping any embedded single quotes. */\nexport function shellQuote(arg: string): string {\n  return \"'\" + arg.replace(/'/g, \"'\\\\''\") + \"'\"\n}\n\n/**\n * Builds the content of command.sh for a snap package.\n *\n * For both template and no-template builds, the desktop-integration scripts are\n * sourced from the snap root ($SNAP):\n *   - Template: scripts are embedded in the template tarball at the snap root.\n *   - No-template: the snapcraft.yaml `launch-scripts` part uses `plugin: dump,\n *     source: scripts`, which stages stageDir/scripts/ contents directly into the\n *     snap root — so $SNAP/desktop-init.sh is correct in both cases.\n *\n * The only difference between template and no-template is the app executable prefix:\n * template apps are at $SNAP/<name>; no-template apps are at $SNAP/app/<name>.\n */\nexport function buildCommandShContent(opts: { isTemplate: boolean; executableName: string; extraAppArgs: string[] }): string {\n  const { isTemplate, executableName, extraAppArgs } = opts\n  validateShellEmbeddable(executableName, \"executableName\")\n  const appPrefix = isTemplate ? \"\" : \"app/\"\n  let content = `#!/bin/bash -e\\nexec \"$SNAP/desktop-init.sh\" \"$SNAP/desktop-common.sh\" \"$SNAP/desktop-gnome-specific.sh\" \"$SNAP/${appPrefix}${executableName}\"`\n  if (extraAppArgs.length > 0) {\n    content += \" \" + extraAppArgs.map(shellQuote).join(\" \")\n  }\n  content += ' \"$@\"'\n  return content\n}\n"]}