@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.
- package/README.md +318 -1
- package/dist/authz/require-level-guard.d.ts +1 -1
- package/dist/authz/require-level-guard.d.ts.map +1 -1
- package/dist/color.d.ts +42 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +130 -0
- package/dist/color.js.map +1 -0
- package/dist/discord/command/all-required.d.ts +8 -0
- package/dist/discord/command/all-required.d.ts.map +1 -0
- package/dist/discord/command/all-required.js +12 -0
- package/dist/discord/command/all-required.js.map +1 -0
- package/dist/discord/command/autocomplete-dispatcher.d.ts.map +1 -1
- package/dist/discord/command/autocomplete-dispatcher.js +2 -1
- package/dist/discord/command/autocomplete-dispatcher.js.map +1 -1
- package/dist/discord/command/autocomplete-limits.d.ts +3 -0
- package/dist/discord/command/autocomplete-limits.d.ts.map +1 -0
- package/dist/discord/command/autocomplete-limits.js +6 -0
- package/dist/discord/command/autocomplete-limits.js.map +1 -0
- package/dist/discord/command/autocomplete.d.ts +6 -1
- package/dist/discord/command/autocomplete.d.ts.map +1 -1
- package/dist/discord/command/autocomplete.js +6 -6
- package/dist/discord/command/autocomplete.js.map +1 -1
- package/dist/discord/command/command-responders.d.ts +26 -0
- package/dist/discord/command/command-responders.d.ts.map +1 -0
- package/dist/discord/command/command-responders.js +16 -0
- package/dist/discord/command/command-responders.js.map +1 -0
- package/dist/discord/command/context.d.ts +8 -17
- package/dist/discord/command/context.d.ts.map +1 -1
- package/dist/discord/command/context.js +8 -37
- package/dist/discord/command/context.js.map +1 -1
- package/dist/discord/command/cooldown-guard.d.ts +1 -1
- package/dist/discord/command/cooldown-guard.d.ts.map +1 -1
- package/dist/discord/command/create-command.d.ts +1 -8
- package/dist/discord/command/create-command.d.ts.map +1 -1
- package/dist/discord/command/create-command.js +17 -65
- package/dist/discord/command/create-command.js.map +1 -1
- package/dist/discord/command/create-context-menu-command.d.ts +3 -9
- package/dist/discord/command/create-context-menu-command.d.ts.map +1 -1
- package/dist/discord/command/create-context-menu-command.js +14 -65
- package/dist/discord/command/create-context-menu-command.js.map +1 -1
- package/dist/discord/command/errors.d.ts +1 -1
- package/dist/discord/command/errors.d.ts.map +1 -1
- package/dist/discord/command/errors.js +2 -2
- package/dist/discord/command/errors.js.map +1 -1
- package/dist/discord/command/guard.d.ts +15 -8
- package/dist/discord/command/guard.d.ts.map +1 -1
- package/dist/discord/command/guard.js +4 -4
- package/dist/discord/command/guard.js.map +1 -1
- package/dist/discord/command/options.d.ts +1 -10
- package/dist/discord/command/options.d.ts.map +1 -1
- package/dist/discord/command/options.js +127 -320
- package/dist/discord/command/options.js.map +1 -1
- package/dist/discord/command/passes-guard.d.ts +14 -0
- package/dist/discord/command/passes-guard.d.ts.map +1 -0
- package/dist/discord/command/passes-guard.js +27 -0
- package/dist/discord/command/passes-guard.js.map +1 -0
- package/dist/discord/command/permission-guard.d.ts +1 -1
- package/dist/discord/command/permission-guard.d.ts.map +1 -1
- package/dist/discord/command/render-command-failure.d.ts +23 -0
- package/dist/discord/command/render-command-failure.d.ts.map +1 -0
- package/dist/discord/command/render-command-failure.js +40 -0
- package/dist/discord/command/render-command-failure.js.map +1 -0
- package/dist/discord/command/route-key.d.ts +8 -0
- package/dist/discord/command/route-key.d.ts.map +1 -0
- package/dist/discord/command/route-key.js +13 -0
- package/dist/discord/command/route-key.js.map +1 -0
- package/dist/discord/command/router.d.ts +32 -7
- package/dist/discord/command/router.d.ts.map +1 -1
- package/dist/discord/command/router.js +48 -10
- package/dist/discord/command/router.js.map +1 -1
- package/dist/discord/command/send-embed.d.ts +14 -0
- package/dist/discord/command/send-embed.d.ts.map +1 -0
- package/dist/discord/command/send-embed.js +37 -0
- package/dist/discord/command/send-embed.js.map +1 -0
- package/dist/discord/command/types.d.ts +7 -1
- package/dist/discord/command/types.d.ts.map +1 -1
- package/dist/discord/components/component-access.d.ts +12 -0
- package/dist/discord/components/component-access.d.ts.map +1 -0
- package/dist/discord/components/component-access.js +21 -0
- package/dist/discord/components/component-access.js.map +1 -0
- package/dist/discord/components/component-router.d.ts +37 -15
- package/dist/discord/components/component-router.d.ts.map +1 -1
- package/dist/discord/components/component-router.js +44 -32
- package/dist/discord/components/component-router.js.map +1 -1
- package/dist/discord/components/interactive-message/index.d.ts +3 -1
- package/dist/discord/components/interactive-message/index.d.ts.map +1 -1
- package/dist/discord/components/interactive-message/index.js +5 -3
- package/dist/discord/components/interactive-message/index.js.map +1 -1
- package/dist/discord/components/interactive-message/interactive-message-collector.d.ts +3 -28
- package/dist/discord/components/interactive-message/interactive-message-collector.d.ts.map +1 -1
- package/dist/discord/components/interactive-message/interactive-message-collector.js +6 -53
- package/dist/discord/components/interactive-message/interactive-message-collector.js.map +1 -1
- package/dist/discord/components/interactive-message/message-edit-options.d.ts +18 -0
- package/dist/discord/components/interactive-message/message-edit-options.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/message-edit-options.js +40 -0
- package/dist/discord/components/interactive-message/message-edit-options.js.map +1 -0
- package/dist/discord/components/interactive-message/mount-interactive-message.d.ts +2 -1
- package/dist/discord/components/interactive-message/mount-interactive-message.d.ts.map +1 -1
- package/dist/discord/components/interactive-message/mount-interactive-message.js +4 -2
- package/dist/discord/components/interactive-message/mount-interactive-message.js.map +1 -1
- package/dist/discord/components/interactive-message/state-store.d.ts +12 -0
- package/dist/discord/components/interactive-message/state-store.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/state-store.js +14 -0
- package/dist/discord/components/interactive-message/state-store.js.map +1 -0
- package/dist/discord/components/paginator/mount-paginator.js +7 -5
- package/dist/discord/components/paginator/mount-paginator.js.map +1 -1
- package/dist/discord/components/paginator/paginator-view.d.ts +1 -1
- package/dist/discord/components/paginator/paginator-view.d.ts.map +1 -1
- package/dist/discord/components/persistent-paginator.d.ts +1 -1
- package/dist/discord/components/persistent-paginator.d.ts.map +1 -1
- package/dist/discord/components/persistent-paginator.js +6 -6
- package/dist/discord/components/persistent-paginator.js.map +1 -1
- package/dist/discord/components/settings-editor/from-declaration-controls.d.ts +67 -0
- package/dist/discord/components/settings-editor/from-declaration-controls.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-controls.js +245 -0
- package/dist/discord/components/settings-editor/from-declaration-controls.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-display.d.ts +23 -0
- package/dist/discord/components/settings-editor/from-declaration-display.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-display.js +114 -0
- package/dist/discord/components/settings-editor/from-declaration-display.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.d.ts +33 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.js +178 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-search.d.ts +27 -0
- package/dist/discord/components/settings-editor/from-declaration-search.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-search.js +58 -0
- package/dist/discord/components/settings-editor/from-declaration-search.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.d.ts +21 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.js +37 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.d.ts +32 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.js +65 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-values.d.ts +57 -0
- package/dist/discord/components/settings-editor/from-declaration-values.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-values.js +187 -0
- package/dist/discord/components/settings-editor/from-declaration-values.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration.d.ts +39 -0
- package/dist/discord/components/settings-editor/from-declaration.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration.js +132 -0
- package/dist/discord/components/settings-editor/from-declaration.js.map +1 -0
- package/dist/discord/components/settings-editor/index.d.ts +3 -1
- package/dist/discord/components/settings-editor/index.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/index.js +6 -3
- package/dist/discord/components/settings-editor/index.js.map +1 -1
- package/dist/discord/components/settings-editor/mount-settings-editor.d.ts +16 -2
- package/dist/discord/components/settings-editor/mount-settings-editor.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/mount-settings-editor.js +14 -10
- package/dist/discord/components/settings-editor/mount-settings-editor.js.map +1 -1
- package/dist/discord/components/settings-editor/navigation.d.ts +20 -0
- package/dist/discord/components/settings-editor/navigation.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/navigation.js +22 -0
- package/dist/discord/components/settings-editor/navigation.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts +4 -3
- package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-card.view.js +60 -34
- package/dist/discord/components/settings-editor/settings-editor-card.view.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts +2 -1
- package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-field-modal.js +48 -72
- package/dist/discord/components/settings-editor/settings-editor-field-modal.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts +6 -0
- package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-field-values.js +13 -0
- package/dist/discord/components/settings-editor/settings-editor-field-values.js.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-fields.d.ts +6 -5
- package/dist/discord/components/settings-editor/settings-editor-fields.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-fields.js +0 -10
- package/dist/discord/components/settings-editor/settings-editor-fields.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor.view.d.ts +3 -2
- package/dist/discord/components/settings-editor/settings-editor.view.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor.view.js +4 -21
- package/dist/discord/components/settings-editor/settings-editor.view.js.map +1 -1
- package/dist/discord/events/event-guild-id.d.ts +10 -0
- package/dist/discord/events/event-guild-id.d.ts.map +1 -0
- package/dist/discord/events/event-guild-id.js +37 -0
- package/dist/discord/events/event-guild-id.js.map +1 -0
- package/dist/discord/events/event-router.d.ts +17 -3
- package/dist/discord/events/event-router.d.ts.map +1 -1
- package/dist/discord/events/event-router.js +33 -9
- package/dist/discord/events/event-router.js.map +1 -1
- package/dist/discord/i18n.d.ts +17 -2
- package/dist/discord/i18n.d.ts.map +1 -1
- package/dist/discord/i18n.js +43 -6
- package/dist/discord/i18n.js.map +1 -1
- package/dist/discord/interaction/interaction-locale.d.ts +14 -0
- package/dist/discord/interaction/interaction-locale.d.ts.map +1 -0
- package/dist/discord/interaction/interaction-locale.js +12 -0
- package/dist/discord/interaction/interaction-locale.js.map +1 -0
- package/dist/discord/interaction/locale-resolver.d.ts +27 -0
- package/dist/discord/interaction/locale-resolver.d.ts.map +1 -0
- package/dist/discord/interaction/locale-resolver.js +3 -0
- package/dist/discord/interaction/locale-resolver.js.map +1 -0
- package/dist/discord/interaction/modal.d.ts.map +1 -1
- package/dist/discord/interaction/modal.js +5 -40
- package/dist/discord/interaction/modal.js.map +1 -1
- package/dist/discord/interaction/reply-locale.d.ts +18 -0
- package/dist/discord/interaction/reply-locale.d.ts.map +1 -0
- package/dist/discord/interaction/reply-locale.js +25 -0
- package/dist/discord/interaction/reply-locale.js.map +1 -0
- package/dist/discord/interaction/select-bounds.d.ts +19 -0
- package/dist/discord/interaction/select-bounds.d.ts.map +1 -0
- package/dist/discord/interaction/select-bounds.js +17 -0
- package/dist/discord/interaction/select-bounds.js.map +1 -0
- package/dist/discord/interaction/select-menu.d.ts.map +1 -1
- package/dist/discord/interaction/select-menu.js +2 -9
- package/dist/discord/interaction/select-menu.js.map +1 -1
- package/dist/discord/placeholder-registry.d.ts +1 -1
- package/dist/discord/placeholder-registry.d.ts.map +1 -1
- package/dist/discord/presenter.d.ts +1 -1
- package/dist/discord/presenter.d.ts.map +1 -1
- package/dist/discord/settings/discord-guild-directory.d.ts +28 -0
- package/dist/discord/settings/discord-guild-directory.d.ts.map +1 -0
- package/dist/discord/settings/discord-guild-directory.js +171 -0
- package/dist/discord/settings/discord-guild-directory.js.map +1 -0
- package/dist/discord/settings/guild-locale-resolver.d.ts +25 -0
- package/dist/discord/settings/guild-locale-resolver.d.ts.map +1 -0
- package/dist/discord/settings/guild-locale-resolver.js +33 -0
- package/dist/discord/settings/guild-locale-resolver.js.map +1 -0
- package/dist/discord/settings/is-module-disabled.d.ts +16 -0
- package/dist/discord/settings/is-module-disabled.d.ts.map +1 -0
- package/dist/discord/settings/is-module-disabled.js +20 -0
- package/dist/discord/settings/is-module-disabled.js.map +1 -0
- package/dist/discord/settings/module-disabled-embed.d.ts +13 -0
- package/dist/discord/settings/module-disabled-embed.d.ts.map +1 -0
- package/dist/discord/settings/module-disabled-embed.js +16 -0
- package/dist/discord/settings/module-disabled-embed.js.map +1 -0
- package/dist/discord/settings/require-configured.d.ts +26 -0
- package/dist/discord/settings/require-configured.d.ts.map +1 -0
- package/dist/discord/settings/require-configured.js +62 -0
- package/dist/discord/settings/require-configured.js.map +1 -0
- package/dist/discord/ui/color-aliases.d.ts +31 -0
- package/dist/discord/ui/color-aliases.d.ts.map +1 -0
- package/dist/discord/ui/color-aliases.js +66 -0
- package/dist/discord/ui/color-aliases.js.map +1 -0
- package/dist/discord/ui/color-input.d.ts +5 -32
- package/dist/discord/ui/color-input.d.ts.map +1 -1
- package/dist/discord/ui/color-input.js +8 -157
- package/dist/discord/ui/color-input.js.map +1 -1
- package/dist/discord/ui/colors.d.ts +0 -2
- package/dist/discord/ui/colors.d.ts.map +1 -1
- package/dist/discord/ui/colors.js +4 -5
- package/dist/discord/ui/colors.js.map +1 -1
- package/dist/discord/ui/embed.d.ts.map +1 -1
- package/dist/discord/ui/embed.js +3 -8
- package/dist/discord/ui/embed.js.map +1 -1
- package/dist/discord/ui/truncate-text.d.ts +11 -0
- package/dist/discord/ui/truncate-text.d.ts.map +1 -0
- package/dist/discord/ui/truncate-text.js +19 -0
- package/dist/discord/ui/truncate-text.js.map +1 -0
- package/dist/errors/error-message.d.ts +9 -0
- package/dist/errors/error-message.d.ts.map +1 -0
- package/dist/errors/error-message.js +14 -0
- package/dist/errors/error-message.js.map +1 -0
- package/dist/i18n/business-message.d.ts +1 -1
- package/dist/i18n/business-message.d.ts.map +1 -1
- package/dist/i18n/catalog.d.ts +9 -0
- package/dist/i18n/catalog.d.ts.map +1 -1
- package/dist/i18n/catalog.js +4 -0
- package/dist/i18n/catalog.js.map +1 -1
- package/dist/i18n/locale.d.ts +2 -0
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/locale.js +3 -1
- package/dist/i18n/locale.js.map +1 -1
- package/dist/i18n/translator.d.ts +2 -0
- package/dist/i18n/translator.d.ts.map +1 -1
- package/dist/i18n/translator.js.map +1 -1
- package/dist/module/module.d.ts +15 -1
- package/dist/module/module.d.ts.map +1 -1
- package/dist/resilience/retry.js +2 -2
- package/dist/resilience/retry.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/scheduler/scheduler.js +2 -4
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/settings/cache.d.ts +29 -0
- package/dist/settings/cache.d.ts.map +1 -0
- package/dist/settings/cache.js +47 -0
- package/dist/settings/cache.js.map +1 -0
- package/dist/settings/choice.d.ts +10 -0
- package/dist/settings/choice.d.ts.map +1 -0
- package/dist/settings/choice.js +3 -0
- package/dist/settings/choice.js.map +1 -0
- package/dist/settings/decode-stored.d.ts +20 -0
- package/dist/settings/decode-stored.d.ts.map +1 -0
- package/dist/settings/decode-stored.js +35 -0
- package/dist/settings/decode-stored.js.map +1 -0
- package/dist/settings/define-settings.d.ts +52 -0
- package/dist/settings/define-settings.d.ts.map +1 -0
- package/dist/settings/define-settings.js +141 -0
- package/dist/settings/define-settings.js.map +1 -0
- package/dist/settings/describe-field.d.ts +19 -0
- package/dist/settings/describe-field.d.ts.map +1 -0
- package/dist/settings/describe-field.js +131 -0
- package/dist/settings/describe-field.js.map +1 -0
- package/dist/settings/describe.d.ts +27 -0
- package/dist/settings/describe.d.ts.map +1 -0
- package/dist/settings/describe.js +62 -0
- package/dist/settings/describe.js.map +1 -0
- package/dist/settings/duration.d.ts +16 -0
- package/dist/settings/duration.d.ts.map +1 -0
- package/dist/settings/duration.js +56 -0
- package/dist/settings/duration.js.map +1 -0
- package/dist/settings/field-order.d.ts +37 -0
- package/dist/settings/field-order.d.ts.map +1 -0
- package/dist/settings/field-order.js +100 -0
- package/dist/settings/field-order.js.map +1 -0
- package/dist/settings/field-search.d.ts +10 -0
- package/dist/settings/field-search.d.ts.map +1 -0
- package/dist/settings/field-search.js +18 -0
- package/dist/settings/field-search.js.map +1 -0
- package/dist/settings/fields/builders.d.ts +41 -0
- package/dist/settings/fields/builders.d.ts.map +1 -0
- package/dist/settings/fields/builders.js +83 -0
- package/dist/settings/fields/builders.js.map +1 -0
- package/dist/settings/fields/field.d.ts +199 -0
- package/dist/settings/fields/field.d.ts.map +1 -0
- package/dist/settings/fields/field.js +33 -0
- package/dist/settings/fields/field.js.map +1 -0
- package/dist/settings/fields/zod-schema.d.ts +67 -0
- package/dist/settings/fields/zod-schema.d.ts.map +1 -0
- package/dist/settings/fields/zod-schema.js +281 -0
- package/dist/settings/fields/zod-schema.js.map +1 -0
- package/dist/settings/in-memory/in-memory-guild-directory.d.ts +24 -0
- package/dist/settings/in-memory/in-memory-guild-directory.d.ts.map +1 -0
- package/dist/settings/in-memory/in-memory-guild-directory.js +42 -0
- package/dist/settings/in-memory/in-memory-guild-directory.js.map +1 -0
- package/dist/settings/in-memory/in-memory-settings-store.d.ts +8 -0
- package/dist/settings/in-memory/in-memory-settings-store.d.ts.map +1 -0
- package/dist/settings/in-memory/in-memory-settings-store.js +43 -0
- package/dist/settings/in-memory/in-memory-settings-store.js.map +1 -0
- package/dist/settings/in-memory/in-process-notifier.d.ts +9 -0
- package/dist/settings/in-memory/in-process-notifier.d.ts.map +1 -0
- package/dist/settings/in-memory/in-process-notifier.js +32 -0
- package/dist/settings/in-memory/in-process-notifier.js.map +1 -0
- package/dist/settings/index.d.ts +22 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +31 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/is-plain-object.d.ts +6 -0
- package/dist/settings/is-plain-object.d.ts.map +1 -0
- package/dist/settings/is-plain-object.js +15 -0
- package/dist/settings/is-plain-object.js.map +1 -0
- package/dist/settings/messages.d.ts +61 -0
- package/dist/settings/messages.d.ts.map +1 -0
- package/dist/settings/messages.js +155 -0
- package/dist/settings/messages.js.map +1 -0
- package/dist/settings/migrate.d.ts +35 -0
- package/dist/settings/migrate.d.ts.map +1 -0
- package/dist/settings/migrate.js +42 -0
- package/dist/settings/migrate.js.map +1 -0
- package/dist/settings/ports/guild-directory.d.ts +61 -0
- package/dist/settings/ports/guild-directory.d.ts.map +1 -0
- package/dist/settings/ports/guild-directory.js +3 -0
- package/dist/settings/ports/guild-directory.js.map +1 -0
- package/dist/settings/ports/settings-changed-notifier.d.ts +20 -0
- package/dist/settings/ports/settings-changed-notifier.d.ts.map +1 -0
- package/dist/settings/ports/settings-changed-notifier.js +3 -0
- package/dist/settings/ports/settings-changed-notifier.js.map +1 -0
- package/dist/settings/ports/settings-store.d.ts +76 -0
- package/dist/settings/ports/settings-store.d.ts.map +1 -0
- package/dist/settings/ports/settings-store.js +3 -0
- package/dist/settings/ports/settings-store.js.map +1 -0
- package/dist/settings/registry.d.ts +31 -0
- package/dist/settings/registry.d.ts.map +1 -0
- package/dist/settings/registry.js +102 -0
- package/dist/settings/registry.js.map +1 -0
- package/dist/settings/settings-declaration-error.d.ts +13 -0
- package/dist/settings/settings-declaration-error.d.ts.map +1 -0
- package/dist/settings/settings-declaration-error.js +22 -0
- package/dist/settings/settings-declaration-error.js.map +1 -0
- package/dist/settings/settings-service.d.ts +148 -0
- package/dist/settings/settings-service.d.ts.map +1 -0
- package/dist/settings/settings-service.js +279 -0
- package/dist/settings/settings-service.js.map +1 -0
- package/dist/settings/settings-validation-error.d.ts +23 -0
- package/dist/settings/settings-validation-error.d.ts.map +1 -0
- package/dist/settings/settings-validation-error.js +17 -0
- package/dist/settings/settings-validation-error.js.map +1 -0
- package/dist/settings/status.d.ts +16 -0
- package/dist/settings/status.d.ts.map +1 -0
- package/dist/settings/status.js +18 -0
- package/dist/settings/status.js.map +1 -0
- package/dist/settings/suggest.d.ts +77 -0
- package/dist/settings/suggest.d.ts.map +1 -0
- package/dist/settings/suggest.js +192 -0
- package/dist/settings/suggest.js.map +1 -0
- package/dist/settings/system/kernel-settings.d.ts +43 -0
- package/dist/settings/system/kernel-settings.d.ts.map +1 -0
- package/dist/settings/system/kernel-settings.js +53 -0
- package/dist/settings/system/kernel-settings.js.map +1 -0
- package/dist/settings/system/module-gate.d.ts +31 -0
- package/dist/settings/system/module-gate.d.ts.map +1 -0
- package/dist/settings/system/module-gate.js +34 -0
- package/dist/settings/system/module-gate.js.map +1 -0
- package/dist/settings/testing/index.d.ts +2 -0
- package/dist/settings/testing/index.d.ts.map +1 -0
- package/dist/settings/testing/index.js +6 -0
- package/dist/settings/testing/index.js.map +1 -0
- package/dist/settings/testing/settings-store-contract.d.ts +29 -0
- package/dist/settings/testing/settings-store-contract.d.ts.map +1 -0
- package/dist/settings/testing/settings-store-contract.js +192 -0
- package/dist/settings/testing/settings-store-contract.js.map +1 -0
- package/dist/settings/timed-search.d.ts +26 -0
- package/dist/settings/timed-search.d.ts.map +1 -0
- package/dist/settings/timed-search.js +48 -0
- package/dist/settings/timed-search.js.map +1 -0
- package/dist/settings/types.d.ts +37 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +3 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/settings/validate.d.ts +55 -0
- package/dist/settings/validate.d.ts.map +1 -0
- package/dist/settings/validate.js +196 -0
- package/dist/settings/validate.js.map +1 -0
- package/package.json +463 -88
- package/src/authz/require-level-guard.ts +1 -1
- package/src/color.ts +134 -0
- package/src/discord/command/all-required.ts +12 -0
- package/src/discord/command/autocomplete-dispatcher.ts +2 -1
- package/src/discord/command/autocomplete-limits.ts +2 -0
- package/src/discord/command/autocomplete.ts +8 -7
- package/src/discord/command/command-responders.ts +39 -0
- package/src/discord/command/context.ts +14 -54
- package/src/discord/command/cooldown-guard.ts +1 -1
- package/src/discord/command/create-command.ts +19 -94
- package/src/discord/command/create-context-menu-command.ts +19 -97
- package/src/discord/command/errors.ts +1 -1
- package/src/discord/command/guard.ts +24 -12
- package/src/discord/command/options.ts +202 -412
- package/src/discord/command/passes-guard.ts +37 -0
- package/src/discord/command/permission-guard.ts +1 -1
- package/src/discord/command/render-command-failure.ts +71 -0
- package/src/discord/command/route-key.ts +9 -0
- package/src/discord/command/router.ts +73 -12
- package/src/discord/command/send-embed.ts +42 -0
- package/src/discord/command/types.ts +7 -1
- package/src/discord/components/component-access.ts +20 -0
- package/src/discord/components/component-router.ts +73 -36
- package/src/discord/components/interactive-message/index.ts +5 -3
- package/src/discord/components/interactive-message/interactive-message-collector.ts +4 -68
- package/src/discord/components/interactive-message/message-edit-options.ts +47 -0
- package/src/discord/components/interactive-message/mount-interactive-message.ts +5 -3
- package/src/discord/components/interactive-message/state-store.ts +20 -0
- package/src/discord/components/paginator/mount-paginator.ts +3 -3
- package/src/discord/components/paginator/paginator-view.ts +1 -1
- package/src/discord/components/persistent-paginator.ts +8 -9
- package/src/discord/components/settings-editor/from-declaration-controls.ts +371 -0
- package/src/discord/components/settings-editor/from-declaration-display.ts +155 -0
- package/src/discord/components/settings-editor/from-declaration-layout.ts +247 -0
- package/src/discord/components/settings-editor/from-declaration-search.ts +77 -0
- package/src/discord/components/settings-editor/from-declaration-stored.ts +39 -0
- package/src/discord/components/settings-editor/from-declaration-subject.ts +110 -0
- package/src/discord/components/settings-editor/from-declaration-values.ts +240 -0
- package/src/discord/components/settings-editor/from-declaration.ts +218 -0
- package/src/discord/components/settings-editor/index.ts +5 -2
- package/src/discord/components/settings-editor/mount-settings-editor.ts +28 -10
- package/src/discord/components/settings-editor/navigation.ts +41 -0
- package/src/discord/components/settings-editor/settings-editor-card.view.ts +79 -36
- package/src/discord/components/settings-editor/settings-editor-field-modal.ts +76 -68
- package/src/discord/components/settings-editor/settings-editor-field-values.ts +11 -0
- package/src/discord/components/settings-editor/settings-editor-fields.ts +6 -11
- package/src/discord/components/settings-editor/settings-editor.view.ts +11 -24
- package/src/discord/events/event-guild-id.ts +35 -0
- package/src/discord/events/event-router.ts +46 -13
- package/src/discord/i18n.ts +47 -8
- package/src/discord/interaction/interaction-locale.ts +19 -0
- package/src/discord/interaction/locale-resolver.ts +28 -0
- package/src/discord/interaction/modal.ts +5 -40
- package/src/discord/interaction/reply-locale.ts +35 -0
- package/src/discord/interaction/select-bounds.ts +33 -0
- package/src/discord/interaction/select-menu.ts +2 -9
- package/src/discord/placeholder-registry.ts +1 -1
- package/src/discord/presenter.ts +1 -1
- package/src/discord/settings/discord-guild-directory.ts +214 -0
- package/src/discord/settings/guild-locale-resolver.ts +38 -0
- package/src/discord/settings/is-module-disabled.ts +22 -0
- package/src/discord/settings/module-disabled-embed.ts +19 -0
- package/src/discord/settings/require-configured.ts +68 -0
- package/src/discord/ui/color-aliases.ts +70 -0
- package/src/discord/ui/color-input.ts +8 -173
- package/src/discord/ui/colors.ts +2 -3
- package/src/discord/ui/embed.ts +3 -9
- package/src/discord/ui/truncate-text.ts +15 -0
- package/src/errors/error-message.ts +10 -0
- package/src/i18n/business-message.ts +1 -1
- package/src/i18n/catalog.ts +14 -0
- package/src/i18n/locale.ts +3 -0
- package/src/i18n/translator.ts +3 -0
- package/src/module/module.ts +15 -1
- package/src/resilience/retry.ts +1 -1
- package/src/scheduler/scheduler.ts +2 -5
- package/src/settings/cache.ts +70 -0
- package/src/settings/choice.ts +9 -0
- package/src/settings/decode-stored.ts +40 -0
- package/src/settings/define-settings.ts +214 -0
- package/src/settings/describe-field.ts +155 -0
- package/src/settings/describe.ts +90 -0
- package/src/settings/duration.ts +54 -0
- package/src/settings/field-order.ts +128 -0
- package/src/settings/field-search.ts +16 -0
- package/src/settings/fields/builders.ts +161 -0
- package/src/settings/fields/field.ts +205 -0
- package/src/settings/fields/zod-schema.ts +300 -0
- package/src/settings/in-memory/in-memory-guild-directory.ts +69 -0
- package/src/settings/in-memory/in-memory-settings-store.ts +46 -0
- package/src/settings/in-memory/in-process-notifier.ts +40 -0
- package/src/settings/index.ts +72 -0
- package/src/settings/is-plain-object.ts +11 -0
- package/src/settings/messages.ts +161 -0
- package/src/settings/migrate.ts +58 -0
- package/src/settings/ports/guild-directory.ts +48 -0
- package/src/settings/ports/settings-changed-notifier.ts +20 -0
- package/src/settings/ports/settings-store.ts +74 -0
- package/src/settings/registry.ts +137 -0
- package/src/settings/settings-declaration-error.ts +16 -0
- package/src/settings/settings-service.ts +535 -0
- package/src/settings/settings-validation-error.ts +41 -0
- package/src/settings/status.ts +25 -0
- package/src/settings/suggest.ts +267 -0
- package/src/settings/system/kernel-settings.ts +74 -0
- package/src/settings/system/module-gate.ts +49 -0
- package/src/settings/testing/index.ts +7 -0
- package/src/settings/testing/settings-store-contract.ts +278 -0
- package/src/settings/timed-search.ts +56 -0
- package/src/settings/types.ts +42 -0
- package/src/settings/validate.ts +298 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { KeyedCatalog, MessageKey } from "../i18n/catalog";
|
|
2
|
+
/**
|
|
3
|
+
* Catalog key of each validation issue. Typed over every {@link SettingsIssueCode}
|
|
4
|
+
* so adding a code without its wording fails to compile.
|
|
5
|
+
*
|
|
6
|
+
* Placeholders: `min` / `minLength` / `minItems` take `{min}`, `max` /
|
|
7
|
+
* `maxLength` / `maxItems` take `{max}`; the others take none.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SETTINGS_ISSUE_MESSAGES: {
|
|
10
|
+
readonly required: "core.settings.issue.required";
|
|
11
|
+
readonly type: "core.settings.issue.type";
|
|
12
|
+
readonly min: "core.settings.issue.min";
|
|
13
|
+
readonly max: "core.settings.issue.max";
|
|
14
|
+
readonly minLength: "core.settings.issue.min-length";
|
|
15
|
+
readonly maxLength: "core.settings.issue.max-length";
|
|
16
|
+
readonly minItems: "core.settings.issue.min-items";
|
|
17
|
+
readonly maxItems: "core.settings.issue.max-items";
|
|
18
|
+
readonly duplicate: "core.settings.issue.duplicate";
|
|
19
|
+
readonly channelType: "core.settings.issue.channel-type";
|
|
20
|
+
readonly notFound: "core.settings.issue.not-found";
|
|
21
|
+
readonly unknownChoice: "core.settings.issue.unknown-choice";
|
|
22
|
+
readonly unknownField: "core.settings.issue.unknown-field";
|
|
23
|
+
};
|
|
24
|
+
/** Catalog keys for the settings feature's own wording outside validation. */
|
|
25
|
+
export declare const SETTINGS_MESSAGES: {
|
|
26
|
+
/** Shown instead of a secret's value, which no surface ever reads back. */
|
|
27
|
+
readonly secretSet: "core.settings.secret.set";
|
|
28
|
+
readonly secretNotSet: "core.settings.secret.not-set";
|
|
29
|
+
/** Shown for a stored channel, role or member the guild no longer has. */
|
|
30
|
+
readonly valueUnavailable: "core.settings.value.unavailable";
|
|
31
|
+
/** Shown for a setting that holds no value. */
|
|
32
|
+
readonly valueNotSet: "core.settings.value.not-set";
|
|
33
|
+
/** Shown for a toggles setting with none of its toggles on. */
|
|
34
|
+
readonly valueNone: "core.settings.value.none";
|
|
35
|
+
/** The two options a yes/no setting is picked from. */
|
|
36
|
+
readonly booleanTrue: "core.settings.boolean.true";
|
|
37
|
+
readonly booleanFalse: "core.settings.boolean.false";
|
|
38
|
+
/** Reply when a module disabled on the guild is used there. */
|
|
39
|
+
readonly moduleDisabled: "core.settings.module.disabled";
|
|
40
|
+
/** Reply when a module still lacks a required setting. */
|
|
41
|
+
readonly moduleNotConfigured: "core.settings.module.not-configured";
|
|
42
|
+
/** The missing settings, listed only to members who can fix them. */
|
|
43
|
+
readonly moduleNotConfiguredMissing: "core.settings.module.not-configured-missing";
|
|
44
|
+
};
|
|
45
|
+
/** Catalog keys of the kernel's own settings declaration (`kernelSettings`). */
|
|
46
|
+
export declare const KERNEL_SETTINGS_MESSAGES: {
|
|
47
|
+
readonly title: "core.settings.kernel.title";
|
|
48
|
+
readonly description: "core.settings.kernel.description";
|
|
49
|
+
readonly modules: "core.settings.kernel.modules";
|
|
50
|
+
readonly modulesDescription: "core.settings.kernel.modules-description";
|
|
51
|
+
readonly locale: "core.settings.kernel.locale";
|
|
52
|
+
readonly localeDescription: "core.settings.kernel.locale-description";
|
|
53
|
+
readonly localeEn: "core.settings.kernel.locale-en";
|
|
54
|
+
readonly localeFr: "core.settings.kernel.locale-fr";
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* The settings feature's strings, registered by the composition root alongside
|
|
58
|
+
* the core catalog.
|
|
59
|
+
*/
|
|
60
|
+
export declare const SETTINGS_CATALOG: KeyedCatalog<MessageKey<typeof SETTINGS_ISSUE_MESSAGES> | MessageKey<typeof SETTINGS_MESSAGES> | MessageKey<typeof KERNEL_SETTINGS_MESSAGES>>;
|
|
61
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/settings/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG/D;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;CAc4B,CAAC;AAEjE,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB;IAC7B,2EAA2E;;;IAG3E,0EAA0E;;IAE1E,+CAA+C;;IAE/C,+DAA+D;;IAE/D,uDAAuD;;;IAGvD,+DAA+D;;IAE/D,0DAA0D;;IAE1D,qEAAqE;;CAE5D,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,wBAAwB;;;;;;;;;CAS3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CACxC,UAAU,CAAC,OAAO,uBAAuB,CAAC,GAC1C,UAAU,CAAC,OAAO,iBAAiB,CAAC,GACpC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CA6F7C,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SETTINGS_CATALOG = exports.KERNEL_SETTINGS_MESSAGES = exports.SETTINGS_MESSAGES = exports.SETTINGS_ISSUE_MESSAGES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Catalog key of each validation issue. Typed over every {@link SettingsIssueCode}
|
|
6
|
+
* so adding a code without its wording fails to compile.
|
|
7
|
+
*
|
|
8
|
+
* Placeholders: `min` / `minLength` / `minItems` take `{min}`, `max` /
|
|
9
|
+
* `maxLength` / `maxItems` take `{max}`; the others take none.
|
|
10
|
+
*/
|
|
11
|
+
exports.SETTINGS_ISSUE_MESSAGES = {
|
|
12
|
+
required: "core.settings.issue.required",
|
|
13
|
+
type: "core.settings.issue.type",
|
|
14
|
+
min: "core.settings.issue.min",
|
|
15
|
+
max: "core.settings.issue.max",
|
|
16
|
+
minLength: "core.settings.issue.min-length",
|
|
17
|
+
maxLength: "core.settings.issue.max-length",
|
|
18
|
+
minItems: "core.settings.issue.min-items",
|
|
19
|
+
maxItems: "core.settings.issue.max-items",
|
|
20
|
+
duplicate: "core.settings.issue.duplicate",
|
|
21
|
+
channelType: "core.settings.issue.channel-type",
|
|
22
|
+
notFound: "core.settings.issue.not-found",
|
|
23
|
+
unknownChoice: "core.settings.issue.unknown-choice",
|
|
24
|
+
unknownField: "core.settings.issue.unknown-field",
|
|
25
|
+
};
|
|
26
|
+
/** Catalog keys for the settings feature's own wording outside validation. */
|
|
27
|
+
exports.SETTINGS_MESSAGES = {
|
|
28
|
+
/** Shown instead of a secret's value, which no surface ever reads back. */
|
|
29
|
+
secretSet: "core.settings.secret.set",
|
|
30
|
+
secretNotSet: "core.settings.secret.not-set",
|
|
31
|
+
/** Shown for a stored channel, role or member the guild no longer has. */
|
|
32
|
+
valueUnavailable: "core.settings.value.unavailable",
|
|
33
|
+
/** Shown for a setting that holds no value. */
|
|
34
|
+
valueNotSet: "core.settings.value.not-set",
|
|
35
|
+
/** Shown for a toggles setting with none of its toggles on. */
|
|
36
|
+
valueNone: "core.settings.value.none",
|
|
37
|
+
/** The two options a yes/no setting is picked from. */
|
|
38
|
+
booleanTrue: "core.settings.boolean.true",
|
|
39
|
+
booleanFalse: "core.settings.boolean.false",
|
|
40
|
+
/** Reply when a module disabled on the guild is used there. */
|
|
41
|
+
moduleDisabled: "core.settings.module.disabled",
|
|
42
|
+
/** Reply when a module still lacks a required setting. */
|
|
43
|
+
moduleNotConfigured: "core.settings.module.not-configured",
|
|
44
|
+
/** The missing settings, listed only to members who can fix them. */
|
|
45
|
+
moduleNotConfiguredMissing: "core.settings.module.not-configured-missing",
|
|
46
|
+
};
|
|
47
|
+
/** Catalog keys of the kernel's own settings declaration (`kernelSettings`). */
|
|
48
|
+
exports.KERNEL_SETTINGS_MESSAGES = {
|
|
49
|
+
title: "core.settings.kernel.title",
|
|
50
|
+
description: "core.settings.kernel.description",
|
|
51
|
+
modules: "core.settings.kernel.modules",
|
|
52
|
+
modulesDescription: "core.settings.kernel.modules-description",
|
|
53
|
+
locale: "core.settings.kernel.locale",
|
|
54
|
+
localeDescription: "core.settings.kernel.locale-description",
|
|
55
|
+
localeEn: "core.settings.kernel.locale-en",
|
|
56
|
+
localeFr: "core.settings.kernel.locale-fr",
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The settings feature's strings, registered by the composition root alongside
|
|
60
|
+
* the core catalog.
|
|
61
|
+
*/
|
|
62
|
+
exports.SETTINGS_CATALOG = {
|
|
63
|
+
[exports.SETTINGS_ISSUE_MESSAGES.required]: {
|
|
64
|
+
en: "This setting is required.",
|
|
65
|
+
fr: "Ce paramètre est obligatoire.",
|
|
66
|
+
},
|
|
67
|
+
[exports.SETTINGS_ISSUE_MESSAGES.type]: {
|
|
68
|
+
en: "This value is not of the expected kind.",
|
|
69
|
+
fr: "Cette valeur n'est pas du type attendu.",
|
|
70
|
+
},
|
|
71
|
+
[exports.SETTINGS_ISSUE_MESSAGES.min]: {
|
|
72
|
+
en: "Must be at least {min}.",
|
|
73
|
+
fr: "Doit être au moins {min}.",
|
|
74
|
+
},
|
|
75
|
+
[exports.SETTINGS_ISSUE_MESSAGES.max]: {
|
|
76
|
+
en: "Must be at most {max}.",
|
|
77
|
+
fr: "Doit être au plus {max}.",
|
|
78
|
+
},
|
|
79
|
+
[exports.SETTINGS_ISSUE_MESSAGES.minLength]: {
|
|
80
|
+
en: "Must be at least {min} characters long.",
|
|
81
|
+
fr: "Doit contenir au moins {min} caractères.",
|
|
82
|
+
},
|
|
83
|
+
[exports.SETTINGS_ISSUE_MESSAGES.maxLength]: {
|
|
84
|
+
en: "Must be at most {max} characters long.",
|
|
85
|
+
fr: "Doit contenir au plus {max} caractères.",
|
|
86
|
+
},
|
|
87
|
+
[exports.SETTINGS_ISSUE_MESSAGES.minItems]: {
|
|
88
|
+
en: "Pick at least {min} items.",
|
|
89
|
+
fr: "Choisissez au moins {min} éléments.",
|
|
90
|
+
},
|
|
91
|
+
[exports.SETTINGS_ISSUE_MESSAGES.maxItems]: {
|
|
92
|
+
en: "Pick at most {max} items.",
|
|
93
|
+
fr: "Choisissez au plus {max} éléments.",
|
|
94
|
+
},
|
|
95
|
+
[exports.SETTINGS_ISSUE_MESSAGES.duplicate]: {
|
|
96
|
+
en: "The same value is listed more than once.",
|
|
97
|
+
fr: "La même valeur apparaît plusieurs fois.",
|
|
98
|
+
},
|
|
99
|
+
[exports.SETTINGS_ISSUE_MESSAGES.channelType]: {
|
|
100
|
+
en: "This type of channel is not allowed here.",
|
|
101
|
+
fr: "Ce type de salon n'est pas autorisé ici.",
|
|
102
|
+
},
|
|
103
|
+
[exports.SETTINGS_ISSUE_MESSAGES.notFound]: {
|
|
104
|
+
en: "This no longer exists on this server.",
|
|
105
|
+
fr: "Cet élément n'existe plus sur ce serveur.",
|
|
106
|
+
},
|
|
107
|
+
[exports.SETTINGS_ISSUE_MESSAGES.unknownChoice]: {
|
|
108
|
+
en: "This value is not one of the allowed choices.",
|
|
109
|
+
fr: "Cette valeur ne fait pas partie des choix autorisés.",
|
|
110
|
+
},
|
|
111
|
+
[exports.SETTINGS_ISSUE_MESSAGES.unknownField]: {
|
|
112
|
+
en: "This setting does not exist.",
|
|
113
|
+
fr: "Ce paramètre n'existe pas.",
|
|
114
|
+
},
|
|
115
|
+
[exports.SETTINGS_MESSAGES.secretSet]: { en: "Set", fr: "Défini" },
|
|
116
|
+
[exports.SETTINGS_MESSAGES.secretNotSet]: { en: "Not set", fr: "Non défini" },
|
|
117
|
+
[exports.SETTINGS_MESSAGES.valueUnavailable]: {
|
|
118
|
+
en: "A saved value is unavailable: it no longer exists on this server.",
|
|
119
|
+
fr: "Une valeur enregistrée est indisponible : elle n'existe plus sur ce serveur.",
|
|
120
|
+
},
|
|
121
|
+
[exports.SETTINGS_MESSAGES.valueNotSet]: { en: "Not set", fr: "Non défini" },
|
|
122
|
+
[exports.SETTINGS_MESSAGES.valueNone]: { en: "None", fr: "Aucun" },
|
|
123
|
+
[exports.SETTINGS_MESSAGES.booleanTrue]: { en: "Yes", fr: "Oui" },
|
|
124
|
+
[exports.SETTINGS_MESSAGES.booleanFalse]: { en: "No", fr: "Non" },
|
|
125
|
+
[exports.SETTINGS_MESSAGES.moduleDisabled]: {
|
|
126
|
+
en: "This feature is disabled on this server.",
|
|
127
|
+
fr: "Cette fonctionnalité est désactivée sur ce serveur.",
|
|
128
|
+
},
|
|
129
|
+
[exports.SETTINGS_MESSAGES.moduleNotConfigured]: {
|
|
130
|
+
en: "This feature is not configured on this server yet: an administrator must set it up first.",
|
|
131
|
+
fr: "Cette fonctionnalité n'est pas encore configurée sur ce serveur : un administrateur doit d'abord la configurer.",
|
|
132
|
+
},
|
|
133
|
+
[exports.SETTINGS_MESSAGES.moduleNotConfiguredMissing]: {
|
|
134
|
+
en: "Missing settings: {fields}.",
|
|
135
|
+
fr: "Paramètres manquants : {fields}.",
|
|
136
|
+
},
|
|
137
|
+
[exports.KERNEL_SETTINGS_MESSAGES.title]: { en: "Server", fr: "Serveur" },
|
|
138
|
+
[exports.KERNEL_SETTINGS_MESSAGES.description]: {
|
|
139
|
+
en: "Features enabled on this server and the bot's language.",
|
|
140
|
+
fr: "Fonctionnalités activées sur ce serveur et langue du bot.",
|
|
141
|
+
},
|
|
142
|
+
[exports.KERNEL_SETTINGS_MESSAGES.modules]: { en: "Features", fr: "Fonctionnalités" },
|
|
143
|
+
[exports.KERNEL_SETTINGS_MESSAGES.modulesDescription]: {
|
|
144
|
+
en: "Turn a feature off to stop its commands, buttons and events on this server.",
|
|
145
|
+
fr: "Désactivez une fonctionnalité pour arrêter ses commandes, boutons et événements sur ce serveur.",
|
|
146
|
+
},
|
|
147
|
+
[exports.KERNEL_SETTINGS_MESSAGES.locale]: { en: "Language", fr: "Langue" },
|
|
148
|
+
[exports.KERNEL_SETTINGS_MESSAGES.localeDescription]: {
|
|
149
|
+
en: "The bot's language on this server, when a member's own language is not supported.",
|
|
150
|
+
fr: "La langue du bot sur ce serveur, lorsque la langue d'un membre n'est pas prise en charge.",
|
|
151
|
+
},
|
|
152
|
+
[exports.KERNEL_SETTINGS_MESSAGES.localeEn]: { en: "English", fr: "Anglais" },
|
|
153
|
+
[exports.KERNEL_SETTINGS_MESSAGES.localeFr]: { en: "French", fr: "Français" },
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/settings/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SettingsDeclaration } from "../settings/define-settings";
|
|
2
|
+
import type { StoredSettings } from "../settings/ports/settings-store";
|
|
3
|
+
/**
|
|
4
|
+
* Outcome of {@link migrateStored}. Either way, `values` are the valid declared
|
|
5
|
+
* fields a guild reads; only an `ok` outcome may be written back (FR-018).
|
|
6
|
+
*/
|
|
7
|
+
export type MigrationOutcome = {
|
|
8
|
+
readonly ok: true;
|
|
9
|
+
readonly values: Readonly<Record<string, unknown>>;
|
|
10
|
+
} | {
|
|
11
|
+
readonly ok: false;
|
|
12
|
+
readonly values: Readonly<Record<string, unknown>>;
|
|
13
|
+
/** The declared fields whose migrated value fails validation. */
|
|
14
|
+
readonly invalidKeys: readonly string[];
|
|
15
|
+
/** What the migration threw, or why its result was refused. */
|
|
16
|
+
readonly error?: unknown;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Reshape values stored under an older declaration version with the
|
|
20
|
+
* declaration's `migrate`, then validate the result through the same checks
|
|
21
|
+
* as any stored value. Pure: it reads and writes nothing, and hands `migrate` a
|
|
22
|
+
* copy, so the stored record is never touched.
|
|
23
|
+
*
|
|
24
|
+
* - `migrate` throws, is missing, or returns anything but a plain object: not
|
|
25
|
+
* `ok`, and `values` are the stored values that still validate as they are.
|
|
26
|
+
* - Some migrated field fails validation: not `ok`, and `values` are the
|
|
27
|
+
* migrated fields that validate.
|
|
28
|
+
* - Otherwise `ok`, with every migrated declared field; undeclared keys the
|
|
29
|
+
* migration returns are dropped.
|
|
30
|
+
*
|
|
31
|
+
* @param declaration - the module's current declaration.
|
|
32
|
+
* @param stored - a record whose `version` is below `declaration.version`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function migrateStored(declaration: SettingsDeclaration, stored: Pick<StoredSettings, "version" | "values">): MigrationOutcome;
|
|
35
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/settings/migrate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACzB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,GACzE;IACA,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEL;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAC5B,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,QAAQ,CAAC,GAChD,gBAAgB,CAkBlB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.migrateStored = migrateStored;
|
|
4
|
+
const decode_stored_1 = require("../settings/decode-stored");
|
|
5
|
+
const is_plain_object_1 = require("../settings/is-plain-object");
|
|
6
|
+
/**
|
|
7
|
+
* Reshape values stored under an older declaration version with the
|
|
8
|
+
* declaration's `migrate`, then validate the result through the same checks
|
|
9
|
+
* as any stored value. Pure: it reads and writes nothing, and hands `migrate` a
|
|
10
|
+
* copy, so the stored record is never touched.
|
|
11
|
+
*
|
|
12
|
+
* - `migrate` throws, is missing, or returns anything but a plain object: not
|
|
13
|
+
* `ok`, and `values` are the stored values that still validate as they are.
|
|
14
|
+
* - Some migrated field fails validation: not `ok`, and `values` are the
|
|
15
|
+
* migrated fields that validate.
|
|
16
|
+
* - Otherwise `ok`, with every migrated declared field; undeclared keys the
|
|
17
|
+
* migration returns are dropped.
|
|
18
|
+
*
|
|
19
|
+
* @param declaration - the module's current declaration.
|
|
20
|
+
* @param stored - a record whose `version` is below `declaration.version`.
|
|
21
|
+
*/
|
|
22
|
+
function migrateStored(declaration, stored) {
|
|
23
|
+
let migrated;
|
|
24
|
+
try {
|
|
25
|
+
if (declaration.migrate === undefined) {
|
|
26
|
+
throw new Error(`module "${declaration.id}" declares no migration`);
|
|
27
|
+
}
|
|
28
|
+
migrated = declaration.migrate(stored.version, structuredClone(stored.values));
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return { ok: false, error, ...(0, decode_stored_1.decodeStored)(declaration, stored.values) };
|
|
32
|
+
}
|
|
33
|
+
if (!(0, is_plain_object_1.isPlainObject)(migrated)) {
|
|
34
|
+
const error = new Error(`the migration of module "${declaration.id}" returned no plain object`);
|
|
35
|
+
return { ok: false, error, ...(0, decode_stored_1.decodeStored)(declaration, stored.values) };
|
|
36
|
+
}
|
|
37
|
+
const decoded = (0, decode_stored_1.decodeStored)(declaration, migrated);
|
|
38
|
+
return decoded.invalidKeys.length === 0
|
|
39
|
+
? { ok: true, values: decoded.values }
|
|
40
|
+
: { ok: false, ...decoded };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/settings/migrate.ts"],"names":[],"mappings":";;AAoCA,sCAqBC;AAzDD,4DAAwD;AAExD,gEAA2D;AAkB3D;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,aAAa,CAC5B,WAAgC,EAChC,MAAkD;IAElD,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACrE,CAAC;QACD,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAA,4BAAY,EAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,IAAA,+BAAa,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,4BAA4B,WAAW,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAChG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAA,4BAAY,EAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,4BAAY,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QACtC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACtC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendor-free channel category a channel field can be restricted to. Each
|
|
3
|
+
* member maps one to one to a guild channel type of Discord's `ChannelType`.
|
|
4
|
+
*/
|
|
5
|
+
export type ChannelKind =
|
|
6
|
+
/** `ChannelType.GuildText` */
|
|
7
|
+
"text"
|
|
8
|
+
/** `ChannelType.GuildVoice` */
|
|
9
|
+
| "voice"
|
|
10
|
+
/** `ChannelType.GuildCategory` */
|
|
11
|
+
| "category"
|
|
12
|
+
/** `ChannelType.GuildAnnouncement` */
|
|
13
|
+
| "announcement"
|
|
14
|
+
/** `ChannelType.AnnouncementThread` */
|
|
15
|
+
| "announcementThread"
|
|
16
|
+
/** `ChannelType.PublicThread` */
|
|
17
|
+
| "publicThread"
|
|
18
|
+
/** `ChannelType.PrivateThread` */
|
|
19
|
+
| "privateThread"
|
|
20
|
+
/** `ChannelType.GuildStageVoice` */
|
|
21
|
+
| "stage"
|
|
22
|
+
/** `ChannelType.GuildDirectory` */
|
|
23
|
+
| "directory"
|
|
24
|
+
/** `ChannelType.GuildForum` */
|
|
25
|
+
| "forum"
|
|
26
|
+
/** `ChannelType.GuildMedia` */
|
|
27
|
+
| "media";
|
|
28
|
+
/**
|
|
29
|
+
* Read-only view of a guild's channels, roles and members. Settings logic uses
|
|
30
|
+
* it to check that a referenced entity exists and to suggest candidates,
|
|
31
|
+
* without depending on discord.js.
|
|
32
|
+
*/
|
|
33
|
+
export interface GuildDirectory {
|
|
34
|
+
channel(guildId: string, id: string): Promise<{
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
kind: ChannelKind;
|
|
38
|
+
} | null>;
|
|
39
|
+
role(guildId: string, id: string): Promise<{
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
} | null>;
|
|
43
|
+
member(guildId: string, id: string): Promise<{
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
} | null>;
|
|
47
|
+
searchChannels(guildId: string, query: string, kinds?: readonly ChannelKind[]): Promise<readonly {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
kind: ChannelKind;
|
|
51
|
+
}[]>;
|
|
52
|
+
searchRoles(guildId: string, query: string): Promise<readonly {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
}[]>;
|
|
56
|
+
searchMembers(guildId: string, query: string): Promise<readonly {
|
|
57
|
+
id: string;
|
|
58
|
+
name: string;
|
|
59
|
+
}[]>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=guild-directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guild-directory.d.ts","sourceRoot":"","sources":["../../../src/settings/ports/guild-directory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW;AACtB,8BAA8B;AAC5B,MAAM;AACR,+BAA+B;GAC7B,OAAO;AACT,kCAAkC;GAChC,UAAU;AACZ,sCAAsC;GACpC,cAAc;AAChB,uCAAuC;GACrC,oBAAoB;AACtB,iCAAiC;GAC/B,cAAc;AAChB,kCAAkC;GAChC,eAAe;AACjB,oCAAoC;GAClC,OAAO;AACT,mCAAmC;GACjC,WAAW;AACb,+BAA+B;GAC7B,OAAO;AACT,+BAA+B;GAC7B,OAAO,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,OAAO,CACN,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACR,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAClF,cAAc,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,GAC5B,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC,CAAC;IACvE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IAC9F,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CAChG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guild-directory.js","sourceRoot":"","sources":["../../../src/settings/ports/guild-directory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Emitted after a module's settings changed for a guild. */
|
|
2
|
+
export interface SettingsChangedEvent {
|
|
3
|
+
readonly guildId: string;
|
|
4
|
+
readonly moduleId: string;
|
|
5
|
+
readonly changedKeys: readonly string[];
|
|
6
|
+
/** Revision of the record after the change. */
|
|
7
|
+
readonly revision: number;
|
|
8
|
+
/** Snowflake of the user who made the change. */
|
|
9
|
+
readonly changedBy?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Broadcasts settings changes, e.g. so read caches can invalidate. The default
|
|
13
|
+
* implementation is in-process; distributed delivery is a separate adapter.
|
|
14
|
+
*/
|
|
15
|
+
export interface SettingsChangedNotifier {
|
|
16
|
+
notify(event: SettingsChangedEvent): void;
|
|
17
|
+
/** Register `listener`; the returned function unsubscribes it. */
|
|
18
|
+
subscribe(listener: (event: SettingsChangedEvent) => void): () => void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=settings-changed-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-changed-notifier.d.ts","sourceRoot":"","sources":["../../../src/settings/ports/settings-changed-notifier.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C,kEAAkE;IAClE,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-changed-notifier.js","sourceRoot":"","sources":["../../../src/settings/ports/settings-changed-notifier.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The record a {@link SettingsStore} persists, one per `(guildId, moduleId)`.
|
|
3
|
+
* Every field is JSON-serialisable, so an adapter may store the record as one
|
|
4
|
+
* document, one row with a JSON column, or one hash; it must give back an equal
|
|
5
|
+
* record (`updatedBy` absent stays absent).
|
|
6
|
+
*/
|
|
7
|
+
export interface StoredSettings {
|
|
8
|
+
readonly guildId: string;
|
|
9
|
+
/** Equals the declaration id of the module that owns these values. */
|
|
10
|
+
readonly moduleId: string;
|
|
11
|
+
/** Declaration version the values were written under. */
|
|
12
|
+
readonly version: number;
|
|
13
|
+
/**
|
|
14
|
+
* Starts at 1 on first write; +1 on each write. Used for optimistic
|
|
15
|
+
* concurrency. The caller computes it; the store persists it as given.
|
|
16
|
+
*/
|
|
17
|
+
readonly revision: number;
|
|
18
|
+
/**
|
|
19
|
+
* Only declared, valid fields; unset fields are absent. Every value is plain
|
|
20
|
+
* JSON (string, finite number, boolean, `null`, arrays and objects of those),
|
|
21
|
+
* so `JSON.stringify` then `JSON.parse` gives back an equal object.
|
|
22
|
+
*/
|
|
23
|
+
readonly values: Readonly<Record<string, unknown>>;
|
|
24
|
+
/** ISO-8601 timestamp from the `Clock` port. */
|
|
25
|
+
readonly updatedAt: string;
|
|
26
|
+
/** Snowflake of the user who made the change. */
|
|
27
|
+
readonly updatedBy?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Persistence port for module settings: the kernel's only view of a database.
|
|
31
|
+
* An adapter over any engine (a JSON file, SQLite, Postgres, MongoDB, Redis)
|
|
32
|
+
* implements it in the bot or in an opt-in package, never in the kernel, and
|
|
33
|
+
* proves it with `runSettingsStoreContract` from
|
|
34
|
+
* `@azurioh/discord-kernel/settings/testing`.
|
|
35
|
+
*
|
|
36
|
+
* Guarantees every implementation must honour:
|
|
37
|
+
*
|
|
38
|
+
* - **Isolation.** A record is keyed by `(guildId, moduleId)`; reading, writing
|
|
39
|
+
* or deleting one key never touches another.
|
|
40
|
+
* - **Atomic compare-and-set.** `write` checks the stored revision and replaces
|
|
41
|
+
* the record in one atomic step of the engine, so that of several writers
|
|
42
|
+
* holding the same `expectedRevision` (Discord shards, an HTTP API) exactly
|
|
43
|
+
* one wins and the others get `ConflictError`.
|
|
44
|
+
* - **Independent copies.** The store never keeps a reference to the record it
|
|
45
|
+
* was given nor hands out one it keeps: callers may mutate what they pass in
|
|
46
|
+
* or get back without changing what is stored.
|
|
47
|
+
* - **Errors are real.** Only a revision mismatch is a `ConflictError`; any
|
|
48
|
+
* other failure (connection lost, corrupt data) is thrown as it is.
|
|
49
|
+
*/
|
|
50
|
+
export interface SettingsStore {
|
|
51
|
+
/**
|
|
52
|
+
* The record of one module in one guild.
|
|
53
|
+
*
|
|
54
|
+
* @returns a copy of the stored record, or `null` when none was written yet
|
|
55
|
+
* (or it was deleted).
|
|
56
|
+
*/
|
|
57
|
+
read(guildId: string, moduleId: string): Promise<StoredSettings | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Persist `record` as a whole, replacing any stored one, if and only if the
|
|
60
|
+
* stored revision is `expectedRevision`.
|
|
61
|
+
*
|
|
62
|
+
* @param opts.expectedRevision - the revision the caller read; `null` means
|
|
63
|
+
* no record may exist yet (a create).
|
|
64
|
+
* @throws ConflictError when the stored revision (or `null` for no record)
|
|
65
|
+
* differs from `expectedRevision`. The stored record is then left unchanged.
|
|
66
|
+
*/
|
|
67
|
+
write(record: StoredSettings, opts: {
|
|
68
|
+
expectedRevision: number | null;
|
|
69
|
+
}): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Remove the record of one module in one guild, whatever its revision.
|
|
72
|
+
* Idempotent: deleting a missing record succeeds and does nothing.
|
|
73
|
+
*/
|
|
74
|
+
delete(guildId: string, moduleId: string): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=settings-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../../../src/settings/ports/settings-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACxE;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;QAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../../src/settings/ports/settings-store.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TranslationRegistry } from "../i18n/catalog";
|
|
2
|
+
import type { SettingsDeclaration } from "../settings/define-settings";
|
|
3
|
+
import { type KernelSettings, type ModuleEnablement } from "../settings/system/kernel-settings";
|
|
4
|
+
/** Every settings declaration of the bot, checked at boot. */
|
|
5
|
+
export interface SettingsRegistry {
|
|
6
|
+
/** The kernel's own declaration first, then the modules' in registration order. */
|
|
7
|
+
readonly declarations: readonly SettingsDeclaration[];
|
|
8
|
+
/** The kernel's own declaration (id `kernel`), built from the registered modules. */
|
|
9
|
+
readonly kernel: KernelSettings;
|
|
10
|
+
get(id: string): SettingsDeclaration | undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Collect the modules' settings declarations at boot, after the kernel's own
|
|
14
|
+
* declaration ({@link kernelSettings}), which is always included.
|
|
15
|
+
*
|
|
16
|
+
* @param input.declarations - every module's declaration.
|
|
17
|
+
* @param input.translations - must already contain the modules' catalogs and
|
|
18
|
+
* `SETTINGS_CATALOG`, which holds the kernel declaration's texts.
|
|
19
|
+
* @param input.modules - the registered modules (a `BotModule` fits), whose
|
|
20
|
+
* names and `defaultEnabled` build the kernel's module toggles. None by default.
|
|
21
|
+
* @returns the registry of declarations, by id.
|
|
22
|
+
* @throws SettingsDeclarationError when two declarations share an id (FR-005)
|
|
23
|
+
* or a declaration references a catalog key without an English source (FR-028),
|
|
24
|
+
* or two modules share a name.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createSettingsRegistry(input: {
|
|
27
|
+
declarations: readonly SettingsDeclaration[];
|
|
28
|
+
translations: TranslationRegistry;
|
|
29
|
+
modules?: readonly ModuleEnablement[];
|
|
30
|
+
}): SettingsRegistry;
|
|
31
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/settings/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAStE,OAAO,EACN,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,MAAM,mCAAmC,CAAC;AAE3C,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAChC,mFAAmF;IACnF,QAAQ,CAAC,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtD,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;CACjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC7C,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC7C,YAAY,EAAE,mBAAmB,CAAC;IAClC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACtC,GAAG,gBAAgB,CAenB"}
|