mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-04-19 11:23:56 +01:00
* feat(website): init * feat(website): home page * feat(website): make page more responsive * feat(website): layout * feat(website): package page * feat(website): update PackageResponse type * feat(website): display package readme * feat(website): use new /latest/any endpoint * feat(website): make website lg instead of xl * fix(website): use NodeJS.Timeout * feat(website): versions page * feat(website): add latest version indicator * feat(website): add target select menu * feat(website): indicate current version * feat(website): add package metadata * feat(website): add hamburger * fix(website): header responsiveness * feat(website): better package layout * feat(website): display authors on package page * fix(website): only display relative dates on client * feat(docs): init docs site * chore(website): read .env from project root * feat(website): add gemoji support * fix(website): overflow on code blocks * chore(docs): read .env from project root * feat(docs): config changes * fix: authors not displaying * fix(website): use fallback language * refactor(website): use predefined target names * refactor(website): change Github to GitHub * chore: remove starter readmes * chore(docs): remove .vscode * chore(docs): remove unused assets folder * fix(website): fix missing datetime attribute * feat(website): switch to universal loaders * feat(docs): search * fix(website): type errors * fix(website): use provided fetch instead of global * feat(website): remove isr * chore(website): add .env.example * feat(website): add icons and metadata * chore(website): add debug logs * chore(website): remove shiki temporarily * fix(website): rehype shiki lazy load * fix(website): use custom highlighter * fix(website): move highlighter creation into load * docs: write docs * feat(website): add og image * feat(website): fix accessibility issues * fix(website): no target selector on mobile * fix(website): close dialog on navigation * fix(website): logo is not a link in hamburger menu * feat(website): dependencies tab * fix(website): use correct dependency target * fix(website): navigation links * feat(website): support wally dependencies * feat(website): metadata + case insensitivity * fix(website): manually implement groupBy `Object.groupBy` isn't supported on Vercel right now. * fix(website): code block with an unknown language * docs(policies): explain & cover more cases * docs: update cli reference * docs: add self hosting registries guide * docs: update README * docs: add more configs to registry guide * fix: favicon and logomark * feat(website): package documentation * fix(website): missing $derive for toc * docs: change SENTRY_URL to SENTRY_DSN * chore(website): remove unused file * chore: remove favicon.zip * fix(website): strip wally# prefix * chore: add changelog entry --------- Co-authored-by: daimond113 <72147841+daimond113@users.noreply.github.com>
106 lines
2.2 KiB
TypeScript
106 lines
2.2 KiB
TypeScript
import { PUBLIC_REGISTRY_URL } from "$env/static/public"
|
|
|
|
export type SearchResponse = {
|
|
count: number
|
|
data: PackageResponse[]
|
|
}
|
|
|
|
export type PackageVersionsResponse = PackageResponse[]
|
|
|
|
export type PackageVersionResponse = PackageResponse
|
|
|
|
export type PackageResponse = {
|
|
name: string
|
|
version: string
|
|
targets: TargetInfo[]
|
|
description: string
|
|
published_at: string
|
|
license?: string
|
|
authors?: string[]
|
|
repository?: string
|
|
dependencies: Record<string, DependencyEntry>
|
|
docs?: DocEntry[]
|
|
}
|
|
|
|
export type TargetInfo = {
|
|
kind: TargetKind
|
|
lib: boolean
|
|
bin: boolean
|
|
}
|
|
|
|
export type TargetKind = "roblox" | "roblox_server" | "lune" | "luau"
|
|
|
|
export type DependencyEntry = [DependencyInfo, DependencyKind]
|
|
|
|
export type DependencyInfo =
|
|
| {
|
|
index: string
|
|
name: string
|
|
target?: string
|
|
version: string
|
|
}
|
|
| {
|
|
index: string
|
|
wally: string
|
|
version: string
|
|
}
|
|
|
|
export type DependencyKind = "standard" | "peer" | "dev"
|
|
|
|
export type DocEntry = DocEntryCategory | DocEntryPage
|
|
|
|
export type DocEntryBase = {
|
|
label: string
|
|
position: number
|
|
}
|
|
|
|
export type DocEntryCategory = DocEntryBase & {
|
|
items?: DocEntry[]
|
|
collapsed?: boolean
|
|
}
|
|
|
|
export type DocEntryPage = DocEntryBase & {
|
|
name: string
|
|
hash: string
|
|
}
|
|
|
|
export const TARGET_KIND_DISPLAY_NAMES: Record<TargetKind, string> = {
|
|
roblox: "Roblox",
|
|
roblox_server: "Roblox (server)",
|
|
lune: "Lune",
|
|
luau: "Luau",
|
|
}
|
|
|
|
export const DEPENDENCY_KIND_DISPLAY_NAMES: Record<DependencyKind, string> = {
|
|
standard: "Dependencies",
|
|
peer: "Peer Dependencies",
|
|
dev: "Dev Dependencies",
|
|
}
|
|
|
|
export class RegistryHttpError extends Error {
|
|
name = "RegistryError"
|
|
constructor(
|
|
message: string,
|
|
public response: Response,
|
|
) {
|
|
super(message)
|
|
}
|
|
}
|
|
|
|
export async function fetchRegistryJson<T>(
|
|
path: string,
|
|
fetcher: typeof fetch,
|
|
options?: RequestInit,
|
|
): Promise<T> {
|
|
const response = await fetchRegistry(path, fetcher, options)
|
|
return response.json()
|
|
}
|
|
|
|
export async function fetchRegistry(path: string, fetcher: typeof fetch, options?: RequestInit) {
|
|
const response = await fetcher(new URL(path, PUBLIC_REGISTRY_URL), options)
|
|
if (!response.ok) {
|
|
throw new RegistryHttpError(`Failed to fetch ${response.url}: ${response.statusText}`, response)
|
|
}
|
|
|
|
return response
|
|
}
|