|
import { HUB_URL } from "../consts"; |
|
import { createApiError } from "../error"; |
|
import type { CredentialsParams, RepoDesignation } from "../types/public"; |
|
import { checkCredentials } from "../utils/checkCredentials"; |
|
import { toRepoId } from "../utils/toRepoId"; |
|
|
|
export async function fileExists( |
|
params: { |
|
repo: RepoDesignation; |
|
path: string; |
|
revision?: string; |
|
hubUrl?: string; |
|
/** |
|
* Custom fetch function to use instead of the default one, for example to use a proxy or edit headers. |
|
*/ |
|
fetch?: typeof fetch; |
|
} & Partial<CredentialsParams> |
|
): Promise<boolean> { |
|
const accessToken = checkCredentials(params); |
|
const repoId = toRepoId(params.repo); |
|
|
|
const hubUrl = params.hubUrl ?? HUB_URL; |
|
const url = `${hubUrl}/${repoId.type === "model" ? "" : `${repoId.type}s/`}${repoId.name}/raw/${encodeURIComponent( |
|
params.revision ?? "main" |
|
)}/${params.path}`; |
|
|
|
const resp = await (params.fetch ?? fetch)(url, { |
|
method: "HEAD", |
|
headers: accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, |
|
}); |
|
|
|
if (resp.status === 404) { |
|
return false; |
|
} |
|
|
|
if (!resp.ok) { |
|
throw await createApiError(resp); |
|
} |
|
|
|
return true; |
|
} |
|
|