@azurioh/discord-kernel 0.1.0 → 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 (529) hide show
  1. package/README.md +318 -1
  2. package/dist/authz/require-level-guard.d.ts +1 -1
  3. package/dist/authz/require-level-guard.d.ts.map +1 -1
  4. package/dist/color.d.ts +42 -0
  5. package/dist/color.d.ts.map +1 -0
  6. package/dist/color.js +130 -0
  7. package/dist/color.js.map +1 -0
  8. package/dist/discord/command/all-required.d.ts +8 -0
  9. package/dist/discord/command/all-required.d.ts.map +1 -0
  10. package/dist/discord/command/all-required.js +12 -0
  11. package/dist/discord/command/all-required.js.map +1 -0
  12. package/dist/discord/command/autocomplete-dispatcher.d.ts.map +1 -1
  13. package/dist/discord/command/autocomplete-dispatcher.js +2 -1
  14. package/dist/discord/command/autocomplete-dispatcher.js.map +1 -1
  15. package/dist/discord/command/autocomplete-limits.d.ts +3 -0
  16. package/dist/discord/command/autocomplete-limits.d.ts.map +1 -0
  17. package/dist/discord/command/autocomplete-limits.js +6 -0
  18. package/dist/discord/command/autocomplete-limits.js.map +1 -0
  19. package/dist/discord/command/autocomplete.d.ts +6 -1
  20. package/dist/discord/command/autocomplete.d.ts.map +1 -1
  21. package/dist/discord/command/autocomplete.js +6 -6
  22. package/dist/discord/command/autocomplete.js.map +1 -1
  23. package/dist/discord/command/command-responders.d.ts +26 -0
  24. package/dist/discord/command/command-responders.d.ts.map +1 -0
  25. package/dist/discord/command/command-responders.js +16 -0
  26. package/dist/discord/command/command-responders.js.map +1 -0
  27. package/dist/discord/command/context.d.ts +8 -17
  28. package/dist/discord/command/context.d.ts.map +1 -1
  29. package/dist/discord/command/context.js +8 -37
  30. package/dist/discord/command/context.js.map +1 -1
  31. package/dist/discord/command/cooldown-guard.d.ts +1 -1
  32. package/dist/discord/command/cooldown-guard.d.ts.map +1 -1
  33. package/dist/discord/command/create-command.d.ts +1 -8
  34. package/dist/discord/command/create-command.d.ts.map +1 -1
  35. package/dist/discord/command/create-command.js +17 -65
  36. package/dist/discord/command/create-command.js.map +1 -1
  37. package/dist/discord/command/create-context-menu-command.d.ts +3 -9
  38. package/dist/discord/command/create-context-menu-command.d.ts.map +1 -1
  39. package/dist/discord/command/create-context-menu-command.js +14 -65
  40. package/dist/discord/command/create-context-menu-command.js.map +1 -1
  41. package/dist/discord/command/errors.d.ts +1 -1
  42. package/dist/discord/command/errors.d.ts.map +1 -1
  43. package/dist/discord/command/errors.js +2 -2
  44. package/dist/discord/command/errors.js.map +1 -1
  45. package/dist/discord/command/guard.d.ts +15 -8
  46. package/dist/discord/command/guard.d.ts.map +1 -1
  47. package/dist/discord/command/guard.js +4 -4
  48. package/dist/discord/command/guard.js.map +1 -1
  49. package/dist/discord/command/options.d.ts +1 -10
  50. package/dist/discord/command/options.d.ts.map +1 -1
  51. package/dist/discord/command/options.js +127 -320
  52. package/dist/discord/command/options.js.map +1 -1
  53. package/dist/discord/command/passes-guard.d.ts +14 -0
  54. package/dist/discord/command/passes-guard.d.ts.map +1 -0
  55. package/dist/discord/command/passes-guard.js +27 -0
  56. package/dist/discord/command/passes-guard.js.map +1 -0
  57. package/dist/discord/command/permission-guard.d.ts +1 -1
  58. package/dist/discord/command/permission-guard.d.ts.map +1 -1
  59. package/dist/discord/command/render-command-failure.d.ts +23 -0
  60. package/dist/discord/command/render-command-failure.d.ts.map +1 -0
  61. package/dist/discord/command/render-command-failure.js +40 -0
  62. package/dist/discord/command/render-command-failure.js.map +1 -0
  63. package/dist/discord/command/route-key.d.ts +8 -0
  64. package/dist/discord/command/route-key.d.ts.map +1 -0
  65. package/dist/discord/command/route-key.js +13 -0
  66. package/dist/discord/command/route-key.js.map +1 -0
  67. package/dist/discord/command/router.d.ts +32 -7
  68. package/dist/discord/command/router.d.ts.map +1 -1
  69. package/dist/discord/command/router.js +48 -10
  70. package/dist/discord/command/router.js.map +1 -1
  71. package/dist/discord/command/send-embed.d.ts +14 -0
  72. package/dist/discord/command/send-embed.d.ts.map +1 -0
  73. package/dist/discord/command/send-embed.js +37 -0
  74. package/dist/discord/command/send-embed.js.map +1 -0
  75. package/dist/discord/command/types.d.ts +7 -1
  76. package/dist/discord/command/types.d.ts.map +1 -1
  77. package/dist/discord/components/component-access.d.ts +12 -0
  78. package/dist/discord/components/component-access.d.ts.map +1 -0
  79. package/dist/discord/components/component-access.js +21 -0
  80. package/dist/discord/components/component-access.js.map +1 -0
  81. package/dist/discord/components/component-router.d.ts +37 -15
  82. package/dist/discord/components/component-router.d.ts.map +1 -1
  83. package/dist/discord/components/component-router.js +44 -32
  84. package/dist/discord/components/component-router.js.map +1 -1
  85. package/dist/discord/components/interactive-message/index.d.ts +3 -1
  86. package/dist/discord/components/interactive-message/index.d.ts.map +1 -1
  87. package/dist/discord/components/interactive-message/index.js +5 -3
  88. package/dist/discord/components/interactive-message/index.js.map +1 -1
  89. package/dist/discord/components/interactive-message/interactive-message-collector.d.ts +3 -28
  90. package/dist/discord/components/interactive-message/interactive-message-collector.d.ts.map +1 -1
  91. package/dist/discord/components/interactive-message/interactive-message-collector.js +6 -53
  92. package/dist/discord/components/interactive-message/interactive-message-collector.js.map +1 -1
  93. package/dist/discord/components/interactive-message/message-edit-options.d.ts +18 -0
  94. package/dist/discord/components/interactive-message/message-edit-options.d.ts.map +1 -0
  95. package/dist/discord/components/interactive-message/message-edit-options.js +40 -0
  96. package/dist/discord/components/interactive-message/message-edit-options.js.map +1 -0
  97. package/dist/discord/components/interactive-message/mount-interactive-message.d.ts +2 -1
  98. package/dist/discord/components/interactive-message/mount-interactive-message.d.ts.map +1 -1
  99. package/dist/discord/components/interactive-message/mount-interactive-message.js +4 -2
  100. package/dist/discord/components/interactive-message/mount-interactive-message.js.map +1 -1
  101. package/dist/discord/components/interactive-message/state-store.d.ts +12 -0
  102. package/dist/discord/components/interactive-message/state-store.d.ts.map +1 -0
  103. package/dist/discord/components/interactive-message/state-store.js +14 -0
  104. package/dist/discord/components/interactive-message/state-store.js.map +1 -0
  105. package/dist/discord/components/paginator/mount-paginator.js +7 -5
  106. package/dist/discord/components/paginator/mount-paginator.js.map +1 -1
  107. package/dist/discord/components/paginator/paginator-view.d.ts +1 -1
  108. package/dist/discord/components/paginator/paginator-view.d.ts.map +1 -1
  109. package/dist/discord/components/persistent-paginator.d.ts +1 -1
  110. package/dist/discord/components/persistent-paginator.d.ts.map +1 -1
  111. package/dist/discord/components/persistent-paginator.js +6 -6
  112. package/dist/discord/components/persistent-paginator.js.map +1 -1
  113. package/dist/discord/components/settings-editor/from-declaration-controls.d.ts +67 -0
  114. package/dist/discord/components/settings-editor/from-declaration-controls.d.ts.map +1 -0
  115. package/dist/discord/components/settings-editor/from-declaration-controls.js +245 -0
  116. package/dist/discord/components/settings-editor/from-declaration-controls.js.map +1 -0
  117. package/dist/discord/components/settings-editor/from-declaration-display.d.ts +23 -0
  118. package/dist/discord/components/settings-editor/from-declaration-display.d.ts.map +1 -0
  119. package/dist/discord/components/settings-editor/from-declaration-display.js +114 -0
  120. package/dist/discord/components/settings-editor/from-declaration-display.js.map +1 -0
  121. package/dist/discord/components/settings-editor/from-declaration-layout.d.ts +33 -0
  122. package/dist/discord/components/settings-editor/from-declaration-layout.d.ts.map +1 -0
  123. package/dist/discord/components/settings-editor/from-declaration-layout.js +178 -0
  124. package/dist/discord/components/settings-editor/from-declaration-layout.js.map +1 -0
  125. package/dist/discord/components/settings-editor/from-declaration-search.d.ts +27 -0
  126. package/dist/discord/components/settings-editor/from-declaration-search.d.ts.map +1 -0
  127. package/dist/discord/components/settings-editor/from-declaration-search.js +58 -0
  128. package/dist/discord/components/settings-editor/from-declaration-search.js.map +1 -0
  129. package/dist/discord/components/settings-editor/from-declaration-stored.d.ts +21 -0
  130. package/dist/discord/components/settings-editor/from-declaration-stored.d.ts.map +1 -0
  131. package/dist/discord/components/settings-editor/from-declaration-stored.js +37 -0
  132. package/dist/discord/components/settings-editor/from-declaration-stored.js.map +1 -0
  133. package/dist/discord/components/settings-editor/from-declaration-subject.d.ts +32 -0
  134. package/dist/discord/components/settings-editor/from-declaration-subject.d.ts.map +1 -0
  135. package/dist/discord/components/settings-editor/from-declaration-subject.js +65 -0
  136. package/dist/discord/components/settings-editor/from-declaration-subject.js.map +1 -0
  137. package/dist/discord/components/settings-editor/from-declaration-values.d.ts +57 -0
  138. package/dist/discord/components/settings-editor/from-declaration-values.d.ts.map +1 -0
  139. package/dist/discord/components/settings-editor/from-declaration-values.js +187 -0
  140. package/dist/discord/components/settings-editor/from-declaration-values.js.map +1 -0
  141. package/dist/discord/components/settings-editor/from-declaration.d.ts +39 -0
  142. package/dist/discord/components/settings-editor/from-declaration.d.ts.map +1 -0
  143. package/dist/discord/components/settings-editor/from-declaration.js +132 -0
  144. package/dist/discord/components/settings-editor/from-declaration.js.map +1 -0
  145. package/dist/discord/components/settings-editor/index.d.ts +3 -1
  146. package/dist/discord/components/settings-editor/index.d.ts.map +1 -1
  147. package/dist/discord/components/settings-editor/index.js +6 -3
  148. package/dist/discord/components/settings-editor/index.js.map +1 -1
  149. package/dist/discord/components/settings-editor/mount-settings-editor.d.ts +16 -2
  150. package/dist/discord/components/settings-editor/mount-settings-editor.d.ts.map +1 -1
  151. package/dist/discord/components/settings-editor/mount-settings-editor.js +14 -10
  152. package/dist/discord/components/settings-editor/mount-settings-editor.js.map +1 -1
  153. package/dist/discord/components/settings-editor/navigation.d.ts +20 -0
  154. package/dist/discord/components/settings-editor/navigation.d.ts.map +1 -1
  155. package/dist/discord/components/settings-editor/navigation.js +22 -0
  156. package/dist/discord/components/settings-editor/navigation.js.map +1 -1
  157. package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts +4 -3
  158. package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts.map +1 -1
  159. package/dist/discord/components/settings-editor/settings-editor-card.view.js +60 -34
  160. package/dist/discord/components/settings-editor/settings-editor-card.view.js.map +1 -1
  161. package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts +2 -1
  162. package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts.map +1 -1
  163. package/dist/discord/components/settings-editor/settings-editor-field-modal.js +48 -72
  164. package/dist/discord/components/settings-editor/settings-editor-field-modal.js.map +1 -1
  165. package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts +6 -0
  166. package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts.map +1 -0
  167. package/dist/discord/components/settings-editor/settings-editor-field-values.js +13 -0
  168. package/dist/discord/components/settings-editor/settings-editor-field-values.js.map +1 -0
  169. package/dist/discord/components/settings-editor/settings-editor-fields.d.ts +6 -5
  170. package/dist/discord/components/settings-editor/settings-editor-fields.d.ts.map +1 -1
  171. package/dist/discord/components/settings-editor/settings-editor-fields.js +0 -10
  172. package/dist/discord/components/settings-editor/settings-editor-fields.js.map +1 -1
  173. package/dist/discord/components/settings-editor/settings-editor.view.d.ts +3 -2
  174. package/dist/discord/components/settings-editor/settings-editor.view.d.ts.map +1 -1
  175. package/dist/discord/components/settings-editor/settings-editor.view.js +4 -21
  176. package/dist/discord/components/settings-editor/settings-editor.view.js.map +1 -1
  177. package/dist/discord/events/event-guild-id.d.ts +10 -0
  178. package/dist/discord/events/event-guild-id.d.ts.map +1 -0
  179. package/dist/discord/events/event-guild-id.js +37 -0
  180. package/dist/discord/events/event-guild-id.js.map +1 -0
  181. package/dist/discord/events/event-router.d.ts +17 -3
  182. package/dist/discord/events/event-router.d.ts.map +1 -1
  183. package/dist/discord/events/event-router.js +33 -9
  184. package/dist/discord/events/event-router.js.map +1 -1
  185. package/dist/discord/i18n.d.ts +17 -2
  186. package/dist/discord/i18n.d.ts.map +1 -1
  187. package/dist/discord/i18n.js +43 -6
  188. package/dist/discord/i18n.js.map +1 -1
  189. package/dist/discord/interaction/interaction-locale.d.ts +14 -0
  190. package/dist/discord/interaction/interaction-locale.d.ts.map +1 -0
  191. package/dist/discord/interaction/interaction-locale.js +12 -0
  192. package/dist/discord/interaction/interaction-locale.js.map +1 -0
  193. package/dist/discord/interaction/locale-resolver.d.ts +27 -0
  194. package/dist/discord/interaction/locale-resolver.d.ts.map +1 -0
  195. package/dist/discord/interaction/locale-resolver.js +3 -0
  196. package/dist/discord/interaction/locale-resolver.js.map +1 -0
  197. package/dist/discord/interaction/modal.d.ts.map +1 -1
  198. package/dist/discord/interaction/modal.js +5 -40
  199. package/dist/discord/interaction/modal.js.map +1 -1
  200. package/dist/discord/interaction/reply-locale.d.ts +18 -0
  201. package/dist/discord/interaction/reply-locale.d.ts.map +1 -0
  202. package/dist/discord/interaction/reply-locale.js +25 -0
  203. package/dist/discord/interaction/reply-locale.js.map +1 -0
  204. package/dist/discord/interaction/select-bounds.d.ts +19 -0
  205. package/dist/discord/interaction/select-bounds.d.ts.map +1 -0
  206. package/dist/discord/interaction/select-bounds.js +17 -0
  207. package/dist/discord/interaction/select-bounds.js.map +1 -0
  208. package/dist/discord/interaction/select-menu.d.ts.map +1 -1
  209. package/dist/discord/interaction/select-menu.js +2 -9
  210. package/dist/discord/interaction/select-menu.js.map +1 -1
  211. package/dist/discord/placeholder-registry.d.ts +1 -1
  212. package/dist/discord/placeholder-registry.d.ts.map +1 -1
  213. package/dist/discord/presenter.d.ts +1 -1
  214. package/dist/discord/presenter.d.ts.map +1 -1
  215. package/dist/discord/settings/discord-guild-directory.d.ts +28 -0
  216. package/dist/discord/settings/discord-guild-directory.d.ts.map +1 -0
  217. package/dist/discord/settings/discord-guild-directory.js +171 -0
  218. package/dist/discord/settings/discord-guild-directory.js.map +1 -0
  219. package/dist/discord/settings/guild-locale-resolver.d.ts +25 -0
  220. package/dist/discord/settings/guild-locale-resolver.d.ts.map +1 -0
  221. package/dist/discord/settings/guild-locale-resolver.js +33 -0
  222. package/dist/discord/settings/guild-locale-resolver.js.map +1 -0
  223. package/dist/discord/settings/is-module-disabled.d.ts +16 -0
  224. package/dist/discord/settings/is-module-disabled.d.ts.map +1 -0
  225. package/dist/discord/settings/is-module-disabled.js +20 -0
  226. package/dist/discord/settings/is-module-disabled.js.map +1 -0
  227. package/dist/discord/settings/module-disabled-embed.d.ts +13 -0
  228. package/dist/discord/settings/module-disabled-embed.d.ts.map +1 -0
  229. package/dist/discord/settings/module-disabled-embed.js +16 -0
  230. package/dist/discord/settings/module-disabled-embed.js.map +1 -0
  231. package/dist/discord/settings/require-configured.d.ts +26 -0
  232. package/dist/discord/settings/require-configured.d.ts.map +1 -0
  233. package/dist/discord/settings/require-configured.js +62 -0
  234. package/dist/discord/settings/require-configured.js.map +1 -0
  235. package/dist/discord/ui/color-aliases.d.ts +31 -0
  236. package/dist/discord/ui/color-aliases.d.ts.map +1 -0
  237. package/dist/discord/ui/color-aliases.js +66 -0
  238. package/dist/discord/ui/color-aliases.js.map +1 -0
  239. package/dist/discord/ui/color-input.d.ts +5 -32
  240. package/dist/discord/ui/color-input.d.ts.map +1 -1
  241. package/dist/discord/ui/color-input.js +8 -157
  242. package/dist/discord/ui/color-input.js.map +1 -1
  243. package/dist/discord/ui/colors.d.ts +0 -2
  244. package/dist/discord/ui/colors.d.ts.map +1 -1
  245. package/dist/discord/ui/colors.js +4 -5
  246. package/dist/discord/ui/colors.js.map +1 -1
  247. package/dist/discord/ui/embed.d.ts.map +1 -1
  248. package/dist/discord/ui/embed.js +3 -8
  249. package/dist/discord/ui/embed.js.map +1 -1
  250. package/dist/discord/ui/truncate-text.d.ts +11 -0
  251. package/dist/discord/ui/truncate-text.d.ts.map +1 -0
  252. package/dist/discord/ui/truncate-text.js +19 -0
  253. package/dist/discord/ui/truncate-text.js.map +1 -0
  254. package/dist/errors/error-message.d.ts +9 -0
  255. package/dist/errors/error-message.d.ts.map +1 -0
  256. package/dist/errors/error-message.js +14 -0
  257. package/dist/errors/error-message.js.map +1 -0
  258. package/dist/i18n/business-message.d.ts +1 -1
  259. package/dist/i18n/business-message.d.ts.map +1 -1
  260. package/dist/i18n/catalog.d.ts +9 -0
  261. package/dist/i18n/catalog.d.ts.map +1 -1
  262. package/dist/i18n/catalog.js +4 -0
  263. package/dist/i18n/catalog.js.map +1 -1
  264. package/dist/i18n/locale.d.ts +2 -0
  265. package/dist/i18n/locale.d.ts.map +1 -1
  266. package/dist/i18n/locale.js +3 -1
  267. package/dist/i18n/locale.js.map +1 -1
  268. package/dist/i18n/translator.d.ts +2 -0
  269. package/dist/i18n/translator.d.ts.map +1 -1
  270. package/dist/i18n/translator.js.map +1 -1
  271. package/dist/module/module.d.ts +15 -1
  272. package/dist/module/module.d.ts.map +1 -1
  273. package/dist/resilience/retry.js +2 -2
  274. package/dist/resilience/retry.js.map +1 -1
  275. package/dist/scheduler/scheduler.d.ts.map +1 -1
  276. package/dist/scheduler/scheduler.js +2 -4
  277. package/dist/scheduler/scheduler.js.map +1 -1
  278. package/dist/settings/cache.d.ts +29 -0
  279. package/dist/settings/cache.d.ts.map +1 -0
  280. package/dist/settings/cache.js +47 -0
  281. package/dist/settings/cache.js.map +1 -0
  282. package/dist/settings/choice.d.ts +10 -0
  283. package/dist/settings/choice.d.ts.map +1 -0
  284. package/dist/settings/choice.js +3 -0
  285. package/dist/settings/choice.js.map +1 -0
  286. package/dist/settings/decode-stored.d.ts +20 -0
  287. package/dist/settings/decode-stored.d.ts.map +1 -0
  288. package/dist/settings/decode-stored.js +35 -0
  289. package/dist/settings/decode-stored.js.map +1 -0
  290. package/dist/settings/define-settings.d.ts +52 -0
  291. package/dist/settings/define-settings.d.ts.map +1 -0
  292. package/dist/settings/define-settings.js +141 -0
  293. package/dist/settings/define-settings.js.map +1 -0
  294. package/dist/settings/describe-field.d.ts +19 -0
  295. package/dist/settings/describe-field.d.ts.map +1 -0
  296. package/dist/settings/describe-field.js +131 -0
  297. package/dist/settings/describe-field.js.map +1 -0
  298. package/dist/settings/describe.d.ts +27 -0
  299. package/dist/settings/describe.d.ts.map +1 -0
  300. package/dist/settings/describe.js +62 -0
  301. package/dist/settings/describe.js.map +1 -0
  302. package/dist/settings/duration.d.ts +16 -0
  303. package/dist/settings/duration.d.ts.map +1 -0
  304. package/dist/settings/duration.js +56 -0
  305. package/dist/settings/duration.js.map +1 -0
  306. package/dist/settings/field-order.d.ts +37 -0
  307. package/dist/settings/field-order.d.ts.map +1 -0
  308. package/dist/settings/field-order.js +100 -0
  309. package/dist/settings/field-order.js.map +1 -0
  310. package/dist/settings/field-search.d.ts +10 -0
  311. package/dist/settings/field-search.d.ts.map +1 -0
  312. package/dist/settings/field-search.js +18 -0
  313. package/dist/settings/field-search.js.map +1 -0
  314. package/dist/settings/fields/builders.d.ts +41 -0
  315. package/dist/settings/fields/builders.d.ts.map +1 -0
  316. package/dist/settings/fields/builders.js +83 -0
  317. package/dist/settings/fields/builders.js.map +1 -0
  318. package/dist/settings/fields/field.d.ts +199 -0
  319. package/dist/settings/fields/field.d.ts.map +1 -0
  320. package/dist/settings/fields/field.js +33 -0
  321. package/dist/settings/fields/field.js.map +1 -0
  322. package/dist/settings/fields/zod-schema.d.ts +67 -0
  323. package/dist/settings/fields/zod-schema.d.ts.map +1 -0
  324. package/dist/settings/fields/zod-schema.js +281 -0
  325. package/dist/settings/fields/zod-schema.js.map +1 -0
  326. package/dist/settings/in-memory/in-memory-guild-directory.d.ts +24 -0
  327. package/dist/settings/in-memory/in-memory-guild-directory.d.ts.map +1 -0
  328. package/dist/settings/in-memory/in-memory-guild-directory.js +42 -0
  329. package/dist/settings/in-memory/in-memory-guild-directory.js.map +1 -0
  330. package/dist/settings/in-memory/in-memory-settings-store.d.ts +8 -0
  331. package/dist/settings/in-memory/in-memory-settings-store.d.ts.map +1 -0
  332. package/dist/settings/in-memory/in-memory-settings-store.js +43 -0
  333. package/dist/settings/in-memory/in-memory-settings-store.js.map +1 -0
  334. package/dist/settings/in-memory/in-process-notifier.d.ts +9 -0
  335. package/dist/settings/in-memory/in-process-notifier.d.ts.map +1 -0
  336. package/dist/settings/in-memory/in-process-notifier.js +32 -0
  337. package/dist/settings/in-memory/in-process-notifier.js.map +1 -0
  338. package/dist/settings/index.d.ts +22 -0
  339. package/dist/settings/index.d.ts.map +1 -0
  340. package/dist/settings/index.js +31 -0
  341. package/dist/settings/index.js.map +1 -0
  342. package/dist/settings/is-plain-object.d.ts +6 -0
  343. package/dist/settings/is-plain-object.d.ts.map +1 -0
  344. package/dist/settings/is-plain-object.js +15 -0
  345. package/dist/settings/is-plain-object.js.map +1 -0
  346. package/dist/settings/messages.d.ts +61 -0
  347. package/dist/settings/messages.d.ts.map +1 -0
  348. package/dist/settings/messages.js +155 -0
  349. package/dist/settings/messages.js.map +1 -0
  350. package/dist/settings/migrate.d.ts +35 -0
  351. package/dist/settings/migrate.d.ts.map +1 -0
  352. package/dist/settings/migrate.js +42 -0
  353. package/dist/settings/migrate.js.map +1 -0
  354. package/dist/settings/ports/guild-directory.d.ts +61 -0
  355. package/dist/settings/ports/guild-directory.d.ts.map +1 -0
  356. package/dist/settings/ports/guild-directory.js +3 -0
  357. package/dist/settings/ports/guild-directory.js.map +1 -0
  358. package/dist/settings/ports/settings-changed-notifier.d.ts +20 -0
  359. package/dist/settings/ports/settings-changed-notifier.d.ts.map +1 -0
  360. package/dist/settings/ports/settings-changed-notifier.js +3 -0
  361. package/dist/settings/ports/settings-changed-notifier.js.map +1 -0
  362. package/dist/settings/ports/settings-store.d.ts +76 -0
  363. package/dist/settings/ports/settings-store.d.ts.map +1 -0
  364. package/dist/settings/ports/settings-store.js +3 -0
  365. package/dist/settings/ports/settings-store.js.map +1 -0
  366. package/dist/settings/registry.d.ts +31 -0
  367. package/dist/settings/registry.d.ts.map +1 -0
  368. package/dist/settings/registry.js +102 -0
  369. package/dist/settings/registry.js.map +1 -0
  370. package/dist/settings/settings-declaration-error.d.ts +13 -0
  371. package/dist/settings/settings-declaration-error.d.ts.map +1 -0
  372. package/dist/settings/settings-declaration-error.js +22 -0
  373. package/dist/settings/settings-declaration-error.js.map +1 -0
  374. package/dist/settings/settings-service.d.ts +148 -0
  375. package/dist/settings/settings-service.d.ts.map +1 -0
  376. package/dist/settings/settings-service.js +279 -0
  377. package/dist/settings/settings-service.js.map +1 -0
  378. package/dist/settings/settings-validation-error.d.ts +23 -0
  379. package/dist/settings/settings-validation-error.d.ts.map +1 -0
  380. package/dist/settings/settings-validation-error.js +17 -0
  381. package/dist/settings/settings-validation-error.js.map +1 -0
  382. package/dist/settings/status.d.ts +16 -0
  383. package/dist/settings/status.d.ts.map +1 -0
  384. package/dist/settings/status.js +18 -0
  385. package/dist/settings/status.js.map +1 -0
  386. package/dist/settings/suggest.d.ts +77 -0
  387. package/dist/settings/suggest.d.ts.map +1 -0
  388. package/dist/settings/suggest.js +192 -0
  389. package/dist/settings/suggest.js.map +1 -0
  390. package/dist/settings/system/kernel-settings.d.ts +43 -0
  391. package/dist/settings/system/kernel-settings.d.ts.map +1 -0
  392. package/dist/settings/system/kernel-settings.js +53 -0
  393. package/dist/settings/system/kernel-settings.js.map +1 -0
  394. package/dist/settings/system/module-gate.d.ts +31 -0
  395. package/dist/settings/system/module-gate.d.ts.map +1 -0
  396. package/dist/settings/system/module-gate.js +34 -0
  397. package/dist/settings/system/module-gate.js.map +1 -0
  398. package/dist/settings/testing/index.d.ts +2 -0
  399. package/dist/settings/testing/index.d.ts.map +1 -0
  400. package/dist/settings/testing/index.js +6 -0
  401. package/dist/settings/testing/index.js.map +1 -0
  402. package/dist/settings/testing/settings-store-contract.d.ts +29 -0
  403. package/dist/settings/testing/settings-store-contract.d.ts.map +1 -0
  404. package/dist/settings/testing/settings-store-contract.js +192 -0
  405. package/dist/settings/testing/settings-store-contract.js.map +1 -0
  406. package/dist/settings/timed-search.d.ts +26 -0
  407. package/dist/settings/timed-search.d.ts.map +1 -0
  408. package/dist/settings/timed-search.js +48 -0
  409. package/dist/settings/timed-search.js.map +1 -0
  410. package/dist/settings/types.d.ts +37 -0
  411. package/dist/settings/types.d.ts.map +1 -0
  412. package/dist/settings/types.js +3 -0
  413. package/dist/settings/types.js.map +1 -0
  414. package/dist/settings/validate.d.ts +55 -0
  415. package/dist/settings/validate.d.ts.map +1 -0
  416. package/dist/settings/validate.js +196 -0
  417. package/dist/settings/validate.js.map +1 -0
  418. package/package.json +463 -88
  419. package/src/authz/require-level-guard.ts +1 -1
  420. package/src/color.ts +134 -0
  421. package/src/discord/command/all-required.ts +12 -0
  422. package/src/discord/command/autocomplete-dispatcher.ts +2 -1
  423. package/src/discord/command/autocomplete-limits.ts +2 -0
  424. package/src/discord/command/autocomplete.ts +8 -7
  425. package/src/discord/command/command-responders.ts +39 -0
  426. package/src/discord/command/context.ts +14 -54
  427. package/src/discord/command/cooldown-guard.ts +1 -1
  428. package/src/discord/command/create-command.ts +19 -94
  429. package/src/discord/command/create-context-menu-command.ts +19 -97
  430. package/src/discord/command/errors.ts +1 -1
  431. package/src/discord/command/guard.ts +24 -12
  432. package/src/discord/command/options.ts +202 -412
  433. package/src/discord/command/passes-guard.ts +37 -0
  434. package/src/discord/command/permission-guard.ts +1 -1
  435. package/src/discord/command/render-command-failure.ts +71 -0
  436. package/src/discord/command/route-key.ts +9 -0
  437. package/src/discord/command/router.ts +73 -12
  438. package/src/discord/command/send-embed.ts +42 -0
  439. package/src/discord/command/types.ts +7 -1
  440. package/src/discord/components/component-access.ts +20 -0
  441. package/src/discord/components/component-router.ts +73 -36
  442. package/src/discord/components/interactive-message/index.ts +5 -3
  443. package/src/discord/components/interactive-message/interactive-message-collector.ts +4 -68
  444. package/src/discord/components/interactive-message/message-edit-options.ts +47 -0
  445. package/src/discord/components/interactive-message/mount-interactive-message.ts +5 -3
  446. package/src/discord/components/interactive-message/state-store.ts +20 -0
  447. package/src/discord/components/paginator/mount-paginator.ts +3 -3
  448. package/src/discord/components/paginator/paginator-view.ts +1 -1
  449. package/src/discord/components/persistent-paginator.ts +8 -9
  450. package/src/discord/components/settings-editor/from-declaration-controls.ts +371 -0
  451. package/src/discord/components/settings-editor/from-declaration-display.ts +155 -0
  452. package/src/discord/components/settings-editor/from-declaration-layout.ts +247 -0
  453. package/src/discord/components/settings-editor/from-declaration-search.ts +77 -0
  454. package/src/discord/components/settings-editor/from-declaration-stored.ts +39 -0
  455. package/src/discord/components/settings-editor/from-declaration-subject.ts +110 -0
  456. package/src/discord/components/settings-editor/from-declaration-values.ts +240 -0
  457. package/src/discord/components/settings-editor/from-declaration.ts +218 -0
  458. package/src/discord/components/settings-editor/index.ts +5 -2
  459. package/src/discord/components/settings-editor/mount-settings-editor.ts +28 -10
  460. package/src/discord/components/settings-editor/navigation.ts +41 -0
  461. package/src/discord/components/settings-editor/settings-editor-card.view.ts +79 -36
  462. package/src/discord/components/settings-editor/settings-editor-field-modal.ts +76 -68
  463. package/src/discord/components/settings-editor/settings-editor-field-values.ts +11 -0
  464. package/src/discord/components/settings-editor/settings-editor-fields.ts +6 -11
  465. package/src/discord/components/settings-editor/settings-editor.view.ts +11 -24
  466. package/src/discord/events/event-guild-id.ts +35 -0
  467. package/src/discord/events/event-router.ts +46 -13
  468. package/src/discord/i18n.ts +47 -8
  469. package/src/discord/interaction/interaction-locale.ts +19 -0
  470. package/src/discord/interaction/locale-resolver.ts +28 -0
  471. package/src/discord/interaction/modal.ts +5 -40
  472. package/src/discord/interaction/reply-locale.ts +35 -0
  473. package/src/discord/interaction/select-bounds.ts +33 -0
  474. package/src/discord/interaction/select-menu.ts +2 -9
  475. package/src/discord/placeholder-registry.ts +1 -1
  476. package/src/discord/presenter.ts +1 -1
  477. package/src/discord/settings/discord-guild-directory.ts +214 -0
  478. package/src/discord/settings/guild-locale-resolver.ts +38 -0
  479. package/src/discord/settings/is-module-disabled.ts +22 -0
  480. package/src/discord/settings/module-disabled-embed.ts +19 -0
  481. package/src/discord/settings/require-configured.ts +68 -0
  482. package/src/discord/ui/color-aliases.ts +70 -0
  483. package/src/discord/ui/color-input.ts +8 -173
  484. package/src/discord/ui/colors.ts +2 -3
  485. package/src/discord/ui/embed.ts +3 -9
  486. package/src/discord/ui/truncate-text.ts +15 -0
  487. package/src/errors/error-message.ts +10 -0
  488. package/src/i18n/business-message.ts +1 -1
  489. package/src/i18n/catalog.ts +14 -0
  490. package/src/i18n/locale.ts +3 -0
  491. package/src/i18n/translator.ts +3 -0
  492. package/src/module/module.ts +15 -1
  493. package/src/resilience/retry.ts +1 -1
  494. package/src/scheduler/scheduler.ts +2 -5
  495. package/src/settings/cache.ts +70 -0
  496. package/src/settings/choice.ts +9 -0
  497. package/src/settings/decode-stored.ts +40 -0
  498. package/src/settings/define-settings.ts +214 -0
  499. package/src/settings/describe-field.ts +155 -0
  500. package/src/settings/describe.ts +90 -0
  501. package/src/settings/duration.ts +54 -0
  502. package/src/settings/field-order.ts +128 -0
  503. package/src/settings/field-search.ts +16 -0
  504. package/src/settings/fields/builders.ts +161 -0
  505. package/src/settings/fields/field.ts +205 -0
  506. package/src/settings/fields/zod-schema.ts +300 -0
  507. package/src/settings/in-memory/in-memory-guild-directory.ts +69 -0
  508. package/src/settings/in-memory/in-memory-settings-store.ts +46 -0
  509. package/src/settings/in-memory/in-process-notifier.ts +40 -0
  510. package/src/settings/index.ts +72 -0
  511. package/src/settings/is-plain-object.ts +11 -0
  512. package/src/settings/messages.ts +161 -0
  513. package/src/settings/migrate.ts +58 -0
  514. package/src/settings/ports/guild-directory.ts +48 -0
  515. package/src/settings/ports/settings-changed-notifier.ts +20 -0
  516. package/src/settings/ports/settings-store.ts +74 -0
  517. package/src/settings/registry.ts +137 -0
  518. package/src/settings/settings-declaration-error.ts +16 -0
  519. package/src/settings/settings-service.ts +535 -0
  520. package/src/settings/settings-validation-error.ts +41 -0
  521. package/src/settings/status.ts +25 -0
  522. package/src/settings/suggest.ts +267 -0
  523. package/src/settings/system/kernel-settings.ts +74 -0
  524. package/src/settings/system/module-gate.ts +49 -0
  525. package/src/settings/testing/index.ts +7 -0
  526. package/src/settings/testing/settings-store-contract.ts +278 -0
  527. package/src/settings/timed-search.ts +56 -0
  528. package/src/settings/types.ts +42 -0
  529. package/src/settings/validate.ts +298 -0
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.displayOrder = displayOrder;
4
+ /** Rank of an item no hint places: after every ranked one. */
5
+ const UNRANKED = Number.MAX_SAFE_INTEGER;
6
+ /**
7
+ * The order every surface shows a declaration in.
8
+ *
9
+ * - Groups rank by their position in `ui.groupOrder` (unlisted ones after
10
+ * listed ones), then by their own `order` (none after any), then by where
11
+ * they stand in declared order: at their first field, or after every field
12
+ * for a group with no field, in declaration order.
13
+ * - Fields rank within their group, and ungrouped fields among themselves,
14
+ * by `ui.order` (none after any), then by declaration order.
15
+ * - On screen, each place is kept by its kind: a group stands where a group's
16
+ * first field is declared and an ungrouped field where an ungrouped field
17
+ * is declared, then the ranked groups fill the group places and the ranked
18
+ * ungrouped fields the field places. With no hint this is declared order.
19
+ *
20
+ * @param declaration - the module's settings declaration; left untouched.
21
+ * @returns every declared group ranked, and the screen's places in order.
22
+ */
23
+ function displayOrder(declaration) {
24
+ const fieldKeys = Object.keys(declaration.fields);
25
+ const slots = [];
26
+ const firstField = new Map();
27
+ const members = new Map();
28
+ const loose = [];
29
+ fieldKeys.forEach((key, index) => {
30
+ const ui = declaration.fields[key]?.ui;
31
+ const ranked = { item: key, keys: [ui?.order ?? UNRANKED, index] };
32
+ const groupId = ui?.group;
33
+ if (groupId === undefined) {
34
+ slots.push("field");
35
+ loose.push(ranked);
36
+ return;
37
+ }
38
+ if (!firstField.has(groupId)) {
39
+ firstField.set(groupId, index);
40
+ slots.push("group");
41
+ }
42
+ members.set(groupId, [...(members.get(groupId) ?? []), ranked]);
43
+ });
44
+ const groups = rankedGroups({ declaration, firstField, fieldCount: fieldKeys.length });
45
+ const filledGroups = groups.filter((id) => members.has(id));
46
+ const fields = sortedItems(loose);
47
+ let nextGroup = 0;
48
+ let nextField = 0;
49
+ const entries = slots.map((slot) => {
50
+ switch (slot) {
51
+ case "field": {
52
+ const key = fields[nextField] ?? "";
53
+ nextField += 1;
54
+ return { kind: "field", key };
55
+ }
56
+ case "group": {
57
+ const id = filledGroups[nextGroup] ?? "";
58
+ nextGroup += 1;
59
+ return { kind: "group", id, fields: sortedItems(members.get(id) ?? []) };
60
+ }
61
+ default:
62
+ return unhandledSlot(slot);
63
+ }
64
+ });
65
+ return { groups, entries };
66
+ }
67
+ /** Every declared group id, ranked. */
68
+ function rankedGroups(params) {
69
+ const { declaration, firstField, fieldCount } = params;
70
+ const groupOrder = declaration.ui?.groupOrder ?? [];
71
+ const ranked = Object.entries(declaration.groups ?? {}).map(([id, group], index) => {
72
+ const position = groupOrder.indexOf(id);
73
+ return {
74
+ item: id,
75
+ keys: [
76
+ position === -1 ? UNRANKED : position,
77
+ group.order ?? UNRANKED,
78
+ firstField.get(id) ?? fieldCount + index,
79
+ ],
80
+ };
81
+ });
82
+ return sortedItems(ranked);
83
+ }
84
+ /** The items sorted by their keys, on a copy. */
85
+ function sortedItems(ranked) {
86
+ return [...ranked].sort(compareRanked).map((entry) => entry.item);
87
+ }
88
+ function compareRanked(left, right) {
89
+ for (const [index, key] of left.keys.entries()) {
90
+ const other = right.keys[index] ?? UNRANKED;
91
+ if (key !== other) {
92
+ return key < other ? -1 : 1;
93
+ }
94
+ }
95
+ return 0;
96
+ }
97
+ function unhandledSlot(slot) {
98
+ throw new Error(`Unhandled display slot: ${String(slot)}`);
99
+ }
100
+ //# sourceMappingURL=field-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-order.js","sourceRoot":"","sources":["../../src/settings/field-order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { DynamicSuggestions, FieldSpec } from "../settings/fields/field";
2
+ /**
3
+ * The server-side search a field declares, if any: only an integer or text
4
+ * field can declare one, as its `suggest` (static choices are not a search).
5
+ *
6
+ * @param spec - the field's kind and constraints.
7
+ * @returns the search, or `undefined` when the field has none.
8
+ */
9
+ export declare function fieldSearch(spec: FieldSpec): DynamicSuggestions<unknown> | undefined;
10
+ //# sourceMappingURL=field-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-search.d.ts","sourceRoot":"","sources":["../../src/settings/field-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAMpF"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fieldSearch = fieldSearch;
4
+ /**
5
+ * The server-side search a field declares, if any: only an integer or text
6
+ * field can declare one, as its `suggest` (static choices are not a search).
7
+ *
8
+ * @param spec - the field's kind and constraints.
9
+ * @returns the search, or `undefined` when the field has none.
10
+ */
11
+ function fieldSearch(spec) {
12
+ if (spec.kind !== "integer" && spec.kind !== "text") {
13
+ return undefined;
14
+ }
15
+ const { suggest } = spec;
16
+ return suggest === undefined || "choices" in suggest ? undefined : suggest;
17
+ }
18
+ //# sourceMappingURL=field-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-search.js","sourceRoot":"","sources":["../../src/settings/field-search.ts"],"names":[],"mappings":";;AASA,kCAMC;AAbD;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,IAAe;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,OAAO,OAAO,KAAK,SAAS,IAAI,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { BoundsOptions, ChannelOptions, EnumOptions, Field, FieldOptions, IntegerOptions, ListOptions, SecretField, SecretOptions, TextOptions, TogglesOptions, ToggleValues } from "../../settings/fields/field";
2
+ /** Options that make a field always have a value. */
3
+ type Defined<T> = {
4
+ readonly default: T;
5
+ };
6
+ /** A builder whose result is `"defined"` when defaulted. */
7
+ export interface FieldBuilder<T, X> {
8
+ (options: X & FieldOptions<T> & Defined<T>): Field<T, "defined">;
9
+ (options?: X & FieldOptions<T>): Field<T, "optional">;
10
+ }
11
+ /** The field builders of {@link field}. */
12
+ export interface FieldBuilders {
13
+ readonly channel: FieldBuilder<string, ChannelOptions>;
14
+ readonly role: FieldBuilder<string, unknown>;
15
+ readonly user: FieldBuilder<string, unknown>;
16
+ /**
17
+ * Stored as `#rrggbb`; accepts hex codes and the base colour names, never the
18
+ * aliases a bot registers for its Discord inputs.
19
+ */
20
+ readonly color: FieldBuilder<string, unknown>;
21
+ /** Stored as whole seconds; accepts `"15m"`, `"1h30m"`… Bounds are in seconds. */
22
+ readonly duration: FieldBuilder<number, BoundsOptions>;
23
+ enum<const V extends string>(options: EnumOptions<V> & FieldOptions<NoInfer<V>> & Defined<NoInfer<V>>): Field<V, "defined">;
24
+ enum<const V extends string>(options: EnumOptions<V> & FieldOptions<NoInfer<V>>): Field<V, "optional">;
25
+ readonly integer: FieldBuilder<number, IntegerOptions>;
26
+ readonly number: FieldBuilder<number, BoundsOptions>;
27
+ readonly text: FieldBuilder<string, TextOptions>;
28
+ readonly boolean: FieldBuilder<boolean, unknown>;
29
+ secret(options?: SecretOptions): SecretField<"optional">;
30
+ list<T>(item: Field<T>, options: ListOptions & FieldOptions<readonly T[]> & Defined<readonly T[]>): Field<readonly T[], "defined">;
31
+ list<T>(item: Field<T>, options?: ListOptions & FieldOptions<readonly T[]>): Field<readonly T[], "optional">;
32
+ /** A boolean per key, e.g. enabled modules; not allowed as a list item. */
33
+ toggles<const K extends string>(options: TogglesOptions<K>): Field<ToggleValues<K>, "defined">;
34
+ }
35
+ /**
36
+ * Builders for every setting kind. Channel, role and user values are
37
+ * snowflake strings; texts in the options are catalog keys.
38
+ */
39
+ export declare const field: FieldBuilders;
40
+ export {};
41
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/settings/fields/builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.field = void 0;
4
+ /**
5
+ * Assemble a field from its constraints and common options. The presence is
6
+ * `never` here: the builder overloads narrow it from the options.
7
+ */
8
+ function createField(spec, options) {
9
+ return { ...options, spec, required: options.required ?? false };
10
+ }
11
+ function channelField(options = {}) {
12
+ const { types, ...common } = options;
13
+ return createField({ kind: "channel", types }, common);
14
+ }
15
+ function roleField(options = {}) {
16
+ return createField({ kind: "role" }, options);
17
+ }
18
+ function userField(options = {}) {
19
+ return createField({ kind: "user" }, options);
20
+ }
21
+ function colorField(options = {}) {
22
+ return createField({ kind: "color" }, options);
23
+ }
24
+ function durationField(options = {}) {
25
+ const { min, max, ...common } = options;
26
+ return createField({ kind: "duration", min, max }, common);
27
+ }
28
+ function enumField(options) {
29
+ const { choices, ...common } = options;
30
+ return createField({ kind: "enum", choices }, common);
31
+ }
32
+ function integerField(options = {}) {
33
+ const { min, max, suggest, ...common } = options;
34
+ return createField({ kind: "integer", min, max, suggest }, common);
35
+ }
36
+ function numberField(options = {}) {
37
+ const { min, max, ...common } = options;
38
+ return createField({ kind: "number", min, max }, common);
39
+ }
40
+ function textField(options = {}) {
41
+ const { minLength, maxLength, suggest, ...common } = options;
42
+ return createField({ kind: "text", minLength, maxLength, suggest }, common);
43
+ }
44
+ function booleanField(options = {}) {
45
+ return createField({ kind: "boolean" }, options);
46
+ }
47
+ function secretField(options = {}) {
48
+ return { ...options, spec: { kind: "secret" }, required: options.required ?? false };
49
+ }
50
+ function listField(item, options = {}) {
51
+ const { minItems, maxItems, ...common } = options;
52
+ return createField({ kind: "list", item, minItems, maxItems }, common);
53
+ }
54
+ /**
55
+ * The declared keys all start `false`, then `default` sets its own; a key
56
+ * `default` names but `keys` lacks is kept, so the default fails its own field
57
+ * when the declaration is checked.
58
+ */
59
+ function togglesField(options) {
60
+ const { keys, keyLabels, default: defaults, ...common } = options;
61
+ const off = Object.fromEntries(keys.map((key) => [key, false]));
62
+ return createField({ kind: "toggles", keys, keyLabels }, { ...common, default: { ...off, ...defaults } });
63
+ }
64
+ /**
65
+ * Builders for every setting kind. Channel, role and user values are
66
+ * snowflake strings; texts in the options are catalog keys.
67
+ */
68
+ exports.field = {
69
+ channel: channelField,
70
+ role: roleField,
71
+ user: userField,
72
+ color: colorField,
73
+ duration: durationField,
74
+ enum: enumField,
75
+ integer: integerField,
76
+ number: numberField,
77
+ text: textField,
78
+ boolean: booleanField,
79
+ secret: secretField,
80
+ list: listField,
81
+ toggles: togglesField,
82
+ };
83
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/settings/fields/builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ import type { Choice } from "../../settings/choice";
2
+ import type { ChannelKind } from "../../settings/ports/guild-directory";
3
+ /** Discord's hard limits that a declaration must stay within. */
4
+ export declare const FIELD_LIMITS: {
5
+ /** Longest text a Discord text input accepts. */
6
+ readonly textMaxLength: 4000;
7
+ /** Most items a list field may hold (one select menu). */
8
+ readonly listMaxItems: 25;
9
+ /** Most static choices an enum or a suggestion list may declare (one select menu). */
10
+ readonly staticChoices: 25;
11
+ };
12
+ /** Kinds a list field may hold. */
13
+ export declare const LIST_ITEM_KINDS: readonly FieldKind[];
14
+ /**
15
+ * Whether a field always has a value (`"defined"`: it has a default) or may be
16
+ * unset (`"optional"`: no default, even when required, since a guild may not
17
+ * have configured it yet). Drives the value type of {@link SettingsValues}.
18
+ */
19
+ export type FieldPresence = "defined" | "optional";
20
+ declare const presence: unique symbol;
21
+ /** One labelled static choice: the stored value and the catalog key of its label. */
22
+ export interface FieldChoice<V> {
23
+ readonly value: V;
24
+ readonly label: string;
25
+ }
26
+ /** What a suggestion search knows about the request. */
27
+ export interface SuggestionContext {
28
+ readonly guildId: string;
29
+ readonly userId: string;
30
+ readonly locale: string;
31
+ /** The other values currently entered, possibly unsaved. */
32
+ readonly values: Readonly<Record<string, unknown>>;
33
+ }
34
+ /** A fixed list of suggested values (1 to 25). */
35
+ export interface StaticSuggestions<T> {
36
+ readonly choices: readonly FieldChoice<T>[];
37
+ }
38
+ /** A server-side search. `strict` rejects values the search does not know. */
39
+ export interface DynamicSuggestions<T> {
40
+ resolve(query: string, ctx: SuggestionContext): Promise<readonly Choice[]>;
41
+ label?(value: T, ctx: SuggestionContext): Promise<string | undefined>;
42
+ readonly strict?: boolean;
43
+ }
44
+ /** Suggestions offered while a value is typed. */
45
+ export type Suggestions<T> = StaticSuggestions<T> | DynamicSuggestions<T>;
46
+ /**
47
+ * Presentation hints (FR-020). They describe meaning, not layout; surfaces may
48
+ * ignore them.
49
+ */
50
+ export interface FieldUi<T = unknown> {
51
+ /** Id of a group declared on the module. */
52
+ readonly group?: string;
53
+ readonly order?: number;
54
+ /** Preferred control, e.g. `"slider"`. */
55
+ readonly hint?: string;
56
+ readonly advanced?: boolean;
57
+ readonly examples?: readonly T[];
58
+ }
59
+ /** Options shared by every field kind. Texts are catalog keys. */
60
+ export interface FieldOptions<T> {
61
+ /** Required on a module's fields; a list item needs none. */
62
+ readonly label?: string;
63
+ readonly description?: string;
64
+ readonly placeholder?: string;
65
+ readonly unit?: string;
66
+ /** Unset until an administrator sets it, unless it has a default. */
67
+ readonly required?: boolean;
68
+ readonly default?: T;
69
+ readonly ui?: FieldUi<T>;
70
+ /** Opaque access declaration: stored, never enforced here (FR-032). */
71
+ readonly access?: unknown;
72
+ }
73
+ /** Kind-specific constraints of a field. */
74
+ export type FieldSpec = {
75
+ readonly kind: "channel";
76
+ readonly types?: readonly ChannelKind[];
77
+ } | {
78
+ readonly kind: "role";
79
+ } | {
80
+ readonly kind: "user";
81
+ } | {
82
+ readonly kind: "color";
83
+ } | {
84
+ readonly kind: "duration";
85
+ readonly min?: number;
86
+ readonly max?: number;
87
+ } | {
88
+ readonly kind: "enum";
89
+ readonly choices: readonly FieldChoice<string>[];
90
+ } | {
91
+ readonly kind: "integer";
92
+ readonly min?: number;
93
+ readonly max?: number;
94
+ readonly suggest?: Suggestions<number>;
95
+ } | {
96
+ readonly kind: "number";
97
+ readonly min?: number;
98
+ readonly max?: number;
99
+ } | {
100
+ readonly kind: "text";
101
+ readonly minLength?: number;
102
+ readonly maxLength?: number;
103
+ readonly suggest?: Suggestions<string>;
104
+ } | {
105
+ readonly kind: "boolean";
106
+ } | {
107
+ readonly kind: "secret";
108
+ } | {
109
+ readonly kind: "list";
110
+ readonly item: AnyField;
111
+ readonly minItems?: number;
112
+ readonly maxItems?: number;
113
+ } | {
114
+ readonly kind: "toggles";
115
+ readonly keys: readonly string[];
116
+ /** Catalog key of each key's label, by key. */
117
+ readonly keyLabels?: Readonly<Partial<Record<string, string>>>;
118
+ };
119
+ /** Every field kind. */
120
+ export type FieldKind = FieldSpec["kind"];
121
+ /**
122
+ * A declared setting: its kind and constraints, its hints and its value type
123
+ * `T`. Built by the `field` builders; the validation schema behind it stays internal.
124
+ */
125
+ export interface Field<T, P extends FieldPresence = FieldPresence> {
126
+ readonly spec: FieldSpec;
127
+ readonly label?: string;
128
+ readonly description?: string;
129
+ readonly placeholder?: string;
130
+ readonly unit?: string;
131
+ readonly required: boolean;
132
+ readonly default?: T;
133
+ readonly ui?: FieldUi<T>;
134
+ readonly access?: unknown;
135
+ /** Type-level only: never set at runtime. */
136
+ readonly [presence]?: P;
137
+ }
138
+ /** Any field, whatever its value type. */
139
+ export type AnyField = Field<unknown>;
140
+ /** A secret field: readable by module logic, write-only for surfaces. */
141
+ export type SecretField<P extends FieldPresence = FieldPresence> = Field<string, P> & {
142
+ readonly spec: {
143
+ readonly kind: "secret";
144
+ };
145
+ };
146
+ /** Kind-specific options of a channel field. */
147
+ export type ChannelOptions = {
148
+ readonly types?: readonly ChannelKind[];
149
+ };
150
+ /** Inclusive numeric bounds of a duration, integer or number field. */
151
+ export type BoundsOptions = {
152
+ readonly min?: number;
153
+ readonly max?: number;
154
+ };
155
+ /** Kind-specific options of an integer field. */
156
+ export type IntegerOptions = BoundsOptions & {
157
+ readonly suggest?: Suggestions<number>;
158
+ };
159
+ /** Kind-specific options of a text field. */
160
+ export type TextOptions = {
161
+ readonly minLength?: number;
162
+ readonly maxLength?: number;
163
+ readonly suggest?: Suggestions<string>;
164
+ };
165
+ /** Kind-specific options of a list field. */
166
+ export type ListOptions = {
167
+ readonly minItems?: number;
168
+ readonly maxItems?: number;
169
+ };
170
+ /** Kind-specific options of an enum field. */
171
+ export type EnumOptions<V> = {
172
+ readonly choices: readonly FieldChoice<V>[];
173
+ };
174
+ /** The value of a toggles field: one boolean per declared key. */
175
+ export type ToggleValues<K extends string> = Readonly<Record<K, boolean>>;
176
+ /**
177
+ * Options of a toggles field. `default` sets some keys; every other key
178
+ * defaults to `false`, so the field always has a value. `keyLabels` are
179
+ * catalog keys.
180
+ */
181
+ export type TogglesOptions<K extends string> = Omit<FieldOptions<ToggleValues<K>>, "default" | "required"> & {
182
+ readonly keys: readonly K[];
183
+ readonly keyLabels?: Readonly<Partial<Record<K, string>>>;
184
+ readonly default?: Readonly<Partial<Record<K, boolean>>>;
185
+ };
186
+ /** Options of a secret: no default, no examples. */
187
+ export type SecretOptions = Omit<FieldOptions<string>, "default" | "ui"> & {
188
+ readonly ui?: Omit<FieldUi, "examples">;
189
+ };
190
+ /**
191
+ * The compile-time guard closing every `switch` on a field kind: a new kind
192
+ * left unhandled makes the call a type error instead of a silent fallthrough.
193
+ *
194
+ * @throws Error when reached at runtime, which only a spec built outside the
195
+ * type system can cause.
196
+ */
197
+ export declare function unhandledFieldKind(spec: never): never;
198
+ export {};
199
+ //# sourceMappingURL=field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/settings/fields/field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,iEAAiE;AACjE,eAAO,MAAM,YAAY;IACxB,iDAAiD;;IAEjD,0DAA0D;;IAE1D,sFAAsF;;CAE7E,CAAC;AAEX,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAO/C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnD,OAAO,CAAC,MAAM,QAAQ,EAAE,OAAO,MAAM,CAAC;AAEtC,qFAAqF;AACrF,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5C;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC3E,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,kDAAkD;AAClD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,OAAO;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;CACjC;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY,CAAC,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,CAAA;CAAE,GAC3E;IACA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACtC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE;IACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACtC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC1B,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEL,wBAAwB;AACxB,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,GAAG,aAAa;IAChE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;CACxB;AAED,0CAA0C;AAC1C,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AAEtC,yEAAyE;AACzE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG;IACrF,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;CAC3C,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,CAAC;AACzE,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7E,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AACxF,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACvC,CAAC;AACF,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACrF,8CAA8C;AAC9C,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;CAAE,CAAC;AAE7E,kEAAkE;AAClE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CAClD,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC7B,SAAS,GAAG,UAAU,CACtB,GAAG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG;IAC1E,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAErD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LIST_ITEM_KINDS = exports.FIELD_LIMITS = void 0;
4
+ exports.unhandledFieldKind = unhandledFieldKind;
5
+ /** Discord's hard limits that a declaration must stay within. */
6
+ exports.FIELD_LIMITS = {
7
+ /** Longest text a Discord text input accepts. */
8
+ textMaxLength: 4000,
9
+ /** Most items a list field may hold (one select menu). */
10
+ listMaxItems: 25,
11
+ /** Most static choices an enum or a suggestion list may declare (one select menu). */
12
+ staticChoices: 25,
13
+ };
14
+ /** Kinds a list field may hold. */
15
+ exports.LIST_ITEM_KINDS = [
16
+ "channel",
17
+ "role",
18
+ "user",
19
+ "enum",
20
+ "integer",
21
+ "text",
22
+ ];
23
+ /**
24
+ * The compile-time guard closing every `switch` on a field kind: a new kind
25
+ * left unhandled makes the call a type error instead of a silent fallthrough.
26
+ *
27
+ * @throws Error when reached at runtime, which only a spec built outside the
28
+ * type system can cause.
29
+ */
30
+ function unhandledFieldKind(spec) {
31
+ throw new Error(`Unhandled field kind: ${spec.kind}`);
32
+ }
33
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/settings/fields/field.ts"],"names":[],"mappings":";;;AA0MA,gDAEC;AAzMD,iEAAiE;AACpD,QAAA,YAAY,GAAG;IAC3B,iDAAiD;IACjD,aAAa,EAAE,IAAI;IACnB,0DAA0D;IAC1D,YAAY,EAAE,EAAE;IAChB,sFAAsF;IACtF,aAAa,EAAE,EAAE;CACR,CAAC;AAEX,mCAAmC;AACtB,QAAA,eAAe,GAAyB;IACpD,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;CACN,CAAC;AA8KF;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,IAAW;IAC7C,MAAM,IAAI,KAAK,CAAC,yBAA0B,IAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { type AnyField } from "../../settings/fields/field";
2
+ import type { SettingsIssueCode } from "../../settings/settings-validation-error";
3
+ /** Why one value failed its field's own validation, before any guild check. */
4
+ export interface FieldValueIssue {
5
+ /**
6
+ * Path inside the value: `[]` for the value, `[i]` for a list item, `[key]`
7
+ * for a toggle.
8
+ */
9
+ readonly path: readonly (number | string)[];
10
+ readonly code: SettingsIssueCode;
11
+ /** `{ min }` or `{ max }` for bound codes, empty otherwise. */
12
+ readonly params: Readonly<Record<string, number>>;
13
+ }
14
+ /** Outcome of {@link parseFieldValue}: the stored form of the value, or its issues. */
15
+ export type FieldParseResult = {
16
+ readonly ok: true;
17
+ readonly value: unknown;
18
+ } | {
19
+ readonly ok: false;
20
+ readonly issues: readonly FieldValueIssue[];
21
+ };
22
+ /**
23
+ * Check a value against its field's kind and constraints (kind, bounds,
24
+ * lengths, list size, duplicates, enum membership, toggle keys) and turn it
25
+ * into its stored form: a colour becomes `#rrggbb`, a duration whole seconds,
26
+ * toggles a boolean for every declared key (a missing key takes its default).
27
+ *
28
+ * @param params.field - the field the value belongs to.
29
+ * @param params.value - the raw value, of any type.
30
+ * @returns the stored value, or every issue found.
31
+ */
32
+ export declare function parseFieldValue(params: {
33
+ field: AnyField;
34
+ value: unknown;
35
+ }): FieldParseResult;
36
+ /**
37
+ * Drop from a stored value what its field no longer declares, so it reads as
38
+ * if the key had never been stored (FR-017): a toggle whose key left `keys`.
39
+ * Any other value is returned as is. Submissions skip this step, so an
40
+ * undeclared toggle there stays `unknownChoice`.
41
+ *
42
+ * @param params.field - the field the stored value belongs to.
43
+ * @param params.value - the value as read from storage, of any type.
44
+ * @returns the value without its undeclared toggles.
45
+ */
46
+ export declare function pruneStoredValue(params: {
47
+ field: AnyField;
48
+ value: unknown;
49
+ }): unknown;
50
+ /** One JSON Schema object, open to in-place annotation. */
51
+ export type JsonSchemaNode = Record<string, unknown>;
52
+ /**
53
+ * Describe the stored values of a set of fields as a JSON Schema draft 2020-12
54
+ * object: each field's kind and constraints, a field without `required` being
55
+ * optional, and no undeclared key. The field's own texts and hints are added
56
+ * by `annotate`, called once for each field and each list item on the schema
57
+ * that describes it.
58
+ *
59
+ * @param params.fields - the fields, by key.
60
+ * @param params.annotate - adds a field's annotations to its schema, in place.
61
+ * @returns the JSON Schema document, with `$schema`.
62
+ */
63
+ export declare function fieldsJsonSchema(params: {
64
+ fields: Readonly<Record<string, AnyField>>;
65
+ annotate: (field: AnyField, schema: JsonSchemaNode) => void;
66
+ }): JsonSchemaNode;
67
+ //# sourceMappingURL=zod-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-schema.d.ts","sourceRoot":"","sources":["../../../src/settings/fields/zod-schema.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,KAAK,QAAQ,EAKb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAW9E,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC/B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAED,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GACzB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAIvE;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,gBAAgB,CAM7F;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAOrF;AAED,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACxC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5D,GAAG,cAAc,CAyBjB"}