UNPKG

renovate

Version:

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

165 lines • 6.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UvLockfile = exports.PdmLockfile = exports.PyProject = exports.ProjectSection = void 0; const zod_1 = require("zod"); const schema_utils_1 = require("../../../util/schema-utils"); const pypi_1 = require("../../datasource/pypi"); const common_1 = require("../../datasource/pypi/common"); const utils_1 = require("./utils"); function Pep508Dependency(depType) { return zod_1.z.string().transform((x, ctx) => { const res = (0, utils_1.pep508ToPackageDependency)(depType, x); if (!res) { ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message: 'should be a valid PEP508 dependency', fatal: true, }); return zod_1.z.NEVER; } return res; }); } function DependencyGroup(depType) { return (0, schema_utils_1.LooseRecord)((0, schema_utils_1.LooseArray)(Pep508Dependency(depType))).transform((depGroups) => { const deps = []; for (const [depGroup, groupDeps] of Object.entries(depGroups)) { for (const dep of groupDeps) { if (dep.packageName) { dep.depName = dep.packageName; } dep.managerData = { depGroup }; deps.push(dep); } } return deps; }); } const PdmConfig = zod_1.z .object({ 'dev-dependencies': DependencyGroup(utils_1.depTypes.pdmDevDependencies).catch([]), source: (0, schema_utils_1.LooseArray)(zod_1.z.object({ url: zod_1.z.string(), name: zod_1.z.string(), })) .transform((pdmSource) => { const registryUrls = []; let containsPyPiUrl = false; for (const source of pdmSource) { if (source.name === 'pypi') { containsPyPiUrl = true; } registryUrls.push(source.url); } // Add pypi default url, if there is no source declared with the name `pypi` // @see https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages if (!containsPyPiUrl) { registryUrls.unshift(pypi_1.PypiDatasource.defaultURL); } return registryUrls; }) .optional() .catch(undefined), }) .transform(({ 'dev-dependencies': devDependencies, source: registryUrls }) => ({ devDependencies, registryUrls, })); const HatchConfig = zod_1.z .object({ envs: (0, schema_utils_1.LooseRecord)(zod_1.z.string(), zod_1.z.object({ dependencies: zod_1.z.unknown(), 'extra-dependencies': zod_1.z.unknown(), })), }) .catch({ envs: {} }) .transform(({ envs }) => { const deps = []; for (const [envName, { dependencies, 'extra-dependencies': extraDependencies },] of Object.entries(envs)) { const depType = `tool.hatch.envs.${envName}`; const HatchDependency = (0, schema_utils_1.LooseArray)(Pep508Dependency(depType)).catch([]); deps.push(...HatchDependency.parse(dependencies), ...HatchDependency.parse(extraDependencies)); } return { deps }; }); const UvIndexSource = zod_1.z.object({ index: zod_1.z.string(), }); const UvGitSource = zod_1.z.object({ git: zod_1.z.string(), rev: zod_1.z.string().optional(), tag: zod_1.z.string().optional(), branch: zod_1.z.string().optional(), }); const UvUrlSource = zod_1.z.object({ url: zod_1.z.string(), }); const UvPathSource = zod_1.z.object({ path: zod_1.z.string(), }); const UvWorkspaceSource = zod_1.z.object({ workspace: zod_1.z.literal(true), }); // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources const UvSource = zod_1.z.union([ UvIndexSource, UvGitSource, UvUrlSource, UvPathSource, UvWorkspaceSource, ]); const UvConfig = zod_1.z.object({ 'dev-dependencies': (0, schema_utils_1.LooseArray)(Pep508Dependency(utils_1.depTypes.uvDevDependencies)).catch([]), 'required-version': zod_1.z.string().optional(), sources: (0, schema_utils_1.LooseRecord)( // uv applies the same normalization as for Python dependencies on sources zod_1.z.string().transform((source) => (0, common_1.normalizePythonDepName)(source)), UvSource).optional(), index: zod_1.z .array(zod_1.z.object({ name: zod_1.z.string().optional(), url: zod_1.z.string(), default: zod_1.z.boolean().default(false), explicit: zod_1.z.boolean().default(false), })) .optional(), }); exports.ProjectSection = zod_1.z.object({ version: zod_1.z.string().optional().catch(undefined), 'requires-python': zod_1.z.string().optional().catch(undefined), dependencies: (0, schema_utils_1.LooseArray)(Pep508Dependency(utils_1.depTypes.dependencies)).catch([]), 'optional-dependencies': DependencyGroup(utils_1.depTypes.optionalDependencies).catch([]), }); exports.PyProject = zod_1.z.object({ project: exports.ProjectSection.optional().catch(undefined), 'build-system': zod_1.z .object({ requires: (0, schema_utils_1.LooseArray)(Pep508Dependency(utils_1.depTypes.buildSystemRequires)).catch([]), 'build-backend': zod_1.z.string().optional().catch(undefined), }) .optional() .catch(undefined), 'dependency-groups': DependencyGroup(utils_1.depTypes.dependencyGroups).catch([]), tool: zod_1.z .object({ pdm: PdmConfig.optional().catch(undefined), hatch: HatchConfig.optional().catch(undefined), uv: UvConfig.optional().catch(undefined), }) .optional() .catch(undefined), }); exports.PdmLockfile = schema_utils_1.Toml.pipe(zod_1.z.object({ package: (0, schema_utils_1.LooseArray)(zod_1.z.object({ name: zod_1.z.string(), version: zod_1.z.string(), })), })) .transform(({ package: pkg }) => Object.fromEntries(pkg.map(({ name, version }) => [name, version]))) .transform((lock) => ({ lock })); exports.UvLockfile = schema_utils_1.Toml.pipe(zod_1.z.object({ package: (0, schema_utils_1.LooseArray)(zod_1.z.object({ name: zod_1.z.string(), version: zod_1.z.string(), })), })).transform(({ package: pkg }) => Object.fromEntries(pkg.map(({ name, version }) => [name, version]))); //# sourceMappingURL=schema.js.map