{"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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"}