renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
165 lines • 6.36 kB
JavaScript
;
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