@kernhq/module-inventory 0.1.2 → 0.3.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 (213) hide show
  1. package/README.md +134 -9
  2. package/dist/contract/capabilities.d.ts +49 -0
  3. package/dist/contract/capabilities.d.ts.map +1 -0
  4. package/dist/contract/capabilities.js +94 -0
  5. package/dist/contract/capabilities.js.map +1 -0
  6. package/dist/contract/events.d.ts +76 -0
  7. package/dist/contract/events.d.ts.map +1 -0
  8. package/dist/contract/events.js +62 -0
  9. package/dist/contract/events.js.map +1 -0
  10. package/dist/contract/index.d.ts +16 -0
  11. package/dist/contract/index.d.ts.map +1 -0
  12. package/dist/contract/index.js +16 -0
  13. package/dist/contract/index.js.map +1 -0
  14. package/dist/contract/models.d.ts +468 -0
  15. package/dist/contract/models.d.ts.map +1 -0
  16. package/dist/contract/models.js +320 -0
  17. package/dist/contract/models.js.map +1 -0
  18. package/dist/contract/notifications.d.ts +24 -0
  19. package/dist/contract/notifications.d.ts.map +1 -0
  20. package/dist/contract/notifications.js +72 -0
  21. package/dist/contract/notifications.js.map +1 -0
  22. package/dist/contract/permissions.d.ts +72 -0
  23. package/dist/contract/permissions.d.ts.map +1 -0
  24. package/dist/contract/permissions.js +79 -0
  25. package/dist/contract/permissions.js.map +1 -0
  26. package/dist/contract/router.d.ts +1378 -0
  27. package/dist/contract/router.d.ts.map +1 -0
  28. package/dist/contract/router.js +266 -0
  29. package/dist/contract/router.js.map +1 -0
  30. package/dist/contract/settings.d.ts +20 -0
  31. package/dist/contract/settings.d.ts.map +1 -0
  32. package/dist/contract/settings.js +49 -0
  33. package/dist/contract/settings.js.map +1 -0
  34. package/dist/server/index.d.ts +8 -1
  35. package/dist/server/index.d.ts.map +1 -1
  36. package/dist/server/index.js +288 -8
  37. package/dist/server/index.js.map +1 -1
  38. package/dist/server/jobs.d.ts +48 -0
  39. package/dist/server/jobs.d.ts.map +1 -0
  40. package/dist/server/jobs.js +358 -0
  41. package/dist/server/jobs.js.map +1 -0
  42. package/dist/server/router.d.ts +1789 -0
  43. package/dist/server/router.d.ts.map +1 -0
  44. package/dist/server/router.js +439 -0
  45. package/dist/server/router.js.map +1 -0
  46. package/dist/server/schema.d.ts +156 -9
  47. package/dist/server/schema.d.ts.map +1 -1
  48. package/dist/server/schema.js +183 -11
  49. package/dist/server/schema.js.map +1 -1
  50. package/dist/server/services/assets.d.ts +139 -0
  51. package/dist/server/services/assets.d.ts.map +1 -0
  52. package/dist/server/services/assets.js +429 -0
  53. package/dist/server/services/assets.js.map +1 -0
  54. package/dist/server/services/attachments.d.ts +80 -0
  55. package/dist/server/services/attachments.d.ts.map +1 -0
  56. package/dist/server/services/attachments.js +182 -0
  57. package/dist/server/services/attachments.js.map +1 -0
  58. package/dist/server/services/audience.d.ts +15 -0
  59. package/dist/server/services/audience.d.ts.map +1 -0
  60. package/dist/server/services/audience.js +64 -0
  61. package/dist/server/services/audience.js.map +1 -0
  62. package/dist/server/services/categories.d.ts +57 -0
  63. package/dist/server/services/categories.d.ts.map +1 -0
  64. package/dist/server/services/categories.js +124 -0
  65. package/dist/server/services/categories.js.map +1 -0
  66. package/dist/server/services/cursor.d.ts +68 -0
  67. package/dist/server/services/cursor.d.ts.map +1 -0
  68. package/dist/server/services/cursor.js +39 -0
  69. package/dist/server/services/cursor.js.map +1 -0
  70. package/dist/server/services/custody.d.ts +175 -0
  71. package/dist/server/services/custody.d.ts.map +1 -0
  72. package/dist/server/services/custody.js +367 -0
  73. package/dist/server/services/custody.js.map +1 -0
  74. package/dist/server/services/db-errors.d.ts +7 -0
  75. package/dist/server/services/db-errors.d.ts.map +1 -0
  76. package/dist/server/services/db-errors.js +32 -0
  77. package/dist/server/services/db-errors.js.map +1 -0
  78. package/dist/server/services/index.d.ts +26 -0
  79. package/dist/server/services/index.d.ts.map +1 -0
  80. package/dist/server/services/index.js +39 -0
  81. package/dist/server/services/index.js.map +1 -0
  82. package/dist/server/services/members.d.ts +27 -0
  83. package/dist/server/services/members.d.ts.map +1 -0
  84. package/dist/server/services/members.js +39 -0
  85. package/dist/server/services/members.js.map +1 -0
  86. package/dist/server/services/notify.d.ts +105 -0
  87. package/dist/server/services/notify.d.ts.map +1 -0
  88. package/dist/server/services/notify.js +147 -0
  89. package/dist/server/services/notify.js.map +1 -0
  90. package/dist/server/services/offboarding.d.ts +70 -0
  91. package/dist/server/services/offboarding.d.ts.map +1 -0
  92. package/dist/server/services/offboarding.js +116 -0
  93. package/dist/server/services/offboarding.js.map +1 -0
  94. package/dist/server/services/repairs.d.ts +204 -0
  95. package/dist/server/services/repairs.d.ts.map +1 -0
  96. package/dist/server/services/repairs.js +476 -0
  97. package/dist/server/services/repairs.js.map +1 -0
  98. package/dist/server/services/search.d.ts +85 -0
  99. package/dist/server/services/search.d.ts.map +1 -0
  100. package/dist/server/services/search.js +142 -0
  101. package/dist/server/services/search.js.map +1 -0
  102. package/dist/server/services/stats.d.ts +42 -0
  103. package/dist/server/services/stats.d.ts.map +1 -0
  104. package/dist/server/services/stats.js +80 -0
  105. package/dist/server/services/stats.js.map +1 -0
  106. package/dist/server/services/status.d.ts +102 -0
  107. package/dist/server/services/status.d.ts.map +1 -0
  108. package/dist/server/services/status.js +71 -0
  109. package/dist/server/services/status.js.map +1 -0
  110. package/migrations/0000_init.sql +12 -3
  111. package/migrations/0001_rls.sql +24 -0
  112. package/migrations/0002_custody_and_categories.sql +23 -0
  113. package/migrations/0003_repairs.sql +23 -0
  114. package/migrations/0004_platform_surfaces.sql +51 -0
  115. package/migrations/0005_repair_dates.sql +35 -0
  116. package/migrations/0006_workspace_registry_read.sql +50 -0
  117. package/migrations/0007_history_sequence.sql +83 -0
  118. package/migrations/meta/0000_snapshot.json +40 -13
  119. package/migrations/meta/0002_snapshot.json +1054 -0
  120. package/migrations/meta/0003_snapshot.json +1070 -0
  121. package/migrations/meta/0004_snapshot.json +1130 -0
  122. package/migrations/meta/0005_snapshot.json +1135 -0
  123. package/migrations/meta/_journal.json +44 -2
  124. package/package.json +5 -4
  125. package/src/client/api-instance.ts +27 -2
  126. package/src/client/api.ts +1 -1
  127. package/src/client/bidi.test.ts +148 -0
  128. package/src/client/bidi.ts +85 -0
  129. package/src/client/components/AssetDetailPanel.svelte +614 -0
  130. package/src/client/components/AssetFormDialog.svelte +191 -59
  131. package/src/client/components/AssetPhoto.svelte +178 -0
  132. package/src/client/components/AttachmentsSection.svelte +327 -0
  133. package/src/client/components/CustodyDialog.svelte +201 -0
  134. package/src/client/components/RepairDialog.svelte +271 -0
  135. package/src/client/components/RepairsSection.svelte +318 -0
  136. package/src/client/components/Timeline.svelte +347 -0
  137. package/src/client/components/TimelineText.svelte +124 -0
  138. package/src/client/core-api.ts +71 -0
  139. package/src/client/custody.test.ts +31 -0
  140. package/src/client/custody.ts +34 -0
  141. package/src/client/errors.test.ts +365 -0
  142. package/src/client/errors.ts +201 -0
  143. package/src/client/i18n.ts +11 -166
  144. package/src/client/index.ts +8 -1
  145. package/src/client/links.test.ts +74 -0
  146. package/src/client/links.ts +44 -0
  147. package/src/client/members.test.ts +132 -0
  148. package/src/client/members.ts +116 -0
  149. package/src/client/messages.test.ts +296 -0
  150. package/src/client/messages.ts +1424 -0
  151. package/src/client/mock.test.ts +555 -0
  152. package/src/client/mock.ts +1261 -52
  153. package/src/client/module.ts +76 -2
  154. package/src/client/pages/AssetsPage.svelte +638 -145
  155. package/src/client/permissions.ts +8 -1
  156. package/src/client/price.test.ts +254 -0
  157. package/src/client/price.ts +279 -0
  158. package/src/client/query.test.ts +58 -0
  159. package/src/client/query.ts +51 -2
  160. package/src/client/repairs.test.ts +38 -0
  161. package/src/client/repairs.ts +38 -0
  162. package/src/client/settings/CategoriesSettings.svelte +421 -0
  163. package/src/client/settings/GeneralSettings.svelte +403 -0
  164. package/src/client/status.ts +29 -0
  165. package/src/client/timeline.test.ts +175 -0
  166. package/src/client/timeline.ts +206 -0
  167. package/src/client/widgets/OverviewWidget.svelte +140 -26
  168. package/src/client/widgets/RepairsWidget.svelte +124 -0
  169. package/src/contract/capabilities.ts +99 -0
  170. package/src/contract/events.ts +83 -0
  171. package/src/contract/index.ts +16 -0
  172. package/src/contract/models.ts +360 -0
  173. package/src/contract/notifications.ts +73 -0
  174. package/src/contract/permissions.ts +79 -0
  175. package/src/contract/router.ts +300 -0
  176. package/src/contract/settings.ts +50 -0
  177. package/src/module.test.ts +330 -7
  178. package/src/server/index.ts +318 -8
  179. package/src/server/inventory.int.test.ts +4374 -0
  180. package/src/server/jobs.ts +444 -0
  181. package/src/server/migrations.test.ts +251 -0
  182. package/src/server/router.ts +574 -0
  183. package/src/server/schema.ts +184 -10
  184. package/src/server/services/assets.ts +528 -0
  185. package/src/server/services/attachments.ts +215 -0
  186. package/src/server/services/audience.ts +77 -0
  187. package/src/server/services/categories.ts +136 -0
  188. package/src/server/services/cursor.ts +104 -0
  189. package/src/server/services/custody.ts +471 -0
  190. package/src/server/services/db-errors.ts +42 -0
  191. package/src/server/services/index.ts +56 -0
  192. package/src/server/services/members.ts +54 -0
  193. package/src/server/services/notify.ts +196 -0
  194. package/src/server/services/offboarding.ts +150 -0
  195. package/src/server/services/repairs.ts +567 -0
  196. package/src/server/services/search.ts +166 -0
  197. package/src/server/services/stats.ts +88 -0
  198. package/src/server/services/status.test.ts +34 -0
  199. package/src/server/services/status.ts +143 -0
  200. package/tsconfig.base.json +22 -0
  201. package/tsconfig.client.json +1 -1
  202. package/tsconfig.json +1 -1
  203. package/vitest.config.ts +18 -3
  204. package/dist/contract.d.ts +0 -387
  205. package/dist/contract.d.ts.map +0 -1
  206. package/dist/contract.js +0 -119
  207. package/dist/contract.js.map +0 -1
  208. package/dist/server/_impl.d.ts +0 -427
  209. package/dist/server/_impl.d.ts.map +0 -1
  210. package/dist/server/_impl.js +0 -204
  211. package/dist/server/_impl.js.map +0 -1
  212. package/src/contract.ts +0 -143
  213. package/src/server/_impl.ts +0 -275
@@ -1,387 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * What this module offers, as data.
4
- *
5
- * Imported by **both** halves — the server implements it, the client calls it — so nothing here may
6
- * touch Node. The contract is the only thing that crosses that line, which is why a procedure that
7
- * exists here and not in the router is a lie that compiles. `module.test.ts` checks exactly that.
8
- */
9
- /** Lowercase, 2-32 characters. Names the API prefix, the Postgres schema `mod_<id>` and every event. */
10
- export declare const MODULE_ID = "inventory";
11
- /**
12
- * An asset's lifecycle. `in_stock` and `assigned` follow custody (an open row in
13
- * `custody_periods` means assigned); `under_repair` follows an open repair; `retired` is set by
14
- * hand when an item leaves the company. Stored, because every list filter needs it, and kept in
15
- * step inside the same transaction that writes the row it derives from.
16
- */
17
- export declare const AssetStatus: z.ZodEnum<{
18
- in_stock: "in_stock";
19
- assigned: "assigned";
20
- under_repair: "under_repair";
21
- retired: "retired";
22
- }>;
23
- export type AssetStatus = z.infer<typeof AssetStatus>;
24
- export declare const Asset: z.ZodObject<{
25
- id: z.ZodUUID;
26
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
27
- code: z.ZodString;
28
- name: z.ZodString;
29
- description: z.ZodString;
30
- categoryId: z.ZodNullable<z.ZodUUID>;
31
- status: z.ZodEnum<{
32
- in_stock: "in_stock";
33
- assigned: "assigned";
34
- under_repair: "under_repair";
35
- retired: "retired";
36
- }>;
37
- custodianUserId: z.ZodNullable<z.ZodUUID>;
38
- custodySince: z.ZodNullable<z.ZodString>;
39
- serialNumber: z.ZodNullable<z.ZodString>;
40
- location: z.ZodNullable<z.ZodString>;
41
- purchasedOn: z.ZodNullable<z.ZodString>;
42
- purchasedFrom: z.ZodNullable<z.ZodString>;
43
- priceMinor: z.ZodNullable<z.ZodNumber>;
44
- currency: z.ZodNullable<z.ZodString>;
45
- warrantyUntil: z.ZodNullable<z.ZodString>;
46
- photoFileId: z.ZodNullable<z.ZodUUID>;
47
- createdAt: z.ZodString;
48
- updatedAt: z.ZodString;
49
- archivedAt: z.ZodNullable<z.ZodString>;
50
- }, z.core.$strip>;
51
- export type Asset = z.infer<typeof Asset>;
52
- export declare const inventoryContract: {
53
- assets: {
54
- list: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
55
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
56
- q: z.ZodOptional<z.ZodString>;
57
- categoryId: z.ZodOptional<z.ZodUUID>;
58
- status: z.ZodOptional<z.ZodEnum<{
59
- in_stock: "in_stock";
60
- assigned: "assigned";
61
- under_repair: "under_repair";
62
- retired: "retired";
63
- }>>;
64
- sort: z.ZodDefault<z.ZodEnum<{
65
- code: "code";
66
- name: "name";
67
- recent: "recent";
68
- }>>;
69
- cursor: z.ZodOptional<z.ZodString>;
70
- limit: z.ZodDefault<z.ZodNumber>;
71
- }, z.core.$strip>, z.ZodObject<{
72
- items: z.ZodArray<z.ZodObject<{
73
- id: z.ZodUUID;
74
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
75
- code: z.ZodString;
76
- name: z.ZodString;
77
- description: z.ZodString;
78
- categoryId: z.ZodNullable<z.ZodUUID>;
79
- status: z.ZodEnum<{
80
- in_stock: "in_stock";
81
- assigned: "assigned";
82
- under_repair: "under_repair";
83
- retired: "retired";
84
- }>;
85
- custodianUserId: z.ZodNullable<z.ZodUUID>;
86
- custodySince: z.ZodNullable<z.ZodString>;
87
- serialNumber: z.ZodNullable<z.ZodString>;
88
- location: z.ZodNullable<z.ZodString>;
89
- purchasedOn: z.ZodNullable<z.ZodString>;
90
- purchasedFrom: z.ZodNullable<z.ZodString>;
91
- priceMinor: z.ZodNullable<z.ZodNumber>;
92
- currency: z.ZodNullable<z.ZodString>;
93
- warrantyUntil: z.ZodNullable<z.ZodString>;
94
- photoFileId: z.ZodNullable<z.ZodUUID>;
95
- createdAt: z.ZodString;
96
- updatedAt: z.ZodString;
97
- archivedAt: z.ZodNullable<z.ZodString>;
98
- }, z.core.$strip>>;
99
- nextCursor: z.ZodNullable<z.ZodString>;
100
- total: z.ZodOptional<z.ZodNumber>;
101
- }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
102
- BAD_REQUEST: {
103
- data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
104
- };
105
- UNAUTHORIZED: {};
106
- FORBIDDEN: {
107
- data: z.ZodOptional<z.ZodObject<{
108
- permission: z.ZodOptional<z.ZodString>;
109
- }, z.core.$strip>>;
110
- };
111
- NOT_FOUND: {};
112
- CONFLICT: {
113
- data: z.ZodOptional<z.ZodObject<{
114
- reason: z.ZodOptional<z.ZodString>;
115
- }, z.core.$strip>>;
116
- };
117
- RATE_LIMITED: {};
118
- MODULE_DISABLED: {
119
- data: z.ZodObject<{
120
- module: z.ZodString;
121
- }, z.core.$strip>;
122
- };
123
- }>, Record<never, never>>;
124
- get: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
125
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
126
- assetId: z.ZodUUID;
127
- }, z.core.$strip>, z.ZodObject<{
128
- id: z.ZodUUID;
129
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
130
- code: z.ZodString;
131
- name: z.ZodString;
132
- description: z.ZodString;
133
- categoryId: z.ZodNullable<z.ZodUUID>;
134
- status: z.ZodEnum<{
135
- in_stock: "in_stock";
136
- assigned: "assigned";
137
- under_repair: "under_repair";
138
- retired: "retired";
139
- }>;
140
- custodianUserId: z.ZodNullable<z.ZodUUID>;
141
- custodySince: z.ZodNullable<z.ZodString>;
142
- serialNumber: z.ZodNullable<z.ZodString>;
143
- location: z.ZodNullable<z.ZodString>;
144
- purchasedOn: z.ZodNullable<z.ZodString>;
145
- purchasedFrom: z.ZodNullable<z.ZodString>;
146
- priceMinor: z.ZodNullable<z.ZodNumber>;
147
- currency: z.ZodNullable<z.ZodString>;
148
- warrantyUntil: z.ZodNullable<z.ZodString>;
149
- photoFileId: z.ZodNullable<z.ZodUUID>;
150
- createdAt: z.ZodString;
151
- updatedAt: z.ZodString;
152
- archivedAt: z.ZodNullable<z.ZodString>;
153
- }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
154
- BAD_REQUEST: {
155
- data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
156
- };
157
- UNAUTHORIZED: {};
158
- FORBIDDEN: {
159
- data: z.ZodOptional<z.ZodObject<{
160
- permission: z.ZodOptional<z.ZodString>;
161
- }, z.core.$strip>>;
162
- };
163
- NOT_FOUND: {};
164
- CONFLICT: {
165
- data: z.ZodOptional<z.ZodObject<{
166
- reason: z.ZodOptional<z.ZodString>;
167
- }, z.core.$strip>>;
168
- };
169
- RATE_LIMITED: {};
170
- MODULE_DISABLED: {
171
- data: z.ZodObject<{
172
- module: z.ZodString;
173
- }, z.core.$strip>;
174
- };
175
- }>, Record<never, never>>;
176
- create: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
177
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
178
- name: z.ZodString;
179
- description: z.ZodDefault<z.ZodString>;
180
- categoryId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
181
- serialNumber: z.ZodOptional<z.ZodNullable<z.ZodString>>;
182
- location: z.ZodOptional<z.ZodNullable<z.ZodString>>;
183
- purchasedFrom: z.ZodOptional<z.ZodNullable<z.ZodString>>;
184
- purchasedOn: z.ZodOptional<z.ZodNullable<z.ZodISODate>>;
185
- warrantyUntil: z.ZodOptional<z.ZodNullable<z.ZodISODate>>;
186
- priceMinor: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
187
- currency: z.ZodOptional<z.ZodNullable<z.ZodString>>;
188
- }, z.core.$strip>, z.ZodObject<{
189
- id: z.ZodUUID;
190
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
191
- code: z.ZodString;
192
- name: z.ZodString;
193
- description: z.ZodString;
194
- categoryId: z.ZodNullable<z.ZodUUID>;
195
- status: z.ZodEnum<{
196
- in_stock: "in_stock";
197
- assigned: "assigned";
198
- under_repair: "under_repair";
199
- retired: "retired";
200
- }>;
201
- custodianUserId: z.ZodNullable<z.ZodUUID>;
202
- custodySince: z.ZodNullable<z.ZodString>;
203
- serialNumber: z.ZodNullable<z.ZodString>;
204
- location: z.ZodNullable<z.ZodString>;
205
- purchasedOn: z.ZodNullable<z.ZodString>;
206
- purchasedFrom: z.ZodNullable<z.ZodString>;
207
- priceMinor: z.ZodNullable<z.ZodNumber>;
208
- currency: z.ZodNullable<z.ZodString>;
209
- warrantyUntil: z.ZodNullable<z.ZodString>;
210
- photoFileId: z.ZodNullable<z.ZodUUID>;
211
- createdAt: z.ZodString;
212
- updatedAt: z.ZodString;
213
- archivedAt: z.ZodNullable<z.ZodString>;
214
- }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
215
- BAD_REQUEST: {
216
- data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
217
- };
218
- UNAUTHORIZED: {};
219
- FORBIDDEN: {
220
- data: z.ZodOptional<z.ZodObject<{
221
- permission: z.ZodOptional<z.ZodString>;
222
- }, z.core.$strip>>;
223
- };
224
- NOT_FOUND: {};
225
- CONFLICT: {
226
- data: z.ZodOptional<z.ZodObject<{
227
- reason: z.ZodOptional<z.ZodString>;
228
- }, z.core.$strip>>;
229
- };
230
- RATE_LIMITED: {};
231
- MODULE_DISABLED: {
232
- data: z.ZodObject<{
233
- module: z.ZodString;
234
- }, z.core.$strip>;
235
- };
236
- }>, Record<never, never>>;
237
- update: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
238
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
239
- name: z.ZodOptional<z.ZodString>;
240
- description: z.ZodOptional<z.ZodDefault<z.ZodString>>;
241
- categoryId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodUUID>>>;
242
- serialNumber: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
243
- location: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
244
- purchasedFrom: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
245
- purchasedOn: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodISODate>>>;
246
- warrantyUntil: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodISODate>>>;
247
- priceMinor: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
248
- currency: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
249
- assetId: z.ZodUUID;
250
- }, z.core.$strip>, z.ZodObject<{
251
- id: z.ZodUUID;
252
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
253
- code: z.ZodString;
254
- name: z.ZodString;
255
- description: z.ZodString;
256
- categoryId: z.ZodNullable<z.ZodUUID>;
257
- status: z.ZodEnum<{
258
- in_stock: "in_stock";
259
- assigned: "assigned";
260
- under_repair: "under_repair";
261
- retired: "retired";
262
- }>;
263
- custodianUserId: z.ZodNullable<z.ZodUUID>;
264
- custodySince: z.ZodNullable<z.ZodString>;
265
- serialNumber: z.ZodNullable<z.ZodString>;
266
- location: z.ZodNullable<z.ZodString>;
267
- purchasedOn: z.ZodNullable<z.ZodString>;
268
- purchasedFrom: z.ZodNullable<z.ZodString>;
269
- priceMinor: z.ZodNullable<z.ZodNumber>;
270
- currency: z.ZodNullable<z.ZodString>;
271
- warrantyUntil: z.ZodNullable<z.ZodString>;
272
- photoFileId: z.ZodNullable<z.ZodUUID>;
273
- createdAt: z.ZodString;
274
- updatedAt: z.ZodString;
275
- archivedAt: z.ZodNullable<z.ZodString>;
276
- }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
277
- BAD_REQUEST: {
278
- data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
279
- };
280
- UNAUTHORIZED: {};
281
- FORBIDDEN: {
282
- data: z.ZodOptional<z.ZodObject<{
283
- permission: z.ZodOptional<z.ZodString>;
284
- }, z.core.$strip>>;
285
- };
286
- NOT_FOUND: {};
287
- CONFLICT: {
288
- data: z.ZodOptional<z.ZodObject<{
289
- reason: z.ZodOptional<z.ZodString>;
290
- }, z.core.$strip>>;
291
- };
292
- RATE_LIMITED: {};
293
- MODULE_DISABLED: {
294
- data: z.ZodObject<{
295
- module: z.ZodString;
296
- }, z.core.$strip>;
297
- };
298
- }>, Record<never, never>>;
299
- archive: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
300
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
301
- assetId: z.ZodUUID;
302
- archived: z.ZodDefault<z.ZodBoolean>;
303
- }, z.core.$strip>, z.ZodObject<{
304
- id: z.ZodUUID;
305
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
306
- code: z.ZodString;
307
- name: z.ZodString;
308
- description: z.ZodString;
309
- categoryId: z.ZodNullable<z.ZodUUID>;
310
- status: z.ZodEnum<{
311
- in_stock: "in_stock";
312
- assigned: "assigned";
313
- under_repair: "under_repair";
314
- retired: "retired";
315
- }>;
316
- custodianUserId: z.ZodNullable<z.ZodUUID>;
317
- custodySince: z.ZodNullable<z.ZodString>;
318
- serialNumber: z.ZodNullable<z.ZodString>;
319
- location: z.ZodNullable<z.ZodString>;
320
- purchasedOn: z.ZodNullable<z.ZodString>;
321
- purchasedFrom: z.ZodNullable<z.ZodString>;
322
- priceMinor: z.ZodNullable<z.ZodNumber>;
323
- currency: z.ZodNullable<z.ZodString>;
324
- warrantyUntil: z.ZodNullable<z.ZodString>;
325
- photoFileId: z.ZodNullable<z.ZodUUID>;
326
- createdAt: z.ZodString;
327
- updatedAt: z.ZodString;
328
- archivedAt: z.ZodNullable<z.ZodString>;
329
- }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
330
- BAD_REQUEST: {
331
- data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
332
- };
333
- UNAUTHORIZED: {};
334
- FORBIDDEN: {
335
- data: z.ZodOptional<z.ZodObject<{
336
- permission: z.ZodOptional<z.ZodString>;
337
- }, z.core.$strip>>;
338
- };
339
- NOT_FOUND: {};
340
- CONFLICT: {
341
- data: z.ZodOptional<z.ZodObject<{
342
- reason: z.ZodOptional<z.ZodString>;
343
- }, z.core.$strip>>;
344
- };
345
- RATE_LIMITED: {};
346
- MODULE_DISABLED: {
347
- data: z.ZodObject<{
348
- module: z.ZodString;
349
- }, z.core.$strip>;
350
- };
351
- }>, Record<never, never>>;
352
- };
353
- };
354
- export type InventoryContract = typeof inventoryContract;
355
- /** `<module>.<entity>.<action>`. Anything that emits one declares it here. Payloads carry ids, never rows. */
356
- export declare const inventoryEvents: {
357
- assetCreated: import("@kernhq/contracts").EventDef<"inventory.asset.created", z.ZodObject<{
358
- assetId: z.ZodUUID;
359
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
360
- }, z.core.$strip>>;
361
- assetUpdated: import("@kernhq/contracts").EventDef<"inventory.asset.updated", z.ZodObject<{
362
- assetId: z.ZodUUID;
363
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
364
- }, z.core.$strip>>;
365
- assetArchived: import("@kernhq/contracts").EventDef<"inventory.asset.archived", z.ZodObject<{
366
- assetId: z.ZodUUID;
367
- workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
368
- }, z.core.$strip>>;
369
- };
370
- /**
371
- * `<module>.<resource>.<action>`, each with the narrowest scope that works and the roles that hold it
372
- * by default. A workspace can add or remove any of them afterwards with a custom role.
373
- */
374
- export declare const inventoryPermissions: readonly [{
375
- readonly key: "inventory.asset.view";
376
- readonly label: "View assets";
377
- readonly scope: "workspace";
378
- readonly defaultRoles: ["owner", "admin", "member", "guest"];
379
- readonly dangerous: false;
380
- }, {
381
- readonly key: "inventory.asset.manage";
382
- readonly label: "Create and edit assets";
383
- readonly scope: "workspace";
384
- readonly defaultRoles: ["owner", "admin", "member"];
385
- readonly dangerous: false;
386
- }];
387
- //# sourceMappingURL=contract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;GAMG;AAEH,wGAAwG;AACxG,eAAO,MAAM,SAAS,cAAc,CAAA;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;EAA8D,CAAA;AACtF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAErD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAA;AAiBzC,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoC7B,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAA;AAExD,8GAA8G;AAC9G,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAa3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAe/B,CAAA"}
package/dist/contract.js DELETED
@@ -1,119 +0,0 @@
1
- import { baseContract, defineEvent, definePermissions, PageInput, page, WorkspaceId } from '@kernhq/contracts';
2
- import { z } from 'zod';
3
- /**
4
- * What this module offers, as data.
5
- *
6
- * Imported by **both** halves — the server implements it, the client calls it — so nothing here may
7
- * touch Node. The contract is the only thing that crosses that line, which is why a procedure that
8
- * exists here and not in the router is a lie that compiles. `module.test.ts` checks exactly that.
9
- */
10
- /** Lowercase, 2-32 characters. Names the API prefix, the Postgres schema `mod_<id>` and every event. */
11
- export const MODULE_ID = 'inventory';
12
- /**
13
- * An asset's lifecycle. `in_stock` and `assigned` follow custody (an open row in
14
- * `custody_periods` means assigned); `under_repair` follows an open repair; `retired` is set by
15
- * hand when an item leaves the company. Stored, because every list filter needs it, and kept in
16
- * step inside the same transaction that writes the row it derives from.
17
- */
18
- export const AssetStatus = z.enum(['in_stock', 'assigned', 'under_repair', 'retired']);
19
- export const Asset = z.object({
20
- id: z.uuid(),
21
- workspaceId: WorkspaceId,
22
- /** Human-facing asset tag (`INV-0001`), assigned by the server, unique per workspace. */
23
- code: z.string().min(1).max(40),
24
- name: z.string().min(1).max(200),
25
- description: z.string().max(4000),
26
- categoryId: z.uuid().nullable(),
27
- status: AssetStatus,
28
- /**
29
- * The member currently holding the item. A plain uuid — cross-schema foreign keys are what the
30
- * module boundary exists to prevent — resolved against core membership at read time.
31
- */
32
- custodianUserId: z.uuid().nullable(),
33
- custodySince: z.string().nullable(),
34
- serialNumber: z.string().max(200).nullable(),
35
- location: z.string().max(200).nullable(),
36
- purchasedOn: z.string().nullable(),
37
- purchasedFrom: z.string().max(200).nullable(),
38
- /** Minor units (cents), the convention billing established; formatted on the client. */
39
- priceMinor: z.number().int().nullable(),
40
- currency: z.string().length(3).nullable(),
41
- warrantyUntil: z.string().nullable(),
42
- photoFileId: z.uuid().nullable(),
43
- createdAt: z.string(),
44
- updatedAt: z.string(),
45
- archivedAt: z.string().nullable(),
46
- });
47
- const ws = z.object({ workspaceId: WorkspaceId });
48
- const AssetCreateInput = z.object({
49
- name: z.string().min(1).max(200),
50
- description: z.string().max(4000).default(''),
51
- categoryId: z.uuid().nullish(),
52
- serialNumber: z.string().max(200).nullish(),
53
- location: z.string().max(200).nullish(),
54
- purchasedFrom: z.string().max(200).nullish(),
55
- purchasedOn: z.iso.date().nullish(),
56
- warrantyUntil: z.iso.date().nullish(),
57
- priceMinor: z.number().int().min(0).nullish(),
58
- currency: z.string().length(3).nullish(),
59
- });
60
- export const inventoryContract = {
61
- assets: {
62
- list: baseContract
63
- .route({ method: 'GET', path: '/assets', tags: ['inventory'] })
64
- .input(ws.extend({
65
- ...PageInput.shape,
66
- q: z.string().max(200).optional(),
67
- categoryId: z.uuid().optional(),
68
- status: AssetStatus.optional(),
69
- sort: z.enum(['recent', 'name', 'code']).default('recent'),
70
- }))
71
- .output(page(Asset)),
72
- get: baseContract
73
- .route({ method: 'GET', path: '/assets/{assetId}', tags: ['inventory'] })
74
- .input(ws.extend({ assetId: z.uuid() }))
75
- .output(Asset),
76
- create: baseContract
77
- .route({ method: 'POST', path: '/assets', tags: ['inventory'] })
78
- .input(ws.extend(AssetCreateInput.shape))
79
- .output(Asset),
80
- update: baseContract
81
- .route({ method: 'PATCH', path: '/assets/{assetId}', tags: ['inventory'] })
82
- .input(ws.extend({
83
- assetId: z.uuid(),
84
- ...AssetCreateInput.partial().shape,
85
- }))
86
- .output(Asset),
87
- archive: baseContract
88
- .route({ method: 'POST', path: '/assets/{assetId}/archive', tags: ['inventory'] })
89
- .input(ws.extend({ assetId: z.uuid(), archived: z.boolean().default(true) }))
90
- .output(Asset),
91
- },
92
- };
93
- /** `<module>.<entity>.<action>`. Anything that emits one declares it here. Payloads carry ids, never rows. */
94
- export const inventoryEvents = {
95
- assetCreated: defineEvent('inventory.asset.created', z.object({ assetId: z.uuid(), workspaceId: WorkspaceId })),
96
- assetUpdated: defineEvent('inventory.asset.updated', z.object({ assetId: z.uuid(), workspaceId: WorkspaceId })),
97
- assetArchived: defineEvent('inventory.asset.archived', z.object({ assetId: z.uuid(), workspaceId: WorkspaceId })),
98
- };
99
- /**
100
- * `<module>.<resource>.<action>`, each with the narrowest scope that works and the roles that hold it
101
- * by default. A workspace can add or remove any of them afterwards with a custom role.
102
- */
103
- export const inventoryPermissions = definePermissions([
104
- {
105
- key: 'inventory.asset.view',
106
- label: 'View assets',
107
- scope: 'workspace',
108
- defaultRoles: ['owner', 'admin', 'member', 'guest'],
109
- dangerous: false,
110
- },
111
- {
112
- key: 'inventory.asset.manage',
113
- label: 'Create and edit assets',
114
- scope: 'workspace',
115
- defaultRoles: ['owner', 'admin', 'member'],
116
- dangerous: false,
117
- },
118
- ]);
119
- //# sourceMappingURL=contract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC9G,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;GAMG;AAEH,wGAAwG;AACxG,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAA;AAGtF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,WAAW,EAAE,WAAW;IACxB,yFAAyF;IACzF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,WAAW;IACnB;;;OAGG;IACH,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC7C,wFAAwF;IACxF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAA;AAGF,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;AAEjD,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE;IAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;CACzC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;aACf,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aAC9D,KAAK,CACJ,EAAE,CAAC,MAAM,CAAC;YACR,GAAG,SAAS,CAAC,KAAK;YAClB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YACjC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YAC/B,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE;YAC9B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC3D,CAAC,CACH;aACA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,GAAG,EAAE,YAAY;aACd,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aACxE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aACvC,MAAM,CAAC,KAAK,CAAC;QAChB,MAAM,EAAE,YAAY;aACjB,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aAC/D,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aACxC,MAAM,CAAC,KAAK,CAAC;QAChB,MAAM,EAAE,YAAY;aACjB,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aAC1E,KAAK,CACJ,EAAE,CAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;YACjB,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK;SACpC,CAAC,CACH;aACA,MAAM,CAAC,KAAK,CAAC;QAChB,OAAO,EAAE,YAAY;aAClB,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aACjF,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC5E,MAAM,CAAC,KAAK,CAAC;KACjB;CACF,CAAA;AAGD,8GAA8G;AAC9G,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE,WAAW,CACvB,yBAAyB,EACzB,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAC1D;IACD,YAAY,EAAE,WAAW,CACvB,yBAAyB,EACzB,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAC1D;IACD,aAAa,EAAE,WAAW,CACxB,0BAA0B,EAC1B,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAC1D;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;IACpD;QACE,GAAG,EAAE,sBAAsB;QAC3B,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACnD,SAAS,EAAE,KAAK;KACjB;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC1C,SAAS,EAAE,KAAK;KACjB;CACF,CAAC,CAAA"}