@drhomet/mithaq 0.1.1 → 0.2.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 (120) hide show
  1. package/LICENSES/openstatus-time-picker.txt +21 -0
  2. package/README.md +161 -0
  3. package/dist/asas/build.d.ts +10 -2
  4. package/dist/asas/build.js +69 -22
  5. package/dist/asas/cli/mithaq.js +35 -3
  6. package/dist/asas/cli/upgrade.d.ts +22 -9
  7. package/dist/asas/cli/upgrade.js +187 -78
  8. package/dist/asas/http/fetch.d.ts +21 -3
  9. package/dist/asas/http/fetch.js +123 -60
  10. package/dist/asas/http/orpc.d.ts +5 -3
  11. package/dist/asas/http/orpc.js +126 -108
  12. package/dist/asas/runner/bulk.d.ts +1 -1
  13. package/dist/asas/runner/bulk.js +16 -11
  14. package/dist/asas/runner/errors.d.ts +5 -2
  15. package/dist/asas/runner/errors.js +18 -2
  16. package/dist/asas/runner/read.d.ts +6 -2
  17. package/dist/asas/runner/read.js +28 -6
  18. package/dist/asas/runner/steps.d.ts +22 -4
  19. package/dist/asas/runner/steps.js +15 -9
  20. package/dist/asas/runner/store.d.ts +4 -0
  21. package/dist/asas/runner/store.js +21 -0
  22. package/dist/asas/runner/tenant.d.ts +2 -2
  23. package/dist/asas/runner/tenant.js +78 -16
  24. package/dist/asas/runner/write.d.ts +173 -11
  25. package/dist/asas/runner/write.js +274 -46
  26. package/dist/auth/better-auth/access.d.ts +14 -0
  27. package/dist/auth/better-auth/access.js +32 -0
  28. package/dist/auth/better-auth/generate.d.ts +3 -1
  29. package/dist/auth/better-auth/generate.js +26 -8
  30. package/dist/auth/better-auth/index.d.ts +2 -0
  31. package/dist/auth/better-auth/tenant.d.ts +11 -3
  32. package/dist/auth/better-auth/tenant.js +10 -2
  33. package/dist/auth/local/index.js +5 -3
  34. package/dist/base/fields.d.ts +3 -2
  35. package/dist/base/fields.js +3 -2
  36. package/dist/base/index.d.ts +2 -1
  37. package/dist/base/json-schema.d.ts +7 -0
  38. package/dist/base/json-schema.js +35 -0
  39. package/dist/base/kinds.d.ts +21 -0
  40. package/dist/base/kinds.js +46 -1
  41. package/dist/base/rules.d.ts +4 -4
  42. package/dist/base/rules.js +4 -3
  43. package/dist/drizzle/index.d.ts +9 -139
  44. package/dist/drizzle/index.js +143 -24
  45. package/dist/drizzle/kinds.d.ts +1 -0
  46. package/dist/drizzle/kinds.js +3 -1
  47. package/dist/drizzle/migrate.d.ts +26 -0
  48. package/dist/drizzle/migrate.js +69 -26
  49. package/dist/drizzle/rules.d.ts +1 -1
  50. package/dist/index.d.ts +11 -21
  51. package/dist/index.js +8 -18
  52. package/dist/mithaq/define.d.ts +62 -15
  53. package/dist/mithaq/define.js +23 -9
  54. package/dist/mithaq/generate-messages.js +5 -4
  55. package/dist/mithaq/language.d.ts +43 -4
  56. package/dist/mithaq/message-file.d.ts +13 -0
  57. package/dist/mithaq/message-file.js +29 -0
  58. package/dist/mithaq/messages.js +5 -0
  59. package/dist/mithaq/resolve.js +70 -10
  60. package/dist/mithaq/types.d.ts +29 -1
  61. package/dist/rbac/index.d.ts +2 -2
  62. package/dist/rbac/index.js +1 -1
  63. package/dist/rich-text/index.d.ts +1 -0
  64. package/dist/rich-text/index.js +1 -0
  65. package/dist/rich-text/rich-text.d.ts +2 -55
  66. package/dist/rich-text/rich-text.js +2 -125
  67. package/dist/rich-text/value.d.ts +55 -0
  68. package/dist/rich-text/value.js +126 -0
  69. package/dist/screen/client.d.ts +5 -2
  70. package/dist/screen/client.js +5 -2
  71. package/dist/screen/generate.js +48 -6
  72. package/dist/screen/index.d.ts +18 -1
  73. package/dist/screen/index.js +24 -6
  74. package/dist/screen/react.d.ts +2 -0
  75. package/dist/storage/index.d.ts +2 -3
  76. package/dist/storage/index.js +1 -2
  77. package/dist/storage/storage.d.ts +2 -0
  78. package/dist/storage/storage.js +9 -2
  79. package/dist/targets.d.ts +14 -0
  80. package/dist/targets.js +16 -0
  81. package/dist/vite.d.ts +7 -0
  82. package/dist/vite.js +81 -0
  83. package/dist/zod/index.d.ts +12 -3
  84. package/dist/zod/index.js +6 -5
  85. package/dist/zod/kinds.d.ts +3 -1
  86. package/dist/zod/kinds.js +11 -2
  87. package/dist/zod/rules.d.ts +1 -1
  88. package/docs/packages/mithaq/README.md +962 -0
  89. package/docs/packages/mithaq/src/asas/cli/README.md +252 -0
  90. package/docs/packages/mithaq/src/asas/runner/README.md +472 -0
  91. package/docs/packages/mithaq/src/drizzle/README.md +39 -0
  92. package/docs/packages/mithaq-admin/README.md +312 -0
  93. package/docs/templates/asas/README.md +1056 -0
  94. package/package.json +37 -8
  95. package/skills/add-field/SKILL.md +27 -0
  96. package/skills/add-kayan/SKILL.md +26 -0
  97. package/skills/eject-admin-piece/SKILL.md +28 -0
  98. package/skills/upgrade-mithaq/SKILL.md +35 -0
  99. package/r/mithaq-cells.json +0 -20
  100. package/r/mithaq-controls.json +0 -37
  101. package/r/mithaq-directional-icon.json +0 -15
  102. package/r/mithaq-expected-updated-at.json +0 -15
  103. package/r/mithaq-field-shell.json +0 -18
  104. package/r/mithaq-filter-operators.json +0 -15
  105. package/r/mithaq-form.json +0 -33
  106. package/r/mithaq-list-columns.json +0 -23
  107. package/r/mithaq-list-filters.json +0 -24
  108. package/r/mithaq-list-pagination.json +0 -24
  109. package/r/mithaq-list-query.json +0 -18
  110. package/r/mithaq-list-selection.json +0 -19
  111. package/r/mithaq-list.json +0 -33
  112. package/r/mithaq-nav.json +0 -24
  113. package/r/mithaq-nodes.json +0 -34
  114. package/r/mithaq-relationship-cell.json +0 -20
  115. package/r/mithaq-relationship-control.json +0 -20
  116. package/r/mithaq-rich-text.json +0 -40
  117. package/r/mithaq-screens-host.json +0 -96
  118. package/r/mithaq-storage.json +0 -44
  119. package/r/mithaq-upload.json +0 -29
  120. package/r/registry.json +0 -550
package/r/registry.json DELETED
@@ -1,550 +0,0 @@
1
- {
2
- "$schema": "https://ui.shadcn.com/schema/registry.json",
3
- "name": "mithaq-admin",
4
- "homepage": "https://github.com/drhomet/mithaq",
5
- "items": [
6
- {
7
- "name": "mithaq-controls",
8
- "type": "registry:component",
9
- "title": "Mithaq controls",
10
- "description": "One control per shipped kind, the copy chain a label is resolved through, the contract every control is written to, and the reader that turns a form's held values into an operation's input.",
11
- "registryDependencies": [
12
- "button",
13
- "button-group",
14
- "calendar",
15
- "direction",
16
- "popover",
17
- "combobox",
18
- "input-otp",
19
- "radio-group",
20
- "select",
21
- "slider",
22
- "switch",
23
- "toggle-group",
24
- "checkbox",
25
- "input",
26
- "input-group",
27
- "textarea",
28
- "toggle",
29
- "@mithaq/mithaq-relationship-control",
30
- "@mithaq/mithaq-rich-text",
31
- "@mithaq/mithaq-upload"
32
- ],
33
- "files": [
34
- {
35
- "path": "registry/controls.tsx",
36
- "type": "registry:component",
37
- "target": "@components/mithaq/controls.tsx"
38
- }
39
- ]
40
- },
41
- {
42
- "name": "mithaq-cells",
43
- "type": "registry:component",
44
- "title": "Mithaq cells",
45
- "description": "One table cell per shipped kind, resolved through the same chain a control is.",
46
- "registryDependencies": [
47
- "@mithaq/mithaq-controls",
48
- "@mithaq/mithaq-relationship-cell",
49
- "@mithaq/mithaq-upload"
50
- ],
51
- "files": [
52
- {
53
- "path": "registry/cells.tsx",
54
- "type": "registry:component",
55
- "target": "@components/mithaq/cells.tsx"
56
- }
57
- ]
58
- },
59
- {
60
- "name": "mithaq-filter-operators",
61
- "type": "registry:lib",
62
- "title": "Mithaq filter operators",
63
- "description": "Which operators a kind offers, what shape each operator's value takes, and which paths of a kayan the filter panel may offer.",
64
- "files": [
65
- {
66
- "path": "registry/filter-operators.ts",
67
- "type": "registry:lib",
68
- "target": "@components/mithaq/filter-operators.ts"
69
- }
70
- ]
71
- },
72
- {
73
- "name": "mithaq-list-query",
74
- "type": "registry:lib",
75
- "title": "Mithaq list query",
76
- "description": "The list's URL in Payload's qs form, read against the list with a hostile or unknown filter refused before any request, the find input a page asks with, the per-viewer half remembered in localStorage, and the search term folded into a where.",
77
- "registryDependencies": [
78
- "@mithaq/mithaq-filter-operators"
79
- ],
80
- "files": [
81
- {
82
- "path": "registry/list-query.ts",
83
- "type": "registry:lib",
84
- "target": "@components/mithaq/list-query.ts"
85
- }
86
- ]
87
- },
88
- {
89
- "name": "mithaq-list-filters",
90
- "type": "registry:component",
91
- "title": "Mithaq list filters",
92
- "description": "The where panel: rows of field, operator and value joined by and or or, offered only for a field that declares itself filterable.",
93
- "registryDependencies": [
94
- "button",
95
- "input",
96
- "select",
97
- "@mithaq/mithaq-controls",
98
- "@mithaq/mithaq-filter-operators",
99
- "@mithaq/mithaq-list-query",
100
- "@mithaq/mithaq-relationship-control"
101
- ],
102
- "files": [
103
- {
104
- "path": "registry/list-filters.tsx",
105
- "type": "registry:component",
106
- "target": "@components/mithaq/list-filters.tsx"
107
- }
108
- ]
109
- },
110
- {
111
- "name": "mithaq-list-columns",
112
- "type": "registry:component",
113
- "title": "Mithaq list columns",
114
- "description": "The column popup: two sections, a switch per column and two buttons for order, with a denied or undeclared column absent rather than disabled.",
115
- "registryDependencies": [
116
- "button",
117
- "checkbox",
118
- "label",
119
- "popover",
120
- "@mithaq/mithaq-controls",
121
- "@mithaq/mithaq-list-query"
122
- ],
123
- "files": [
124
- {
125
- "path": "registry/list-columns.tsx",
126
- "type": "registry:component",
127
- "target": "@components/mithaq/list-columns.tsx"
128
- }
129
- ]
130
- },
131
- {
132
- "name": "mithaq-list-pagination",
133
- "type": "registry:component",
134
- "title": "Mithaq list pagination",
135
- "description": "Two arrows, a page input clamped to the page count, the per-page popup and the range line, all off the paginated shape the read answered.",
136
- "registryDependencies": [
137
- "button",
138
- "input",
139
- "label",
140
- "select",
141
- "@mithaq/mithaq-controls",
142
- "@mithaq/mithaq-directional-icon",
143
- "@mithaq/mithaq-list-query"
144
- ],
145
- "files": [
146
- {
147
- "path": "registry/list-pagination.tsx",
148
- "type": "registry:component",
149
- "target": "@components/mithaq/list-pagination.tsx"
150
- }
151
- ]
152
- },
153
- {
154
- "name": "mithaq-list-selection",
155
- "type": "registry:component",
156
- "title": "Mithaq list selection",
157
- "description": "The selection a list's bulk buttons run over: the head checkbox, one per row, and the fields a bulk update may write, which are the ones a person could edit on a row.",
158
- "registryDependencies": [
159
- "checkbox",
160
- "@mithaq/mithaq-controls"
161
- ],
162
- "files": [
163
- {
164
- "path": "registry/list-selection.tsx",
165
- "type": "registry:component",
166
- "target": "@components/mithaq/list-selection.tsx"
167
- }
168
- ]
169
- },
170
- {
171
- "name": "mithaq-list",
172
- "type": "registry:component",
173
- "title": "Mithaq list",
174
- "description": "The list screen over a kayan's find, with search, filters, columns, sort, page and limit driven by one callback and every destination a prop, each row opening its record and carrying a menu of Edit, Delete and the list node's row buttons, a row button offered where its when holds over that row, and the toolbar and bulk buttons.",
175
- "registryDependencies": [
176
- "button",
177
- "card",
178
- "dropdown-menu",
179
- "input",
180
- "table",
181
- "@mithaq/mithaq-cells",
182
- "@mithaq/mithaq-controls",
183
- "@mithaq/mithaq-filter-operators",
184
- "@mithaq/mithaq-form",
185
- "@mithaq/mithaq-list-columns",
186
- "@mithaq/mithaq-list-filters",
187
- "@mithaq/mithaq-list-pagination",
188
- "@mithaq/mithaq-list-query",
189
- "@mithaq/mithaq-list-selection",
190
- "@mithaq/mithaq-nodes",
191
- "@mithaq/mithaq-relationship-cell"
192
- ],
193
- "files": [
194
- {
195
- "path": "registry/list.tsx",
196
- "type": "registry:component",
197
- "target": "@components/mithaq/list.tsx"
198
- }
199
- ]
200
- },
201
- {
202
- "name": "mithaq-nodes",
203
- "type": "registry:component",
204
- "title": "Mithaq nodes",
205
- "description": "The node tree both forms draw, a screen's page and the admin's layout alike, the frame a record opens in over the list, the adapter from a screen's kayan, and one props type per place a screen names a component.",
206
- "registryDependencies": [
207
- "accordion",
208
- "alert-dialog",
209
- "badge",
210
- "button",
211
- "card",
212
- "collapsible",
213
- "dialog",
214
- "drawer",
215
- "resizable",
216
- "scroll-area",
217
- "select",
218
- "separator",
219
- "sheet",
220
- "tabs",
221
- "@mithaq/mithaq-controls",
222
- "@mithaq/mithaq-field-shell",
223
- "@mithaq/mithaq-relationship-control"
224
- ],
225
- "files": [
226
- {
227
- "path": "registry/nodes.tsx",
228
- "type": "registry:component",
229
- "target": "@components/mithaq/nodes.tsx"
230
- }
231
- ]
232
- },
233
- {
234
- "name": "mithaq-form",
235
- "type": "registry:component",
236
- "title": "Mithaq form",
237
- "description": "The form screen over a kayan's create, update and delete, holding its values in TanStack Form: it walks a screen's page, checks the rules the projection carries before any request, sends only the fields that changed on an update, and renders a refusal by the key the server sent.",
238
- "dependencies": [
239
- "@tanstack/react-form"
240
- ],
241
- "registryDependencies": [
242
- "alert-dialog",
243
- "badge",
244
- "button",
245
- "card",
246
- "spinner",
247
- "toggle-group",
248
- "@mithaq/mithaq-cells",
249
- "@mithaq/mithaq-controls",
250
- "@mithaq/mithaq-field-shell",
251
- "@mithaq/mithaq-nodes",
252
- "@mithaq/mithaq-relationship-cell",
253
- "@mithaq/mithaq-rich-text",
254
- "@mithaq/mithaq-upload"
255
- ],
256
- "files": [
257
- {
258
- "path": "registry/form.tsx",
259
- "type": "registry:component",
260
- "target": "@components/mithaq/form.tsx"
261
- }
262
- ]
263
- },
264
- {
265
- "name": "mithaq-nav",
266
- "type": "registry:component",
267
- "title": "Mithaq nav",
268
- "description": "The admin's app shell: the inset sidebar with the organization switcher, the kayan index the access report allows, the user menu, and the header with the sidebar trigger and the theme toggle.",
269
- "registryDependencies": [
270
- "avatar",
271
- "button",
272
- "dropdown-menu",
273
- "separator",
274
- "sheet",
275
- "sidebar",
276
- "@mithaq/mithaq-controls"
277
- ],
278
- "files": [
279
- {
280
- "path": "registry/nav.tsx",
281
- "type": "registry:component",
282
- "target": "@components/mithaq/nav.tsx"
283
- }
284
- ]
285
- },
286
- {
287
- "name": "mithaq-field-shell",
288
- "type": "registry:component",
289
- "title": "Mithaq field shell",
290
- "description": "The label, description and refusal around one control, with htmlFor and aria-describedby wired, and the checkbox's label beside its box.",
291
- "registryDependencies": [
292
- "field"
293
- ],
294
- "files": [
295
- {
296
- "path": "registry/field-shell.tsx",
297
- "type": "registry:component",
298
- "target": "@components/mithaq/field-shell.tsx"
299
- }
300
- ]
301
- },
302
- {
303
- "name": "mithaq-relationship-control",
304
- "type": "registry:component",
305
- "title": "Mithaq relationship control",
306
- "description": "The picker for a relationship field: a debounced search over the target kayan's own find, paged on scroll, with the selected row hydrated by one read.",
307
- "registryDependencies": [
308
- "combobox",
309
- "spinner",
310
- "@mithaq/mithaq-controls"
311
- ],
312
- "files": [
313
- {
314
- "path": "registry/relationship-control.tsx",
315
- "type": "registry:component",
316
- "target": "@components/mithaq/relationship-control.tsx"
317
- }
318
- ]
319
- },
320
- {
321
- "name": "mithaq-relationship-cell",
322
- "type": "registry:component",
323
- "title": "Mithaq relationship cell",
324
- "description": "Every relationship id on a page named by one read per target, in three states: loading, the related row's title, and the id where the read did not answer.",
325
- "registryDependencies": [
326
- "@mithaq/mithaq-cells",
327
- "@mithaq/mithaq-controls",
328
- "@mithaq/mithaq-relationship-control"
329
- ],
330
- "files": [
331
- {
332
- "path": "registry/relationship-cell.tsx",
333
- "type": "registry:component",
334
- "target": "@components/mithaq/relationship-cell.tsx"
335
- }
336
- ]
337
- },
338
- {
339
- "name": "mithaq-rich-text",
340
- "type": "registry:component",
341
- "title": "Mithaq rich text",
342
- "description": "The richText kind's control and read view: a Lexical editor with history, block formats, text formats, links, alignment, a divider and the / menu, written in the page's direction, and its viewer, both over the nodes and picks a screen provides, and both drawing a stored value whose node they cannot mount as its words, read-only, with the reason in the viewer's language; and the node list itself, which the server reads with too.",
343
- "dependencies": [
344
- "lexical@0.52.0",
345
- "@lexical/extension@0.52.0",
346
- "@lexical/link@0.52.0",
347
- "@lexical/list@0.52.0",
348
- "@lexical/react@0.52.0",
349
- "@lexical/rich-text@0.52.0",
350
- "@lexical/selection@0.52.0",
351
- "@lexical/utils@0.52.0"
352
- ],
353
- "registryDependencies": [
354
- "button",
355
- "button-group",
356
- "direction",
357
- "dropdown-menu",
358
- "input",
359
- "toggle",
360
- "@mithaq/mithaq-controls"
361
- ],
362
- "files": [
363
- {
364
- "path": "registry/rich-text.tsx",
365
- "type": "registry:component",
366
- "target": "@components/mithaq/rich-text.tsx"
367
- },
368
- {
369
- "path": "registry/rich-text-nodes.ts",
370
- "type": "registry:lib",
371
- "target": "@components/mithaq/rich-text-nodes.ts"
372
- }
373
- ]
374
- },
375
- {
376
- "name": "mithaq-upload",
377
- "type": "registry:component",
378
- "title": "Mithaq upload",
379
- "description": "The upload kind's control, cell and read view: a file drawn by its thumbnail or its name, chosen through the relationship's picker or uploaded in place with its progress, the server's refusal and a retry, a set as a grid moved and removed by keyboard; and the opt-in rich text upload node's view, its / menu pick and the dialog that inserts it.",
380
- "dependencies": [
381
- "lexical@0.52.0",
382
- "@lexical/react@0.52.0",
383
- "@lexical/utils@0.52.0"
384
- ],
385
- "registryDependencies": [
386
- "button",
387
- "dialog",
388
- "@mithaq/mithaq-controls",
389
- "@mithaq/mithaq-field-shell",
390
- "@mithaq/mithaq-relationship-cell",
391
- "@mithaq/mithaq-relationship-control",
392
- "@mithaq/mithaq-rich-text"
393
- ],
394
- "files": [
395
- {
396
- "path": "registry/upload.tsx",
397
- "type": "registry:component",
398
- "target": "@components/mithaq/upload.tsx"
399
- }
400
- ]
401
- },
402
- {
403
- "name": "mithaq-screens-host",
404
- "type": "registry:item",
405
- "title": "Mithaq screens host",
406
- "description": "What a TanStack Start app draws every screen with: the server functions that resolve the actor, the access report and the screen, the frame and the page each generated route file hands its screen's glob to, the list read through TanStack Query off its qs URL, the form's landing after a save and its guard on leaving with a change, the fetch plug's client, the /unauthorized route, the public landing page at /, the language switch its header and the app's auth pages draw, and the frame, boxes and password toggle those auth pages share. Nothing in it names a screen; `mithaq generate screens` writes each screen's glob and route files beside it. What it imports from the app, which no item writes: `localeOf`, `locales`, `refusalKey` and the type `Locale` from `src/copy.ts`; `wanted` from `src/redirect.ts`; `useCopy` from `src/routes/__root.tsx`, whose route context names the app's own copy key as `app`; the project as the package `asas`; `@/components/mithaq/form`, which the form item writes. The app's `createRouter` spreads `flatSearch` from `src/screen-list.tsx`, so the router reads and writes the list's URL pairs as strings.",
407
- "dependencies": [
408
- "@tanstack/react-query",
409
- "@tanstack/react-router",
410
- "@tanstack/react-start"
411
- ],
412
- "registryDependencies": [
413
- "button",
414
- "card",
415
- "input",
416
- "input-group",
417
- "@mithaq/mithaq-field-shell",
418
- "@mithaq/mithaq-nodes",
419
- "@mithaq/mithaq-list",
420
- "@mithaq/mithaq-nav"
421
- ],
422
- "files": [
423
- {
424
- "path": "registry/host/screens.tsx",
425
- "type": "registry:file",
426
- "target": "~/src/screens.tsx"
427
- },
428
- {
429
- "path": "registry/host/screen-form.tsx",
430
- "type": "registry:file",
431
- "target": "~/src/screen-form.tsx"
432
- },
433
- {
434
- "path": "registry/host/screen-list.tsx",
435
- "type": "registry:file",
436
- "target": "~/src/screen-list.tsx"
437
- },
438
- {
439
- "path": "registry/host/api.ts",
440
- "type": "registry:file",
441
- "target": "~/src/api.ts"
442
- },
443
- {
444
- "path": "registry/host/slide.ts",
445
- "type": "registry:file",
446
- "target": "~/src/slide.ts"
447
- },
448
- {
449
- "path": "registry/host/screen-names.ts",
450
- "type": "registry:file",
451
- "target": "~/src/screen-names.ts"
452
- },
453
- {
454
- "path": "registry/host/unauthorized.tsx",
455
- "type": "registry:file",
456
- "target": "~/src/routes/unauthorized.tsx"
457
- },
458
- {
459
- "path": "registry/host/index.tsx",
460
- "type": "registry:file",
461
- "target": "~/src/routes/index.tsx"
462
- },
463
- {
464
- "path": "registry/host/locale-switch.tsx",
465
- "type": "registry:file",
466
- "target": "~/src/locale-switch.tsx"
467
- },
468
- {
469
- "path": "registry/host/auth-frame.tsx",
470
- "type": "registry:file",
471
- "target": "~/src/auth-frame.tsx"
472
- },
473
- {
474
- "path": "registry/host/links.ts",
475
- "type": "registry:file",
476
- "target": "~/src/links.ts"
477
- },
478
- {
479
- "path": "registry/host/request-headers.ts",
480
- "type": "registry:file",
481
- "target": "~/src/request-headers.ts"
482
- }
483
- ]
484
- },
485
- {
486
- "name": "mithaq-storage",
487
- "type": "registry:lib",
488
- "title": "Mithaq storage",
489
- "description": "The storage adapters a project owns, S3 with an R2 preset, UploadThing for reading and deleting files already there, and a local folder, and the eight functions the storage rukn's config names: the object key, the verification of a stored file, its disposition, the sweep of orphans, and the upload flow's instructions, create step, delete step and file route.",
490
- "dependencies": [
491
- "aws4fetch@1.0.20",
492
- "file-type@22.0.1",
493
- "image-dimensions@2.5.1"
494
- ],
495
- "files": [
496
- {
497
- "path": "registry/storage/s3.ts",
498
- "type": "registry:lib",
499
- "target": "~/src/storage/s3.ts"
500
- },
501
- {
502
- "path": "registry/storage/r2.ts",
503
- "type": "registry:lib",
504
- "target": "~/src/storage/r2.ts"
505
- },
506
- {
507
- "path": "registry/storage/uploadthing.ts",
508
- "type": "registry:lib",
509
- "target": "~/src/storage/uploadthing.ts"
510
- },
511
- {
512
- "path": "registry/storage/local.ts",
513
- "type": "registry:lib",
514
- "target": "~/src/storage/local.ts"
515
- },
516
- {
517
- "path": "registry/storage/defaults.ts",
518
- "type": "registry:lib",
519
- "target": "~/src/storage/defaults.ts"
520
- }
521
- ]
522
- },
523
- {
524
- "name": "mithaq-expected-updated-at",
525
- "type": "registry:lib",
526
- "title": "Mithaq expectedUpdatedAt step",
527
- "description": "A write step that refuses an update with a 409 when the row's updatedAt is not the instant the caller read, compared against the row the runner locked inside the update's transaction. A kayan adds it by widening its update input with an expectedUpdatedAt and listing the step before the store step.",
528
- "files": [
529
- {
530
- "path": "registry/steps/expected-updated-at.ts",
531
- "type": "registry:lib",
532
- "target": "~/src/steps/expected-updated-at.ts"
533
- }
534
- ]
535
- },
536
- {
537
- "name": "mithaq-directional-icon",
538
- "type": "registry:ui",
539
- "title": "Mithaq directional icon",
540
- "description": "A wrapper that mirrors the icon inside it in a right-to-left page, so the pager's chevrons point the way the page reads. No shadcn registry serves it under a bare name, so this registry ships it.",
541
- "files": [
542
- {
543
- "path": "registry/ui/directional-icon.tsx",
544
- "type": "registry:ui",
545
- "target": "@components/ui/directional-icon.tsx"
546
- }
547
- ]
548
- }
549
- ]
550
- }