UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

161 lines • 6.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RegistryMeta = exports.PackagistFile = exports.PackagesResponse = exports.RegistryFile = exports.HashSpec = exports.ComposerPackagesResponse = exports.ComposerReleases = exports.ComposerRelease = exports.MinifiedArray = void 0; exports.parsePackagesResponse = parsePackagesResponse; exports.extractReleaseResult = extractReleaseResult; exports.extractDepReleases = extractDepReleases; exports.parsePackagesResponses = parsePackagesResponses; const tslib_1 = require("tslib"); const is_1 = tslib_1.__importDefault(require("@sindresorhus/is")); const zod_1 = require("zod"); const logger_1 = require("../../../logger"); const schema_utils_1 = require("../../../util/schema-utils"); const timestamp_1 = require("../../../util/timestamp"); exports.MinifiedArray = zod_1.z.array(zod_1.z.record(zod_1.z.unknown())).transform((xs) => { // Ported from: https://github.com/composer/metadata-minifier/blob/main/src/MetadataMinifier.php#L17 if (xs.length === 0) { return xs; } const prevVals = {}; for (const x of xs) { for (const key of Object.keys(x)) { prevVals[key] ??= undefined; } for (const key of Object.keys(prevVals)) { const val = x[key]; if (val === '__unset') { delete x[key]; prevVals[key] = undefined; continue; } if (!is_1.default.undefined(val)) { prevVals[key] = val; continue; } if (!is_1.default.undefined(prevVals[key])) { x[key] = prevVals[key]; continue; } } } return xs; }); exports.ComposerRelease = zod_1.z.object({ version: zod_1.z.union([zod_1.z.string(), zod_1.z.number().transform((v) => v.toString())]), homepage: zod_1.z.string().nullable().catch(null), source: zod_1.z.object({ url: zod_1.z.string() }).nullable().catch(null), time: timestamp_1.MaybeTimestamp, require: zod_1.z.object({ php: zod_1.z.string() }).nullable().catch(null), }); exports.ComposerReleases = zod_1.z .union([ exports.MinifiedArray.pipe((0, schema_utils_1.LooseArray)(exports.ComposerRelease)), (0, schema_utils_1.LooseRecord)(exports.ComposerRelease).transform((map) => Object.values(map)), ]) .catch([]); exports.ComposerPackagesResponse = zod_1.z .object({ packageName: zod_1.z.string(), packagesResponse: zod_1.z.object({ packages: zod_1.z.record(zod_1.z.unknown()), }), }) .transform(({ packageName, packagesResponse }) => packagesResponse.packages[packageName]) .transform((xs) => exports.ComposerReleases.parse(xs)); function parsePackagesResponse(packageName, packagesResponse) { try { return exports.ComposerPackagesResponse.parse({ packageName, packagesResponse }); } catch (err) { logger_1.logger.debug({ packageName, err }, `Error parsing packagist response for ${packageName}`); return []; } } function extractReleaseResult(...composerReleasesArrays) { const releases = []; let homepage; let sourceUrl; for (const composerReleasesArray of composerReleasesArrays) { for (const composerRelease of composerReleasesArray) { const version = composerRelease.version.replace(/^v/, ''); const gitRef = composerRelease.version; const dep = { version, gitRef }; if (composerRelease.time) { dep.releaseTimestamp = composerRelease.time; } if (composerRelease.require?.php) { dep.constraints = { php: [composerRelease.require.php] }; } releases.push(dep); if (!homepage && composerRelease.homepage) { homepage = composerRelease.homepage; } if (!sourceUrl && composerRelease.source?.url) { sourceUrl = composerRelease.source.url; } } } if (releases.length === 0) { return null; } const result = { releases }; if (homepage) { result.homepage = homepage; } if (sourceUrl) { result.sourceUrl = sourceUrl; } return result; } function extractDepReleases(composerReleases) { const parsedReleases = exports.ComposerReleases.parse(composerReleases); return extractReleaseResult(parsedReleases); } function parsePackagesResponses(packageName, packagesResponses) { const releaseArrays = packagesResponses.map((pkgResp) => parsePackagesResponse(packageName, pkgResp)); return extractReleaseResult(...releaseArrays); } exports.HashSpec = zod_1.z.union([ zod_1.z .object({ sha256: zod_1.z.string().nullable() }) .transform(({ sha256 }) => ({ hash: sha256 })), zod_1.z .object({ sha1: zod_1.z.string().nullable() }) .transform(({ sha1 }) => ({ hash: sha1 })), ]); exports.RegistryFile = zod_1.z.intersection(exports.HashSpec, zod_1.z.object({ key: zod_1.z.string() })); exports.PackagesResponse = zod_1.z.object({ packages: (0, schema_utils_1.LooseRecord)(exports.ComposerReleases).catch({}), }); exports.PackagistFile = exports.PackagesResponse.merge(zod_1.z.object({ providers: (0, schema_utils_1.LooseRecord)(exports.HashSpec) .transform((x) => Object.fromEntries(Object.entries(x).map(([key, { hash }]) => [key, hash]))) .catch({}), })); exports.RegistryMeta = zod_1.z .record(zod_1.z.unknown()) .catch({}) .pipe(exports.PackagistFile.merge(zod_1.z.object({ ['includes']: (0, schema_utils_1.LooseRecord)(exports.HashSpec) .transform((x) => Object.entries(x).map(([name, { hash }]) => ({ key: name, hash }))) .catch([]), ['provider-includes']: (0, schema_utils_1.LooseRecord)(exports.HashSpec) .transform((x) => Object.entries(x).map(([key, { hash }]) => ({ key, hash }))) .catch([]), ['providers-lazy-url']: zod_1.z.string().nullable().catch(null), ['providers-url']: zod_1.z.string().nullable().catch(null), ['metadata-url']: zod_1.z.string().nullable().catch(null), ['available-packages']: zod_1.z.array(zod_1.z.string()).nullable().catch(null), }))) .transform(({ ['includes']: includesFiles, ['packages']: packages, ['provider-includes']: files, ['providers']: providerPackages, ['providers-lazy-url']: providersLazyUrl, ['providers-url']: providersUrl, ['metadata-url']: metadataUrl, ['available-packages']: availablePackages, }) => ({ packages, includesFiles, providerPackages, files, providersUrl, providersLazyUrl, metadataUrl, includesPackages: {}, availablePackages, })); //# sourceMappingURL=schema.js.map