Initial commit
This commit is contained in:
50
node_modules/astro/dist/assets/fonts/infra/cached-font-fetcher.js
generated
vendored
Normal file
50
node_modules/astro/dist/assets/fonts/infra/cached-font-fetcher.js
generated
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
import { isAbsolute } from "node:path";
|
||||
import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
|
||||
class CachedFontFetcher {
|
||||
#storage;
|
||||
#fetch;
|
||||
#readFile;
|
||||
constructor({
|
||||
storage,
|
||||
fetch,
|
||||
readFile
|
||||
}) {
|
||||
this.#storage = storage;
|
||||
this.#fetch = fetch;
|
||||
this.#readFile = readFile;
|
||||
}
|
||||
async #cache(storage, key, cb) {
|
||||
const existing = await storage.getItemRaw(key);
|
||||
if (existing) {
|
||||
return existing;
|
||||
}
|
||||
const data = await cb();
|
||||
await storage.setItemRaw(key, data);
|
||||
return data;
|
||||
}
|
||||
async fetch({ id, url, init }) {
|
||||
return await this.#cache(this.#storage, id, async () => {
|
||||
try {
|
||||
if (isAbsolute(url)) {
|
||||
return await this.#readFile(url);
|
||||
}
|
||||
const response = await this.#fetch(url, init ?? void 0);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Response was not successful, received status code ${response.status}`);
|
||||
}
|
||||
return Buffer.from(await response.arrayBuffer());
|
||||
} catch (cause) {
|
||||
throw new AstroError(
|
||||
{
|
||||
...AstroErrorData.CannotFetchFontFile,
|
||||
message: AstroErrorData.CannotFetchFontFile.message(url)
|
||||
},
|
||||
{ cause }
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
export {
|
||||
CachedFontFetcher
|
||||
};
|
||||
Reference in New Issue
Block a user