linear-cmd
Version:
A GitHub CLI-like tool for Linear - manage issues, accounts, and more
149 lines (148 loc) • 3.77 kB
JavaScript
import { z } from 'zod';
// Local application schemas (non-Linear API related)
// User metadata file structure
export const userMetadataSchema = z.object({
config_path: z.string(),
active_account: z.string().optional()
});
// Account schema
export const accountSchema = z.object({
name: z.string(),
api_key: z.string(),
team_id: z.string().optional(),
workspaces: z.array(z.string()).optional()
});
// Linear CLI configuration schema
export const linearConfigSchema = z.object({
$schema: z.string().optional(),
accounts: z.record(z.string(), accountSchema),
activeAccountName: z.string().optional(),
settings: z
.object({
completion_installed: z.boolean().optional()
})
.optional()
});
// Issue data structure (for local processing/display)
export const issueDataSchema = z.object({
id: z.string(),
identifier: z.string(),
title: z.string(),
description: z.string().optional(),
state: z.object({
name: z.string(),
color: z.string()
}),
assignee: z
.object({
name: z.string(),
email: z.string()
})
.optional(),
labels: z.array(z.object({
name: z.string(),
color: z.string()
})),
comments: z.array(z.object({
id: z.string(),
body: z.string(),
user: z.object({
name: z.string(),
email: z.string()
}),
createdAt: z.date()
})),
pullRequests: z.array(z.object({
id: z.string(),
url: z.string(),
title: z.string(),
number: z.number(),
draft: z.boolean(),
merged: z.boolean()
})),
createdAt: z.date(),
updatedAt: z.date(),
url: z.string()
});
// Project data structure (for local processing/display)
export const projectDataSchema = z.object({
id: z.string(),
name: z.string(),
description: z.string().optional(),
state: z.string(),
startDate: z.date().optional(),
targetDate: z.date().optional(),
lead: z
.object({
name: z.string(),
email: z.string()
})
.optional(),
progress: z.number().optional(),
createdAt: z.date(),
updatedAt: z.date(),
url: z.string()
});
// Project issue data structure (for listing issues in a project)
export const projectIssueDataSchema = z.object({
id: z.string(),
identifier: z.string(),
title: z.string(),
state: z.object({
name: z.string(),
color: z.string()
}),
assignee: z
.object({
name: z.string(),
email: z.string()
})
.optional(),
dueDate: z.date().optional(),
project: z
.object({
name: z.string(),
milestone: z.string().optional()
})
.optional(),
priority: z.number().optional(),
labels: z.array(z.object({
name: z.string(),
color: z.string()
})),
pullRequests: z.array(z.object({
id: z.string(),
url: z.string(),
title: z.string(),
number: z.number(),
draft: z.boolean(),
merged: z.boolean()
})),
subIssues: z.array(z.object({
identifier: z.string(),
title: z.string(),
completed: z.boolean()
})),
url: z.string()
});
// Document data structure (for local processing/display)
export const documentDataSchema = z.object({
id: z.string(),
title: z.string(),
content: z.string().optional(),
createdBy: z
.object({
name: z.string(),
email: z.string()
})
.optional(),
updatedBy: z
.object({
name: z.string(),
email: z.string()
})
.optional(),
createdAt: z.date(),
updatedAt: z.date(),
url: z.string()
});