[{"data":1,"prerenderedAt":2353},["ShallowReactive",2],{"navigation_docs":3,"-guide-custom":72,"-guide-custom-surround":2348},[4,40],{"title":5,"path":6,"stem":7,"children":8,"icon":39},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"PURLs","\u002Fguide\u002Fpurl","1.guide\u002F2.purl",{"title":16,"path":17,"stem":18},"Lookups","\u002Fguide\u002Flookups","1.guide\u002F3.lookups",{"title":20,"path":21,"stem":22},"Caching","\u002Fguide\u002Fcache","1.guide\u002F4.cache",{"title":24,"path":25,"stem":26},"CLI","\u002Fguide\u002Fcli","1.guide\u002F5.cli",{"title":28,"path":29,"stem":30},"Agents","\u002Fguide\u002Fagents","1.guide\u002F6.agents",{"title":32,"path":33,"stem":34},"Custom Registries","\u002Fguide\u002Fcustom","1.guide\u002F7.custom",{"title":36,"path":37,"stem":38},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F8.explorer","i-lucide-book-open",{"title":41,"path":42,"stem":43,"children":44,"icon":71},"Registries","\u002Fregistries","2.registries\u002F0.index",[45,47,51,55,59,63,67],{"title":46,"path":42,"stem":43},"Overview",{"title":48,"path":49,"stem":50},"npm","\u002Fregistries\u002Fnpm","2.registries\u002F01.npm",{"title":52,"path":53,"stem":54},"crates.io","\u002Fregistries\u002Fcargo","2.registries\u002F02.cargo",{"title":56,"path":57,"stem":58},"PyPI","\u002Fregistries\u002Fpypi","2.registries\u002F03.pypi",{"title":60,"path":61,"stem":62},"RubyGems","\u002Fregistries\u002Frubygems","2.registries\u002F04.rubygems",{"title":64,"path":65,"stem":66},"Packagist","\u002Fregistries\u002Fpackagist","2.registries\u002F05.packagist",{"title":68,"path":69,"stem":70},"Arch Linux","\u002Fregistries\u002Falpm","2.registries\u002F06.alpm","i-lucide-library",{"id":73,"title":32,"body":74,"description":2341,"extension":2342,"links":2343,"meta":2344,"navigation":492,"path":33,"seo":2346,"stem":34,"__hash__":2347},"docs\u002F1.guide\u002F7.custom.md",{"type":75,"value":76,"toc":2335},"minimark",[77,82,328,336,340,2105,2108,2179,2183,2283,2305,2309,2331],[78,79,81],"h2",{"id":80},"the-contract","The contract",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-ts shiki shiki-themes github-light github-light poimandres","abstract class Registry {\n  abstract ecosystem(): string;\n  abstract fetchPackage(name: string, signal?: AbortSignal): Promise\u003CPackage>;\n  abstract fetchVersions(name: string, signal?: AbortSignal): Promise\u003CVersion[]>;\n  abstract fetchDependencies(name: string, version: string, signal?: AbortSignal): Promise\u003CDependency[]>;\n  abstract fetchMaintainers(name: string, signal?: AbortSignal): Promise\u003CMaintainer[]>;\n  abstract urls(): URLBuilder;\n}\n","ts","",[90,91,92,113,135,184,222,268,305,322],"code",{"__ignoreMap":88},[93,94,97,101,105,109],"span",{"class":95,"line":96},"line",1,[93,98,100],{"class":99},"sP0CR","abstract",[93,102,104],{"class":103},"s1TYA"," class",[93,106,108],{"class":107},"scZRh"," Registry",[93,110,112],{"class":111},"sKlNE"," {\n",[93,114,116,119,122,125,128,132],{"class":95,"line":115},2,[93,117,118],{"class":99},"  abstract",[93,120,121],{"class":107}," ecosystem",[93,123,124],{"class":111},"()",[93,126,127],{"class":103},":",[93,129,131],{"class":130},"s8yaW"," string",[93,133,134],{"class":111},";\n",[93,136,138,140,143,146,150,152,154,157,160,163,167,170,172,175,178,181],{"class":95,"line":137},3,[93,139,118],{"class":99},[93,141,142],{"class":107}," fetchPackage",[93,144,145],{"class":111},"(",[93,147,149],{"class":148},"s1jWp","name",[93,151,127],{"class":103},[93,153,131],{"class":130},[93,155,156],{"class":111},", ",[93,158,159],{"class":148},"signal",[93,161,162],{"class":103},"?:",[93,164,166],{"class":165},"sCrqT"," AbortSignal",[93,168,169],{"class":111},")",[93,171,127],{"class":103},[93,173,174],{"class":165}," Promise",[93,176,177],{"class":111},"\u003C",[93,179,180],{"class":165},"Package",[93,182,183],{"class":111},">;\n",[93,185,187,189,192,194,196,198,200,202,204,206,208,210,212,214,216,219],{"class":95,"line":186},4,[93,188,118],{"class":99},[93,190,191],{"class":107}," fetchVersions",[93,193,145],{"class":111},[93,195,149],{"class":148},[93,197,127],{"class":103},[93,199,131],{"class":130},[93,201,156],{"class":111},[93,203,159],{"class":148},[93,205,162],{"class":103},[93,207,166],{"class":165},[93,209,169],{"class":111},[93,211,127],{"class":103},[93,213,174],{"class":165},[93,215,177],{"class":111},[93,217,218],{"class":165},"Version",[93,220,221],{"class":111},"[]>;\n",[93,223,225,227,230,232,234,236,238,240,243,245,247,249,251,253,255,257,259,261,263,266],{"class":95,"line":224},5,[93,226,118],{"class":99},[93,228,229],{"class":107}," fetchDependencies",[93,231,145],{"class":111},[93,233,149],{"class":148},[93,235,127],{"class":103},[93,237,131],{"class":130},[93,239,156],{"class":111},[93,241,242],{"class":148},"version",[93,244,127],{"class":103},[93,246,131],{"class":130},[93,248,156],{"class":111},[93,250,159],{"class":148},[93,252,162],{"class":103},[93,254,166],{"class":165},[93,256,169],{"class":111},[93,258,127],{"class":103},[93,260,174],{"class":165},[93,262,177],{"class":111},[93,264,265],{"class":165},"Dependency",[93,267,221],{"class":111},[93,269,271,273,276,278,280,282,284,286,288,290,292,294,296,298,300,303],{"class":95,"line":270},6,[93,272,118],{"class":99},[93,274,275],{"class":107}," fetchMaintainers",[93,277,145],{"class":111},[93,279,149],{"class":148},[93,281,127],{"class":103},[93,283,131],{"class":130},[93,285,156],{"class":111},[93,287,159],{"class":148},[93,289,162],{"class":103},[93,291,166],{"class":165},[93,293,169],{"class":111},[93,295,127],{"class":103},[93,297,174],{"class":165},[93,299,177],{"class":111},[93,301,302],{"class":165},"Maintainer",[93,304,221],{"class":111},[93,306,308,310,313,315,317,320],{"class":95,"line":307},7,[93,309,118],{"class":99},[93,311,312],{"class":107}," urls",[93,314,124],{"class":111},[93,316,127],{"class":103},[93,318,319],{"class":165}," URLBuilder",[93,321,134],{"class":111},[93,323,325],{"class":95,"line":324},8,[93,326,327],{"class":111},"}\n",[329,330,331,332,335],"p",{},"All six methods are required. A registry that has no concept of maintainers returns an empty array; one that does not date versions returns ",[90,333,334],{},"publishedAt: null",". Nothing is optional at the type level, so a consumer never has to check whether a method exists.",[78,337,339],{"id":338},"extend-the-base-class","Extend the base class",[83,341,344],{"className":85,"code":342,"filename":343,"language":87,"meta":88,"style":88},"import {\n  Registry,\n  register,\n  buildPURL,\n  normalizeLicense,\n  normalizeRepositoryURL,\n  HTTPError,\n  NotFoundError,\n  type Client,\n  type Dependency,\n  type Maintainer,\n  type Package,\n  type URLBuilder,\n  type Version,\n} from \"@agntn\u002Fregistries\";\n\ninterface HexPackage {\n  name: string;\n  meta: { description?: string; licenses?: string[]; links?: Record\u003Cstring, string> };\n  releases: Array\u003C{ version: string; inserted_at: string; retired?: unknown }>;\n  owners?: Array\u003C{ username: string; email?: string }>;\n}\n\nexport class HexRegistry extends Registry {\n  constructor(\n    readonly baseURL: string,\n    readonly client: Client,\n  ) {\n    super();\n  }\n\n  ecosystem(): string {\n    return \"hex\";\n  }\n\n  async fetchPackage(name: string, signal?: AbortSignal): Promise\u003CPackage> {\n    const data = await this.get(name, signal);\n    const links = data.meta.links ?? {};\n    return {\n      name: data.name,\n      description: data.meta.description ?? \"\",\n      homepage: links[\"Homepage\"] ?? \"\",\n      documentation: `https:\u002F\u002Fhexdocs.pm\u002F${name}`,\n      repository: normalizeRepositoryURL(links[\"GitHub\"] ?? \"\"),\n      licenses: (data.meta.licenses ?? []).map(normalizeLicense).join(\" OR \"),\n      keywords: [],\n      namespace: \"\",\n      latestVersion: data.releases[0]?.version ?? \"\",\n      metadata: {},\n    };\n  }\n\n  async fetchVersions(name: string, signal?: AbortSignal): Promise\u003CVersion[]> {\n    const data = await this.get(name, signal);\n    return data.releases.map((release) => ({\n      number: release.version,\n      publishedAt: new Date(release.inserted_at),\n      licenses: \"\",\n      integrity: \"\",\n      status: release.retired ? \"retracted\" : \"\",\n      metadata: {},\n    }));\n  }\n\n  async fetchDependencies(): Promise\u003CDependency[]> {\n    return []; \u002F\u002F hex.pm lists requirements per release on a separate endpoint\n  }\n\n  async fetchMaintainers(name: string, signal?: AbortSignal): Promise\u003CMaintainer[]> {\n    const data = await this.get(name, signal);\n    return (data.owners ?? []).map((owner) => ({\n      uuid: \"\",\n      login: owner.username,\n      name: owner.username,\n      email: owner.email ?? \"\",\n      url: `https:\u002F\u002Fhex.pm\u002Fusers\u002F${owner.username}`,\n      role: \"owner\",\n    }));\n  }\n\n  urls(): URLBuilder {\n    return {\n      registry: (name) => `https:\u002F\u002Fhex.pm\u002Fpackages\u002F${name}`,\n      download: (name, version) => `https:\u002F\u002Frepo.hex.pm\u002Ftarballs\u002F${name}-${version}.tar`,\n      documentation: (name, version) => `https:\u002F\u002Fhexdocs.pm\u002F${name}${version ? `\u002F${version}` : \"\"}`,\n      readme: (name) => `https:\u002F\u002Fhexdocs.pm\u002F${name}\u002Freadme.html`,\n      purl: (name, version) => buildPURL({ type: \"hex\", name, version }),\n    };\n  }\n\n  private async get(name: string, signal?: AbortSignal): Promise\u003CHexPackage> {\n    try {\n      return await this.client.getJSON\u003CHexPackage>(`${this.baseURL}\u002Fapi\u002Fpackages\u002F${name}`, signal);\n    } catch (error) {\n      if (error instanceof HTTPError && error.isNotFound()) {\n        throw new NotFoundError(\"hex\", name);\n      }\n      throw error;\n    }\n  }\n}\n\nregister(\"hex\", \"https:\u002F\u002Fhex.pm\", HexRegistry);\n","hex.ts",[90,345,346,353,362,369,376,383,390,397,404,416,426,436,446,455,465,487,494,505,518,569,611,641,646,651,669,678,693,707,713,723,729,734,748,764,769,774,811,849,876,883,899,924,953,977,1010,1062,1073,1085,1117,1128,1134,1139,1144,1180,1207,1237,1254,1278,1289,1301,1332,1341,1347,1352,1357,1376,1388,1393,1398,1433,1460,1491,1503,1520,1535,1555,1580,1596,1601,1606,1611,1625,1632,1662,1712,1764,1797,1846,1851,1856,1861,1902,1911,1966,1983,2013,2038,2044,2054,2060,2065,2070,2075],{"__ignoreMap":88},[93,347,348,351],{"class":95,"line":96},[93,349,350],{"class":99},"import",[93,352,112],{"class":111},[93,354,355,359],{"class":95,"line":115},[93,356,358],{"class":357},"snHMy","  Registry",[93,360,361],{"class":111},",\n",[93,363,364,367],{"class":95,"line":137},[93,365,366],{"class":357},"  register",[93,368,361],{"class":111},[93,370,371,374],{"class":95,"line":186},[93,372,373],{"class":357},"  buildPURL",[93,375,361],{"class":111},[93,377,378,381],{"class":95,"line":224},[93,379,380],{"class":357},"  normalizeLicense",[93,382,361],{"class":111},[93,384,385,388],{"class":95,"line":270},[93,386,387],{"class":357},"  normalizeRepositoryURL",[93,389,361],{"class":111},[93,391,392,395],{"class":95,"line":307},[93,393,394],{"class":357},"  HTTPError",[93,396,361],{"class":111},[93,398,399,402],{"class":95,"line":324},[93,400,401],{"class":357},"  NotFoundError",[93,403,361],{"class":111},[93,405,407,411,414],{"class":95,"line":406},9,[93,408,410],{"class":409},"stCPd","  type",[93,412,413],{"class":357}," Client",[93,415,361],{"class":111},[93,417,419,421,424],{"class":95,"line":418},10,[93,420,410],{"class":409},[93,422,423],{"class":357}," Dependency",[93,425,361],{"class":111},[93,427,429,431,434],{"class":95,"line":428},11,[93,430,410],{"class":409},[93,432,433],{"class":357}," Maintainer",[93,435,361],{"class":111},[93,437,439,441,444],{"class":95,"line":438},12,[93,440,410],{"class":409},[93,442,443],{"class":357}," Package",[93,445,361],{"class":111},[93,447,449,451,453],{"class":95,"line":448},13,[93,450,410],{"class":409},[93,452,319],{"class":357},[93,454,361],{"class":111},[93,456,458,460,463],{"class":95,"line":457},14,[93,459,410],{"class":409},[93,461,462],{"class":357}," Version",[93,464,361],{"class":111},[93,466,468,471,474,478,482,485],{"class":95,"line":467},15,[93,469,470],{"class":111},"}",[93,472,473],{"class":409}," from",[93,475,477],{"class":476},"scVjq"," \"",[93,479,481],{"class":480},"sQ7BG","@agntn\u002Fregistries",[93,483,484],{"class":476},"\"",[93,486,134],{"class":111},[93,488,490],{"class":95,"line":489},16,[93,491,493],{"emptyLinePlaceholder":492},true,"\n",[93,495,497,500,503],{"class":95,"line":496},17,[93,498,499],{"class":103},"interface",[93,501,502],{"class":165}," HexPackage",[93,504,112],{"class":111},[93,506,508,512,514,516],{"class":95,"line":507},18,[93,509,511],{"class":510},"s0VbO","  name",[93,513,127],{"class":103},[93,515,131],{"class":130},[93,517,134],{"class":111},[93,519,521,524,526,529,532,534,536,539,542,544,546,549,552,554,557,559,562,564,566],{"class":95,"line":520},19,[93,522,523],{"class":510},"  meta",[93,525,127],{"class":103},[93,527,528],{"class":111}," { ",[93,530,531],{"class":510},"description",[93,533,162],{"class":103},[93,535,131],{"class":130},[93,537,538],{"class":111},"; ",[93,540,541],{"class":510},"licenses",[93,543,162],{"class":103},[93,545,131],{"class":130},[93,547,548],{"class":111},"[]; ",[93,550,551],{"class":510},"links",[93,553,162],{"class":103},[93,555,556],{"class":165}," Record",[93,558,177],{"class":111},[93,560,561],{"class":130},"string",[93,563,156],{"class":111},[93,565,561],{"class":130},[93,567,568],{"class":111},"> };\n",[93,570,572,575,577,580,583,585,587,589,591,594,596,598,600,603,605,608],{"class":95,"line":571},20,[93,573,574],{"class":510},"  releases",[93,576,127],{"class":103},[93,578,579],{"class":165}," Array",[93,581,582],{"class":111},"\u003C{ ",[93,584,242],{"class":510},[93,586,127],{"class":103},[93,588,131],{"class":130},[93,590,538],{"class":111},[93,592,593],{"class":510},"inserted_at",[93,595,127],{"class":103},[93,597,131],{"class":130},[93,599,538],{"class":111},[93,601,602],{"class":510},"retired",[93,604,162],{"class":103},[93,606,607],{"class":130}," unknown",[93,609,610],{"class":111}," }>;\n",[93,612,614,617,619,621,623,626,628,630,632,635,637,639],{"class":95,"line":613},21,[93,615,616],{"class":510},"  owners",[93,618,162],{"class":103},[93,620,579],{"class":165},[93,622,582],{"class":111},[93,624,625],{"class":510},"username",[93,627,127],{"class":103},[93,629,131],{"class":130},[93,631,538],{"class":111},[93,633,634],{"class":510},"email",[93,636,162],{"class":103},[93,638,131],{"class":130},[93,640,610],{"class":111},[93,642,644],{"class":95,"line":643},22,[93,645,327],{"class":111},[93,647,649],{"class":95,"line":648},23,[93,650,493],{"emptyLinePlaceholder":492},[93,652,654,657,659,662,665,667],{"class":95,"line":653},24,[93,655,656],{"class":99},"export",[93,658,104],{"class":103},[93,660,661],{"class":107}," HexRegistry",[93,663,664],{"class":99}," extends",[93,666,108],{"class":107},[93,668,112],{"class":111},[93,670,672,675],{"class":95,"line":671},25,[93,673,674],{"class":103},"  constructor",[93,676,677],{"class":111},"(\n",[93,679,681,684,687,689,691],{"class":95,"line":680},26,[93,682,683],{"class":99},"    readonly",[93,685,686],{"class":148}," baseURL",[93,688,127],{"class":103},[93,690,131],{"class":130},[93,692,361],{"class":111},[93,694,696,698,701,703,705],{"class":95,"line":695},27,[93,697,683],{"class":99},[93,699,700],{"class":148}," client",[93,702,127],{"class":103},[93,704,413],{"class":165},[93,706,361],{"class":111},[93,708,710],{"class":95,"line":709},28,[93,711,712],{"class":111},"  ) {\n",[93,714,716,720],{"class":95,"line":715},29,[93,717,719],{"class":718},"s-lox","    super",[93,721,722],{"class":111},"();\n",[93,724,726],{"class":95,"line":725},30,[93,727,728],{"class":111},"  }\n",[93,730,732],{"class":95,"line":731},31,[93,733,493],{"emptyLinePlaceholder":492},[93,735,737,740,742,744,746],{"class":95,"line":736},32,[93,738,739],{"class":107},"  ecosystem",[93,741,124],{"class":111},[93,743,127],{"class":103},[93,745,131],{"class":130},[93,747,112],{"class":111},[93,749,751,755,757,760,762],{"class":95,"line":750},33,[93,752,754],{"class":753},"sZW6a","    return",[93,756,477],{"class":476},[93,758,759],{"class":480},"hex",[93,761,484],{"class":476},[93,763,134],{"class":111},[93,765,767],{"class":95,"line":766},34,[93,768,728],{"class":111},[93,770,772],{"class":95,"line":771},35,[93,773,493],{"emptyLinePlaceholder":492},[93,775,777,780,782,784,786,788,790,792,794,796,798,800,802,804,806,808],{"class":95,"line":776},36,[93,778,779],{"class":99},"  async",[93,781,142],{"class":107},[93,783,145],{"class":111},[93,785,149],{"class":148},[93,787,127],{"class":103},[93,789,131],{"class":130},[93,791,156],{"class":111},[93,793,159],{"class":148},[93,795,162],{"class":103},[93,797,166],{"class":165},[93,799,169],{"class":111},[93,801,127],{"class":103},[93,803,174],{"class":165},[93,805,177],{"class":111},[93,807,180],{"class":165},[93,809,810],{"class":111},"> {\n",[93,812,814,817,821,824,827,830,833,837,839,842,844,846],{"class":95,"line":813},37,[93,815,816],{"class":103},"    const",[93,818,820],{"class":819},"saoiD"," data",[93,822,823],{"class":103}," =",[93,825,826],{"class":753}," await",[93,828,829],{"class":718}," this",[93,831,832],{"class":111},".",[93,834,836],{"class":835},"sULi6","get",[93,838,145],{"class":111},[93,840,149],{"class":841},"spVlQ",[93,843,156],{"class":111},[93,845,159],{"class":841},[93,847,848],{"class":111},");\n",[93,850,852,854,857,859,861,863,866,868,870,873],{"class":95,"line":851},38,[93,853,816],{"class":103},[93,855,856],{"class":819}," links",[93,858,823],{"class":103},[93,860,820],{"class":841},[93,862,832],{"class":111},[93,864,865],{"class":841},"meta",[93,867,832],{"class":111},[93,869,551],{"class":841},[93,871,872],{"class":103}," ??",[93,874,875],{"class":111}," {};\n",[93,877,879,881],{"class":95,"line":878},39,[93,880,754],{"class":753},[93,882,112],{"class":111},[93,884,886,889,891,893,895,897],{"class":95,"line":885},40,[93,887,888],{"class":357},"      name",[93,890,127],{"class":111},[93,892,820],{"class":841},[93,894,832],{"class":111},[93,896,149],{"class":841},[93,898,361],{"class":111},[93,900,902,905,907,909,911,913,915,917,919,922],{"class":95,"line":901},41,[93,903,904],{"class":357},"      description",[93,906,127],{"class":111},[93,908,820],{"class":841},[93,910,832],{"class":111},[93,912,865],{"class":841},[93,914,832],{"class":111},[93,916,531],{"class":841},[93,918,872],{"class":103},[93,920,921],{"class":476}," \"\"",[93,923,361],{"class":111},[93,925,927,930,932,934,937,939,942,944,947,949,951],{"class":95,"line":926},42,[93,928,929],{"class":357},"      homepage",[93,931,127],{"class":111},[93,933,856],{"class":841},[93,935,936],{"class":111},"[",[93,938,484],{"class":476},[93,940,941],{"class":480},"Homepage",[93,943,484],{"class":476},[93,945,946],{"class":111},"]",[93,948,872],{"class":103},[93,950,921],{"class":476},[93,952,361],{"class":111},[93,954,956,959,961,964,967,970,972,975],{"class":95,"line":955},43,[93,957,958],{"class":357},"      documentation",[93,960,127],{"class":111},[93,962,963],{"class":476}," `",[93,965,966],{"class":480},"https:\u002F\u002Fhexdocs.pm\u002F",[93,968,969],{"class":476},"${",[93,971,149],{"class":841},[93,973,974],{"class":476},"}`",[93,976,361],{"class":111},[93,978,980,983,985,988,990,992,994,996,999,1001,1003,1005,1007],{"class":95,"line":979},44,[93,981,982],{"class":357},"      repository",[93,984,127],{"class":111},[93,986,987],{"class":835}," normalizeRepositoryURL",[93,989,145],{"class":111},[93,991,551],{"class":841},[93,993,936],{"class":111},[93,995,484],{"class":476},[93,997,998],{"class":480},"GitHub",[93,1000,484],{"class":476},[93,1002,946],{"class":111},[93,1004,872],{"class":103},[93,1006,921],{"class":476},[93,1008,1009],{"class":111},"),\n",[93,1011,1013,1016,1018,1021,1024,1026,1028,1030,1032,1034,1037,1040,1042,1045,1048,1051,1053,1055,1058,1060],{"class":95,"line":1012},45,[93,1014,1015],{"class":357},"      licenses",[93,1017,127],{"class":111},[93,1019,1020],{"class":111}," (",[93,1022,1023],{"class":841},"data",[93,1025,832],{"class":111},[93,1027,865],{"class":841},[93,1029,832],{"class":111},[93,1031,541],{"class":841},[93,1033,872],{"class":103},[93,1035,1036],{"class":111}," []).",[93,1038,1039],{"class":835},"map",[93,1041,145],{"class":111},[93,1043,1044],{"class":841},"normalizeLicense",[93,1046,1047],{"class":111},").",[93,1049,1050],{"class":835},"join",[93,1052,145],{"class":111},[93,1054,484],{"class":476},[93,1056,1057],{"class":480}," OR ",[93,1059,484],{"class":476},[93,1061,1009],{"class":111},[93,1063,1065,1068,1070],{"class":95,"line":1064},46,[93,1066,1067],{"class":357},"      keywords",[93,1069,127],{"class":111},[93,1071,1072],{"class":111}," [],\n",[93,1074,1076,1079,1081,1083],{"class":95,"line":1075},47,[93,1077,1078],{"class":357},"      namespace",[93,1080,127],{"class":111},[93,1082,921],{"class":476},[93,1084,361],{"class":111},[93,1086,1088,1091,1093,1095,1097,1100,1102,1106,1109,1111,1113,1115],{"class":95,"line":1087},48,[93,1089,1090],{"class":357},"      latestVersion",[93,1092,127],{"class":111},[93,1094,820],{"class":841},[93,1096,832],{"class":111},[93,1098,1099],{"class":841},"releases",[93,1101,936],{"class":111},[93,1103,1105],{"class":1104},"siHFe","0",[93,1107,1108],{"class":111},"]?.",[93,1110,242],{"class":841},[93,1112,872],{"class":103},[93,1114,921],{"class":476},[93,1116,361],{"class":111},[93,1118,1120,1123,1125],{"class":95,"line":1119},49,[93,1121,1122],{"class":357},"      metadata",[93,1124,127],{"class":111},[93,1126,1127],{"class":111}," {},\n",[93,1129,1131],{"class":95,"line":1130},50,[93,1132,1133],{"class":111},"    };\n",[93,1135,1137],{"class":95,"line":1136},51,[93,1138,728],{"class":111},[93,1140,1142],{"class":95,"line":1141},52,[93,1143,493],{"emptyLinePlaceholder":492},[93,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177],{"class":95,"line":1146},53,[93,1148,779],{"class":99},[93,1150,191],{"class":107},[93,1152,145],{"class":111},[93,1154,149],{"class":148},[93,1156,127],{"class":103},[93,1158,131],{"class":130},[93,1160,156],{"class":111},[93,1162,159],{"class":148},[93,1164,162],{"class":103},[93,1166,166],{"class":165},[93,1168,169],{"class":111},[93,1170,127],{"class":103},[93,1172,174],{"class":165},[93,1174,177],{"class":111},[93,1176,218],{"class":165},[93,1178,1179],{"class":111},"[]> {\n",[93,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205],{"class":95,"line":1182},54,[93,1184,816],{"class":103},[93,1186,820],{"class":819},[93,1188,823],{"class":103},[93,1190,826],{"class":753},[93,1192,829],{"class":718},[93,1194,832],{"class":111},[93,1196,836],{"class":835},[93,1198,145],{"class":111},[93,1200,149],{"class":841},[93,1202,156],{"class":111},[93,1204,159],{"class":841},[93,1206,848],{"class":111},[93,1208,1210,1212,1214,1216,1218,1220,1222,1225,1228,1231,1234],{"class":95,"line":1209},55,[93,1211,754],{"class":753},[93,1213,820],{"class":841},[93,1215,832],{"class":111},[93,1217,1099],{"class":841},[93,1219,832],{"class":111},[93,1221,1039],{"class":835},[93,1223,1224],{"class":111},"((",[93,1226,1227],{"class":148},"release",[93,1229,1230],{"class":111},") ",[93,1232,1233],{"class":103},"=>",[93,1235,1236],{"class":111}," ({\n",[93,1238,1240,1243,1245,1248,1250,1252],{"class":95,"line":1239},56,[93,1241,1242],{"class":357},"      number",[93,1244,127],{"class":111},[93,1246,1247],{"class":841}," release",[93,1249,832],{"class":111},[93,1251,242],{"class":841},[93,1253,361],{"class":111},[93,1255,1257,1260,1262,1265,1268,1270,1272,1274,1276],{"class":95,"line":1256},57,[93,1258,1259],{"class":357},"      publishedAt",[93,1261,127],{"class":111},[93,1263,1264],{"class":99}," new",[93,1266,1267],{"class":835}," Date",[93,1269,145],{"class":111},[93,1271,1227],{"class":841},[93,1273,832],{"class":111},[93,1275,593],{"class":841},[93,1277,1009],{"class":111},[93,1279,1281,1283,1285,1287],{"class":95,"line":1280},58,[93,1282,1015],{"class":357},[93,1284,127],{"class":111},[93,1286,921],{"class":476},[93,1288,361],{"class":111},[93,1290,1292,1295,1297,1299],{"class":95,"line":1291},59,[93,1293,1294],{"class":357},"      integrity",[93,1296,127],{"class":111},[93,1298,921],{"class":476},[93,1300,361],{"class":111},[93,1302,1304,1307,1309,1311,1313,1315,1318,1320,1323,1325,1328,1330],{"class":95,"line":1303},60,[93,1305,1306],{"class":357},"      status",[93,1308,127],{"class":111},[93,1310,1247],{"class":841},[93,1312,832],{"class":111},[93,1314,602],{"class":841},[93,1316,1317],{"class":103}," ?",[93,1319,477],{"class":476},[93,1321,1322],{"class":480},"retracted",[93,1324,484],{"class":476},[93,1326,1327],{"class":103}," :",[93,1329,921],{"class":476},[93,1331,361],{"class":111},[93,1333,1335,1337,1339],{"class":95,"line":1334},61,[93,1336,1122],{"class":357},[93,1338,127],{"class":111},[93,1340,1127],{"class":111},[93,1342,1344],{"class":95,"line":1343},62,[93,1345,1346],{"class":111},"    }));\n",[93,1348,1350],{"class":95,"line":1349},63,[93,1351,728],{"class":111},[93,1353,1355],{"class":95,"line":1354},64,[93,1356,493],{"emptyLinePlaceholder":492},[93,1358,1360,1362,1364,1366,1368,1370,1372,1374],{"class":95,"line":1359},65,[93,1361,779],{"class":99},[93,1363,229],{"class":107},[93,1365,124],{"class":111},[93,1367,127],{"class":103},[93,1369,174],{"class":165},[93,1371,177],{"class":111},[93,1373,265],{"class":165},[93,1375,1179],{"class":111},[93,1377,1379,1381,1384],{"class":95,"line":1378},66,[93,1380,754],{"class":753},[93,1382,1383],{"class":111}," []; ",[93,1385,1387],{"class":1386},"sjhu3","\u002F\u002F hex.pm lists requirements per release on a separate endpoint\n",[93,1389,1391],{"class":95,"line":1390},67,[93,1392,728],{"class":111},[93,1394,1396],{"class":95,"line":1395},68,[93,1397,493],{"emptyLinePlaceholder":492},[93,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431],{"class":95,"line":1400},69,[93,1402,779],{"class":99},[93,1404,275],{"class":107},[93,1406,145],{"class":111},[93,1408,149],{"class":148},[93,1410,127],{"class":103},[93,1412,131],{"class":130},[93,1414,156],{"class":111},[93,1416,159],{"class":148},[93,1418,162],{"class":103},[93,1420,166],{"class":165},[93,1422,169],{"class":111},[93,1424,127],{"class":103},[93,1426,174],{"class":165},[93,1428,177],{"class":111},[93,1430,302],{"class":165},[93,1432,1179],{"class":111},[93,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458],{"class":95,"line":1435},70,[93,1437,816],{"class":103},[93,1439,820],{"class":819},[93,1441,823],{"class":103},[93,1443,826],{"class":753},[93,1445,829],{"class":718},[93,1447,832],{"class":111},[93,1449,836],{"class":835},[93,1451,145],{"class":111},[93,1453,149],{"class":841},[93,1455,156],{"class":111},[93,1457,159],{"class":841},[93,1459,848],{"class":111},[93,1461,1463,1465,1467,1469,1471,1474,1476,1478,1480,1482,1485,1487,1489],{"class":95,"line":1462},71,[93,1464,754],{"class":753},[93,1466,1020],{"class":111},[93,1468,1023],{"class":841},[93,1470,832],{"class":111},[93,1472,1473],{"class":841},"owners",[93,1475,872],{"class":103},[93,1477,1036],{"class":111},[93,1479,1039],{"class":835},[93,1481,1224],{"class":111},[93,1483,1484],{"class":148},"owner",[93,1486,1230],{"class":111},[93,1488,1233],{"class":103},[93,1490,1236],{"class":111},[93,1492,1494,1497,1499,1501],{"class":95,"line":1493},72,[93,1495,1496],{"class":357},"      uuid",[93,1498,127],{"class":111},[93,1500,921],{"class":476},[93,1502,361],{"class":111},[93,1504,1506,1509,1511,1514,1516,1518],{"class":95,"line":1505},73,[93,1507,1508],{"class":357},"      login",[93,1510,127],{"class":111},[93,1512,1513],{"class":841}," owner",[93,1515,832],{"class":111},[93,1517,625],{"class":841},[93,1519,361],{"class":111},[93,1521,1523,1525,1527,1529,1531,1533],{"class":95,"line":1522},74,[93,1524,888],{"class":357},[93,1526,127],{"class":111},[93,1528,1513],{"class":841},[93,1530,832],{"class":111},[93,1532,625],{"class":841},[93,1534,361],{"class":111},[93,1536,1538,1541,1543,1545,1547,1549,1551,1553],{"class":95,"line":1537},75,[93,1539,1540],{"class":357},"      email",[93,1542,127],{"class":111},[93,1544,1513],{"class":841},[93,1546,832],{"class":111},[93,1548,634],{"class":841},[93,1550,872],{"class":103},[93,1552,921],{"class":476},[93,1554,361],{"class":111},[93,1556,1558,1561,1563,1565,1568,1570,1572,1574,1576,1578],{"class":95,"line":1557},76,[93,1559,1560],{"class":357},"      url",[93,1562,127],{"class":111},[93,1564,963],{"class":476},[93,1566,1567],{"class":480},"https:\u002F\u002Fhex.pm\u002Fusers\u002F",[93,1569,969],{"class":476},[93,1571,1484],{"class":841},[93,1573,832],{"class":476},[93,1575,625],{"class":841},[93,1577,974],{"class":476},[93,1579,361],{"class":111},[93,1581,1583,1586,1588,1590,1592,1594],{"class":95,"line":1582},77,[93,1584,1585],{"class":357},"      role",[93,1587,127],{"class":111},[93,1589,477],{"class":476},[93,1591,1484],{"class":480},[93,1593,484],{"class":476},[93,1595,361],{"class":111},[93,1597,1599],{"class":95,"line":1598},78,[93,1600,1346],{"class":111},[93,1602,1604],{"class":95,"line":1603},79,[93,1605,728],{"class":111},[93,1607,1609],{"class":95,"line":1608},80,[93,1610,493],{"emptyLinePlaceholder":492},[93,1612,1614,1617,1619,1621,1623],{"class":95,"line":1613},81,[93,1615,1616],{"class":107},"  urls",[93,1618,124],{"class":111},[93,1620,127],{"class":103},[93,1622,319],{"class":165},[93,1624,112],{"class":111},[93,1626,1628,1630],{"class":95,"line":1627},82,[93,1629,754],{"class":753},[93,1631,112],{"class":111},[93,1633,1635,1638,1640,1642,1644,1646,1649,1651,1654,1656,1658,1660],{"class":95,"line":1634},83,[93,1636,1637],{"class":107},"      registry",[93,1639,127],{"class":111},[93,1641,1020],{"class":111},[93,1643,149],{"class":148},[93,1645,169],{"class":111},[93,1647,1648],{"class":103}," =>",[93,1650,963],{"class":476},[93,1652,1653],{"class":480},"https:\u002F\u002Fhex.pm\u002Fpackages\u002F",[93,1655,969],{"class":476},[93,1657,149],{"class":841},[93,1659,974],{"class":476},[93,1661,361],{"class":111},[93,1663,1665,1668,1670,1672,1674,1677,1680,1682,1684,1686,1689,1691,1693,1695,1698,1700,1702,1704,1707,1710],{"class":95,"line":1664},84,[93,1666,1667],{"class":107},"      download",[93,1669,127],{"class":111},[93,1671,1020],{"class":111},[93,1673,149],{"class":148},[93,1675,1676],{"class":111},",",[93,1678,1679],{"class":148}," version",[93,1681,169],{"class":111},[93,1683,1648],{"class":103},[93,1685,963],{"class":476},[93,1687,1688],{"class":480},"https:\u002F\u002Frepo.hex.pm\u002Ftarballs\u002F",[93,1690,969],{"class":476},[93,1692,149],{"class":841},[93,1694,470],{"class":476},[93,1696,1697],{"class":480},"-",[93,1699,969],{"class":476},[93,1701,242],{"class":841},[93,1703,470],{"class":476},[93,1705,1706],{"class":480},".tar",[93,1708,1709],{"class":476},"`",[93,1711,361],{"class":111},[93,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1742,1744,1746,1748,1751,1753,1755,1757,1759,1762],{"class":95,"line":1714},85,[93,1716,958],{"class":107},[93,1718,127],{"class":111},[93,1720,1020],{"class":111},[93,1722,149],{"class":148},[93,1724,1676],{"class":111},[93,1726,1679],{"class":148},[93,1728,169],{"class":111},[93,1730,1648],{"class":103},[93,1732,963],{"class":476},[93,1734,966],{"class":480},[93,1736,969],{"class":476},[93,1738,149],{"class":841},[93,1740,1741],{"class":476},"}${",[93,1743,242],{"class":841},[93,1745,1317],{"class":103},[93,1747,963],{"class":476},[93,1749,1750],{"class":480},"\u002F",[93,1752,969],{"class":476},[93,1754,242],{"class":841},[93,1756,974],{"class":476},[93,1758,1327],{"class":103},[93,1760,1761],{"class":476}," \"\"}`",[93,1763,361],{"class":111},[93,1765,1767,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1793,1795],{"class":95,"line":1766},86,[93,1768,1769],{"class":107},"      readme",[93,1771,127],{"class":111},[93,1773,1020],{"class":111},[93,1775,149],{"class":148},[93,1777,169],{"class":111},[93,1779,1648],{"class":103},[93,1781,963],{"class":476},[93,1783,966],{"class":480},[93,1785,969],{"class":476},[93,1787,149],{"class":841},[93,1789,470],{"class":476},[93,1791,1792],{"class":480},"\u002Freadme.html",[93,1794,1709],{"class":476},[93,1796,361],{"class":111},[93,1798,1800,1803,1805,1807,1809,1811,1813,1815,1817,1820,1823,1826,1828,1830,1832,1834,1836,1839,1841,1843],{"class":95,"line":1799},87,[93,1801,1802],{"class":107},"      purl",[93,1804,127],{"class":111},[93,1806,1020],{"class":111},[93,1808,149],{"class":148},[93,1810,1676],{"class":111},[93,1812,1679],{"class":148},[93,1814,169],{"class":111},[93,1816,1648],{"class":103},[93,1818,1819],{"class":835}," buildPURL",[93,1821,1822],{"class":111},"({",[93,1824,1825],{"class":357}," type",[93,1827,127],{"class":111},[93,1829,477],{"class":476},[93,1831,759],{"class":480},[93,1833,484],{"class":476},[93,1835,1676],{"class":111},[93,1837,1838],{"class":841}," name",[93,1840,1676],{"class":111},[93,1842,1679],{"class":841},[93,1844,1845],{"class":111}," }),\n",[93,1847,1849],{"class":95,"line":1848},88,[93,1850,1133],{"class":111},[93,1852,1854],{"class":95,"line":1853},89,[93,1855,728],{"class":111},[93,1857,1859],{"class":95,"line":1858},90,[93,1860,493],{"emptyLinePlaceholder":492},[93,1862,1864,1867,1870,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1900],{"class":95,"line":1863},91,[93,1865,1866],{"class":99},"  private",[93,1868,1869],{"class":99}," async",[93,1871,1872],{"class":107}," get",[93,1874,145],{"class":111},[93,1876,149],{"class":148},[93,1878,127],{"class":103},[93,1880,131],{"class":130},[93,1882,156],{"class":111},[93,1884,159],{"class":148},[93,1886,162],{"class":103},[93,1888,166],{"class":165},[93,1890,169],{"class":111},[93,1892,127],{"class":103},[93,1894,174],{"class":165},[93,1896,177],{"class":111},[93,1898,1899],{"class":165},"HexPackage",[93,1901,810],{"class":111},[93,1903,1905,1909],{"class":95,"line":1904},92,[93,1906,1908],{"class":1907},"szlwh","    try",[93,1910,112],{"class":111},[93,1912,1914,1917,1919,1921,1923,1926,1928,1931,1933,1935,1938,1941,1944,1946,1949,1951,1954,1956,1958,1960,1962,1964],{"class":95,"line":1913},93,[93,1915,1916],{"class":753},"      return",[93,1918,826],{"class":753},[93,1920,829],{"class":718},[93,1922,832],{"class":111},[93,1924,1925],{"class":841},"client",[93,1927,832],{"class":111},[93,1929,1930],{"class":835},"getJSON",[93,1932,177],{"class":111},[93,1934,1899],{"class":165},[93,1936,1937],{"class":111},">(",[93,1939,1940],{"class":476},"`${",[93,1942,1943],{"class":718},"this",[93,1945,832],{"class":476},[93,1947,1948],{"class":841},"baseURL",[93,1950,470],{"class":476},[93,1952,1953],{"class":480},"\u002Fapi\u002Fpackages\u002F",[93,1955,969],{"class":476},[93,1957,149],{"class":841},[93,1959,974],{"class":476},[93,1961,156],{"class":111},[93,1963,159],{"class":841},[93,1965,848],{"class":111},[93,1967,1969,1972,1975,1977,1980],{"class":95,"line":1968},94,[93,1970,1971],{"class":111},"    } ",[93,1973,1974],{"class":1907},"catch",[93,1976,1020],{"class":111},[93,1978,1979],{"class":841},"error",[93,1981,1982],{"class":111},") {\n",[93,1984,1986,1989,1991,1993,1996,1999,2002,2005,2007,2010],{"class":95,"line":1985},95,[93,1987,1988],{"class":409},"      if",[93,1990,1020],{"class":111},[93,1992,1979],{"class":841},[93,1994,1995],{"class":103}," instanceof",[93,1997,1998],{"class":165}," HTTPError",[93,2000,2001],{"class":103}," &&",[93,2003,2004],{"class":841}," error",[93,2006,832],{"class":111},[93,2008,2009],{"class":835},"isNotFound",[93,2011,2012],{"class":111},"()) {\n",[93,2014,2016,2019,2021,2024,2026,2028,2030,2032,2034,2036],{"class":95,"line":2015},96,[93,2017,2018],{"class":1907},"        throw",[93,2020,1264],{"class":99},[93,2022,2023],{"class":835}," NotFoundError",[93,2025,145],{"class":111},[93,2027,484],{"class":476},[93,2029,759],{"class":480},[93,2031,484],{"class":476},[93,2033,156],{"class":111},[93,2035,149],{"class":841},[93,2037,848],{"class":111},[93,2039,2041],{"class":95,"line":2040},97,[93,2042,2043],{"class":111},"      }\n",[93,2045,2047,2050,2052],{"class":95,"line":2046},98,[93,2048,2049],{"class":1907},"      throw",[93,2051,2004],{"class":841},[93,2053,134],{"class":111},[93,2055,2057],{"class":95,"line":2056},99,[93,2058,2059],{"class":111},"    }\n",[93,2061,2063],{"class":95,"line":2062},100,[93,2064,728],{"class":111},[93,2066,2068],{"class":95,"line":2067},101,[93,2069,327],{"class":111},[93,2071,2073],{"class":95,"line":2072},102,[93,2074,493],{"emptyLinePlaceholder":492},[93,2076,2078,2081,2083,2085,2087,2089,2091,2093,2096,2098,2100,2103],{"class":95,"line":2077},103,[93,2079,2080],{"class":835},"register",[93,2082,145],{"class":111},[93,2084,484],{"class":476},[93,2086,759],{"class":480},[93,2088,484],{"class":476},[93,2090,156],{"class":111},[93,2092,484],{"class":476},[93,2094,2095],{"class":480},"https:\u002F\u002Fhex.pm",[93,2097,484],{"class":476},[93,2099,156],{"class":111},[93,2101,2102],{"class":841},"HexRegistry",[93,2104,848],{"class":111},[329,2106,2107],{},"Four rules the built-in adapters follow, and a review would ask of yours:",[2109,2110,2111,2130,2148,2173],"ul",{},[2112,2113,2114,2121,2122,2125,2126,2129],"li",{},[2115,2116,2117,2118,832],"strong",{},"Go through ",[90,2119,2120],{},"Client"," It owns retries, backoff, timeouts, the rate limiter and the ",[90,2123,2124],{},"User-Agent",". An adapter that calls ",[90,2127,2128],{},"fetch"," itself loses all of that and bypasses whatever the caller configured.",[2112,2131,2132,2135,2136,2139,2140,2143,2144,2147],{},[2115,2133,2134],{},"Throw typed errors."," A 404 becomes ",[90,2137,2138],{},"NotFoundError","; everything else stays the ",[90,2141,2142],{},"HTTPError"," the client threw. A plain ",[90,2145,2146],{},"Error"," cannot be caught by type.",[2112,2149,2150,2153,2154,2156,2157,2160,2161,2164,2165,2168,2169,2172],{},[2115,2151,2152],{},"Normalize at the boundary."," Licenses through ",[90,2155,1044],{}," or ",[90,2158,2159],{},"combineLicenses",", repository URLs through ",[90,2162,2163],{},"normalizeRepositoryURL",", dates to ",[90,2166,2167],{},"Date",". Raw payload fields go in ",[90,2170,2171],{},"metadata",", never in the shared fields.",[2112,2174,2175,2178],{},[2115,2176,2177],{},"No imports between adapters."," Shared logic belongs in core; an adapter that imports another adapter creates a dependency the registry system cannot see.",[78,2180,2182],{"id":2181},"register-and-use","Register and use",[83,2184,2186],{"className":85,"code":2185,"language":87,"meta":88,"style":88},"import { create, fetchPackageFromPURL } from \"@agntn\u002Fregistries\";\nimport \".\u002Fhex\"; \u002F\u002F the register() call runs on import\n\nawait fetchPackageFromPURL(\"pkg:hex\u002Fphoenix\"); \u002F\u002F resolved through the registry you added\nconst hex = create(\"hex\"); \u002F\u002F or by key\n",[90,2187,2188,2216,2232,2236,2258],{"__ignoreMap":88},[93,2189,2190,2192,2195,2198,2200,2203,2206,2208,2210,2212,2214],{"class":95,"line":96},[93,2191,350],{"class":99},[93,2193,2194],{"class":111}," {",[93,2196,2197],{"class":357}," create",[93,2199,1676],{"class":111},[93,2201,2202],{"class":357}," fetchPackageFromPURL",[93,2204,2205],{"class":111}," }",[93,2207,473],{"class":409},[93,2209,477],{"class":476},[93,2211,481],{"class":480},[93,2213,484],{"class":476},[93,2215,134],{"class":111},[93,2217,2218,2220,2222,2225,2227,2229],{"class":95,"line":115},[93,2219,350],{"class":99},[93,2221,477],{"class":476},[93,2223,2224],{"class":480},".\u002Fhex",[93,2226,484],{"class":476},[93,2228,538],{"class":111},[93,2230,2231],{"class":1386},"\u002F\u002F the register() call runs on import\n",[93,2233,2234],{"class":95,"line":137},[93,2235,493],{"emptyLinePlaceholder":492},[93,2237,2238,2241,2243,2245,2247,2250,2252,2255],{"class":95,"line":186},[93,2239,2240],{"class":753},"await",[93,2242,2202],{"class":835},[93,2244,145],{"class":111},[93,2246,484],{"class":476},[93,2248,2249],{"class":480},"pkg:hex\u002Fphoenix",[93,2251,484],{"class":476},[93,2253,2254],{"class":111},"); ",[93,2256,2257],{"class":1386},"\u002F\u002F resolved through the registry you added\n",[93,2259,2260,2263,2266,2268,2270,2272,2274,2276,2278,2280],{"class":95,"line":224},[93,2261,2262],{"class":103},"const",[93,2264,2265],{"class":819}," hex",[93,2267,823],{"class":103},[93,2269,2197],{"class":835},[93,2271,145],{"class":111},[93,2273,484],{"class":476},[93,2275,759],{"class":480},[93,2277,484],{"class":476},[93,2279,2254],{"class":111},[93,2281,2282],{"class":1386},"\u002F\u002F or by key\n",[329,2284,2285,2288,2289,2292,2293,2296,2297,2300,2301,2304],{},[90,2286,2287],{},"register(ecosystem, defaultURL, RegistryClass)"," is the whole registration. ",[90,2290,2291],{},"create(ecosystem, baseURL?, client?)"," instantiates the class with the default URL and the default client unless told otherwise; ",[90,2294,2295],{},"ecosystems()"," lists what is registered; ",[90,2298,2299],{},"has(ecosystem)"," checks one. The CLI, the helpers, the cache and the AI tool all resolve through ",[90,2302,2303],{},"create",", so one call makes the ecosystem available everywhere.",[78,2306,2308],{"id":2307},"where-the-built-ins-live","Where the built-ins live",[329,2310,2311,2314,2315,2318,2319,2322,2323,2326,2327,2330],{},[90,2312,2313],{},"src\u002Fregistries\u002F"," holds one file per registry. ",[90,2316,2317],{},"npm.ts"," is the largest and the best template; ",[90,2320,2321],{},"alpm.ts"," shows an adapter that routes to two APIs by namespace. ",[90,2324,2325],{},"src\u002Fregistries\u002Findex.ts"," imports every adapter for its registration side effect and re-exports the classes. ",[90,2328,2329],{},"src\u002Fcore\u002F"," holds the contract, the PURL parser, the client, the errors and the license and repository normalizers.",[2332,2333,2334],"style",{},"html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .scZRh, html code.shiki .scZRh{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#ADD7FF}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}html pre.shiki code .s1jWp, html code.shiki .s1jWp{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#E4F0FB}html pre.shiki code .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .s-lox, html code.shiki .s-lox{--shiki-light:#005CC5;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#5DE4C7;--shiki-dark-font-style:italic}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .szlwh, html code.shiki .szlwh{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#D0679D}",{"title":88,"searchDepth":115,"depth":115,"links":2336},[2337,2338,2339,2340],{"id":80,"depth":115,"text":81},{"id":338,"depth":115,"text":339},{"id":2181,"depth":115,"text":2182},{"id":2307,"depth":115,"text":2308},"Extend the base class, map the registry's API onto the shared types, register the ecosystem, and every helper picks it up.","md",null,{"icon":2345},"i-lucide-plus",{"title":32,"description":2341},"4l9rJtX4bSsXORvysczDsLIH564WXQMjANiG2-6JzI0",[2349,2351],{"title":28,"path":29,"stem":30,"description":2350,"children":-1},"The Vercel AI SDK tool on the \u002Fai subpath, its five operations, and what an agent should and should not do with the answer.",{"title":36,"path":37,"stem":38,"description":2352,"children":-1},"The lookup page behind registries.agntn.dev that runs the library live, and what it does to be a good citizen.",1788462725129]