{"version":3,"file":"alpm.mjs","names":[],"sources":["../../src/registries/alpm.ts"],"sourcesContent":["import type { Client } from \"../core/client.ts\";\nimport type { Dependency, Maintainer, Package, URLBuilder, Version } from \"../core/types.ts\";\nimport { Registry } from \"../core/registry.ts\";\nimport { NotFoundError, rethrowFetchError } from \"../core/errors.ts\";\nimport { combineLicenses } from \"../core/license.ts\";\nimport { buildPURL } from \"../core/purl.ts\";\n\nconst AUR_BASE_URL = \"https://aur.archlinux.org\";\n\n/** Arch Linux official package search response. */\ninterface ArchSearchResponse {\n  results: ArchPackageResult[];\n}\n\n/** Arch Linux official package data from search/detail endpoints. */\ninterface ArchPackageResult {\n  pkgname: string;\n  pkgbase: string;\n  repo: string;\n  arch: string;\n  pkgver: string;\n  pkgrel: string;\n  epoch: number;\n  pkgdesc: string;\n  url: string;\n  filename: string;\n  compressed_size: number;\n  installed_size: number;\n  build_date: string;\n  last_update: string;\n  flag_date: string | null;\n  maintainers: string[];\n  packager: string;\n  groups: string[];\n  licenses: string[];\n  conflicts: string[];\n  provides: string[];\n  replaces: string[];\n  depends: string[];\n  optdepends: string[];\n  makedepends: string[];\n  checkdepends: string[];\n}\n\n/** AUR RPC v5 response wrapper. */\ninterface AurResponse {\n  resultcount: number;\n  results: AurPackageResult[];\n  type: string;\n  version: number;\n}\n\n/** AUR package data. */\ninterface AurPackageResult {\n  ID: number;\n  Name: string;\n  PackageBase: string;\n  PackageBaseID: number;\n  Version: string;\n  Description: string;\n  URL: string;\n  NumVotes: number;\n  Popularity: number;\n  OutOfDate: number | null;\n  Maintainer: string | null;\n  FirstSubmitted: number;\n  LastModified: number;\n  URLPath: string;\n  Depends?: string[];\n  OptDepends?: string[];\n  MakeDepends?: string[];\n  CheckDepends?: string[];\n  License?: string[];\n  Keywords?: string[];\n}\n\n/** ALPM registry client — routes to Arch Linux official repos or AUR based on namespace. */\nexport class AlpmRegistry extends Registry {\n  constructor(baseURL: string, client: Client) {\n    super();\n    this.baseURL = baseURL;\n    this.client = client;\n  }\n\n  readonly baseURL: string;\n  readonly client: Client;\n\n  ecosystem(): string {\n    return \"alpm\";\n  }\n\n  async fetchPackage(name: string, signal?: AbortSignal): Promise<Package> {\n    const { namespace, pkgName } = this.parseName(name);\n    this.assertSupportedNamespace(namespace, name);\n\n    if (namespace === \"aur\") {\n      return this.fetchAurPackage(pkgName, signal);\n    }\n\n    return this.fetchOfficialPackage(pkgName, signal);\n  }\n\n  async fetchVersions(name: string, signal?: AbortSignal): Promise<Version[]> {\n    const { namespace, pkgName } = this.parseName(name);\n    this.assertSupportedNamespace(namespace, name);\n\n    if (namespace === \"aur\") {\n      return this.fetchAurVersions(pkgName, signal);\n    }\n\n    return this.fetchOfficialVersions(pkgName, signal);\n  }\n\n  async fetchDependencies(\n    name: string,\n    version: string,\n    signal?: AbortSignal,\n  ): Promise<Dependency[]> {\n    const { namespace, pkgName } = this.parseName(name);\n    this.assertSupportedNamespace(namespace, name);\n\n    if (namespace === \"aur\") {\n      return this.fetchAurDependencies(pkgName, version, signal);\n    }\n\n    return this.fetchOfficialDependencies(pkgName, version, signal);\n  }\n\n  async fetchMaintainers(name: string, signal?: AbortSignal): Promise<Maintainer[]> {\n    const { namespace, pkgName } = this.parseName(name);\n    this.assertSupportedNamespace(namespace, name);\n\n    if (namespace === \"aur\") {\n      return this.fetchAurMaintainers(pkgName, signal);\n    }\n\n    return this.fetchOfficialMaintainers(pkgName, signal);\n  }\n\n  urls(): URLBuilder {\n    return {\n      registry: (name: string, _version?: string) => {\n        const { namespace, pkgName } = this.parseName(name);\n        if (namespace === \"aur\") {\n          return `https://aur.archlinux.org/packages/${pkgName}`;\n        }\n        return `https://archlinux.org/packages/?name=${pkgName}`;\n      },\n      download: (name: string, _version: string) => {\n        const { namespace, pkgName } = this.parseName(name);\n        if (namespace === \"aur\") {\n          return `https://aur.archlinux.org/cgit/aur.git/snapshot/${pkgName}.tar.gz`;\n        }\n        const letter = pkgName.charAt(0);\n        return `https://archive.archlinux.org/packages/${letter}/${pkgName}/`;\n      },\n      documentation: (name: string, _version?: string) => {\n        const { namespace, pkgName } = this.parseName(name);\n        if (namespace === \"aur\") {\n          return `https://aur.archlinux.org/packages/${pkgName}`;\n        }\n        return `https://wiki.archlinux.org/title/${pkgName}`;\n      },\n      readme: (_name: string, _version?: string) => {\n        return \"\";\n      },\n      purl: (name: string, version?: string) => {\n        const { namespace, pkgName } = this.parseName(name);\n        return buildPURL({ type: \"alpm\", namespace, name: pkgName, version });\n      },\n    };\n  }\n\n  // --- Official Arch Linux API ---\n\n  private async fetchOfficialPackage(name: string, signal?: AbortSignal): Promise<Package> {\n    const result = await this.searchOfficial(name, signal);\n\n    return {\n      name: result.pkgname,\n      description: result.pkgdesc || \"\",\n      homepage: result.url || \"\",\n      documentation: \"\",\n      repository: \"\",\n      licenses: combineLicenses(result.licenses),\n      keywords: result.groups,\n      namespace: \"arch\",\n      latestVersion: this.formatVersion(result),\n      metadata: {\n        repo: result.repo,\n        arch: result.arch,\n        pkgbase: result.pkgbase,\n        compressedSize: result.compressed_size,\n        installedSize: result.installed_size,\n        buildDate: result.build_date,\n        lastUpdate: result.last_update,\n        flagDate: result.flag_date,\n        packager: result.packager,\n        provides: result.provides,\n        conflicts: result.conflicts,\n        replaces: result.replaces,\n      },\n    };\n  }\n\n  private async fetchOfficialVersions(name: string, signal?: AbortSignal): Promise<Version[]> {\n    const result = await this.searchOfficial(name, signal);\n\n    return [\n      {\n        number: this.formatVersion(result),\n        publishedAt: result.last_update ? new Date(result.last_update) : null,\n        licenses: combineLicenses(result.licenses),\n        integrity: \"\",\n        status: result.flag_date ? \"deprecated\" : \"\",\n        metadata: {\n          repo: result.repo,\n          arch: result.arch,\n        },\n      },\n    ];\n  }\n\n  private async fetchOfficialDependencies(\n    name: string,\n    version: string,\n    signal?: AbortSignal,\n  ): Promise<Dependency[]> {\n    const result = await this.searchOfficial(name, signal);\n    const currentVersion = this.formatVersion(result);\n    this.assertVersionMatches(name, version, currentVersion);\n\n    return this.buildDependencies(\n      result.depends,\n      result.makedepends,\n      result.optdepends,\n      result.checkdepends,\n    );\n  }\n\n  private async fetchOfficialMaintainers(\n    name: string,\n    signal?: AbortSignal,\n  ): Promise<Maintainer[]> {\n    const result = await this.searchOfficial(name, signal);\n\n    return result.maintainers.map((m) => ({\n      uuid: \"\",\n      login: m,\n      name: m,\n      email: \"\",\n      url: \"\",\n      role: \"maintainer\",\n    }));\n  }\n\n  private async searchOfficial(name: string, signal?: AbortSignal): Promise<ArchPackageResult> {\n    const url = `${this.baseURL}/packages/search/json/?name=${encodeURIComponent(name)}`;\n\n    try {\n      const data = await this.client.getJSON<ArchSearchResponse>(url, signal);\n\n      if (!data.results || data.results.length === 0) {\n        throw new NotFoundError(\"alpm\", name);\n      }\n\n      // Prefer x86_64 arch, fall back to first result\n      return data.results.find((r) => r.arch === \"x86_64\") ?? data.results[0]!;\n    } catch (error) {\n      rethrowFetchError(error, this.ecosystem(), name);\n    }\n  }\n\n  // --- AUR API ---\n\n  private async fetchAurPackage(name: string, signal?: AbortSignal): Promise<Package> {\n    const result = await this.fetchAurInfo(name, signal);\n\n    return {\n      name: result.Name,\n      description: result.Description || \"\",\n      homepage: result.URL || \"\",\n      documentation: \"\",\n      repository: \"\",\n      licenses: combineLicenses(result.License ?? []),\n      keywords: result.Keywords ?? [],\n      namespace: \"aur\",\n      latestVersion: result.Version,\n      metadata: {\n        votes: result.NumVotes,\n        popularity: result.Popularity,\n        outOfDate: result.OutOfDate,\n        pkgbase: result.PackageBase,\n        firstSubmitted: result.FirstSubmitted,\n        lastModified: result.LastModified,\n      },\n    };\n  }\n\n  private async fetchAurVersions(name: string, signal?: AbortSignal): Promise<Version[]> {\n    const result = await this.fetchAurInfo(name, signal);\n\n    return [\n      {\n        number: result.Version,\n        publishedAt: result.LastModified ? new Date(result.LastModified * 1000) : null,\n        licenses: combineLicenses(result.License ?? []),\n        integrity: \"\",\n        status: result.OutOfDate ? \"deprecated\" : \"\",\n        metadata: {\n          votes: result.NumVotes,\n          popularity: result.Popularity,\n        },\n      },\n    ];\n  }\n\n  private async fetchAurDependencies(\n    name: string,\n    version: string,\n    signal?: AbortSignal,\n  ): Promise<Dependency[]> {\n    const result = await this.fetchAurInfo(name, signal);\n    this.assertVersionMatches(`aur/${name}`, version, result.Version);\n\n    return this.buildDependencies(\n      result.Depends ?? [],\n      result.MakeDepends ?? [],\n      result.OptDepends ?? [],\n      result.CheckDepends ?? [],\n    );\n  }\n\n  private async fetchAurMaintainers(name: string, signal?: AbortSignal): Promise<Maintainer[]> {\n    const result = await this.fetchAurInfo(name, signal);\n\n    if (!result.Maintainer) return [];\n\n    return [\n      {\n        uuid: \"\",\n        login: result.Maintainer,\n        name: result.Maintainer,\n        email: \"\",\n        url: \"\",\n        role: \"maintainer\",\n      },\n    ];\n  }\n\n  private async fetchAurInfo(name: string, signal?: AbortSignal): Promise<AurPackageResult> {\n    const url = `${AUR_BASE_URL}/rpc/v5/info/${encodeURIComponent(name)}`;\n\n    try {\n      const data = await this.client.getJSON<AurResponse>(url, signal);\n\n      if (!data.results || data.results.length === 0) {\n        throw new NotFoundError(\"alpm\", `aur/${name}`);\n      }\n\n      return data.results[0]!;\n    } catch (error) {\n      rethrowFetchError(error, this.ecosystem(), `aur/${name}`);\n    }\n  }\n\n  // --- Shared helpers ---\n\n  private parseName(fullName: string): { namespace: string; pkgName: string } {\n    const normalized = fullName.trim().toLowerCase();\n    const slashIdx = normalized.indexOf(\"/\");\n    if (slashIdx === -1) {\n      return { namespace: \"arch\", pkgName: normalized };\n    }\n    return {\n      namespace: normalized.slice(0, slashIdx),\n      pkgName: normalized.slice(slashIdx + 1),\n    };\n  }\n\n  private assertSupportedNamespace(namespace: string, requestedName: string): void {\n    if (namespace !== \"arch\" && namespace !== \"aur\") {\n      throw new NotFoundError(\"alpm\", requestedName);\n    }\n  }\n\n  private assertVersionMatches(name: string, requested: string, current: string): void {\n    if (requested && requested !== current) {\n      throw new NotFoundError(\"alpm\", name, requested);\n    }\n  }\n\n  private formatVersion(\n    result: Readonly<Pick<ArchPackageResult, \"epoch\" | \"pkgrel\" | \"pkgver\">>,\n  ): string {\n    const epoch = result.epoch && result.epoch > 0 ? `${result.epoch}:` : \"\";\n    return `${epoch}${result.pkgver}-${result.pkgrel}`;\n  }\n\n  private buildDependencies(\n    depends: readonly string[],\n    makedepends: readonly string[],\n    optdepends: readonly string[],\n    checkdepends: readonly string[],\n  ): Dependency[] {\n    const dependencies: Dependency[] = [];\n\n    for (const dep of depends) {\n      const parsed = this.parseDep(dep);\n      dependencies.push({\n        name: parsed.name,\n        requirements: parsed.requirements,\n        scope: \"runtime\",\n        optional: false,\n      });\n    }\n\n    for (const dep of makedepends) {\n      const parsed = this.parseDep(dep);\n      dependencies.push({\n        name: parsed.name,\n        requirements: parsed.requirements,\n        scope: \"build\",\n        optional: false,\n      });\n    }\n\n    for (const dep of optdepends) {\n      const parsed = this.parseOptDep(dep);\n      dependencies.push({\n        name: parsed.name,\n        requirements: parsed.requirements,\n        scope: \"optional\",\n        optional: true,\n      });\n    }\n\n    for (const dep of checkdepends) {\n      const parsed = this.parseDep(dep);\n      dependencies.push({\n        name: parsed.name,\n        requirements: parsed.requirements,\n        scope: \"test\",\n        optional: false,\n      });\n    }\n\n    return dependencies;\n  }\n\n  private parseDep(dep: string): { name: string; requirements: string } {\n    const match = dep.match(/^([a-zA-Z0-9@._+-]+)(.*)$/);\n    if (!match) return { name: dep, requirements: \"\" };\n    return {\n      name: match[1]!,\n      requirements: match[2]!.trim(),\n    };\n  }\n\n  private parseOptDep(dep: string): { name: string; requirements: string; description: string } {\n    const colonIdx = dep.indexOf(\":\");\n    if (colonIdx === -1) {\n      const parsed = this.parseDep(dep.trim());\n      return { name: parsed.name, requirements: parsed.requirements, description: \"\" };\n    }\n    const parsed = this.parseDep(dep.slice(0, colonIdx).trim());\n\n    return {\n      name: parsed.name,\n      requirements: parsed.requirements,\n      description: dep.slice(colonIdx + 1).trim(),\n    };\n  }\n}\n"],"mappings":"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"}