0
0
Fork 0
mirror of https://github.com/renovatebot/renovate.git synced 2025-05-12 23:51:55 +00:00
renovatebot_renovate/lib/modules/manager/gitlabci-include/schema.ts
2025-03-17 08:59:51 +00:00

52 lines
1.4 KiB
TypeScript

import { z } from 'zod';
import { toArray } from '../../../util/array';
import { LooseArray } from '../../../util/schema-utils';
import { GitlabTagsDatasource } from '../../datasource/gitlab-tags';
import type { PackageDependency } from '../types';
const GitlabInclude = z
.object({
project: z.string(),
ref: z.string().optional().catch(undefined),
})
.transform(({ project, ref }) => {
const dep: PackageDependency = {
datasource: GitlabTagsDatasource.id,
depName: project,
depType: 'repository',
};
if (!ref) {
dep.skipReason = 'unspecified-version';
return dep;
}
dep.currentValue = ref;
return dep;
});
const GitlabIncludes = z
.union([GitlabInclude.transform(toArray), LooseArray(GitlabInclude)])
.catch([]);
const GitlabRecord = z.record(z.unknown()).transform((obj) => {
const { include, ...rest } = obj;
const children = Object.values(rest);
return { include, children };
});
export const GitlabDocument = z
.union([GitlabRecord.transform(toArray), LooseArray(GitlabRecord)])
.transform((docs): PackageDependency[] =>
docs
.map(({ include, children }) => {
const deps = GitlabIncludes.parse(include);
const childrenDeps = GitlabDocumentArray.parse(children);
return [...childrenDeps, ...deps];
})
.flat(),
);
export const GitlabDocumentArray = LooseArray(GitlabDocument)
.transform((x) => x.flat())
.catch([]);