@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,52 @@
|
|
|
1
|
+
import { type AnyField } from "../settings/fields/field";
|
|
2
|
+
/** A group of fields. Texts are catalog keys. */
|
|
3
|
+
export interface SettingsGroup {
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly description?: string;
|
|
6
|
+
readonly order?: number;
|
|
7
|
+
/** Opaque access declaration: stored, never enforced here (FR-032). */
|
|
8
|
+
readonly access?: unknown;
|
|
9
|
+
}
|
|
10
|
+
/** Module-level presentation hints (FR-020). */
|
|
11
|
+
export interface SettingsUi {
|
|
12
|
+
readonly icon?: string;
|
|
13
|
+
/** Group ids in their preferred order. */
|
|
14
|
+
readonly groupOrder?: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
/** Reshapes values stored under an older declaration version. */
|
|
17
|
+
export type SettingsMigration = (fromVersion: number, raw: unknown) => unknown;
|
|
18
|
+
/** What a module writes to declare its settings. */
|
|
19
|
+
export interface SettingsDeclarationInput {
|
|
20
|
+
/** Unique across modules; lowercase kebab-case. */
|
|
21
|
+
readonly id: string;
|
|
22
|
+
/** Starts at 1; raised when stored data must be reshaped. */
|
|
23
|
+
readonly version: number;
|
|
24
|
+
readonly labels: {
|
|
25
|
+
readonly title: string;
|
|
26
|
+
readonly description?: string;
|
|
27
|
+
};
|
|
28
|
+
readonly fields: Readonly<Record<string, AnyField>>;
|
|
29
|
+
readonly groups?: Readonly<Record<string, SettingsGroup>>;
|
|
30
|
+
/** Required when `version > 1`. */
|
|
31
|
+
readonly migrate?: SettingsMigration;
|
|
32
|
+
readonly ui?: SettingsUi;
|
|
33
|
+
/** Opaque access declaration: stored, never enforced here (FR-032). */
|
|
34
|
+
readonly access?: unknown;
|
|
35
|
+
}
|
|
36
|
+
/** A checked settings declaration, typed from what the module wrote. */
|
|
37
|
+
export type SettingsDeclaration<D extends SettingsDeclarationInput = SettingsDeclarationInput> = D;
|
|
38
|
+
/**
|
|
39
|
+
* Declare a module's settings. The declaration is returned unchanged — hints
|
|
40
|
+
* and access slots included — after the checks that need no guild.
|
|
41
|
+
*
|
|
42
|
+
* @param input - the module's declaration; keys and enum values stay literal.
|
|
43
|
+
* @returns the same declaration, typed for `SettingsValues`.
|
|
44
|
+
* @throws SettingsDeclarationError when a field has no label, a default fails
|
|
45
|
+
* its own field, a secret has a default or examples, an enum or static
|
|
46
|
+
* suggestion list has not 1 to 25 choices, a field names an undeclared group, a
|
|
47
|
+
* text allows more than 4000 characters, a list more than 25 items or an item
|
|
48
|
+
* kind lists cannot hold, a toggles field repeats a key or labels an undeclared
|
|
49
|
+
* one, or the version is above 1 without a migration.
|
|
50
|
+
*/
|
|
51
|
+
export declare function defineSettings<const D extends SettingsDeclarationInput>(input: D): SettingsDeclaration<D>;
|
|
52
|
+
//# sourceMappingURL=define-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-settings.d.ts","sourceRoot":"","sources":["../../src/settings/define-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,QAAQ,EAMb,MAAM,yBAAyB,CAAC;AAIjC,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,iEAAiE;AACjE,MAAM,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;AAE/E,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1D,mCAAmC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wEAAwE;AACxE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,wBAAwB,GAAG,wBAAwB,IAAI,CAAC,CAAC;AAEnG;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,wBAAwB,EACtE,KAAK,EAAE,CAAC,GACN,mBAAmB,CAAC,CAAC,CAAC,CAMxB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineSettings = defineSettings;
|
|
4
|
+
const field_1 = require("../settings/fields/field");
|
|
5
|
+
const zod_schema_1 = require("../settings/fields/zod-schema");
|
|
6
|
+
const settings_declaration_error_1 = require("../settings/settings-declaration-error");
|
|
7
|
+
/**
|
|
8
|
+
* Declare a module's settings. The declaration is returned unchanged — hints
|
|
9
|
+
* and access slots included — after the checks that need no guild.
|
|
10
|
+
*
|
|
11
|
+
* @param input - the module's declaration; keys and enum values stay literal.
|
|
12
|
+
* @returns the same declaration, typed for `SettingsValues`.
|
|
13
|
+
* @throws SettingsDeclarationError when a field has no label, a default fails
|
|
14
|
+
* its own field, a secret has a default or examples, an enum or static
|
|
15
|
+
* suggestion list has not 1 to 25 choices, a field names an undeclared group, a
|
|
16
|
+
* text allows more than 4000 characters, a list more than 25 items or an item
|
|
17
|
+
* kind lists cannot hold, a toggles field repeats a key or labels an undeclared
|
|
18
|
+
* one, or the version is above 1 without a migration.
|
|
19
|
+
*/
|
|
20
|
+
function defineSettings(input) {
|
|
21
|
+
checkVersion(input);
|
|
22
|
+
for (const [key, declared] of Object.entries(input.fields)) {
|
|
23
|
+
checkField({ declaration: input, key, declared });
|
|
24
|
+
}
|
|
25
|
+
return input;
|
|
26
|
+
}
|
|
27
|
+
function checkVersion(input) {
|
|
28
|
+
if (!Number.isInteger(input.version) || input.version < 1) {
|
|
29
|
+
throw new settings_declaration_error_1.SettingsDeclarationError(input.id, "version must be a positive integer");
|
|
30
|
+
}
|
|
31
|
+
if (input.version > 1 && input.migrate === undefined) {
|
|
32
|
+
throw new settings_declaration_error_1.SettingsDeclarationError(input.id, `version ${input.version} needs a migration from earlier versions`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function fieldError(params) {
|
|
36
|
+
return new settings_declaration_error_1.SettingsDeclarationError(params.at.declarationId, `field "${params.at.key}" ${params.reason}`);
|
|
37
|
+
}
|
|
38
|
+
function checkField(params) {
|
|
39
|
+
const { declaration, key, declared } = params;
|
|
40
|
+
const at = { declarationId: declaration.id, key };
|
|
41
|
+
if (declared.label === undefined) {
|
|
42
|
+
throw fieldError({ at, reason: "has no label" });
|
|
43
|
+
}
|
|
44
|
+
const group = declared.ui?.group;
|
|
45
|
+
if (group !== undefined && declaration.groups?.[group] === undefined) {
|
|
46
|
+
throw fieldError({ at, reason: `names the undeclared group "${group}"` });
|
|
47
|
+
}
|
|
48
|
+
if (declared.spec.kind === "secret") {
|
|
49
|
+
checkSecret({ at, declared });
|
|
50
|
+
}
|
|
51
|
+
checkSpec({ at, spec: declared.spec });
|
|
52
|
+
if (declared.default !== undefined && !isValidDefault(declared)) {
|
|
53
|
+
throw fieldError({ at, reason: "has a default that fails its own validation" });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function isValidDefault(declared) {
|
|
57
|
+
return (0, zod_schema_1.parseFieldValue)({ field: declared, value: declared.default }).ok;
|
|
58
|
+
}
|
|
59
|
+
function checkSecret(params) {
|
|
60
|
+
const { at, declared } = params;
|
|
61
|
+
if (declared.default !== undefined) {
|
|
62
|
+
throw fieldError({ at, reason: "is a secret and cannot have a default" });
|
|
63
|
+
}
|
|
64
|
+
if (declared.ui?.examples !== undefined) {
|
|
65
|
+
throw fieldError({ at, reason: "is a secret and cannot have examples" });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Constraints of one kind, recursing into a list's item. */
|
|
69
|
+
function checkSpec(params) {
|
|
70
|
+
const { at, spec } = params;
|
|
71
|
+
switch (spec.kind) {
|
|
72
|
+
case "enum":
|
|
73
|
+
checkChoiceCount({ at, count: spec.choices.length });
|
|
74
|
+
return;
|
|
75
|
+
case "integer":
|
|
76
|
+
checkStaticSuggestions({ at, suggest: spec.suggest });
|
|
77
|
+
return;
|
|
78
|
+
case "text":
|
|
79
|
+
if ((spec.maxLength ?? 0) > field_1.FIELD_LIMITS.textMaxLength) {
|
|
80
|
+
throw fieldError({
|
|
81
|
+
at,
|
|
82
|
+
reason: `allows more than ${field_1.FIELD_LIMITS.textMaxLength} characters`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
checkStaticSuggestions({ at, suggest: spec.suggest });
|
|
86
|
+
return;
|
|
87
|
+
case "list":
|
|
88
|
+
checkList({ at, spec });
|
|
89
|
+
return;
|
|
90
|
+
case "toggles":
|
|
91
|
+
checkToggles({ at, spec });
|
|
92
|
+
return;
|
|
93
|
+
case "channel":
|
|
94
|
+
case "role":
|
|
95
|
+
case "user":
|
|
96
|
+
case "color":
|
|
97
|
+
case "duration":
|
|
98
|
+
case "number":
|
|
99
|
+
case "boolean":
|
|
100
|
+
case "secret":
|
|
101
|
+
return;
|
|
102
|
+
default:
|
|
103
|
+
(0, field_1.unhandledFieldKind)(spec);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function checkList(params) {
|
|
107
|
+
const { at, spec } = params;
|
|
108
|
+
if ((spec.maxItems ?? 0) > field_1.FIELD_LIMITS.listMaxItems) {
|
|
109
|
+
throw fieldError({ at, reason: `allows more than ${field_1.FIELD_LIMITS.listMaxItems} items` });
|
|
110
|
+
}
|
|
111
|
+
const itemKind = spec.item.spec.kind;
|
|
112
|
+
if (!field_1.LIST_ITEM_KINDS.includes(itemKind)) {
|
|
113
|
+
throw fieldError({ at, reason: `is a list of ${itemKind}, which lists cannot hold` });
|
|
114
|
+
}
|
|
115
|
+
checkSpec({ at, spec: spec.item.spec });
|
|
116
|
+
}
|
|
117
|
+
function checkToggles(params) {
|
|
118
|
+
const { at, spec } = params;
|
|
119
|
+
if (new Set(spec.keys).size !== spec.keys.length) {
|
|
120
|
+
throw fieldError({ at, reason: "declares a toggle key more than once" });
|
|
121
|
+
}
|
|
122
|
+
for (const key of Object.keys(spec.keyLabels ?? {})) {
|
|
123
|
+
if (!spec.keys.includes(key)) {
|
|
124
|
+
throw fieldError({ at, reason: `labels the undeclared toggle key "${key}"` });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function checkStaticSuggestions(params) {
|
|
129
|
+
if (params.suggest !== undefined && "choices" in params.suggest) {
|
|
130
|
+
checkChoiceCount({ at: params.at, count: params.suggest.choices.length });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function checkChoiceCount(params) {
|
|
134
|
+
if (params.count < 1 || params.count > field_1.FIELD_LIMITS.staticChoices) {
|
|
135
|
+
throw fieldError({
|
|
136
|
+
at: params.at,
|
|
137
|
+
reason: `must have 1 to ${field_1.FIELD_LIMITS.staticChoices} choices`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=define-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-settings.js","sourceRoot":"","sources":["../../src/settings/define-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TranslateKey } from "../i18n/translator";
|
|
2
|
+
import { type AnyField } from "../settings/fields/field";
|
|
3
|
+
import type { JsonSchemaNode } from "../settings/fields/zod-schema";
|
|
4
|
+
/**
|
|
5
|
+
* Add a field's translated texts and hints to the JSON Schema of its stored
|
|
6
|
+
* value: `title`, `description`, `default` and `examples` under their standard
|
|
7
|
+
* keywords, labelled choices as `oneOf`, and the kernel hints under `x-kernel`.
|
|
8
|
+
* A secret is write-only and never carries a default or an example.
|
|
9
|
+
*
|
|
10
|
+
* @param params.field - the field, or list item, being described.
|
|
11
|
+
* @param params.schema - the JSON Schema of its stored value, annotated in place.
|
|
12
|
+
* @param params.translate - translates the field's catalog keys.
|
|
13
|
+
*/
|
|
14
|
+
export declare function annotateField(params: {
|
|
15
|
+
field: AnyField;
|
|
16
|
+
schema: JsonSchemaNode;
|
|
17
|
+
translate: TranslateKey;
|
|
18
|
+
}): void;
|
|
19
|
+
//# sourceMappingURL=describe-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-field.d.ts","sourceRoot":"","sources":["../../src/settings/describe-field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACN,KAAK,QAAQ,EAIb,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACrC,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;CACxB,GAAG,IAAI,CA0BP"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.annotateField = annotateField;
|
|
4
|
+
const field_1 = require("../settings/fields/field");
|
|
5
|
+
/**
|
|
6
|
+
* Add a field's translated texts and hints to the JSON Schema of its stored
|
|
7
|
+
* value: `title`, `description`, `default` and `examples` under their standard
|
|
8
|
+
* keywords, labelled choices as `oneOf`, and the kernel hints under `x-kernel`.
|
|
9
|
+
* A secret is write-only and never carries a default or an example.
|
|
10
|
+
*
|
|
11
|
+
* @param params.field - the field, or list item, being described.
|
|
12
|
+
* @param params.schema - the JSON Schema of its stored value, annotated in place.
|
|
13
|
+
* @param params.translate - translates the field's catalog keys.
|
|
14
|
+
*/
|
|
15
|
+
function annotateField(params) {
|
|
16
|
+
const { field, schema, translate } = params;
|
|
17
|
+
if (field.label !== undefined) {
|
|
18
|
+
schema.title = translate(field.label);
|
|
19
|
+
}
|
|
20
|
+
if (field.description !== undefined) {
|
|
21
|
+
schema.description = translate(field.description);
|
|
22
|
+
}
|
|
23
|
+
if (field.spec.kind === "secret") {
|
|
24
|
+
schema.writeOnly = true;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
if (field.default !== undefined) {
|
|
28
|
+
schema.default = field.default;
|
|
29
|
+
}
|
|
30
|
+
if (field.ui?.examples !== undefined) {
|
|
31
|
+
schema.examples = field.ui.examples;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (field.spec.kind === "enum") {
|
|
35
|
+
delete schema.enum;
|
|
36
|
+
schema.oneOf = labelledChoices({ choices: field.spec.choices, translate });
|
|
37
|
+
}
|
|
38
|
+
if (field.spec.kind === "toggles") {
|
|
39
|
+
annotateToggles({ field, keyLabels: field.spec.keyLabels, schema, translate });
|
|
40
|
+
}
|
|
41
|
+
schema["x-kernel"] = kernelHints({ field, translate });
|
|
42
|
+
}
|
|
43
|
+
/** Each toggle gets its translated label and its own default. */
|
|
44
|
+
function annotateToggles(params) {
|
|
45
|
+
const { field, keyLabels, schema, translate } = params;
|
|
46
|
+
const defaults = field.default;
|
|
47
|
+
const properties = schema.properties;
|
|
48
|
+
for (const [key, toggle] of Object.entries(properties)) {
|
|
49
|
+
const label = keyLabels?.[key];
|
|
50
|
+
if (label !== undefined) {
|
|
51
|
+
toggle.title = translate(label);
|
|
52
|
+
}
|
|
53
|
+
toggle.default = defaults[key];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** The `x-kernel` keyword of a field: its kind and every declared hint. */
|
|
57
|
+
function kernelHints(params) {
|
|
58
|
+
const { field, translate } = params;
|
|
59
|
+
const hints = { kind: field.spec.kind, ...specHints(field) };
|
|
60
|
+
const { ui } = field;
|
|
61
|
+
if (ui?.group !== undefined) {
|
|
62
|
+
hints.group = ui.group;
|
|
63
|
+
}
|
|
64
|
+
if (ui?.order !== undefined) {
|
|
65
|
+
hints.order = ui.order;
|
|
66
|
+
}
|
|
67
|
+
if (field.unit !== undefined) {
|
|
68
|
+
hints.unit = translate(field.unit);
|
|
69
|
+
}
|
|
70
|
+
if (ui?.hint !== undefined) {
|
|
71
|
+
hints.hint = ui.hint;
|
|
72
|
+
}
|
|
73
|
+
if (ui?.advanced !== undefined) {
|
|
74
|
+
hints.advanced = ui.advanced;
|
|
75
|
+
}
|
|
76
|
+
return { ...hints, ...suggestionHints({ field, translate }) };
|
|
77
|
+
}
|
|
78
|
+
/** Kind-specific hints: accepted channel types. */
|
|
79
|
+
function specHints(field) {
|
|
80
|
+
const { spec } = field;
|
|
81
|
+
if (spec.kind === "channel" && spec.types !== undefined) {
|
|
82
|
+
return { channelTypes: spec.types };
|
|
83
|
+
}
|
|
84
|
+
return {};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Where a surface finds values to offer: `guild` for Discord entities,
|
|
88
|
+
* `static` for fixed choices, `dynamic` for a server-side search.
|
|
89
|
+
*/
|
|
90
|
+
function suggestionHints(params) {
|
|
91
|
+
const { spec } = params.field;
|
|
92
|
+
switch (spec.kind) {
|
|
93
|
+
case "channel":
|
|
94
|
+
case "role":
|
|
95
|
+
case "user":
|
|
96
|
+
return { suggest: "guild" };
|
|
97
|
+
case "enum":
|
|
98
|
+
return { suggest: "static" };
|
|
99
|
+
case "integer":
|
|
100
|
+
case "text":
|
|
101
|
+
return spec.suggest === undefined
|
|
102
|
+
? {}
|
|
103
|
+
: declaredSuggestions({ suggest: spec.suggest, translate: params.translate });
|
|
104
|
+
case "color":
|
|
105
|
+
case "duration":
|
|
106
|
+
case "number":
|
|
107
|
+
case "boolean":
|
|
108
|
+
case "secret":
|
|
109
|
+
case "list":
|
|
110
|
+
case "toggles":
|
|
111
|
+
return {};
|
|
112
|
+
default:
|
|
113
|
+
return (0, field_1.unhandledFieldKind)(spec);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Static suggestions carry their translated choices; a strict search says so. */
|
|
117
|
+
function declaredSuggestions(params) {
|
|
118
|
+
const { suggest, translate } = params;
|
|
119
|
+
if ("choices" in suggest) {
|
|
120
|
+
return {
|
|
121
|
+
suggest: "static",
|
|
122
|
+
choices: labelledChoices({ choices: suggest.choices, translate }),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return suggest.strict === true ? { suggest: "dynamic", strict: true } : { suggest: "dynamic" };
|
|
126
|
+
}
|
|
127
|
+
function labelledChoices(params) {
|
|
128
|
+
const { choices, translate } = params;
|
|
129
|
+
return choices.map((choice) => ({ const: choice.value, title: translate(choice.label) }));
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=describe-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-field.js","sourceRoot":"","sources":["../../src/settings/describe-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Translator } from "../i18n/translator";
|
|
2
|
+
import type { SettingsDeclaration } from "../settings/define-settings";
|
|
3
|
+
/** A JSON value, as a JSON Schema document holds. */
|
|
4
|
+
export type JsonValue = string | number | boolean | null | readonly JsonValue[] | {
|
|
5
|
+
readonly [key: string]: JsonValue;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A JSON Schema draft 2020-12 document describing one module's settings, every
|
|
9
|
+
* text already translated, with kernel hints under the `x-kernel` keyword.
|
|
10
|
+
*/
|
|
11
|
+
export type SettingsSchema = {
|
|
12
|
+
readonly [keyword: string]: JsonValue;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Describe a module's settings for surfaces other than Discord (FR-030).
|
|
16
|
+
*
|
|
17
|
+
* @param params.declaration - the module's settings declaration.
|
|
18
|
+
* @param params.locale - any locale string; an unsupported one falls back to English.
|
|
19
|
+
* @param params.translator - translates the declaration's catalog keys.
|
|
20
|
+
* @returns the translated JSON Schema document of the module.
|
|
21
|
+
*/
|
|
22
|
+
export declare function describeSettings(params: {
|
|
23
|
+
declaration: SettingsDeclaration;
|
|
24
|
+
locale: string;
|
|
25
|
+
translator: Translator;
|
|
26
|
+
}): SettingsSchema;
|
|
27
|
+
//# sourceMappingURL=describe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/settings/describe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,4BAA4B,CAAC;AAQrF,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,SAAS,EAAE,GACpB;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEzC;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEvE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACxC,WAAW,EAAE,mBAAmB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACvB,GAAG,cAAc,CAwBjB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.describeSettings = describeSettings;
|
|
4
|
+
const locale_1 = require("../i18n/locale");
|
|
5
|
+
const describe_field_1 = require("../settings/describe-field");
|
|
6
|
+
const field_order_1 = require("../settings/field-order");
|
|
7
|
+
const zod_schema_1 = require("../settings/fields/zod-schema");
|
|
8
|
+
/** URN prefix of a described module: `urn:discord-kernel:settings:<id>:v<version>`. */
|
|
9
|
+
const SCHEMA_ID_PREFIX = "urn:discord-kernel:settings";
|
|
10
|
+
/**
|
|
11
|
+
* Describe a module's settings for surfaces other than Discord (FR-030).
|
|
12
|
+
*
|
|
13
|
+
* @param params.declaration - the module's settings declaration.
|
|
14
|
+
* @param params.locale - any locale string; an unsupported one falls back to English.
|
|
15
|
+
* @param params.translator - translates the declaration's catalog keys.
|
|
16
|
+
* @returns the translated JSON Schema document of the module.
|
|
17
|
+
*/
|
|
18
|
+
function describeSettings(params) {
|
|
19
|
+
const { declaration, translator } = params;
|
|
20
|
+
const locale = (0, locale_1.resolveLocale)([params.locale], locale_1.SOURCE_LOCALE);
|
|
21
|
+
const translate = (key) => translator.translate(locale, key);
|
|
22
|
+
const { $schema, ...fields } = (0, zod_schema_1.fieldsJsonSchema)({
|
|
23
|
+
fields: declaration.fields,
|
|
24
|
+
annotate: (field, schema) => (0, describe_field_1.annotateField)({ field, schema, translate }),
|
|
25
|
+
});
|
|
26
|
+
const document = {
|
|
27
|
+
$schema,
|
|
28
|
+
$id: `${SCHEMA_ID_PREFIX}:${declaration.id}:v${declaration.version}`,
|
|
29
|
+
title: translate(declaration.labels.title),
|
|
30
|
+
};
|
|
31
|
+
if (declaration.labels.description !== undefined) {
|
|
32
|
+
document.description = translate(declaration.labels.description);
|
|
33
|
+
}
|
|
34
|
+
const moduleHints = { module: declaration.id, version: declaration.version };
|
|
35
|
+
if (declaration.ui?.icon !== undefined) {
|
|
36
|
+
moduleHints.icon = declaration.ui.icon;
|
|
37
|
+
}
|
|
38
|
+
moduleHints.locale = locale;
|
|
39
|
+
moduleHints.groups = describeGroups({ declaration, translate });
|
|
40
|
+
// Zod emits JSON only, and every annotation comes from the declaration's JSON values.
|
|
41
|
+
return { ...document, ...fields, "x-kernel": moduleHints };
|
|
42
|
+
}
|
|
43
|
+
/** The declared groups, translated, in the display order every surface shares. */
|
|
44
|
+
function describeGroups(params) {
|
|
45
|
+
const { declaration, translate } = params;
|
|
46
|
+
return (0, field_order_1.displayOrder)(declaration).groups.flatMap((id) => {
|
|
47
|
+
const group = declaration.groups?.[id];
|
|
48
|
+
return group === undefined ? [] : [describeGroup({ id, group, translate })];
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function describeGroup(params) {
|
|
52
|
+
const { id, group, translate } = params;
|
|
53
|
+
const described = { id, title: translate(group.label) };
|
|
54
|
+
if (group.description !== undefined) {
|
|
55
|
+
described.description = translate(group.description);
|
|
56
|
+
}
|
|
57
|
+
if (group.order !== undefined) {
|
|
58
|
+
described.order = group.order;
|
|
59
|
+
}
|
|
60
|
+
return described;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/settings/describe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a human duration such as `"90s"`, `"15m"`, `"2h"`, `"7d"` or `"1h30m"`
|
|
3
|
+
* into whole seconds. Units go from days to seconds, each at most once; case
|
|
4
|
+
* and whitespace between parts are ignored. Returns `undefined` for anything
|
|
5
|
+
* else, including a bare number and a total beyond the safe integer range.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseDuration(input: string): number | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Write whole seconds the way {@link parseDuration} reads them back, largest
|
|
10
|
+
* unit first and zero parts left out: `5400` becomes `"1h30m"`, `0` `"0s"`.
|
|
11
|
+
*
|
|
12
|
+
* @param seconds - a non-negative whole number of seconds.
|
|
13
|
+
* @returns the shortest spelling `parseDuration` turns back into `seconds`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatDuration(seconds: number): string;
|
|
16
|
+
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/settings/duration.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB/D;AAKD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWtD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDuration = parseDuration;
|
|
4
|
+
exports.formatDuration = formatDuration;
|
|
5
|
+
/**
|
|
6
|
+
* Units in their only accepted order, largest first, each with its length in
|
|
7
|
+
* seconds. Fixing the order makes every duration have one spelling.
|
|
8
|
+
*/
|
|
9
|
+
const DURATION_PATTERN = /^(?:(\d+)d)?\s*(?:(\d+)h)?\s*(?:(\d+)m)?\s*(?:(\d+)s)?$/;
|
|
10
|
+
const UNIT_SECONDS = [86_400, 3600, 60, 1];
|
|
11
|
+
/**
|
|
12
|
+
* Parse a human duration such as `"90s"`, `"15m"`, `"2h"`, `"7d"` or `"1h30m"`
|
|
13
|
+
* into whole seconds. Units go from days to seconds, each at most once; case
|
|
14
|
+
* and whitespace between parts are ignored. Returns `undefined` for anything
|
|
15
|
+
* else, including a bare number and a total beyond the safe integer range.
|
|
16
|
+
*/
|
|
17
|
+
function parseDuration(input) {
|
|
18
|
+
const trimmed = input.trim().toLowerCase();
|
|
19
|
+
if (trimmed === "") {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const match = DURATION_PATTERN.exec(trimmed);
|
|
23
|
+
if (match === null) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
let seconds = 0;
|
|
27
|
+
for (const [index, unit] of UNIT_SECONDS.entries()) {
|
|
28
|
+
const amount = match[index + 1];
|
|
29
|
+
if (amount !== undefined) {
|
|
30
|
+
seconds += Number(amount) * unit;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return Number.isSafeInteger(seconds) ? seconds : undefined;
|
|
34
|
+
}
|
|
35
|
+
/** Unit suffixes, in the order of {@link UNIT_SECONDS}. */
|
|
36
|
+
const UNIT_SUFFIXES = ["d", "h", "m", "s"];
|
|
37
|
+
/**
|
|
38
|
+
* Write whole seconds the way {@link parseDuration} reads them back, largest
|
|
39
|
+
* unit first and zero parts left out: `5400` becomes `"1h30m"`, `0` `"0s"`.
|
|
40
|
+
*
|
|
41
|
+
* @param seconds - a non-negative whole number of seconds.
|
|
42
|
+
* @returns the shortest spelling `parseDuration` turns back into `seconds`.
|
|
43
|
+
*/
|
|
44
|
+
function formatDuration(seconds) {
|
|
45
|
+
let remaining = seconds;
|
|
46
|
+
let text = "";
|
|
47
|
+
for (const [index, unit] of UNIT_SECONDS.entries()) {
|
|
48
|
+
const amount = Math.floor(remaining / unit);
|
|
49
|
+
remaining -= amount * unit;
|
|
50
|
+
if (amount > 0) {
|
|
51
|
+
text += `${amount}${UNIT_SUFFIXES[index]}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return text === "" ? "0s" : text;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/settings/duration.ts"],"names":[],"mappings":";;AAaA,sCAiBC;AAYD,wCAWC;AArDD;;;GAGG;AACH,MAAM,gBAAgB,GAAG,yDAAyD,CAAC;AACnF,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAU,CAAC;AAEpD;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAa;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAClC,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED,2DAA2D;AAC3D,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAEpD;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,OAAe;IAC7C,IAAI,SAAS,GAAG,OAAO,CAAC;IACxB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QAC5C,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;QAC3B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,CAAC;IACF,CAAC;IACD,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SettingsDeclaration } from "../settings/define-settings";
|
|
2
|
+
/** One place on a settings screen: a field of its own, or a group with its fields in order. */
|
|
3
|
+
type DisplayEntry = {
|
|
4
|
+
readonly kind: "field";
|
|
5
|
+
readonly key: string;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: "group";
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly fields: readonly string[];
|
|
10
|
+
};
|
|
11
|
+
/** The display order of a declaration. */
|
|
12
|
+
export interface DisplayOrder {
|
|
13
|
+
/** Every declared group, fields or not, ranked. */
|
|
14
|
+
readonly groups: readonly string[];
|
|
15
|
+
/** The screen's places, top to bottom: ungrouped fields and groups holding fields. */
|
|
16
|
+
readonly entries: readonly DisplayEntry[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The order every surface shows a declaration in.
|
|
20
|
+
*
|
|
21
|
+
* - Groups rank by their position in `ui.groupOrder` (unlisted ones after
|
|
22
|
+
* listed ones), then by their own `order` (none after any), then by where
|
|
23
|
+
* they stand in declared order: at their first field, or after every field
|
|
24
|
+
* for a group with no field, in declaration order.
|
|
25
|
+
* - Fields rank within their group, and ungrouped fields among themselves,
|
|
26
|
+
* by `ui.order` (none after any), then by declaration order.
|
|
27
|
+
* - On screen, each place is kept by its kind: a group stands where a group's
|
|
28
|
+
* first field is declared and an ungrouped field where an ungrouped field
|
|
29
|
+
* is declared, then the ranked groups fill the group places and the ranked
|
|
30
|
+
* ungrouped fields the field places. With no hint this is declared order.
|
|
31
|
+
*
|
|
32
|
+
* @param declaration - the module's settings declaration; left untouched.
|
|
33
|
+
* @returns every declared group ranked, and the screen's places in order.
|
|
34
|
+
*/
|
|
35
|
+
export declare function displayOrder(declaration: SettingsDeclaration): DisplayOrder;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=field-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-order.d.ts","sourceRoot":"","sources":["../../src/settings/field-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,+FAA+F;AAC/F,KAAK,YAAY,GACd;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEvF,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,mBAAmB,GAAG,YAAY,CA2C3E"}
|