@eventcatalog/linter
Version:
A linter for EventCatalog to validate frontmatter and resource references
70 lines • 2.28 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.flowSchema = void 0;
const zod_1 = require("zod");
const common_1 = require("./common");
const flowStep = zod_1.z
.union([
zod_1.z.union([zod_1.z.string(), zod_1.z.number()]),
zod_1.z
.object({
id: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]),
label: zod_1.z.string().optional(),
})
.optional(),
])
.optional();
const flowStepSchema = zod_1.z
.object({
id: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]),
type: zod_1.z.enum(['node', 'message', 'user', 'actor']).optional(),
title: zod_1.z.string(),
summary: zod_1.z.string().optional(),
message: common_1.pointerSchema.optional(),
service: common_1.pointerSchema.optional(),
flow: common_1.pointerSchema.optional(),
actor: zod_1.z
.object({
name: zod_1.z.string(),
})
.optional(),
custom: zod_1.z
.object({
title: zod_1.z.string(),
icon: zod_1.z.string().optional(),
type: zod_1.z.string().optional(),
summary: zod_1.z.string().optional(),
url: zod_1.z.string().url().optional(),
color: zod_1.z.string().optional(),
properties: zod_1.z.record(zod_1.z.union([zod_1.z.string(), zod_1.z.number()])).optional(),
height: zod_1.z.number().optional(),
menu: zod_1.z
.array(zod_1.z.object({
label: zod_1.z.string(),
url: zod_1.z.string().url().optional(),
}))
.optional(),
})
.optional(),
externalSystem: zod_1.z
.object({
name: zod_1.z.string(),
summary: zod_1.z.string().optional(),
url: zod_1.z.string().url().optional(),
})
.optional(),
next_step: flowStep,
next_steps: zod_1.z.array(flowStep).optional(),
})
.refine((data) => {
if (data.next_step && data.next_steps)
return false;
const typesUsed = [data.message, data.service, data.flow, data.actor, data.custom].filter((v) => v).length;
return typesUsed === 0 || typesUsed === 1;
});
exports.flowSchema = zod_1.z
.object({
steps: zod_1.z.array(flowStepSchema),
})
.merge(common_1.baseSchema);
//# sourceMappingURL=flow.js.map