renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
64 lines (63 loc) • 2.31 kB
JavaScript
import { logger } from "../../../logger/index.js";
import { getExpression } from "../../../util/jsonata.js";
import { Datasource } from "../datasource.js";
import { fetchers } from "./formats/index.js";
import { ReleaseResultZod } from "./schema.js";
import { getCustomConfig } from "./utils.js";
import { isNullOrUndefined } from "@sindresorhus/is";
//#region lib/modules/datasource/custom/index.ts
var CustomDatasource = class CustomDatasource extends Datasource {
static id = "custom";
customRegistrySupport = true;
constructor() {
super(CustomDatasource.id);
}
async getReleases(getReleasesConfig) {
const config = getCustomConfig(getReleasesConfig);
if (isNullOrUndefined(config)) return null;
const { defaultRegistryUrlTemplate, transformTemplates, format } = config;
const fetcher = fetchers[format];
const isLocalRegistry = defaultRegistryUrlTemplate.startsWith("file://");
let data;
try {
if (isLocalRegistry) data = await fetcher.readFile(defaultRegistryUrlTemplate.replace("file://", ""));
else data = await fetcher.fetch(this.http, defaultRegistryUrlTemplate);
} catch (e) {
this.handleHttpErrors(e);
return null;
}
logger.trace({ data }, `Custom datasource API fetcher '${format}' received data. Starting transformation.`);
for (const transformTemplate of transformTemplates) {
const expression = getExpression(transformTemplate);
if (expression instanceof Error) {
logger.once.warn({ errorMessage: expression.message }, `Invalid JSONata expression: ${transformTemplate}`);
return null;
}
try {
const modifiedData = await expression.evaluate(data);
logger.trace({
before: data,
after: modifiedData
}, `Custom datasource transformed data.`);
data = modifiedData;
} catch (err) {
logger.once.warn({ err }, `Error while evaluating JSONata expression: ${transformTemplate}`);
return null;
}
}
try {
const parsed = ReleaseResultZod.parse(data);
return structuredClone(parsed);
} catch (err) {
logger.debug({ err }, `Response has failed validation`);
logger.trace({ data }, "Response that has failed validation");
return null;
}
}
getDigest(_cfg, _newValue) {
return Promise.resolve(null);
}
};
//#endregion
export { CustomDatasource };
//# sourceMappingURL=index.js.map