@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,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.layoutDeclaration = layoutDeclaration;
4
+ const from_declaration_controls_1 = require("../../../discord/components/settings-editor/from-declaration-controls");
5
+ const settings_editor_card_view_1 = require("../../../discord/components/settings-editor/settings-editor-card.view");
6
+ const settings_editor_fields_1 = require("../../../discord/components/settings-editor/settings-editor-fields");
7
+ const i18n_1 = require("../../../discord/i18n");
8
+ /** Separates a generated entry key from its number. */
9
+ const KEY_SEPARATOR = "#";
10
+ /** Prefix of the key of every level the layout nests. */
11
+ const LEVEL_KEY_PREFIX = "level";
12
+ /** Suffix of the key of the modal a non-strict searchable field outside any group opens. */
13
+ const SEARCH_ENTRY_SUFFIX = "search";
14
+ /**
15
+ * Lay the controls of a declaration out on the screen, keeping their order
16
+ * (the display order of `@/settings/field-order`): a control outside any group is an entry of its own; a group stands
17
+ * where its first control stands, split into entries of at most
18
+ * {@link MAX_MODAL_COMPONENTS} controls (one modal each). A level holds at
19
+ * most {@link MAX_CARD_LEVEL_ENTRIES} entries: past that, a group split over
20
+ * several entries moves into a level of its own, then the entries past the
21
+ * last that fits move behind a "more settings" level.
22
+ *
23
+ * A non-strict searchable field's select and its free entry are never split:
24
+ * outside any group they form a modal of their own, named after the field;
25
+ * inside a group they share one of its modals.
26
+ *
27
+ * @param params.declaration - the module's settings declaration, for its groups.
28
+ * @param params.controls - the controls of the declaration, in declared order.
29
+ * @returns the root entries, the nested levels and each group entry's controls.
30
+ */
31
+ function layoutDeclaration(params) {
32
+ const groups = new Map();
33
+ const sections = declarationSections({ ...params, groups });
34
+ const levels = [];
35
+ const flat = sections.flatMap(sectionEntries);
36
+ const fields = flat.length <= settings_editor_card_view_1.MAX_CARD_LEVEL_ENTRIES
37
+ ? flat
38
+ : paged({
39
+ entries: sections.flatMap((section) => foldedEntries({ section, levels })),
40
+ levels,
41
+ });
42
+ return { fields, levels, groups };
43
+ }
44
+ /** The sections of the root level, recording each group entry's controls in `groups`. */
45
+ function declarationSections(params) {
46
+ const { declaration, controls, groups } = params;
47
+ const sections = [];
48
+ const seenGroups = new Set();
49
+ const units = controlUnits(controls);
50
+ for (const unit of units) {
51
+ const [first] = unit;
52
+ if (first === undefined) {
53
+ continue;
54
+ }
55
+ const { groupId } = first;
56
+ if (groupId === undefined) {
57
+ sections.push(unit.length === 1 ? { kind: "control", control: first } : searchSection({ unit, groups }));
58
+ }
59
+ else if (!seenGroups.has(groupId)) {
60
+ seenGroups.add(groupId);
61
+ sections.push(groupSection({ declaration, units, groups, groupId }));
62
+ }
63
+ }
64
+ return sections;
65
+ }
66
+ /**
67
+ * The controls in order, a non-strict searchable field's select and free
68
+ * entry kept together as one unit, every other control a unit of its own.
69
+ */
70
+ function controlUnits(controls) {
71
+ const units = [];
72
+ for (const control of controls) {
73
+ const last = units.at(-1);
74
+ if ((0, from_declaration_controls_1.isFreeEntry)(control) && last?.[0]?.fieldKey === control.fieldKey) {
75
+ last.push(control);
76
+ }
77
+ else {
78
+ units.push([control]);
79
+ }
80
+ }
81
+ return units;
82
+ }
83
+ /** A non-strict searchable field outside any group: one modal holding its select and free entry. */
84
+ function searchSection(params) {
85
+ const { unit, groups } = params;
86
+ const [{ entry, fieldKey }] = unit;
87
+ const key = `${fieldKey}${KEY_SEPARATOR}${SEARCH_ENTRY_SUFFIX}`;
88
+ groups.set(key, unit);
89
+ const { labelKey, hintKey } = entry;
90
+ return {
91
+ kind: "group",
92
+ labelKey,
93
+ hintKey,
94
+ chunks: [{ kind: "group", key, labelKey, hintKey, fields: unit.map(controlEntry) }],
95
+ };
96
+ }
97
+ /** A declared group split into entries of at most {@link MAX_MODAL_COMPONENTS} controls, no unit split. */
98
+ function groupSection(params) {
99
+ const { declaration, units, groups, groupId } = params;
100
+ const group = declaration.groups?.[groupId];
101
+ const labelKey = group?.label ?? groupId;
102
+ const hintKey = group?.description ?? i18n_1.SETTINGS_EDITOR_MESSAGES.entryHint;
103
+ const members = units.filter((unit) => unit[0]?.groupId === groupId);
104
+ const chunks = [];
105
+ for (const [index, chunk] of packed(members, settings_editor_fields_1.MAX_MODAL_COMPONENTS).entries()) {
106
+ const key = `${groupId}${KEY_SEPARATOR}${index + 1}`;
107
+ groups.set(key, chunk);
108
+ chunks.push({ kind: "group", key, labelKey, hintKey, fields: chunk.map(controlEntry) });
109
+ }
110
+ return { kind: "group", labelKey, hintKey, chunks };
111
+ }
112
+ /**
113
+ * `units` packed in order into chunks of at most `size` controls, a unit
114
+ * never split: one that does not fit starts the next chunk.
115
+ */
116
+ function packed(units, size) {
117
+ const chunks = [];
118
+ for (const unit of units) {
119
+ const last = chunks.at(-1);
120
+ if (last !== undefined && last.length + unit.length <= size) {
121
+ last.push(...unit);
122
+ }
123
+ else {
124
+ chunks.push([...unit]);
125
+ }
126
+ }
127
+ return chunks;
128
+ }
129
+ function controlEntry(control) {
130
+ return control.entry;
131
+ }
132
+ /** The entries a section stands for on a level of its own. */
133
+ function sectionEntries(section) {
134
+ return section.kind === "control" ? [section.control.entry] : section.chunks;
135
+ }
136
+ /** A section's entries once a group split over several entries moves into a level of its own. */
137
+ function foldedEntries(params) {
138
+ const { section, levels } = params;
139
+ if (section.kind === "control" || section.chunks.length === 1) {
140
+ return sectionEntries(section);
141
+ }
142
+ return [
143
+ nestedLevel({
144
+ labelKey: section.labelKey,
145
+ hintKey: section.hintKey,
146
+ entries: section.chunks,
147
+ levels,
148
+ }),
149
+ ];
150
+ }
151
+ /**
152
+ * `entries` within {@link MAX_CARD_LEVEL_ENTRIES}: all of them when they fit,
153
+ * otherwise those before the last place, then a "more settings" level holding
154
+ * the rest.
155
+ */
156
+ function paged(params) {
157
+ const { entries, levels } = params;
158
+ if (entries.length <= settings_editor_card_view_1.MAX_CARD_LEVEL_ENTRIES) {
159
+ return entries;
160
+ }
161
+ const kept = settings_editor_card_view_1.MAX_CARD_LEVEL_ENTRIES - 1;
162
+ const more = nestedLevel({
163
+ labelKey: i18n_1.SETTINGS_EDITOR_MESSAGES.moreEntries,
164
+ hintKey: i18n_1.SETTINGS_EDITOR_MESSAGES.moreEntriesHint,
165
+ entries: entries.slice(kept),
166
+ levels,
167
+ });
168
+ return [...entries.slice(0, kept), more];
169
+ }
170
+ /** Add a level holding `entries` (paged to fit) and return the entry that opens it. */
171
+ function nestedLevel(params) {
172
+ const { labelKey, hintKey, levels } = params;
173
+ const fields = paged({ entries: params.entries, levels });
174
+ const key = `${LEVEL_KEY_PREFIX}${KEY_SEPARATOR}${levels.length + 1}`;
175
+ levels.push({ key, titleKey: labelKey, fields });
176
+ return { kind: "level", key, levelKey: key, labelKey, hintKey };
177
+ }
178
+ //# sourceMappingURL=from-declaration-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-layout.js","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { SearchOptions } from "../../../discord/components/settings-editor/from-declaration-controls";
2
+ import type { DeclarationSubject } from "../../../discord/components/settings-editor/from-declaration-subject";
3
+ import type { SettingsDeclaration } from "../../../settings/define-settings";
4
+ import type { RequestContext, SettingsService } from "../../../settings/settings-service";
5
+ /**
6
+ * What each searchable field's select offers on the Discord screen (FR-026a):
7
+ * the first {@link MAX_SELECT_OPTIONS} results of its search for an empty
8
+ * query, since a select cannot be searched as it is typed. The field's
9
+ * current value leads the list when the results miss it, so a modal opened
10
+ * and sent back unchanged keeps it. A field whose search offered nothing
11
+ * (it failed or timed out, logged by the service) has no entry: the screen
12
+ * types it instead.
13
+ *
14
+ * @param params.declaration - the module's settings declaration.
15
+ * @param params.service - the settings service the searches run through.
16
+ * @param params.ctx - the guild, the administrator and their locale.
17
+ * @param params.subject - the screen's subject: the values searches see, and
18
+ * the current values' labels.
19
+ * @returns the options of each searchable field that has any, by field key.
20
+ */
21
+ export declare function loadSearchOptions(params: {
22
+ declaration: SettingsDeclaration;
23
+ service: SettingsService;
24
+ ctx: RequestContext;
25
+ subject: DeclarationSubject;
26
+ }): Promise<SearchOptions>;
27
+ //# sourceMappingURL=from-declaration-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-search.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gEAAgE,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+DAA+D,CAAC;AASxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;CAC5B,GAAG,OAAO,CAAC,aAAa,CAAC,CAezB"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadSearchOptions = loadSearchOptions;
4
+ const settings_editor_view_1 = require("../../../discord/components/settings-editor/settings-editor.view");
5
+ const i18n_1 = require("../../../discord/i18n");
6
+ const truncate_text_1 = require("../../../discord/ui/truncate-text");
7
+ const field_search_1 = require("../../../settings/field-search");
8
+ /**
9
+ * What each searchable field's select offers on the Discord screen (FR-026a):
10
+ * the first {@link MAX_SELECT_OPTIONS} results of its search for an empty
11
+ * query, since a select cannot be searched as it is typed. The field's
12
+ * current value leads the list when the results miss it, so a modal opened
13
+ * and sent back unchanged keeps it. A field whose search offered nothing
14
+ * (it failed or timed out, logged by the service) has no entry: the screen
15
+ * types it instead.
16
+ *
17
+ * @param params.declaration - the module's settings declaration.
18
+ * @param params.service - the settings service the searches run through.
19
+ * @param params.ctx - the guild, the administrator and their locale.
20
+ * @param params.subject - the screen's subject: the values searches see, and
21
+ * the current values' labels.
22
+ * @returns the options of each searchable field that has any, by field key.
23
+ */
24
+ async function loadSearchOptions(params) {
25
+ const { declaration, service, ctx, subject } = params;
26
+ const searched = await Promise.all(Object.entries(declaration.fields)
27
+ .filter(([, declared]) => (0, field_search_1.fieldSearch)(declared.spec) !== undefined)
28
+ .map(async ([key]) => {
29
+ const results = await service.suggest(declaration, key, "", {
30
+ ...ctx,
31
+ values: subject.values,
32
+ });
33
+ const options = withCurrent({ results, key, subject }).map(toEditorChoice);
34
+ return [key, options.slice(0, settings_editor_view_1.MAX_SELECT_OPTIONS)];
35
+ }));
36
+ return new Map(searched.filter(([, options]) => options.length > 0));
37
+ }
38
+ /** The results with the field's current value first when they miss it. */
39
+ function withCurrent(params) {
40
+ const { results, key, subject } = params;
41
+ const value = subject.values[key];
42
+ if (results.length === 0 || (typeof value !== "string" && typeof value !== "number")) {
43
+ return results;
44
+ }
45
+ if (results.some((choice) => String(choice.value) === String(value))) {
46
+ return results;
47
+ }
48
+ return [{ name: subject.labels[key] ?? String(value), value }, ...results];
49
+ }
50
+ /** A search result as a select option: its name shown as is, cut to what an option shows. */
51
+ function toEditorChoice(choice) {
52
+ return {
53
+ value: String(choice.value),
54
+ labelKey: i18n_1.SETTINGS_EDITOR_MESSAGES.choiceLabel,
55
+ labelParams: { label: (0, truncate_text_1.truncateText)(choice.name, settings_editor_view_1.MAX_SELECT_OPTION_TEXT) },
56
+ };
57
+ }
58
+ //# sourceMappingURL=from-declaration-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-search.js","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-search.ts"],"names":[],"mappings":";;AA8BA,8CAoBC;AAhDD,oGAGmE;AAEnE,yCAA0D;AAC1D,8DAA0D;AAG1D,0DAAsD;AAGtD;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,iBAAiB,CAAC,MAKvC;IACA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAW,EAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;SAClE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE;YAC3D,GAAG,GAAG;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,yCAAkB,CAAC,CAAU,CAAC;IAC7D,CAAC,CAAC,CACH,CAAC;IACF,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,MAIpB;IACA,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;QACtF,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,6FAA6F;AAC7F,SAAS,cAAc,CAAC,MAAc;IACrC,OAAO;QACN,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,QAAQ,EAAE,+BAAwB,CAAC,WAAW;QAC9C,WAAW,EAAE,EAAE,KAAK,EAAE,IAAA,4BAAY,EAAC,MAAM,CAAC,IAAI,EAAE,6CAAsB,CAAC,EAAE;KACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { SettingsEditorChoice } from "../../../discord/components/settings-editor/settings-editor-fields";
2
+ /**
3
+ * How the settings screen reads a value the settings service returned, shared
4
+ * by what a modal opens on, what the screen shows, and which stored ids the
5
+ * guild still has.
6
+ */
7
+ /** The ids a stored picker value holds: none, one, or a list's. */
8
+ export declare function storedIds(value: unknown): readonly string[];
9
+ /** `set` for a secret the surface reads as set, `not set` otherwise. */
10
+ export declare function secretStateKey(value: unknown): string;
11
+ /** Whether `key` is on in a toggles value. */
12
+ export declare function isToggledOn(params: {
13
+ value: unknown;
14
+ key: string;
15
+ }): boolean;
16
+ /** The catalog key of the choice offering `value`, or `undefined` when none does. */
17
+ export declare function choiceLabelKey(params: {
18
+ choices: readonly SettingsEditorChoice[];
19
+ value: string;
20
+ }): string | undefined;
21
+ //# sourceMappingURL=from-declaration-stored.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-stored.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-stored.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6DAA6D,CAAC;AAGxG;;;;GAIG;AAEH,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAQ3D;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGrD;AAED,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAG5E;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,GAAG,SAAS,CAErB"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storedIds = storedIds;
4
+ exports.secretStateKey = secretStateKey;
5
+ exports.isToggledOn = isToggledOn;
6
+ exports.choiceLabelKey = choiceLabelKey;
7
+ const messages_1 = require("../../../settings/messages");
8
+ /**
9
+ * How the settings screen reads a value the settings service returned, shared
10
+ * by what a modal opens on, what the screen shows, and which stored ids the
11
+ * guild still has.
12
+ */
13
+ /** The ids a stored picker value holds: none, one, or a list's. */
14
+ function storedIds(value) {
15
+ if (typeof value === "string") {
16
+ return [value];
17
+ }
18
+ if (Array.isArray(value)) {
19
+ return value.filter((item) => typeof item === "string");
20
+ }
21
+ return [];
22
+ }
23
+ /** `set` for a secret the surface reads as set, `not set` otherwise. */
24
+ function secretStateKey(value) {
25
+ const isSet = typeof value === "object" && value !== null && "isSet" in value && value.isSet;
26
+ return isSet === true ? messages_1.SETTINGS_MESSAGES.secretSet : messages_1.SETTINGS_MESSAGES.secretNotSet;
27
+ }
28
+ /** Whether `key` is on in a toggles value. */
29
+ function isToggledOn(params) {
30
+ const { value, key } = params;
31
+ return typeof value === "object" && value !== null && Reflect.get(value, key) === true;
32
+ }
33
+ /** The catalog key of the choice offering `value`, or `undefined` when none does. */
34
+ function choiceLabelKey(params) {
35
+ return params.choices.find((choice) => choice.value === params.value)?.labelKey;
36
+ }
37
+ //# sourceMappingURL=from-declaration-stored.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-stored.js","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-stored.ts"],"names":[],"mappings":";;AAUA,8BAQC;AAGD,wCAGC;AAGD,kCAGC;AAGD,wCAKC;AArCD,kDAAwD;AAExD;;;;GAIG;AAEH,mEAAmE;AACnE,SAAgB,SAAS,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,wEAAwE;AACxE,SAAgB,cAAc,CAAC,KAAc;IAC5C,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IAC7F,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,4BAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,4BAAiB,CAAC,YAAY,CAAC;AACtF,CAAC;AAED,8CAA8C;AAC9C,SAAgB,WAAW,CAAC,MAAuC;IAClE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;AACxF,CAAC;AAED,qFAAqF;AACrF,SAAgB,cAAc,CAAC,MAG9B;IACA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;AACjF,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { SettingsDeclaration } from "../../../settings/define-settings";
2
+ import type { RequestContext, SettingsService } from "../../../settings/settings-service";
3
+ /**
4
+ * What the settings screen shows for one guild: every declared field as a
5
+ * surface reads it (a secret as whether it is set), the stored channels,
6
+ * roles and members the guild no longer has, and the label a searchable
7
+ * field's search gives its value.
8
+ */
9
+ export interface DeclarationSubject {
10
+ readonly values: Readonly<Record<string, unknown>>;
11
+ /** Per field key, the stored ids the guild no longer offers. */
12
+ readonly unavailable: Readonly<Record<string, readonly string[]>>;
13
+ /** Per searchable field key, its search's label of the value, when it has one. */
14
+ readonly labels: Readonly<Record<string, string>>;
15
+ }
16
+ /**
17
+ * Read the guild's settings of a declaration for the screen, and find which
18
+ * stored entities it no longer has by asking the service's own validator
19
+ * about each one, so the screen and every other surface agree on it.
20
+ * A searchable field's value is labelled through `service.label`.
21
+ *
22
+ * @param params.declaration - the module's settings declaration.
23
+ * @param params.service - the settings service the screen reads through.
24
+ * @param params.ctx - the guild, the administrator and their locale.
25
+ * @returns the screen's subject.
26
+ */
27
+ export declare function loadDeclarationSubject(params: {
28
+ declaration: SettingsDeclaration;
29
+ service: SettingsService;
30
+ ctx: RequestContext;
31
+ }): Promise<DeclarationSubject>;
32
+ //# sourceMappingURL=from-declaration-subject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-subject.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-subject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnF;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAKD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACpD,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2B9B"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadDeclarationSubject = loadDeclarationSubject;
4
+ const from_declaration_stored_1 = require("../../../discord/components/settings-editor/from-declaration-stored");
5
+ const field_search_1 = require("../../../settings/field-search");
6
+ /** The issues that say a stored id no longer names a usable entity of the guild. */
7
+ const UNAVAILABLE_CODES = new Set(["notFound", "channelType"]);
8
+ /**
9
+ * Read the guild's settings of a declaration for the screen, and find which
10
+ * stored entities it no longer has by asking the service's own validator
11
+ * about each one, so the screen and every other surface agree on it.
12
+ * A searchable field's value is labelled through `service.label`.
13
+ *
14
+ * @param params.declaration - the module's settings declaration.
15
+ * @param params.service - the settings service the screen reads through.
16
+ * @param params.ctx - the guild, the administrator and their locale.
17
+ * @returns the screen's subject.
18
+ */
19
+ async function loadDeclarationSubject(params) {
20
+ const { declaration, service, ctx } = params;
21
+ const values = await service.getForSurface(declaration, ctx.guildId);
22
+ const checked = await Promise.all(Object.entries(declaration.fields).map(async ([key, declared]) => {
23
+ const missing = await unavailableIds({ ...params, key, declared, value: values[key] });
24
+ return [key, missing];
25
+ }));
26
+ const labelled = await Promise.all(Object.entries(declaration.fields).map(async ([key, declared]) => {
27
+ const value = values[key];
28
+ if (value === undefined || (0, field_search_1.fieldSearch)(declared.spec) === undefined) {
29
+ return [];
30
+ }
31
+ const label = await service.label(declaration, key, value, ctx);
32
+ return label === undefined ? [] : [[key, label]];
33
+ }));
34
+ return {
35
+ values,
36
+ unavailable: Object.fromEntries(checked.filter(hasMissingIds)),
37
+ labels: Object.fromEntries(labelled.flat()),
38
+ };
39
+ }
40
+ function hasMissingIds(entry) {
41
+ return entry[1].length > 0;
42
+ }
43
+ /** The ids a field stores that the guild no longer offers. */
44
+ async function unavailableIds(params) {
45
+ const { declaration, service, ctx, key, declared, value } = params;
46
+ const isList = declared.spec.kind === "list";
47
+ if (!isEntityKind(itemKind(declared))) {
48
+ return [];
49
+ }
50
+ const ids = (0, from_declaration_stored_1.storedIds)(value);
51
+ const usable = await Promise.all(ids.map(async (id) => {
52
+ const result = await service.validate(declaration, ctx.guildId, { [key]: isList ? [id] : id }, ctx);
53
+ return result.ok || !result.issues.some((issue) => UNAVAILABLE_CODES.has(issue.code));
54
+ }));
55
+ return ids.filter((_, index) => usable[index] === false);
56
+ }
57
+ /** The kind of a list's items, or of the field itself when it is not a list. */
58
+ function itemKind(declared) {
59
+ return declared.spec.kind === "list" ? declared.spec.item.spec.kind : declared.spec.kind;
60
+ }
61
+ /** Whether a field of this kind references a channel, a role or a member of the guild. */
62
+ function isEntityKind(kind) {
63
+ return kind === "channel" || kind === "role" || kind === "user";
64
+ }
65
+ //# sourceMappingURL=from-declaration-subject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-subject.js","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-subject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { DeclarationControl } from "../../../discord/components/settings-editor/from-declaration-controls";
2
+ import type { DeclarationSubject } from "../../../discord/components/settings-editor/from-declaration-subject";
3
+ import type { SettingsEditorGroupMemberSubmission } from "../../../discord/components/settings-editor/settings-editor-field-modal";
4
+ import { type SettingsEditorFieldValue } from "../../../discord/components/settings-editor/settings-editor-fields";
5
+ import type { TranslateKey } from "../../../i18n/translator";
6
+ /**
7
+ * What the modal of a control opens on: the stored value as text for a typed
8
+ * control, whether a secret is set (never its value), the picked ids for a
9
+ * picker, minus the entities the guild no longer has, which the text then
10
+ * reports as unavailable.
11
+ *
12
+ * @param params.control - the control being opened.
13
+ * @param params.subject - the screen's current subject.
14
+ * @param params.translate - translates the texts shown in place of a value.
15
+ * @returns the control's prefill.
16
+ */
17
+ export declare function controlValue(params: {
18
+ control: DeclarationControl;
19
+ subject: DeclarationSubject;
20
+ translate: TranslateKey;
21
+ }): SettingsEditorFieldValue;
22
+ /**
23
+ * Whether a submission leaves a control as its modal opened: the same picked
24
+ * ids in the same order for a picker (whatever notice its text carries), the
25
+ * same text for a typed control (an empty box and no value alike).
26
+ *
27
+ * @param params.control - the control submitted.
28
+ * @param params.submission - what it came back with.
29
+ * @param params.current - what its modal opened on.
30
+ * @returns `true` when nothing was changed.
31
+ */
32
+ export declare function isUnchanged(params: {
33
+ control: DeclarationControl;
34
+ submission: SettingsEditorGroupMemberSubmission;
35
+ current: SettingsEditorFieldValue;
36
+ }): boolean;
37
+ /**
38
+ * Add what one control submitted to a settings patch, in the form the
39
+ * settings service takes: typed text converted to the value it denotes and
40
+ * left as text when it denotes none (the service then refuses it with the same
41
+ * issue as any surface), `null` for a cleared control, and a toggles select
42
+ * merged into the full record of its field.
43
+ *
44
+ * @param params.control - the control submitted.
45
+ * @param params.submission - what it came back with.
46
+ * @param params.subject - the screen's current subject, for the toggles the
47
+ * select does not show.
48
+ * @param params.patch - the patch built so far.
49
+ * @returns the patch with the control's value.
50
+ */
51
+ export declare function withSubmission(params: {
52
+ control: DeclarationControl;
53
+ submission: SettingsEditorGroupMemberSubmission;
54
+ subject: DeclarationSubject;
55
+ patch: Readonly<Record<string, unknown>>;
56
+ }): Readonly<Record<string, unknown>>;
57
+ //# sourceMappingURL=from-declaration-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-values.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,kBAAkB,EAClB,MAAM,gEAAgE,CAAC;AAMxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+DAA+D,CAAC;AACxG,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,kEAAkE,CAAC;AAK5H,OAAO,EAEN,KAAK,wBAAwB,EAC7B,MAAM,6DAA6D,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUtD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACpC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,YAAY,CAAC;CACxB,GAAG,wBAAwB,CAgC3B;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE;IACnC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,mCAAmC,CAAC;IAChD,OAAO,EAAE,wBAAwB,CAAC;CAClC,GAAG,OAAO,CASV;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,mCAAmC,CAAC;IAChD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKpC"}