@revealui/contracts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/a2a/index.d.ts +383 -0
  4. package/dist/a2a/index.d.ts.map +1 -0
  5. package/dist/a2a/index.js +276 -0
  6. package/dist/a2a/index.js.map +1 -0
  7. package/dist/actions/action-validator.d.ts +48 -0
  8. package/dist/actions/action-validator.d.ts.map +1 -0
  9. package/dist/actions/action-validator.js +288 -0
  10. package/dist/actions/action-validator.js.map +1 -0
  11. package/dist/actions/index.d.ts +7 -0
  12. package/dist/actions/index.d.ts.map +1 -0
  13. package/dist/actions/index.js +7 -0
  14. package/dist/actions/index.js.map +1 -0
  15. package/dist/agents/index.d.ts +628 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +511 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/types.d.ts +22 -0
  20. package/dist/agents/types.d.ts.map +1 -0
  21. package/dist/agents/types.js +2 -0
  22. package/dist/agents/types.js.map +1 -0
  23. package/dist/api/auth.d.ts +60 -0
  24. package/dist/api/auth.d.ts.map +1 -0
  25. package/dist/api/auth.js +84 -0
  26. package/dist/api/auth.js.map +1 -0
  27. package/dist/api/chat.d.ts +45 -0
  28. package/dist/api/chat.d.ts.map +1 -0
  29. package/dist/api/chat.js +55 -0
  30. package/dist/api/chat.js.map +1 -0
  31. package/dist/api/gdpr.d.ts +39 -0
  32. package/dist/api/gdpr.d.ts.map +1 -0
  33. package/dist/api/gdpr.js +53 -0
  34. package/dist/api/gdpr.js.map +1 -0
  35. package/dist/cms/collection.d.ts +108 -0
  36. package/dist/cms/collection.d.ts.map +1 -0
  37. package/dist/cms/collection.js +144 -0
  38. package/dist/cms/collection.js.map +1 -0
  39. package/dist/cms/compat.d.ts +128 -0
  40. package/dist/cms/compat.d.ts.map +1 -0
  41. package/dist/cms/compat.js +141 -0
  42. package/dist/cms/compat.js.map +1 -0
  43. package/dist/cms/config-contract.d.ts +278 -0
  44. package/dist/cms/config-contract.d.ts.map +1 -0
  45. package/dist/cms/config-contract.js +220 -0
  46. package/dist/cms/config-contract.js.map +1 -0
  47. package/dist/cms/config.d.ts +351 -0
  48. package/dist/cms/config.d.ts.map +1 -0
  49. package/dist/cms/config.js +50 -0
  50. package/dist/cms/config.js.map +1 -0
  51. package/dist/cms/errors.d.ts +122 -0
  52. package/dist/cms/errors.d.ts.map +1 -0
  53. package/dist/cms/errors.js +163 -0
  54. package/dist/cms/errors.js.map +1 -0
  55. package/dist/cms/extensibility.d.ts +211 -0
  56. package/dist/cms/extensibility.d.ts.map +1 -0
  57. package/dist/cms/extensibility.js +313 -0
  58. package/dist/cms/extensibility.js.map +1 -0
  59. package/dist/cms/field.d.ts +69 -0
  60. package/dist/cms/field.d.ts.map +1 -0
  61. package/dist/cms/field.js +94 -0
  62. package/dist/cms/field.js.map +1 -0
  63. package/dist/cms/functions.d.ts +466 -0
  64. package/dist/cms/functions.d.ts.map +1 -0
  65. package/dist/cms/functions.js +19 -0
  66. package/dist/cms/functions.js.map +1 -0
  67. package/dist/cms/global.d.ts +45 -0
  68. package/dist/cms/global.d.ts.map +1 -0
  69. package/dist/cms/global.js +62 -0
  70. package/dist/cms/global.js.map +1 -0
  71. package/dist/cms/index.d.ts +23 -0
  72. package/dist/cms/index.d.ts.map +1 -0
  73. package/dist/cms/index.js +42 -0
  74. package/dist/cms/index.js.map +1 -0
  75. package/dist/cms/structure.d.ts +1601 -0
  76. package/dist/cms/structure.d.ts.map +1 -0
  77. package/dist/cms/structure.js +757 -0
  78. package/dist/cms/structure.js.map +1 -0
  79. package/dist/content/index.d.ts +1542 -0
  80. package/dist/content/index.d.ts.map +1 -0
  81. package/dist/content/index.js +522 -0
  82. package/dist/content/index.js.map +1 -0
  83. package/dist/database/bridge.d.ts +177 -0
  84. package/dist/database/bridge.d.ts.map +1 -0
  85. package/dist/database/bridge.js +139 -0
  86. package/dist/database/bridge.js.map +1 -0
  87. package/dist/database/index.d.ts +8 -0
  88. package/dist/database/index.d.ts.map +1 -0
  89. package/dist/database/index.js +9 -0
  90. package/dist/database/index.js.map +1 -0
  91. package/dist/database/type-bridge.d.ts +178 -0
  92. package/dist/database/type-bridge.d.ts.map +1 -0
  93. package/dist/database/type-bridge.js +154 -0
  94. package/dist/database/type-bridge.js.map +1 -0
  95. package/dist/entities/agent-context.d.ts +280 -0
  96. package/dist/entities/agent-context.d.ts.map +1 -0
  97. package/dist/entities/agent-context.js +390 -0
  98. package/dist/entities/agent-context.js.map +1 -0
  99. package/dist/entities/agent-memory.d.ts +661 -0
  100. package/dist/entities/agent-memory.d.ts.map +1 -0
  101. package/dist/entities/agent-memory.js +544 -0
  102. package/dist/entities/agent-memory.js.map +1 -0
  103. package/dist/entities/board.d.ts +95 -0
  104. package/dist/entities/board.d.ts.map +1 -0
  105. package/dist/entities/board.js +99 -0
  106. package/dist/entities/board.js.map +1 -0
  107. package/dist/entities/code-provenance.d.ts +270 -0
  108. package/dist/entities/code-provenance.d.ts.map +1 -0
  109. package/dist/entities/code-provenance.js +339 -0
  110. package/dist/entities/code-provenance.js.map +1 -0
  111. package/dist/entities/index.d.ts +22 -0
  112. package/dist/entities/index.d.ts.map +1 -0
  113. package/dist/entities/index.js +22 -0
  114. package/dist/entities/index.js.map +1 -0
  115. package/dist/entities/media.d.ts +485 -0
  116. package/dist/entities/media.d.ts.map +1 -0
  117. package/dist/entities/media.js +606 -0
  118. package/dist/entities/media.js.map +1 -0
  119. package/dist/entities/page-revision.d.ts +390 -0
  120. package/dist/entities/page-revision.d.ts.map +1 -0
  121. package/dist/entities/page-revision.js +406 -0
  122. package/dist/entities/page-revision.js.map +1 -0
  123. package/dist/entities/page.d.ts +2349 -0
  124. package/dist/entities/page.d.ts.map +1 -0
  125. package/dist/entities/page.js +377 -0
  126. package/dist/entities/page.js.map +1 -0
  127. package/dist/entities/post.d.ts +619 -0
  128. package/dist/entities/post.d.ts.map +1 -0
  129. package/dist/entities/post.js +555 -0
  130. package/dist/entities/post.js.map +1 -0
  131. package/dist/entities/price.d.ts +772 -0
  132. package/dist/entities/price.d.ts.map +1 -0
  133. package/dist/entities/price.js +308 -0
  134. package/dist/entities/price.js.map +1 -0
  135. package/dist/entities/product.d.ts +753 -0
  136. package/dist/entities/product.d.ts.map +1 -0
  137. package/dist/entities/product.js +307 -0
  138. package/dist/entities/product.js.map +1 -0
  139. package/dist/entities/session.d.ts +222 -0
  140. package/dist/entities/session.d.ts.map +1 -0
  141. package/dist/entities/session.js +253 -0
  142. package/dist/entities/session.js.map +1 -0
  143. package/dist/entities/site.d.ts +387 -0
  144. package/dist/entities/site.d.ts.map +1 -0
  145. package/dist/entities/site.js +348 -0
  146. package/dist/entities/site.js.map +1 -0
  147. package/dist/entities/ticket-comment.d.ts +49 -0
  148. package/dist/entities/ticket-comment.d.ts.map +1 -0
  149. package/dist/entities/ticket-comment.js +58 -0
  150. package/dist/entities/ticket-comment.js.map +1 -0
  151. package/dist/entities/ticket-label.d.ts +64 -0
  152. package/dist/entities/ticket-label.d.ts.map +1 -0
  153. package/dist/entities/ticket-label.js +77 -0
  154. package/dist/entities/ticket-label.js.map +1 -0
  155. package/dist/entities/ticket.d.ts +204 -0
  156. package/dist/entities/ticket.d.ts.map +1 -0
  157. package/dist/entities/ticket.js +205 -0
  158. package/dist/entities/ticket.js.map +1 -0
  159. package/dist/entities/user.d.ts +336 -0
  160. package/dist/entities/user.d.ts.map +1 -0
  161. package/dist/entities/user.js +255 -0
  162. package/dist/entities/user.js.map +1 -0
  163. package/dist/foundation/contract.d.ts +221 -0
  164. package/dist/foundation/contract.d.ts.map +1 -0
  165. package/dist/foundation/contract.js +133 -0
  166. package/dist/foundation/contract.js.map +1 -0
  167. package/dist/foundation/index.d.ts +7 -0
  168. package/dist/foundation/index.d.ts.map +1 -0
  169. package/dist/foundation/index.js +7 -0
  170. package/dist/foundation/index.js.map +1 -0
  171. package/dist/generated/contracts.d.ts +1514 -0
  172. package/dist/generated/contracts.d.ts.map +1 -0
  173. package/dist/generated/contracts.js +959 -0
  174. package/dist/generated/contracts.js.map +1 -0
  175. package/dist/generated/database.d.ts +48 -0
  176. package/dist/generated/database.d.ts.map +1 -0
  177. package/dist/generated/database.js +17 -0
  178. package/dist/generated/database.js.map +1 -0
  179. package/dist/generated/zod-schemas.d.ts +14793 -0
  180. package/dist/generated/zod-schemas.d.ts.map +1 -0
  181. package/dist/generated/zod-schemas.js +547 -0
  182. package/dist/generated/zod-schemas.js.map +1 -0
  183. package/dist/index.d.ts +50 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +81 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/representation/index.d.ts +304 -0
  188. package/dist/representation/index.d.ts.map +1 -0
  189. package/dist/representation/index.js +280 -0
  190. package/dist/representation/index.js.map +1 -0
  191. package/package.json +117 -0
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Ticket Entity Contract
3
+ *
4
+ * Core ticket/issue entity for the kanban board system.
5
+ * Supports: statuses, priorities, types, subtasks, comments, labels, assignments.
6
+ *
7
+ * Business Rules:
8
+ * - ticketNumber auto-increments per board
9
+ * - status values: open, in_progress, in_review, done, closed
10
+ * - priority values: urgent, high, medium, low
11
+ * - type values: task, bug, feature, improvement, epic
12
+ * - Tickets belong to exactly one board
13
+ * - Tickets may optionally be in a board column (kanban placement)
14
+ * - parentTicketId enables subtask hierarchy (one level deep recommended)
15
+ * - description stored as Lexical/JSON rich text
16
+ * - commentCount denormalized for performance
17
+ */
18
+ import { z } from 'zod/v4';
19
+ export declare const TICKET_SCHEMA_VERSION = 1;
20
+ export declare const TICKET_STATUSES: readonly ["open", "in_progress", "in_review", "done", "closed"];
21
+ export type TicketStatus = (typeof TICKET_STATUSES)[number];
22
+ export declare const TICKET_PRIORITIES: readonly ["urgent", "high", "medium", "low"];
23
+ export type TicketPriority = (typeof TICKET_PRIORITIES)[number];
24
+ export declare const TICKET_TYPES: readonly ["task", "bug", "feature", "improvement", "epic"];
25
+ export type TicketType = (typeof TICKET_TYPES)[number];
26
+ export declare const TICKET_LIMITS: {
27
+ readonly MIN_TITLE_LENGTH: 1;
28
+ readonly MAX_TITLE_LENGTH: 500;
29
+ readonly MAX_DESCRIPTION_SIZE: 100000;
30
+ readonly MAX_SUBTASK_DEPTH: 1;
31
+ };
32
+ export declare const TicketObjectSchema: z.ZodObject<{
33
+ id: z.ZodString;
34
+ schemaVersion: z.ZodDefault<z.ZodString>;
35
+ boardId: z.ZodString;
36
+ columnId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
37
+ parentTicketId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
38
+ ticketNumber: z.ZodNumber;
39
+ title: z.ZodString;
40
+ description: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
41
+ status: z.ZodDefault<z.ZodEnum<{
42
+ done: "done";
43
+ open: "open";
44
+ in_progress: "in_progress";
45
+ in_review: "in_review";
46
+ closed: "closed";
47
+ }>>;
48
+ priority: z.ZodDefault<z.ZodEnum<{
49
+ high: "high";
50
+ low: "low";
51
+ medium: "medium";
52
+ urgent: "urgent";
53
+ }>>;
54
+ type: z.ZodDefault<z.ZodEnum<{
55
+ task: "task";
56
+ bug: "bug";
57
+ feature: "feature";
58
+ improvement: "improvement";
59
+ epic: "epic";
60
+ }>>;
61
+ assigneeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ reporterId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
63
+ dueDate: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
64
+ estimatedEffort: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
65
+ sortOrder: z.ZodDefault<z.ZodNumber>;
66
+ commentCount: z.ZodDefault<z.ZodNumber>;
67
+ attachments: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
68
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
69
+ closedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
70
+ createdAt: z.ZodDate;
71
+ updatedAt: z.ZodDate;
72
+ }, z.core.$strip>;
73
+ export declare const TicketSchema: z.ZodObject<{
74
+ id: z.ZodString;
75
+ schemaVersion: z.ZodDefault<z.ZodString>;
76
+ boardId: z.ZodString;
77
+ columnId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
78
+ parentTicketId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
79
+ ticketNumber: z.ZodNumber;
80
+ title: z.ZodString;
81
+ description: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
82
+ status: z.ZodDefault<z.ZodEnum<{
83
+ done: "done";
84
+ open: "open";
85
+ in_progress: "in_progress";
86
+ in_review: "in_review";
87
+ closed: "closed";
88
+ }>>;
89
+ priority: z.ZodDefault<z.ZodEnum<{
90
+ high: "high";
91
+ low: "low";
92
+ medium: "medium";
93
+ urgent: "urgent";
94
+ }>>;
95
+ type: z.ZodDefault<z.ZodEnum<{
96
+ task: "task";
97
+ bug: "bug";
98
+ feature: "feature";
99
+ improvement: "improvement";
100
+ epic: "epic";
101
+ }>>;
102
+ assigneeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
103
+ reporterId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
104
+ dueDate: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
105
+ estimatedEffort: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
106
+ sortOrder: z.ZodDefault<z.ZodNumber>;
107
+ commentCount: z.ZodDefault<z.ZodNumber>;
108
+ attachments: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
109
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
110
+ closedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
111
+ createdAt: z.ZodDate;
112
+ updatedAt: z.ZodDate;
113
+ }, z.core.$strip>;
114
+ export type Ticket = z.infer<typeof TicketSchema>;
115
+ export declare const TicketInsertSchema: z.ZodObject<{
116
+ description: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
117
+ type: z.ZodDefault<z.ZodEnum<{
118
+ task: "task";
119
+ bug: "bug";
120
+ feature: "feature";
121
+ improvement: "improvement";
122
+ epic: "epic";
123
+ }>>;
124
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
125
+ priority: z.ZodDefault<z.ZodEnum<{
126
+ high: "high";
127
+ low: "low";
128
+ medium: "medium";
129
+ urgent: "urgent";
130
+ }>>;
131
+ id: z.ZodString;
132
+ title: z.ZodString;
133
+ schemaVersion: z.ZodDefault<z.ZodString>;
134
+ status: z.ZodDefault<z.ZodEnum<{
135
+ done: "done";
136
+ open: "open";
137
+ in_progress: "in_progress";
138
+ in_review: "in_review";
139
+ closed: "closed";
140
+ }>>;
141
+ attachments: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
142
+ boardId: z.ZodString;
143
+ columnId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
144
+ parentTicketId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
145
+ assigneeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
146
+ reporterId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
147
+ dueDate: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
148
+ estimatedEffort: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
149
+ sortOrder: z.ZodDefault<z.ZodNumber>;
150
+ closedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
151
+ ticketNumber: z.ZodOptional<z.ZodNumber>;
152
+ commentCount: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
153
+ createdAt: z.ZodOptional<z.ZodDate>;
154
+ updatedAt: z.ZodOptional<z.ZodDate>;
155
+ }, z.core.$strip>;
156
+ export type TicketInsert = z.infer<typeof TicketInsertSchema>;
157
+ export declare function isOpen(ticket: Ticket): boolean;
158
+ export declare function isInProgress(ticket: Ticket): boolean;
159
+ export declare function isDone(ticket: Ticket): boolean;
160
+ export declare function isClosed(ticket: Ticket): boolean;
161
+ export declare function isResolved(ticket: Ticket): boolean;
162
+ export declare function getStatusLabel(status: TicketStatus): string;
163
+ export declare function getPriorityLabel(priority: TicketPriority): string;
164
+ export declare function getTypeLabel(type: TicketType): string;
165
+ export declare function isAssigned(ticket: Ticket): boolean;
166
+ export declare function isAssignedTo(ticket: Ticket, userId: string): boolean;
167
+ export declare function isReportedBy(ticket: Ticket, userId: string): boolean;
168
+ export declare function isSubtask(ticket: Ticket): boolean;
169
+ export declare function hasDueDate(ticket: Ticket): boolean;
170
+ export declare function isOverdue(ticket: Ticket): boolean;
171
+ export declare function getDaysUntilDue(ticket: Ticket): number | null;
172
+ export declare function createTicketInsert(boardId: string, title: string, options?: {
173
+ id?: string;
174
+ columnId?: string;
175
+ parentTicketId?: string;
176
+ description?: unknown;
177
+ status?: TicketStatus;
178
+ priority?: TicketPriority;
179
+ type?: TicketType;
180
+ assigneeId?: string;
181
+ reporterId?: string;
182
+ dueDate?: Date;
183
+ estimatedEffort?: number;
184
+ }): TicketInsert;
185
+ export interface TicketWithComputed extends Ticket {
186
+ _computed: {
187
+ isOpen: boolean;
188
+ isInProgress: boolean;
189
+ isDone: boolean;
190
+ isClosed: boolean;
191
+ isResolved: boolean;
192
+ isAssigned: boolean;
193
+ isSubtask: boolean;
194
+ isOverdue: boolean;
195
+ hasDueDate: boolean;
196
+ daysUntilDue: number | null;
197
+ hasComments: boolean;
198
+ statusLabel: string;
199
+ priorityLabel: string;
200
+ typeLabel: string;
201
+ };
202
+ }
203
+ export declare function ticketToHuman(ticket: Ticket): TicketWithComputed;
204
+ //# sourceMappingURL=ticket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../src/entities/ticket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAM1B,eAAO,MAAM,qBAAqB,IAAI,CAAA;AAEtC,eAAO,MAAM,eAAe,iEAAkE,CAAA;AAC9F,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3D,eAAO,MAAM,iBAAiB,8CAA+C,CAAA;AAC7E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,eAAO,MAAM,YAAY,4DAA6D,CAAA;AACtF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD,eAAO,MAAM,aAAa;;;;;CAKhB,CAAA;AAMV,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6B7B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAqB,CAAA;AAE9C,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAMjD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAM7D,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAS3D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAQjE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CASrD;AAMD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD;AAMD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAMD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GACA,YAAY,CAwBd;AAMD,MAAM,WAAW,kBAAmB,SAAQ,MAAM;IAChD,SAAS,EAAE;QACT,MAAM,EAAE,OAAO,CAAA;QACf,YAAY,EAAE,OAAO,CAAA;QACrB,MAAM,EAAE,OAAO,CAAA;QACf,QAAQ,EAAE,OAAO,CAAA;QACjB,UAAU,EAAE,OAAO,CAAA;QACnB,UAAU,EAAE,OAAO,CAAA;QACnB,SAAS,EAAE,OAAO,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,UAAU,EAAE,OAAO,CAAA;QACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,WAAW,EAAE,OAAO,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAoBhE"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Ticket Entity Contract
3
+ *
4
+ * Core ticket/issue entity for the kanban board system.
5
+ * Supports: statuses, priorities, types, subtasks, comments, labels, assignments.
6
+ *
7
+ * Business Rules:
8
+ * - ticketNumber auto-increments per board
9
+ * - status values: open, in_progress, in_review, done, closed
10
+ * - priority values: urgent, high, medium, low
11
+ * - type values: task, bug, feature, improvement, epic
12
+ * - Tickets belong to exactly one board
13
+ * - Tickets may optionally be in a board column (kanban placement)
14
+ * - parentTicketId enables subtask hierarchy (one level deep recommended)
15
+ * - description stored as Lexical/JSON rich text
16
+ * - commentCount denormalized for performance
17
+ */
18
+ import { z } from 'zod/v4';
19
+ // =============================================================================
20
+ // Constants
21
+ // =============================================================================
22
+ export const TICKET_SCHEMA_VERSION = 1;
23
+ export const TICKET_STATUSES = ['open', 'in_progress', 'in_review', 'done', 'closed'];
24
+ export const TICKET_PRIORITIES = ['urgent', 'high', 'medium', 'low'];
25
+ export const TICKET_TYPES = ['task', 'bug', 'feature', 'improvement', 'epic'];
26
+ export const TICKET_LIMITS = {
27
+ MIN_TITLE_LENGTH: 1,
28
+ MAX_TITLE_LENGTH: 500,
29
+ MAX_DESCRIPTION_SIZE: 100_000,
30
+ MAX_SUBTASK_DEPTH: 1,
31
+ };
32
+ // =============================================================================
33
+ // Base Schema
34
+ // =============================================================================
35
+ export const TicketObjectSchema = z.object({
36
+ id: z.string().min(1),
37
+ schemaVersion: z.string().default(String(TICKET_SCHEMA_VERSION)),
38
+ boardId: z.string().min(1),
39
+ columnId: z.string().nullable().optional(),
40
+ parentTicketId: z.string().nullable().optional(),
41
+ ticketNumber: z.number().int().min(1),
42
+ title: z
43
+ .string()
44
+ .min(TICKET_LIMITS.MIN_TITLE_LENGTH, 'Title is required')
45
+ .max(TICKET_LIMITS.MAX_TITLE_LENGTH, `Title cannot exceed ${TICKET_LIMITS.MAX_TITLE_LENGTH} characters`),
46
+ description: z.unknown().nullable().optional(),
47
+ status: z.enum(TICKET_STATUSES).default('open'),
48
+ priority: z.enum(TICKET_PRIORITIES).default('medium'),
49
+ type: z.enum(TICKET_TYPES).default('task'),
50
+ assigneeId: z.string().nullable().optional(),
51
+ reporterId: z.string().nullable().optional(),
52
+ dueDate: z.date().nullable().optional(),
53
+ estimatedEffort: z.number().int().min(0).nullable().optional(),
54
+ sortOrder: z.number().default(0),
55
+ commentCount: z.number().int().default(0),
56
+ attachments: z.unknown().nullable().optional(),
57
+ metadata: z.unknown().nullable().optional(),
58
+ closedAt: z.date().nullable().optional(),
59
+ createdAt: z.date(),
60
+ updatedAt: z.date(),
61
+ });
62
+ export const TicketSchema = TicketObjectSchema;
63
+ // =============================================================================
64
+ // Insert Schema
65
+ // =============================================================================
66
+ export const TicketInsertSchema = TicketObjectSchema.omit({
67
+ ticketNumber: true,
68
+ commentCount: true,
69
+ createdAt: true,
70
+ updatedAt: true,
71
+ }).extend({
72
+ ticketNumber: z.number().int().min(1).optional(),
73
+ commentCount: z.number().int().default(0).optional(),
74
+ createdAt: z.date().optional(),
75
+ updatedAt: z.date().optional(),
76
+ });
77
+ // =============================================================================
78
+ // Status Helpers
79
+ // =============================================================================
80
+ export function isOpen(ticket) {
81
+ return ticket.status === 'open';
82
+ }
83
+ export function isInProgress(ticket) {
84
+ return ticket.status === 'in_progress';
85
+ }
86
+ export function isDone(ticket) {
87
+ return ticket.status === 'done';
88
+ }
89
+ export function isClosed(ticket) {
90
+ return ticket.status === 'closed';
91
+ }
92
+ export function isResolved(ticket) {
93
+ return ticket.status === 'done' || ticket.status === 'closed';
94
+ }
95
+ export function getStatusLabel(status) {
96
+ const labels = {
97
+ open: 'Open',
98
+ in_progress: 'In Progress',
99
+ in_review: 'In Review',
100
+ done: 'Done',
101
+ closed: 'Closed',
102
+ };
103
+ return labels[status];
104
+ }
105
+ export function getPriorityLabel(priority) {
106
+ const labels = {
107
+ urgent: 'Urgent',
108
+ high: 'High',
109
+ medium: 'Medium',
110
+ low: 'Low',
111
+ };
112
+ return labels[priority];
113
+ }
114
+ export function getTypeLabel(type) {
115
+ const labels = {
116
+ task: 'Task',
117
+ bug: 'Bug',
118
+ feature: 'Feature',
119
+ improvement: 'Improvement',
120
+ epic: 'Epic',
121
+ };
122
+ return labels[type];
123
+ }
124
+ // =============================================================================
125
+ // Assignment Helpers
126
+ // =============================================================================
127
+ export function isAssigned(ticket) {
128
+ return ticket.assigneeId !== null && ticket.assigneeId !== undefined;
129
+ }
130
+ export function isAssignedTo(ticket, userId) {
131
+ return ticket.assigneeId === userId;
132
+ }
133
+ export function isReportedBy(ticket, userId) {
134
+ return ticket.reporterId === userId;
135
+ }
136
+ export function isSubtask(ticket) {
137
+ return ticket.parentTicketId !== null && ticket.parentTicketId !== undefined;
138
+ }
139
+ // =============================================================================
140
+ // Due Date Helpers
141
+ // =============================================================================
142
+ export function hasDueDate(ticket) {
143
+ return ticket.dueDate !== null && ticket.dueDate !== undefined;
144
+ }
145
+ export function isOverdue(ticket) {
146
+ if (!hasDueDate(ticket) || isResolved(ticket))
147
+ return false;
148
+ return ticket.dueDate.getTime() < Date.now();
149
+ }
150
+ export function getDaysUntilDue(ticket) {
151
+ if (!hasDueDate(ticket))
152
+ return null;
153
+ const ms = ticket.dueDate.getTime() - Date.now();
154
+ return Math.ceil(ms / (1000 * 60 * 60 * 24));
155
+ }
156
+ // =============================================================================
157
+ // Ticket Creation
158
+ // =============================================================================
159
+ export function createTicketInsert(boardId, title, options) {
160
+ const now = new Date();
161
+ return {
162
+ id: options?.id ?? crypto.randomUUID(),
163
+ schemaVersion: String(TICKET_SCHEMA_VERSION),
164
+ boardId,
165
+ columnId: options?.columnId ?? null,
166
+ parentTicketId: options?.parentTicketId ?? null,
167
+ title,
168
+ description: options?.description ?? null,
169
+ status: options?.status ?? 'open',
170
+ priority: options?.priority ?? 'medium',
171
+ type: options?.type ?? 'task',
172
+ assigneeId: options?.assigneeId ?? null,
173
+ reporterId: options?.reporterId ?? null,
174
+ dueDate: options?.dueDate ?? null,
175
+ estimatedEffort: options?.estimatedEffort ?? null,
176
+ sortOrder: 0,
177
+ attachments: null,
178
+ metadata: null,
179
+ closedAt: null,
180
+ createdAt: now,
181
+ updatedAt: now,
182
+ };
183
+ }
184
+ export function ticketToHuman(ticket) {
185
+ return {
186
+ ...ticket,
187
+ _computed: {
188
+ isOpen: isOpen(ticket),
189
+ isInProgress: isInProgress(ticket),
190
+ isDone: isDone(ticket),
191
+ isClosed: isClosed(ticket),
192
+ isResolved: isResolved(ticket),
193
+ isAssigned: isAssigned(ticket),
194
+ isSubtask: isSubtask(ticket),
195
+ isOverdue: isOverdue(ticket),
196
+ hasDueDate: hasDueDate(ticket),
197
+ daysUntilDue: getDaysUntilDue(ticket),
198
+ hasComments: ticket.commentCount > 0,
199
+ statusLabel: getStatusLabel(ticket.status),
200
+ priorityLabel: getPriorityLabel(ticket.priority),
201
+ typeLabel: getTypeLabel(ticket.type),
202
+ },
203
+ };
204
+ }
205
+ //# sourceMappingURL=ticket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../src/entities/ticket.ts"],"names":[],"mappings":"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"}