{"version":3,"file":"SnapTarget.js","sourceRoot":"","sources":["../../../src/targets/snap/SnapTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, log } from \"builder-util\"\nimport { deepAssign, SnapStoreOptions } from \"builder-util-runtime\"\nimport * as path from \"path\"\nimport { Configuration } from \"../../configuration\"\nimport { Publish, Target } from \"../../core\"\nimport { LinuxPackager } from \"../../linuxPackager\"\nimport { SnapcraftOptions, SnapOptions } from \"../../options/SnapOptions\"\nimport { LinuxTargetHelper } from \"../LinuxTargetHelper\"\nimport { createStageDirPath } from \"../targetUtil\"\nimport { SnapcraftYAML } from \"./snapcraft\"\n\n/** Abstract base for all snap build strategies (core24, legacy core18/20/22, custom pass-through). */\nexport abstract class SnapCore<T> {\n  protected abstract defaultPlugs: Array<string>\n\n  constructor(\n    protected readonly packager: LinuxPackager,\n    protected readonly helper: LinuxTargetHelper,\n    protected readonly options: T\n  ) {}\n\n  abstract createDescriptor(arch: Arch): Promise<SnapcraftYAML>\n  // snapArch is passed through to subclasses; SnapCoreLegacy forwards it to app-builder as --arch.\n  abstract buildSnap(params: { snap: SnapcraftYAML; appOutDir: string; stageDir: string; snapArch: Arch; artifactPath: string }): Promise<void>\n}\n\n/** Snap build target — merges `snapcraft` (preferred) and legacy `snap` config, then delegates to the appropriate `SnapCore` strategy. */\nexport default class SnapTarget extends Target {\n  readonly options: SnapcraftOptions | SnapOptions\n\n  constructor(\n    name: string,\n    protected readonly packager: LinuxPackager,\n    protected readonly helper: LinuxTargetHelper,\n    readonly outDir: string\n  ) {\n    super(name)\n\n    const {\n      config: { snapcraft, snap },\n      platformSpecificBuildOptions,\n    } = packager\n\n    this.options = deepAssign({}, platformSpecificBuildOptions, snapcraft ?? snap ?? {})\n  }\n\n  async build(appOutDir: string, arch: Arch): Promise<any> {\n    const packager = this.packager\n    // tslint:disable-next-line:no-invalid-template-strings\n    const artifactName = packager.expandArtifactNamePattern(this.options, \"snap\", arch, \"${name}_${version}_${arch}.${ext}\", false)\n    const artifactPath = path.join(this.outDir, artifactName)\n\n    await packager.info.emitArtifactBuildStarted({\n      targetPresentableName: \"snap\",\n      file: artifactPath,\n      arch,\n    })\n\n    const core = this.helper.getSnapCore()\n\n    const snap = await core.createDescriptor(arch)\n    log.debug({ snap }, \"snapcraft.yaml descriptor created\")\n\n    await core.buildSnap({\n      snap,\n      appOutDir,\n      stageDir: await createStageDirPath(this, packager, arch),\n      snapArch: arch,\n      artifactPath,\n    })\n\n    const publishConfig = this.findSnapPublishConfig(packager.config)\n\n    await packager.info.emitArtifactBuildCompleted({\n      file: artifactPath,\n      safeArtifactName: packager.computeSafeArtifactName(artifactName, \"snap\", arch, false),\n      target: this,\n      arch,\n      packager,\n      publishConfig,\n    })\n  }\n\n  protected findSnapPublishConfig(config?: Configuration): SnapStoreOptions | null {\n    const fallback: SnapStoreOptions = { provider: \"snapStore\" }\n\n    if (!config) {\n      return fallback\n    }\n\n    const snapConfig = config.snapcraft ?? config.snap\n    if (snapConfig?.publish) {\n      return this.findSnapPublishConfigInPublishNode(snapConfig.publish)\n    }\n\n    if (config.linux?.publish) {\n      const configCandidate = this.findSnapPublishConfigInPublishNode(config.linux.publish)\n\n      if (configCandidate) {\n        return configCandidate\n      }\n    }\n\n    if (config.publish) {\n      const configCandidate = this.findSnapPublishConfigInPublishNode(config.publish)\n\n      if (configCandidate) {\n        return configCandidate\n      }\n    }\n\n    return fallback\n  }\n\n  private findSnapPublishConfigInPublishNode(configPublishNode: Publish): SnapStoreOptions | null {\n    if (!configPublishNode) {\n      return null\n    }\n\n    if (Array.isArray(configPublishNode)) {\n      for (const configObj of configPublishNode) {\n        if (this.isSnapStoreOptions(configObj)) {\n          return configObj\n        }\n      }\n    }\n\n    if (typeof configPublishNode === `object` && this.isSnapStoreOptions(configPublishNode)) {\n      return configPublishNode\n    }\n\n    return null\n  }\n\n  private isSnapStoreOptions(configPublishNode: Publish): configPublishNode is SnapStoreOptions {\n    const snapStoreOptionsCandidate = configPublishNode as SnapStoreOptions\n    return snapStoreOptionsCandidate?.provider === `snapStore`\n  }\n}\n"]}