mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-16 19:00:38 +09:00
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
|
|
import { z } from "zod";
|
||
|
|
import {
|
||
|
|
ISSUE_TREE_CONTROL_MODES,
|
||
|
|
ISSUE_TREE_HOLD_RELEASE_POLICY_STRATEGIES,
|
||
|
|
} from "../constants.js";
|
||
|
|
|
||
|
|
export const issueTreeControlModeSchema = z.enum(ISSUE_TREE_CONTROL_MODES);
|
||
|
|
|
||
|
|
export const issueTreeHoldReleasePolicySchema = z
|
||
|
|
.object({
|
||
|
|
strategy: z.enum(ISSUE_TREE_HOLD_RELEASE_POLICY_STRATEGIES).default("manual"),
|
||
|
|
note: z.string().trim().min(1).max(500).optional().nullable(),
|
||
|
|
})
|
||
|
|
.strict();
|
||
|
|
|
||
|
|
export const previewIssueTreeControlSchema = z
|
||
|
|
.object({
|
||
|
|
mode: issueTreeControlModeSchema,
|
||
|
|
releasePolicy: issueTreeHoldReleasePolicySchema.optional().nullable(),
|
||
|
|
})
|
||
|
|
.strict();
|
||
|
|
|
||
|
|
export type PreviewIssueTreeControl = z.infer<typeof previewIssueTreeControlSchema>;
|
||
|
|
|
||
|
|
export const createIssueTreeHoldSchema = z
|
||
|
|
.object({
|
||
|
|
mode: issueTreeControlModeSchema,
|
||
|
|
reason: z.string().trim().min(1).max(1000).optional().nullable(),
|
||
|
|
releasePolicy: issueTreeHoldReleasePolicySchema.optional().nullable(),
|
||
|
|
metadata: z.record(z.unknown()).optional().nullable(),
|
||
|
|
})
|
||
|
|
.strict();
|
||
|
|
|
||
|
|
export type CreateIssueTreeHold = z.infer<typeof createIssueTreeHoldSchema>;
|
||
|
|
|
||
|
|
export const releaseIssueTreeHoldSchema = z
|
||
|
|
.object({
|
||
|
|
reason: z.string().trim().min(1).max(1000).optional().nullable(),
|
||
|
|
releasePolicy: issueTreeHoldReleasePolicySchema.optional().nullable(),
|
||
|
|
metadata: z.record(z.unknown()).optional().nullable(),
|
||
|
|
})
|
||
|
|
.strict();
|
||
|
|
|
||
|
|
export type ReleaseIssueTreeHold = z.infer<typeof releaseIssueTreeHoldSchema>;
|