renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
77 lines (76 loc) • 3.03 kB
JavaScript
import { logger } from "../../../logger/index.js";
import { ExternalHostError } from "../../../types/errors/external-host-error.js";
import { withCache } from "../../../util/cache/package/with-cache.js";
import { Result } from "../../../util/result.js";
import { Datasource } from "../datasource.js";
import { DigestsConfig, ReleasesConfig } from "../schema.js";
import { memCacheProvider } from "../../../util/http/cache/memory-http-cache-provider.js";
import { CdnjsAPISriResponse, CdnjsAPIVersionResponse } from "./schema.js";
import { ZodError } from "zod/v4";
//#region lib/modules/datasource/cdnjs/index.ts
var CdnjsDatasource = class CdnjsDatasource extends Datasource {
static id = "cdnjs";
constructor() {
super(CdnjsDatasource.id);
}
customRegistrySupport = false;
defaultRegistryUrls = ["https://api.cdnjs.com/"];
sourceUrlSupport = "package";
sourceUrlNote = "The source URL is determined from the `repository` field in the results.";
async _getReleases(config) {
const { val, err } = await Result.parse(config, ReleasesConfig).transform(({ packageName, registryUrl }) => {
const [library] = packageName.split("/");
const url = `${registryUrl}libraries/${library}?fields=homepage,repository,versions`;
return this.http.getJsonSafe(url, { cacheProvider: memCacheProvider }, CdnjsAPIVersionResponse);
}).transform(({ versions, homepage, repository }) => {
const res = { releases: versions };
if (homepage) res.homepage = homepage;
if (repository) res.sourceUrl = repository;
return res;
}).unwrap();
if (err instanceof ZodError) {
logger.debug({ err }, "cdnjs: validation error");
return null;
}
if (err) this.handleGenericErrors(err);
return val;
}
getReleases(config) {
const library = config.packageName.split("/")[0];
return withCache({
namespace: `datasource-${CdnjsDatasource.id}`,
key: `getReleases:${library}`,
fallback: true
}, () => this._getReleases(config));
}
async _getDigest(config, newValue) {
const { packageName } = config;
const [library] = packageName.split("/");
const assetName = packageName.replace(`${library}/`, "");
const { val = null, err } = await Result.parse(config, DigestsConfig).transform(({ registryUrl }) => {
const url = `${registryUrl}libraries/${library}/${newValue}?fields=sri`;
return this.http.getJsonSafe(url, CdnjsAPISriResponse);
}).transform(({ sri }) => {
return sri?.[assetName];
}).unwrap();
if (err instanceof ZodError) {
logger.debug({ err }, "cdnjs: validation error");
return null;
}
if (err) this.handleGenericErrors(err);
return val;
}
getDigest(config, newValue) {
return withCache({
namespace: `datasource-${CdnjsDatasource.id}`,
key: `getDigest:${config.registryUrl}:${config.packageName}:${newValue}`,
fallback: true
}, () => this._getDigest(config, newValue));
}
handleHttpErrors(err) {
if (err.response?.statusCode !== 404) throw new ExternalHostError(err);
}
};
//#endregion
export { CdnjsDatasource };
//# sourceMappingURL=index.js.map