commandkit 1.2.0-rc.6 → 1.2.0-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/{ActionRow-CmTHbo2t.js → ActionRow-CbdGFWMT.js} +3 -2
  2. package/dist/{ActionRow-CmTHbo2t.js.map → ActionRow-CbdGFWMT.js.map} +1 -1
  3. package/dist/{CommandKitEventsChannel-Bgw0XCOl.js → CommandKitEventsChannel-B5vbINtP.js} +3 -2
  4. package/dist/{CommandKitEventsChannel-Bgw0XCOl.js.map → CommandKitEventsChannel-B5vbINtP.js.map} +1 -1
  5. package/dist/{CommandsRouter-tMAivEfv.js → CommandsRouter-DZAeB2v_.js} +10 -7
  6. package/dist/{CommandsRouter-tMAivEfv.js.map → CommandsRouter-DZAeB2v_.js.map} +1 -1
  7. package/dist/{CompilerPlugin-CjoZAAR8.js → CompilerPlugin-M8r3yNAl.js} +2 -2
  8. package/dist/{CompilerPlugin-CjoZAAR8.js.map → CompilerPlugin-M8r3yNAl.js.map} +1 -1
  9. package/dist/{EventInterceptor-CQ4PBpBJ.js → EventInterceptor-CQEXyUTp.js} +3 -5
  10. package/dist/{EventInterceptor-CQ4PBpBJ.js.map → EventInterceptor-CQEXyUTp.js.map} +1 -1
  11. package/dist/{EventWorkerContext-TZIKxVCu.js → EventWorkerContext-Dq29tieI.js} +3 -2
  12. package/dist/{EventWorkerContext-TZIKxVCu.js.map → EventWorkerContext-Dq29tieI.js.map} +1 -1
  13. package/dist/{EventWorkerContext-D9frVhVe.d.ts → EventWorkerContext-xgEc2N2T.d.ts} +2 -2
  14. package/dist/{EventsRouter-C_J0M3uO.js → EventsRouter-Dzpm7ubq.js} +9 -5
  15. package/dist/{EventsRouter-C_J0M3uO.js.map → EventsRouter-Dzpm7ubq.js.map} +1 -1
  16. package/dist/{MessageCommandParser-TPEPhjvx.js → MessageCommandParser-CEuO6Ex3.js} +3 -2
  17. package/dist/{MessageCommandParser-TPEPhjvx.js.map → MessageCommandParser-CEuO6Ex3.js.map} +1 -1
  18. package/dist/{PluginCommon-Di1xIa8d.js → PluginCommon-Cvl5yYM_.js} +3 -2
  19. package/dist/{PluginCommon-Di1xIa8d.js.map → PluginCommon-Cvl5yYM_.js.map} +1 -1
  20. package/dist/{RuntimePlugin-eTdFJwGd.js → RuntimePlugin-BUecuBIU.js} +2 -2
  21. package/dist/{RuntimePlugin-eTdFJwGd.js.map → RuntimePlugin-BUecuBIU.js.map} +1 -1
  22. package/dist/analytics/analytics-engine.d.ts +1 -1
  23. package/dist/analytics/analytics-engine.js +24 -24
  24. package/dist/analytics/analytics-provider.d.ts +1 -1
  25. package/dist/analytics/constants.js +1 -1
  26. package/dist/analytics/utils.js +24 -24
  27. package/dist/{analytics-engine-CtMbeudW.d.ts → analytics-engine-6_M8tCeD.d.ts} +16 -4
  28. package/dist/app/commands/AppCommandRunner.d.ts +1 -1
  29. package/dist/app/commands/AppCommandRunner.js +24 -24
  30. package/dist/app/commands/Context.d.ts +1 -1
  31. package/dist/app/commands/Context.js +24 -24
  32. package/dist/app/commands/MessageCommandParser.js +1 -1
  33. package/dist/app/commands/helpers.js +1 -1
  34. package/dist/app/events/EventWorkerContext.d.ts +2 -2
  35. package/dist/app/events/EventWorkerContext.js +1 -1
  36. package/dist/app/handlers/AppCommandHandler.d.ts +1 -1
  37. package/dist/app/handlers/AppCommandHandler.js +24 -24
  38. package/dist/app/handlers/AppEventsHandler.d.ts +1 -1
  39. package/dist/app/handlers/AppEventsHandler.js +24 -24
  40. package/dist/app/index.d.ts +1 -1
  41. package/dist/app/index.js +25 -25
  42. package/dist/app/interrupt/signals.js +2 -2
  43. package/dist/app/middlewares/permissions.d.ts +1 -1
  44. package/dist/app/middlewares/permissions.js +24 -24
  45. package/dist/app/register/CommandRegistrar.d.ts +1 -1
  46. package/dist/app/register/CommandRegistrar.js +24 -24
  47. package/dist/app/router/CommandsRouter.js +1 -1
  48. package/dist/app/router/EventsRouter.js +1 -1
  49. package/dist/app/router/index.js +2 -2
  50. package/dist/{app-process-CjMovpoZ.js → app-process-u2DXakNv.js} +8 -5
  51. package/dist/{app-process-CjMovpoZ.js.map → app-process-u2DXakNv.js.map} +1 -1
  52. package/dist/{build-oC6ke8bF.js → build-e6PlVFfe.js} +15 -11
  53. package/dist/{build-oC6ke8bF.js.map → build-e6PlVFfe.js.map} +1 -1
  54. package/dist/cli/app-process.js +4 -4
  55. package/dist/cli/build.d.ts +1 -1
  56. package/dist/cli/build.js +26 -26
  57. package/dist/cli/common.d.ts +1 -1
  58. package/dist/cli/common.js +3 -3
  59. package/dist/cli/development.js +39 -39
  60. package/dist/cli/development.js.map +1 -1
  61. package/dist/cli/generators.js +9 -6
  62. package/dist/cli/generators.js.map +1 -1
  63. package/dist/cli/information.js +14 -19
  64. package/dist/cli/information.js.map +1 -1
  65. package/dist/cli/init.js +25 -25
  66. package/dist/cli/production.js +29 -28
  67. package/dist/cli/production.js.map +1 -1
  68. package/dist/cli/type-checker.js +4 -4
  69. package/dist/{colors-Cd4Oz-r-.js → colors-DL3ucTiT.js} +3 -2
  70. package/dist/{colors-Cd4Oz-r-.js.map → colors-DL3ucTiT.js.map} +1 -1
  71. package/dist/{commandkit-vWHgiaKd.js → commandkit-Dy4V-Rk2.js} +136 -148
  72. package/dist/commandkit-Dy4V-Rk2.js.map +1 -0
  73. package/dist/commandkit.d.ts +1 -1
  74. package/dist/commandkit.js +24 -24
  75. package/dist/{common-DNADUU3_.js → common-DVM_onKu.js} +15 -15
  76. package/dist/{common-DNADUU3_.js.map → common-DVM_onKu.js.map} +1 -1
  77. package/dist/common-vnMIelAE.js.map +1 -1
  78. package/dist/components/common/EventInterceptor.js +1 -1
  79. package/dist/components/index.js +24 -24
  80. package/dist/components/v1/action-row/ActionRow.js +1 -1
  81. package/dist/components/v1/button/Button.js +24 -24
  82. package/dist/components/v1/button/ButtonKit.js +24 -24
  83. package/dist/components/v1/modal/Modal.js +24 -24
  84. package/dist/components/v1/modal/ModalKit.js +24 -24
  85. package/dist/components/v1/select-menu/ChannelSelectMenuKit.js +24 -24
  86. package/dist/components/v1/select-menu/MentionableSelectMenuKit.js +24 -24
  87. package/dist/components/v1/select-menu/RoleSelectMenuKit.js +24 -24
  88. package/dist/components/v1/select-menu/SelectMenu.js +24 -24
  89. package/dist/components/v1/select-menu/StringSelectMenuKit.js +24 -24
  90. package/dist/components/v1/select-menu/UserSelectMenuKit.js +24 -24
  91. package/dist/components/v2/container.js +1 -1
  92. package/dist/components/v2/file.js +1 -1
  93. package/dist/components/v2/index.js +6 -6
  94. package/dist/components/v2/media-gallery.js +1 -1
  95. package/dist/components/v2/section.js +1 -1
  96. package/dist/components/v2/separator.js +1 -1
  97. package/dist/components/v2/text-display.js +1 -1
  98. package/dist/config/config.d.ts +2 -2
  99. package/dist/config/config.js +24 -24
  100. package/dist/config/default.d.ts +1 -1
  101. package/dist/config/default.js +24 -24
  102. package/dist/config/loader.d.ts +1 -1
  103. package/dist/config/loader.js +24 -24
  104. package/dist/config/types.d.ts +1 -1
  105. package/dist/config/utils.d.ts +1 -1
  106. package/dist/{config-E42bG1RK.d.ts → config-nD7V_D7G.d.ts} +2 -2
  107. package/dist/constants-B5_Ta7PR.js.map +1 -1
  108. package/dist/{constants-DxfYtA6t.js → constants-BOOGN85p.js} +3 -2
  109. package/dist/{constants-DxfYtA6t.js.map → constants-BOOGN85p.js.map} +1 -1
  110. package/dist/{container-z621KfH5.js → container-C6GtfAPW.js} +3 -2
  111. package/dist/{container-z621KfH5.js.map → container-C6GtfAPW.js.map} +1 -1
  112. package/dist/context/async-context.d.ts +2 -2
  113. package/dist/context/async-context.js +26 -25
  114. package/dist/context/environment.d.ts +1 -1
  115. package/dist/context/environment.js +24 -24
  116. package/dist/{dotprops-C_4L7RPD.js → dotprops-tnhpnszJ.js} +2 -2
  117. package/dist/{dotprops-C_4L7RPD.js.map → dotprops-tnhpnszJ.js.map} +1 -1
  118. package/dist/element-Bak9llw_.js.map +1 -1
  119. package/dist/env-_68PRRoA.js.map +1 -1
  120. package/dist/error-codes-Ds0bnPvT.js.map +1 -1
  121. package/dist/events/CommandKitEventsChannel.d.ts +1 -1
  122. package/dist/events/CommandKitEventsChannel.js +1 -1
  123. package/dist/{feature-flags-Ug0I9mfF.js → feature-flags-3TQSPAVn.js} +10 -15
  124. package/dist/{feature-flags-Ug0I9mfF.js.map → feature-flags-3TQSPAVn.js.map} +1 -1
  125. package/dist/{file-DVZC0QXI.js → file-DVOELoNv.js} +3 -2
  126. package/dist/{file-DVZC0QXI.js.map → file-DVOELoNv.js.map} +1 -1
  127. package/dist/flags/FlagProvider.d.ts +1 -1
  128. package/dist/flags/FlagProvider.js.map +1 -1
  129. package/dist/flags/feature-flags.d.ts +1 -1
  130. package/dist/flags/feature-flags.js +25 -25
  131. package/dist/flags/store.d.ts +1 -1
  132. package/dist/flags/store.js +1 -1
  133. package/dist/{helpers-BUlN3lIz.js → helpers-CiuN7y5B.js} +3 -2
  134. package/dist/{helpers-BUlN3lIz.js.map → helpers-CiuN7y5B.js.map} +1 -1
  135. package/dist/index.d.ts +4 -4
  136. package/dist/index.js +31 -29
  137. package/dist/index.js.map +1 -1
  138. package/dist/{init-BTnqvIWt.js → init-Bo01I_h_.js} +11 -8
  139. package/dist/{init-BTnqvIWt.js.map → init-Bo01I_h_.js.map} +1 -1
  140. package/dist/kv/dotprops.js +1 -1
  141. package/dist/kv/kv.js +8 -10
  142. package/dist/kv/kv.js.map +1 -1
  143. package/dist/kv/serde.js +1 -1
  144. package/dist/logger/DefaultLogger.js +24 -24
  145. package/dist/logger/Logger.js +24 -24
  146. package/dist/{media-gallery-CIKypjbJ.js → media-gallery-zDtJ3kxb.js} +3 -2
  147. package/dist/{media-gallery-CIKypjbJ.js.map → media-gallery-zDtJ3kxb.js.map} +1 -1
  148. package/dist/plugins/CompilerPlugin.d.ts +1 -1
  149. package/dist/plugins/CompilerPlugin.js +2 -2
  150. package/dist/plugins/PluginCommon.d.ts +1 -1
  151. package/dist/plugins/PluginCommon.js +1 -1
  152. package/dist/plugins/RuntimePlugin.d.ts +1 -1
  153. package/dist/plugins/RuntimePlugin.js +2 -2
  154. package/dist/plugins/index.d.ts +1 -1
  155. package/dist/plugins/index.js +24 -24
  156. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +1 -1
  157. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +24 -24
  158. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +1 -1
  159. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +24 -24
  160. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +1 -1
  161. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +24 -24
  162. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +1 -1
  163. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +24 -24
  164. package/dist/plugins/plugin-runtime/runtime.d.ts +1 -1
  165. package/dist/plugins/types.d.ts +1 -1
  166. package/dist/{resolve-file-url-DYjaxg_S.js → resolve-file-url-ChIyw-Vf.js} +4 -4
  167. package/dist/{resolve-file-url-DYjaxg_S.js.map → resolve-file-url-ChIyw-Vf.js.map} +1 -1
  168. package/dist/{section-CuYr0Inu.js → section-DlvrDoJK.js} +4 -4
  169. package/dist/{section-CuYr0Inu.js.map → section-DlvrDoJK.js.map} +1 -1
  170. package/dist/{separator-DLdWBjSN.js → separator-DL6QH5H1.js} +4 -4
  171. package/dist/{separator-DLdWBjSN.js.map → separator-DL6QH5H1.js.map} +1 -1
  172. package/dist/{serde-CHySNpFr.js → serde-Cc8iUa9J.js} +2 -2
  173. package/dist/{serde-CHySNpFr.js.map → serde-Cc8iUa9J.js.map} +1 -1
  174. package/dist/{signals-r7qPAvOR.js → signals-ChFMD7mB.js} +2 -2
  175. package/dist/{signals-r7qPAvOR.js.map → signals-ChFMD7mB.js.map} +1 -1
  176. package/dist/{store-CiqLHedg.js → store-Hcgz7DSt.js} +3 -2
  177. package/dist/{store-CiqLHedg.js.map → store-Hcgz7DSt.js.map} +1 -1
  178. package/dist/{text-display--p2-BoUa.js → text-display-DbMumig_.js} +3 -2
  179. package/dist/{text-display--p2-BoUa.js.map → text-display-DbMumig_.js.map} +1 -1
  180. package/dist/{type-checker-1Iu1jJcy.js → type-checker-M1NIIoWL.js} +7 -5
  181. package/dist/{type-checker-1Iu1jJcy.js.map → type-checker-M1NIIoWL.js.map} +1 -1
  182. package/dist/{types-package-DrnIdWLg.js → types-package-BWArjyBF.js} +7 -4
  183. package/dist/{types-package-DrnIdWLg.js.map → types-package-BWArjyBF.js.map} +1 -1
  184. package/dist/types.d.ts +1 -1
  185. package/dist/utils/colors.js +1 -1
  186. package/dist/utils/dev-hooks.d.ts +1 -1
  187. package/dist/utils/dev-hooks.js +24 -24
  188. package/dist/utils/resolve-file-url.js +1 -1
  189. package/dist/utils/types-package.js +1 -1
  190. package/dist/utils/useful-stuff/async-queue.js.map +1 -1
  191. package/dist/utils/useful-stuff/mutex.js +1 -2
  192. package/dist/utils/useful-stuff/mutex.js.map +1 -1
  193. package/dist/utils/useful-stuff/ratelimiter.js +2 -4
  194. package/dist/utils/useful-stuff/ratelimiter.js.map +1 -1
  195. package/dist/utils/useful-stuff/semaphore.js +2 -4
  196. package/dist/utils/useful-stuff/semaphore.js.map +1 -1
  197. package/dist/utils/utilities.js +24 -24
  198. package/dist/utils/warn-unstable.js.map +1 -1
  199. package/dist/utils-DCSnVAZ6.js.map +1 -1
  200. package/dist/utils-KsNof0Xz.js.map +1 -1
  201. package/dist/{version-D0XWDQ4f.js → version-CphQqt4J.js} +2 -2
  202. package/dist/{version-D0XWDQ4f.js.map → version-CphQqt4J.js.map} +1 -1
  203. package/dist/version.js +1 -1
  204. package/hooks.cjs +2 -0
  205. package/package.json +2 -2
  206. package/dist/commandkit-vWHgiaKd.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const discord_js = require_chunk.__toESM(require("discord.js"));
2
+ let discord_js = require("discord.js");
3
+ discord_js = require_chunk.__toESM(discord_js);
3
4
 
4
5
  //#region src/app/commands/helpers.ts
5
6
  /**
@@ -32,4 +33,4 @@ Object.defineProperty(exports, 'isMessageSource', {
32
33
  return isMessageSource;
33
34
  }
34
35
  });
35
- //# sourceMappingURL=helpers-BUlN3lIz.js.map
36
+ //# sourceMappingURL=helpers-CiuN7y5B.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers-BUlN3lIz.js","names":[],"sources":["../src/app/commands/helpers.ts"],"sourcesContent":["import { Interaction, Message } from 'discord.js';\n\n/**\n * Union type representing possible command sources.\n */\nexport type CommandSource = Interaction | Message;\n\n/**\n * Type guard to check if a command source is a Discord message.\n * @param source - The command source to check\n * @returns True if the source is a Message\n */\nexport function isMessageSource(source: CommandSource): source is Message {\n return source instanceof Message;\n}\n\n/**\n * Type guard to check if a command source is a Discord interaction.\n * @param source - The command source to check\n * @returns True if the source is an Interaction\n */\nexport function isInteractionSource(\n source: CommandSource,\n): source is Interaction {\n return !isMessageSource(source);\n}\n"],"mappings":";;;;;;;;;AAYA,SAAgB,gBAAgB,QAA0C;AACxE,QAAO,kBAAkB;;;;;;;AAQ3B,SAAgB,oBAChB,QACwB;AACtB,QAAO,CAAC,gBAAgB"}
1
+ {"version":3,"file":"helpers-CiuN7y5B.js","names":[],"sources":["../src/app/commands/helpers.ts"],"sourcesContent":["import { Interaction, Message } from 'discord.js';\n\n/**\n * Union type representing possible command sources.\n */\nexport type CommandSource = Interaction | Message;\n\n/**\n * Type guard to check if a command source is a Discord message.\n * @param source - The command source to check\n * @returns True if the source is a Message\n */\nexport function isMessageSource(source: CommandSource): source is Message {\n return source instanceof Message;\n}\n\n/**\n * Type guard to check if a command source is a Discord interaction.\n * @param source - The command source to check\n * @returns True if the source is an Interaction\n */\nexport function isInteractionSource(\n source: CommandSource,\n): source is Interaction {\n return !isMessageSource(source);\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,gBAAgB,QAA0C;AACxE,QAAO,kBAAkB;;;;;;;AAQ3B,SAAgB,oBAChB,QACwB;AACtB,QAAO,CAAC,gBAAgB,OAAO"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AsyncFunction, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, BootstrapFunction, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContext, CommandContextOptions, CommandData, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandFlagContext, CommandKit, CommandKitConfiguration, CommandKitEnvironment, CommandKitEnvironmentInternalData, CommandKitEnvironmentType, CommandKitEventDispatch, CommandKitHMREvent, CommandKitOptions, CommandKitPlugin, CommandKitPluginRuntime, CommandMetadata, CommandMetadataFunction, CommandRegistrar, CommandTypeData, CommonDirectiveTransformer, CommonDirectiveTransformerOptions, CommonPluginRuntime, CompilerPlugin, CompilerPluginRuntime, Context, ContextParameters, CustomAppCommandProps, CustomEvaluationContext, CustomEvaluationFunction, DecideFunction, EvaluationContext, EventFlagContext, EventHandler, FeatureFlag, FeatureFlagDefinition, FlagRunner, GenericFunction, IdentifyFunction, InteractionCommandContext, InteractionCommandMiddlewareContext, LegacyCommandMetadata, LoadedCommand, MaybeFalsey, MaybePromise, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, PluginTransformParameters, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, RunCommand, RuntimePlugin, SlashCommandMiddlewareContext, TemplateHandler, TransformedResult, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, after, cancelAfter, commandkit, exitContext, flag, getCommandKit, getContext, isCommandWorkerContext, isCompilerPlugin, isRuntimePlugin, makeContextAwareFunction, onApplicationBootstrap, onBootstrap, provideContext, setFlagProvider, useEnvironment } from "./analytics-engine-CtMbeudW.js";
1
+ import { AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AsyncFunction, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, BootstrapFunction, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContext, CommandContextOptions, CommandData, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandFlagContext, CommandKit, CommandKitConfiguration, CommandKitEnvironment, CommandKitEnvironmentInternalData, CommandKitEnvironmentType, CommandKitEventDispatch, CommandKitHMREvent, CommandKitOptions, CommandKitPlugin, CommandKitPluginRuntime, CommandMetadata, CommandMetadataFunction, CommandRegistrar, CommandTypeData, CommonDirectiveTransformer, CommonDirectiveTransformerOptions, CommonPluginRuntime, CompilerPlugin, CompilerPluginRuntime, Context, ContextParameters, CustomAppCommandProps, CustomEvaluationContext, CustomEvaluationFunction, DecideFunction, EvaluationContext, EventFlagContext, EventHandler, FeatureFlag, FeatureFlagDefinition, FlagRunner, GenericFunction, IdentifyFunction, InteractionCommandContext, InteractionCommandMiddlewareContext, LegacyCommandMetadata, LoadedCommand, MaybeFalsey, MaybePromise, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, PluginTransformParameters, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, RunCommand, RuntimePlugin, SlashCommandMiddlewareContext, TemplateHandler, TransformedResult, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, after, cancelAfter, commandkit, exitContext, flag, getCommandKit, getContext, isCommandWorkerContext, isCompilerPlugin, isRuntimePlugin, makeContextAwareFunction, onApplicationBootstrap, onBootstrap, provideContext, setFlagProvider, useEnvironment, useStore } from "./analytics-engine-6_M8tCeD.js";
2
2
  import { EventInterceptor, EventInterceptorContextData, EventInterceptorErrorHandler } from "./EventInterceptor-x-R2qshQ.js";
3
3
  import { ButtonKit, ButtonKitPredicate, CommandKitButtonBuilderInteractionCollectorDispatch, CommandKitButtonBuilderInteractionCollectorDispatchContextData, CommandKitButtonBuilderOnEnd, OnButtonKitClick, OnButtonKitEnd } from "./ButtonKit-C7r7RPNf.js";
4
4
  import { CommandKitModalBuilderInteractionCollectorDispatch, CommandKitModalBuilderInteractionCollectorDispatchContextData, CommandKitModalBuilderOnEnd, ModalKit, ModalKitPredicate, OnModalKitEnd, OnModalKitSubmit } from "./ModalKit-Btz58KYn.js";
@@ -29,9 +29,9 @@ import { Command, CommandsRouter, CommandsRouterOptions, Middleware, ParsedComma
29
29
  import { EventsRouter, EventsRouterOptions, EventsTree, ParsedEvent } from "./EventsRouter-BacqK6z3.js";
30
30
  import "./index-DKcmsWXw.js";
31
31
  import { COMMANDKIT_BOOTSTRAP_MODE, COMMANDKIT_CWD, COMMANDKIT_IS_CLI, COMMANDKIT_IS_DEV, COMMANDKIT_IS_TEST, HMREventType } from "./constants-MKu-Q1jh.js";
32
- import { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext } from "./EventWorkerContext-D9frVhVe.js";
32
+ import { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext } from "./EventWorkerContext-xgEc2N2T.js";
33
33
  import { bootstrapCommandkitCLI } from "./init-DOr-Y3GQ.js";
34
- import { defineConfig, getConfig } from "./config-E42bG1RK.js";
34
+ import { defineConfig, getConfig } from "./config-nD7V_D7G.js";
35
35
  import { ILogger } from "./ILogger-BW8GM-YZ.js";
36
36
  import { DefaultLogger } from "./DefaultLogger-XCOl5nLd.js";
37
37
  import { CommandKitLoggerOptions, Logger, LoggerImpl, createLogger } from "./Logger-DyfkPk7u.js";
@@ -40,4 +40,4 @@ import { debounce, defer, devOnly, getCurrentDirectory, getSourceDirectories } f
40
40
  import { toFileURL } from "./resolve-file-url-yO8bUxok.js";
41
41
  import { CommandKitErrorCodes, isErrorType } from "./error-codes-B4TyW4Ct.js";
42
42
  import { Client, Collection } from "discord.js";
43
- export { ActionRow, ActionRowProps, AnyCommandExecute, AnyCommandKitElement, AppCommand, AppCommandHandler, AppCommandNative, AsyncFunction, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, BootstrapFunction, Button, ButtonChildrenLike, ButtonKit, ButtonKitPredicate, ButtonProps, COMMANDKIT_BOOTSTRAP_MODE, COMMANDKIT_CWD, COMMANDKIT_IS_CLI, COMMANDKIT_IS_DEV, COMMANDKIT_IS_TEST, ChannelSelectMenu, ChannelSelectMenuKit, ChannelSelectMenuKitPredicate, ChannelSelectMenuProps, ChatInputCommand, ChatInputCommandContext, type Client, Collection, Command, CommandBuilderLike, CommandContext, CommandContextOptions, CommandData, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandFlagContext, CommandKit, CommandKitButtonBuilderInteractionCollectorDispatch, CommandKitButtonBuilderInteractionCollectorDispatchContextData, CommandKitButtonBuilderOnEnd, CommandKitConfiguration, CommandKitElement, CommandKitElementData, CommandKitEnvironment, type CommandKitEnvironmentInternalData, CommandKitEnvironmentType, CommandKitErrorCodes, CommandKitEventDispatch, type CommandKitHMREvent, CommandKitLoggerOptions, CommandKitModalBuilderInteractionCollectorDispatch, CommandKitModalBuilderInteractionCollectorDispatchContextData, CommandKitModalBuilderOnEnd, CommandKitOptions, CommandKitPlugin, CommandKitPluginRuntime, CommandKitSelectMenuBuilderInteractionCollectorDispatch, CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData, CommandKitSelectMenuBuilderOnEnd, CommandMetadata, CommandMetadataFunction, CommandRegistrar, CommandSource, CommandTypeData, CommandsRouter, CommandsRouterOptions, CommonBuilderKit, CommonDirectiveTransformer, CommonDirectiveTransformerOptions, CommonPluginRuntime, CommonSelectMenuProps, CompilerPlugin, CompilerPluginRuntime, Container, ContainerProps, Context, ContextParameters, CustomAppCommandProps, CustomEvaluationContext, CustomEvaluationFunction, DecideFunction, DefaultLogger, ElementType, EvaluationContext, EventFlagContext, EventHandler, EventInterceptor, EventInterceptorContextData, EventInterceptorErrorHandler, EventWorkerContext, EventsRouter, EventsRouterOptions, EventsTree, FeatureFlag, FeatureFlagDefinition, File, FileProps, FlagRunner, Fragment, FragmentElementProps, GenericFunction, HMREventType, ILogger, IdentifyFunction, InteractionCommandContext, InteractionCommandMiddlewareContext, LegacyCommandMetadata, LoadedCommand, Logger, LoggerImpl, MaybeArray, MaybeFalsey, MaybePromise, MediaGallery, MediaGalleryItem, MediaGalleryItemProps, MediaGalleryProps, MentionableSelectMenu, MentionableSelectMenuKit, MentionableSelectMenuKitPredicate, MentionableSelectMenuProps, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageCommandOptions, MessageCommandOptionsSchema, MessageCommandParser, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, Middleware, MiddlewareContext, MiddlewareContextArgs, Modal, ModalKit, ModalKitPredicate, ModalProps, OnButtonKitClick, OnButtonKitEnd, OnChannelSelectMenuKitSubmit, OnMentionableSelectMenuKitSubmit, OnModalKitEnd, OnModalKitSubmit, OnRoleSelectMenuKitSubmit, OnSelectMenuKitEnd, OnSelectMenuKitSubmit, OnStringSelectMenuKitSubmit, OnUserSelectMenuKitSubmit, ParagraphInput, ParsedCommandData, ParsedEvent, ParsedMessageCommand, PluginTransformParameters, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, ResolveBuilderInteraction, RoleSelectMenu, RoleSelectMenuKit, RoleSelectMenuKitPredicate, RoleSelectMenuProps, RunCommand, RuntimePlugin, Section, SectionProps, SelectMenuKitPredicate, SelectMenuProps, Separator, SeparatorProps, ShortInput, SlashCommandMiddlewareContext, StringEncodable, StringSelectMenu, StringSelectMenuKit, StringSelectMenuKitPredicate, StringSelectMenuOption, StringSelectMenuOptionProps, StringSelectMenuProps, TemplateHandler, TextDisplay, TextDisplayProps, TextInput, TextInputProps, Thumbnail, ThumbnailProps, TransformedResult, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, UserSelectMenu, UserSelectMenuKit, UserSelectMenuKitPredicate, UserSelectMenuProps, bootstrapCommandkitCLI, commandkit, createElement, createElement as jsx, createElement as jsxs, createLogger, debounce, CommandKit as default, defer, defineConfig, devOnly, eventWorkerContext, exitContext, flag, getCommandKit, getConfig, getContext, getCurrentDirectory, getElement, getEventWorkerContext, getSourceDirectories, isCommandKitElement, isCommandWorkerContext, isCompilerPlugin, isErrorType, isEventWorkerContext, isInteractionSource, isMessageSource, isRuntimePlugin, makeContextAwareFunction, onApplicationBootstrap, onBootstrap, provideContext, redirect, rethrow, runInEventWorkerContext, setFlagProvider, stopEvents, stopMiddlewares, toFileURL, after as unstable_after, cancelAfter as unstable_cancelAfter, useEnvironment, version };
43
+ export { ActionRow, ActionRowProps, AnyCommandExecute, AnyCommandKitElement, AppCommand, AppCommandHandler, AppCommandNative, AsyncFunction, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, BootstrapFunction, Button, ButtonChildrenLike, ButtonKit, ButtonKitPredicate, ButtonProps, COMMANDKIT_BOOTSTRAP_MODE, COMMANDKIT_CWD, COMMANDKIT_IS_CLI, COMMANDKIT_IS_DEV, COMMANDKIT_IS_TEST, ChannelSelectMenu, ChannelSelectMenuKit, ChannelSelectMenuKitPredicate, ChannelSelectMenuProps, ChatInputCommand, ChatInputCommandContext, type Client, Collection, Command, CommandBuilderLike, CommandContext, CommandContextOptions, CommandData, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandFlagContext, CommandKit, CommandKitButtonBuilderInteractionCollectorDispatch, CommandKitButtonBuilderInteractionCollectorDispatchContextData, CommandKitButtonBuilderOnEnd, CommandKitConfiguration, CommandKitElement, CommandKitElementData, CommandKitEnvironment, type CommandKitEnvironmentInternalData, CommandKitEnvironmentType, CommandKitErrorCodes, CommandKitEventDispatch, type CommandKitHMREvent, CommandKitLoggerOptions, CommandKitModalBuilderInteractionCollectorDispatch, CommandKitModalBuilderInteractionCollectorDispatchContextData, CommandKitModalBuilderOnEnd, CommandKitOptions, CommandKitPlugin, CommandKitPluginRuntime, CommandKitSelectMenuBuilderInteractionCollectorDispatch, CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData, CommandKitSelectMenuBuilderOnEnd, CommandMetadata, CommandMetadataFunction, CommandRegistrar, CommandSource, CommandTypeData, CommandsRouter, CommandsRouterOptions, CommonBuilderKit, CommonDirectiveTransformer, CommonDirectiveTransformerOptions, CommonPluginRuntime, CommonSelectMenuProps, CompilerPlugin, CompilerPluginRuntime, Container, ContainerProps, Context, ContextParameters, CustomAppCommandProps, CustomEvaluationContext, CustomEvaluationFunction, DecideFunction, DefaultLogger, ElementType, EvaluationContext, EventFlagContext, EventHandler, EventInterceptor, EventInterceptorContextData, EventInterceptorErrorHandler, EventWorkerContext, EventsRouter, EventsRouterOptions, EventsTree, FeatureFlag, FeatureFlagDefinition, File, FileProps, FlagRunner, Fragment, FragmentElementProps, GenericFunction, HMREventType, ILogger, IdentifyFunction, InteractionCommandContext, InteractionCommandMiddlewareContext, LegacyCommandMetadata, LoadedCommand, Logger, LoggerImpl, MaybeArray, MaybeFalsey, MaybePromise, MediaGallery, MediaGalleryItem, MediaGalleryItemProps, MediaGalleryProps, MentionableSelectMenu, MentionableSelectMenuKit, MentionableSelectMenuKitPredicate, MentionableSelectMenuProps, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageCommandOptions, MessageCommandOptionsSchema, MessageCommandParser, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, Middleware, MiddlewareContext, MiddlewareContextArgs, Modal, ModalKit, ModalKitPredicate, ModalProps, OnButtonKitClick, OnButtonKitEnd, OnChannelSelectMenuKitSubmit, OnMentionableSelectMenuKitSubmit, OnModalKitEnd, OnModalKitSubmit, OnRoleSelectMenuKitSubmit, OnSelectMenuKitEnd, OnSelectMenuKitSubmit, OnStringSelectMenuKitSubmit, OnUserSelectMenuKitSubmit, ParagraphInput, ParsedCommandData, ParsedEvent, ParsedMessageCommand, PluginTransformParameters, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, ResolveBuilderInteraction, RoleSelectMenu, RoleSelectMenuKit, RoleSelectMenuKitPredicate, RoleSelectMenuProps, RunCommand, RuntimePlugin, Section, SectionProps, SelectMenuKitPredicate, SelectMenuProps, Separator, SeparatorProps, ShortInput, SlashCommandMiddlewareContext, StringEncodable, StringSelectMenu, StringSelectMenuKit, StringSelectMenuKitPredicate, StringSelectMenuOption, StringSelectMenuOptionProps, StringSelectMenuProps, TemplateHandler, TextDisplay, TextDisplayProps, TextInput, TextInputProps, Thumbnail, ThumbnailProps, TransformedResult, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, UserSelectMenu, UserSelectMenuKit, UserSelectMenuKitPredicate, UserSelectMenuProps, bootstrapCommandkitCLI, commandkit, createElement, createElement as jsx, createElement as jsxs, createLogger, debounce, CommandKit as default, defer, defineConfig, devOnly, eventWorkerContext, exitContext, flag, getCommandKit, getConfig, getContext, getCurrentDirectory, getElement, getEventWorkerContext, getSourceDirectories, isCommandKitElement, isCommandWorkerContext, isCompilerPlugin, isErrorType, isEventWorkerContext, isInteractionSource, isMessageSource, isRuntimePlugin, makeContextAwareFunction, onApplicationBootstrap, onBootstrap, provideContext, redirect, rethrow, runInEventWorkerContext, setFlagProvider, stopEvents, stopMiddlewares, toFileURL, after as unstable_after, cancelAfter as unstable_cancelAfter, useEnvironment, useStore, version };
package/dist/index.js CHANGED
@@ -1,47 +1,48 @@
1
1
  Object.defineProperty(exports, '__esModule', { value: true });
2
2
  const require_chunk = require('./chunk-nOFOJqeH.js');
3
- require('./colors-Cd4Oz-r-.js');
4
- const require_ActionRow = require('./ActionRow-CmTHbo2t.js');
3
+ require('./colors-DL3ucTiT.js');
4
+ const require_ActionRow = require('./ActionRow-CbdGFWMT.js');
5
5
  const require_error_codes = require('./error-codes-Ds0bnPvT.js');
6
- const require_commandkit = require('./commandkit-vWHgiaKd.js');
6
+ const require_commandkit = require('./commandkit-Dy4V-Rk2.js');
7
7
  require('./common-CcfjYnPG.js');
8
8
  require('./common-vnMIelAE.js');
9
- const require_container = require('./container-z621KfH5.js');
10
- const require_file = require('./file-DVZC0QXI.js');
11
- const require_media_gallery = require('./media-gallery-CIKypjbJ.js');
12
- const require_section = require('./section-CuYr0Inu.js');
13
- const require_separator = require('./separator-DLdWBjSN.js');
14
- const require_text_display = require('./text-display--p2-BoUa.js');
9
+ const require_container = require('./container-C6GtfAPW.js');
10
+ const require_file = require('./file-DVOELoNv.js');
11
+ const require_media_gallery = require('./media-gallery-zDtJ3kxb.js');
12
+ const require_section = require('./section-DlvrDoJK.js');
13
+ const require_separator = require('./separator-DL6QH5H1.js');
14
+ const require_text_display = require('./text-display-DbMumig_.js');
15
15
  require('./v2-DofkPKHs.js');
16
16
  const require_element = require('./element-Bak9llw_.js');
17
17
  require('./types-CUZOquUl.js');
18
- const require_EventInterceptor = require('./EventInterceptor-CQ4PBpBJ.js');
18
+ const require_EventInterceptor = require('./EventInterceptor-CQEXyUTp.js');
19
19
  const require_constants = require('./constants-B5_Ta7PR.js');
20
- require('./PluginCommon-Di1xIa8d.js');
21
- const require_CompilerPlugin = require('./CompilerPlugin-CjoZAAR8.js');
22
- const require_RuntimePlugin = require('./RuntimePlugin-eTdFJwGd.js');
20
+ require('./PluginCommon-Cvl5yYM_.js');
21
+ const require_CompilerPlugin = require('./CompilerPlugin-M8r3yNAl.js');
22
+ const require_RuntimePlugin = require('./RuntimePlugin-BUecuBIU.js');
23
23
  require('./types-q0Nm882H.js');
24
- const require_resolve_file_url = require('./resolve-file-url-DYjaxg_S.js');
24
+ const require_resolve_file_url = require('./resolve-file-url-ChIyw-Vf.js');
25
25
  require('./runtime-DB9CiPfe.js');
26
26
  require('./utils-KsNof0Xz.js');
27
- require('./types-package-DrnIdWLg.js');
28
- require('./constants-DxfYtA6t.js');
29
- const require_EventWorkerContext = require('./EventWorkerContext-TZIKxVCu.js');
30
- const require_signals = require('./signals-r7qPAvOR.js');
31
- const require_MessageCommandParser = require('./MessageCommandParser-TPEPhjvx.js');
32
- const require_CommandsRouter = require('./CommandsRouter-tMAivEfv.js');
33
- const require_EventsRouter = require('./EventsRouter-C_J0M3uO.js');
27
+ require('./types-package-BWArjyBF.js');
28
+ require('./constants-BOOGN85p.js');
29
+ const require_EventWorkerContext = require('./EventWorkerContext-Dq29tieI.js');
30
+ const require_signals = require('./signals-ChFMD7mB.js');
31
+ const require_MessageCommandParser = require('./MessageCommandParser-CEuO6Ex3.js');
32
+ const require_CommandsRouter = require('./CommandsRouter-DZAeB2v_.js');
33
+ const require_EventsRouter = require('./EventsRouter-Dzpm7ubq.js');
34
34
  require('./router-DHnFRADH.js');
35
- require('./common-DNADUU3_.js');
36
- require('./CommandKitEventsChannel-Bgw0XCOl.js');
37
- require('./store-CiqLHedg.js');
38
- const require_helpers = require('./helpers-BUlN3lIz.js');
35
+ require('./common-DVM_onKu.js');
36
+ require('./CommandKitEventsChannel-B5vbINtP.js');
37
+ require('./store-Hcgz7DSt.js');
38
+ const require_helpers = require('./helpers-CiuN7y5B.js');
39
39
  require('./app-HN1cVg8J.js');
40
40
  require('./ILogger-dQ7Y9X1f.js');
41
- const require_version = require('./version-D0XWDQ4f.js');
42
- const require_feature_flags = require('./feature-flags-Ug0I9mfF.js');
43
- const require_init = require('./init-BTnqvIWt.js');
44
- const discord_js = require_chunk.__toESM(require("discord.js"));
41
+ const require_version = require('./version-CphQqt4J.js');
42
+ const require_feature_flags = require('./feature-flags-3TQSPAVn.js');
43
+ const require_init = require('./init-Bo01I_h_.js');
44
+ let discord_js = require("discord.js");
45
+ discord_js = require_chunk.__toESM(discord_js);
45
46
 
46
47
  //#region src/index.ts
47
48
  var src_default = require_commandkit.CommandKit;
@@ -153,5 +154,6 @@ exports.toFileURL = require_resolve_file_url.toFileURL;
153
154
  exports.unstable_after = require_commandkit.after;
154
155
  exports.unstable_cancelAfter = require_commandkit.cancelAfter;
155
156
  exports.useEnvironment = require_commandkit.useEnvironment;
157
+ exports.useStore = require_commandkit.useStore;
156
158
  exports.version = require_version.version;
157
159
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { CommandKit } from './commandkit';\n\nexport default CommandKit;\n\nexport * from './commandkit';\nexport * from './components';\nexport * from './config/config';\nexport * from './context/async-context';\nexport {\n type CommandKitEnvironmentInternalData,\n CommandKitEnvironment,\n CommandKitEnvironmentType,\n cancelAfter as unstable_cancelAfter,\n after as unstable_after,\n} from './context/environment';\nexport * from './app/index';\nexport * from './logger/DefaultLogger';\nexport * from './logger/ILogger';\nexport * from './logger/Logger';\nexport * from './app/router/index';\nexport type * from './types';\nexport * from './version';\nexport * from './plugins/index';\nexport * from './flags/feature-flags';\nexport {\n getCurrentDirectory,\n getSourceDirectories,\n devOnly,\n debounce,\n defer,\n} from './utils/utilities';\nexport { toFileURL } from './utils/resolve-file-url';\nexport * from './app/interrupt/signals';\nexport type { CommandKitHMREvent } from './utils/dev-hooks';\nexport * from './utils/constants';\nexport * from './app/events/EventWorkerContext';\nexport { CommandKitErrorCodes, isErrorType } from './utils/error-codes';\nexport { Collection, type Client } from 'discord.js';\n\n// cli\nexport { bootstrapCommandkitCLI } from './cli/init';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,kBAAe"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { CommandKit } from './commandkit';\n\nexport default CommandKit;\n\nexport * from './commandkit';\nexport * from './components';\nexport * from './config/config';\nexport * from './context/async-context';\nexport {\n type CommandKitEnvironmentInternalData,\n CommandKitEnvironment,\n CommandKitEnvironmentType,\n cancelAfter as unstable_cancelAfter,\n after as unstable_after,\n} from './context/environment';\nexport * from './app/index';\nexport * from './logger/DefaultLogger';\nexport * from './logger/ILogger';\nexport * from './logger/Logger';\nexport * from './app/router/index';\nexport type * from './types';\nexport * from './version';\nexport * from './plugins/index';\nexport * from './flags/feature-flags';\nexport {\n getCurrentDirectory,\n getSourceDirectories,\n devOnly,\n debounce,\n defer,\n} from './utils/utilities';\nexport { toFileURL } from './utils/resolve-file-url';\nexport * from './app/interrupt/signals';\nexport type { CommandKitHMREvent } from './utils/dev-hooks';\nexport * from './utils/constants';\nexport * from './app/events/EventWorkerContext';\nexport { CommandKitErrorCodes, isErrorType } from './utils/error-codes';\nexport { Collection, type Client } from 'discord.js';\n\n// cli\nexport { bootstrapCommandkitCLI } from './cli/init';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,kBAAe"}
@@ -1,12 +1,15 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const require_commandkit = require('./commandkit-vWHgiaKd.js');
2
+ const require_commandkit = require('./commandkit-Dy4V-Rk2.js');
3
3
  const require_constants = require('./constants-B5_Ta7PR.js');
4
- const require_CompilerPlugin = require('./CompilerPlugin-CjoZAAR8.js');
5
- const require_types_package = require('./types-package-DrnIdWLg.js');
6
- const require_common = require('./common-DNADUU3_.js');
7
- const node_fs = require_chunk.__toESM(require("node:fs"));
8
- const node_path = require_chunk.__toESM(require("node:path"));
9
- const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
4
+ const require_CompilerPlugin = require('./CompilerPlugin-M8r3yNAl.js');
5
+ const require_types_package = require('./types-package-BWArjyBF.js');
6
+ const require_common = require('./common-DVM_onKu.js');
7
+ let node_fs = require("node:fs");
8
+ node_fs = require_chunk.__toESM(node_fs);
9
+ let node_path = require("node:path");
10
+ node_path = require_chunk.__toESM(node_path);
11
+ let node_fs_promises = require("node:fs/promises");
12
+ node_fs_promises = require_chunk.__toESM(node_fs_promises);
10
13
 
11
14
  //#region src/cli/init.ts
12
15
  /**
@@ -89,4 +92,4 @@ Object.defineProperty(exports, 'bootstrapCommandkitCLI', {
89
92
  return bootstrapCommandkitCLI;
90
93
  }
91
94
  });
92
- //# sourceMappingURL=init-BTnqvIWt.js.map
95
+ //# sourceMappingURL=init-Bo01I_h_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-BTnqvIWt.js","names":[],"sources":["../src/cli/init.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { generateTypesPackage } from '../utils/types-package';\nimport { loadConfigFile } from '../config/loader';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n isCompilerPlugin,\n} from '../plugins';\nimport { panic } from './common';\nimport { COMMANDKIT_CWD } from '../utils/constants';\n\n/**\n * Creates a command line interface for CommandKit.\n * @param argv The arguments passed to the CLI.\n * @param options The options passed to the CLI.\n */\nexport async function bootstrapCommandkitCLI(\n argv: string[],\n options?: import('commander').ParseOptions | undefined,\n) {\n process.title = 'CommandKit CLI';\n\n // imports are lazily loaded when the cli is used, instead of loading it with the lib itself\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer, createProductionBuild } = await import(\n './production'\n );\n const { generateCommand, generateEvent } = await import('./generators');\n const { version } = await import('../version');\n const { showInformation } = await import('./information');\n const { setCLIEnv } = await import('./env');\n\n const program = new Command('commandkit');\n\n program\n .command('dev')\n .version(version)\n .description('Start your bot in development mode.')\n .option(\n '-c, --config [path]',\n 'Path to your commandkit config file.',\n './commandkit.js',\n )\n .action(() => {\n const options = program.opts();\n bootstrapDevelopmentServer(options.config);\n });\n\n program\n .command('info')\n .description(\n 'Show information about the system which can be used to report bugs.',\n )\n .action(async () => {\n await showInformation();\n });\n\n program\n .command('start')\n .description(\n 'Start your bot in production mode after running the build command.',\n )\n .option('-c, --config [path]', 'Path to your commandkit config file.')\n .action(() => {\n const options = program.opts();\n bootstrapProductionServer(options.config);\n });\n\n program\n .command('build')\n .description('Build your project for production usage.')\n .option('-c, --config [path]', 'Path to your commandkit config file.')\n .action(() => {\n setCLIEnv();\n const options = program.opts();\n return createProductionBuild(options.config);\n });\n\n program\n .command('create')\n .description(\n 'Create new files using built-in templates or custom plugin templates',\n )\n .argument(\n '<template>',\n 'The template to use (e.g. command, event, or custom plugin template)',\n )\n .argument('[args...]', 'Additional arguments for the template')\n .action(async (template, args) => {\n setCLIEnv();\n\n // Handle custom plugin templates\n const { plugins } = await loadConfigFile();\n const runtime = new CompilerPluginRuntime(\n plugins.filter((p) => isCompilerPlugin(p)) as CompilerPlugin[],\n );\n\n try {\n await runtime.init();\n const templateHandler = runtime.getTemplate(template);\n\n if (!templateHandler) {\n // Handle built-in templates\n if (template === 'command') {\n const [name] = args;\n if (!name) {\n panic('Command name is required');\n }\n await generateCommand(name);\n return;\n }\n\n if (template === 'event') {\n const [name] = args;\n if (!name) {\n panic('Event name is required');\n }\n await generateEvent(name);\n return;\n }\n\n const valid = Array.from(\n new Set([\n 'command',\n 'event',\n ...Array.from(runtime.getTemplates().keys()),\n ]),\n ).map((t) => `\"${t}\"`);\n\n panic(\n `Template \"${template}\" not found. Available templates: ${valid.join(', ')}`,\n );\n }\n\n await templateHandler(args);\n } catch (e: any) {\n panic(`Failed to execute template \"${template}\": ${e?.message || e}`);\n } finally {\n await runtime.destroy();\n }\n });\n\n const types = join(COMMANDKIT_CWD, 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n await generateTypesPackage(true).catch(() => {});\n }\n\n await program.parseAsync(argv, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,eAAsB,uBACtB,MACA,SACA;AACE,SAAQ,QAAQ;CAGhB,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,EAAE,+BAA+B,2CAAM;CAC7C,MAAM,EAAE,2BAA2B,0BAA0B,2CAAM;CAGnE,MAAM,EAAE,iBAAiB,kBAAkB,2CAAM;CACjD,MAAM,EAAE,YAAY,2CAAM;CAC1B,MAAM,EAAE,oBAAoB,2CAAM;CAClC,MAAM,EAAE,cAAc,2CAAM;CAE5B,MAAM,UAAU,IAAI,QAAQ;AAE5B,SACA,QAAQ,OACR,QAAQ,SACR,YAAY,uCACZ,OACE,uBACA,wCACA,mBAEF,aAAa;EACX,MAAM,YAAU,QAAQ;AACxB,6BAA2B,UAAQ;;AAGrC,SACA,QAAQ,QACR,YACE,uEAEF,OAAO,YAAY;AACjB,QAAM;;AAGR,SACA,QAAQ,SACR,YACE,sEAEF,OAAO,uBAAuB,wCAC9B,aAAa;EACX,MAAM,YAAU,QAAQ;AACxB,4BAA0B,UAAQ;;AAGpC,SACA,QAAQ,SACR,YAAY,4CACZ,OAAO,uBAAuB,wCAC9B,aAAa;AACX;EACA,MAAM,YAAU,QAAQ;AACxB,SAAO,sBAAsB,UAAQ;;AAGvC,SACA,QAAQ,UACR,YACE,wEAEF,SACE,cACA,wEAEF,SAAS,aAAa,yCACtB,OAAO,OAAO,UAAU,SAAS;AAC/B;EAGA,MAAM,EAAE,YAAY,MAAM;EAC1B,MAAM,UAAU,IAAI,yCAClB,QAAQ,QAAQ,MAAM,wCAAiB;AAGzC,MAAI;AACF,SAAM,QAAQ;GACd,MAAM,kBAAkB,QAAQ,YAAY;AAE5C,OAAI,CAAC,iBAAiB;AAEpB,QAAI,aAAa,WAAW;KAC1B,MAAM,CAAC,QAAQ;AACf,SAAI,CAAC,KACH,sBAAM;AAER,WAAM,gBAAgB;AACtB;;AAGF,QAAI,aAAa,SAAS;KACxB,MAAM,CAAC,QAAQ;AACf,SAAI,CAAC,KACH,sBAAM;AAER,WAAM,cAAc;AACpB;;IAGF,MAAM,QAAQ,MAAM,KAClB,IAAI,IAAI;KACR;KACA;KACA,GAAG,MAAM,KAAK,QAAQ,eAAe;QAErC,KAAK,MAAM,IAAI,EAAE;AAEnB,yBACE,aAAa,SAAS,oCAAoC,MAAM,KAAK;;AAIzE,SAAM,gBAAgB;WACf,GAAQ;AACf,wBAAM,+BAA+B,SAAS,4CAAK,EAAG,YAAW;YACzD;AACR,SAAM,QAAQ;;;CAIlB,MAAM,4BAAa,kCAAgB,gBAAgB;AAEnD,KAAI,yBAAY,QAAQ;AACtB,oCAAY,OAAO,EAAE,WAAW,QAAQ,YAAY;AACpD,QAAM,2CAAqB,MAAM,YAAY;;AAG/C,OAAM,QAAQ,WAAW,MAAM"}
1
+ {"version":3,"file":"init-Bo01I_h_.js","names":[],"sources":["../src/cli/init.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { generateTypesPackage } from '../utils/types-package';\nimport { loadConfigFile } from '../config/loader';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n isCompilerPlugin,\n} from '../plugins';\nimport { panic } from './common';\nimport { COMMANDKIT_CWD } from '../utils/constants';\n\n/**\n * Creates a command line interface for CommandKit.\n * @param argv The arguments passed to the CLI.\n * @param options The options passed to the CLI.\n */\nexport async function bootstrapCommandkitCLI(\n argv: string[],\n options?: import('commander').ParseOptions | undefined,\n) {\n process.title = 'CommandKit CLI';\n\n // imports are lazily loaded when the cli is used, instead of loading it with the lib itself\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer, createProductionBuild } = await import(\n './production'\n );\n const { generateCommand, generateEvent } = await import('./generators');\n const { version } = await import('../version');\n const { showInformation } = await import('./information');\n const { setCLIEnv } = await import('./env');\n\n const program = new Command('commandkit');\n\n program\n .command('dev')\n .version(version)\n .description('Start your bot in development mode.')\n .option(\n '-c, --config [path]',\n 'Path to your commandkit config file.',\n './commandkit.js',\n )\n .action(() => {\n const options = program.opts();\n bootstrapDevelopmentServer(options.config);\n });\n\n program\n .command('info')\n .description(\n 'Show information about the system which can be used to report bugs.',\n )\n .action(async () => {\n await showInformation();\n });\n\n program\n .command('start')\n .description(\n 'Start your bot in production mode after running the build command.',\n )\n .option('-c, --config [path]', 'Path to your commandkit config file.')\n .action(() => {\n const options = program.opts();\n bootstrapProductionServer(options.config);\n });\n\n program\n .command('build')\n .description('Build your project for production usage.')\n .option('-c, --config [path]', 'Path to your commandkit config file.')\n .action(() => {\n setCLIEnv();\n const options = program.opts();\n return createProductionBuild(options.config);\n });\n\n program\n .command('create')\n .description(\n 'Create new files using built-in templates or custom plugin templates',\n )\n .argument(\n '<template>',\n 'The template to use (e.g. command, event, or custom plugin template)',\n )\n .argument('[args...]', 'Additional arguments for the template')\n .action(async (template, args) => {\n setCLIEnv();\n\n // Handle custom plugin templates\n const { plugins } = await loadConfigFile();\n const runtime = new CompilerPluginRuntime(\n plugins.filter((p) => isCompilerPlugin(p)) as CompilerPlugin[],\n );\n\n try {\n await runtime.init();\n const templateHandler = runtime.getTemplate(template);\n\n if (!templateHandler) {\n // Handle built-in templates\n if (template === 'command') {\n const [name] = args;\n if (!name) {\n panic('Command name is required');\n }\n await generateCommand(name);\n return;\n }\n\n if (template === 'event') {\n const [name] = args;\n if (!name) {\n panic('Event name is required');\n }\n await generateEvent(name);\n return;\n }\n\n const valid = Array.from(\n new Set([\n 'command',\n 'event',\n ...Array.from(runtime.getTemplates().keys()),\n ]),\n ).map((t) => `\"${t}\"`);\n\n panic(\n `Template \"${template}\" not found. Available templates: ${valid.join(', ')}`,\n );\n }\n\n await templateHandler(args);\n } catch (e: any) {\n panic(`Failed to execute template \"${template}\": ${e?.message || e}`);\n } finally {\n await runtime.destroy();\n }\n });\n\n const types = join(COMMANDKIT_CWD, 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n await generateTypesPackage(true).catch(() => {});\n }\n\n await program.parseAsync(argv, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,eAAsB,uBACtB,MACA,SACA;AACE,SAAQ,QAAQ;CAGhB,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,EAAE,+BAA+B,2CAAM;CAC7C,MAAM,EAAE,2BAA2B,0BAA0B,2CAAM;CAGnE,MAAM,EAAE,iBAAiB,kBAAkB,2CAAM;CACjD,MAAM,EAAE,YAAY,2CAAM;CAC1B,MAAM,EAAE,oBAAoB,2CAAM;CAClC,MAAM,EAAE,cAAc,2CAAM;CAE5B,MAAM,UAAU,IAAI,QAAQ,aAAa;AAEzC,SACA,QAAQ,MAAM,CACd,QAAQ,QAAQ,CAChB,YAAY,sCAAsC,CAClD,OACE,uBACA,wCACA,kBACD,CACD,aAAa;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,6BAA2B,UAAQ,OAAO;GAC1C;AAEF,SACA,QAAQ,OAAO,CACf,YACE,sEACD,CACD,OAAO,YAAY;AACjB,QAAM,iBAAiB;GACvB;AAEF,SACA,QAAQ,QAAQ,CAChB,YACE,qEACD,CACD,OAAO,uBAAuB,uCAAuC,CACrE,aAAa;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,4BAA0B,UAAQ,OAAO;GACzC;AAEF,SACA,QAAQ,QAAQ,CAChB,YAAY,2CAA2C,CACvD,OAAO,uBAAuB,uCAAuC,CACrE,aAAa;AACX,aAAW;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,SAAO,sBAAsB,UAAQ,OAAO;GAC5C;AAEF,SACA,QAAQ,SAAS,CACjB,YACE,uEACD,CACD,SACE,cACA,uEACD,CACD,SAAS,aAAa,wCAAwC,CAC9D,OAAO,OAAO,UAAU,SAAS;AAC/B,aAAW;EAGX,MAAM,EAAE,YAAY,MAAM,mCAAgB;EAC1C,MAAM,UAAU,IAAI,yCAClB,QAAQ,QAAQ,MAAM,wCAAiB,EAAE,CAAC,CAC3C;AAED,MAAI;AACF,SAAM,QAAQ,MAAM;GACpB,MAAM,kBAAkB,QAAQ,YAAY,SAAS;AAErD,OAAI,CAAC,iBAAiB;AAEpB,QAAI,aAAa,WAAW;KAC1B,MAAM,CAAC,QAAQ;AACf,SAAI,CAAC,KACH,sBAAM,2BAA2B;AAEnC,WAAM,gBAAgB,KAAK;AAC3B;;AAGF,QAAI,aAAa,SAAS;KACxB,MAAM,CAAC,QAAQ;AACf,SAAI,CAAC,KACH,sBAAM,yBAAyB;AAEjC,WAAM,cAAc,KAAK;AACzB;;IAGF,MAAM,QAAQ,MAAM,KAClB,IAAI,IAAI;KACR;KACA;KACA,GAAG,MAAM,KAAK,QAAQ,cAAc,CAAC,MAAM,CAAC;KAAC,CAC5C,CACF,CAAC,KAAK,MAAM,IAAI,EAAE,GAAG;AAEtB,yBACE,aAAa,SAAS,oCAAoC,MAAM,KAAK,KAAK,GAC3E;;AAGH,SAAM,gBAAgB,KAAK;WACpB,GAAQ;AACf,wBAAM,+BAA+B,SAAS,4CAAK,EAAG,YAAW,IAAI;YAC7D;AACR,SAAM,QAAQ,SAAS;;GAEzB;CAEF,MAAM,4BAAa,kCAAgB,gBAAgB,mBAAmB;AAEtE,KAAI,yBAAY,MAAM,EAAE;AACtB,oCAAY,OAAO,EAAE,WAAW,MAAM,CAAC,CAAC,YAAY,GAAG;AACvD,QAAM,2CAAqB,KAAK,CAAC,YAAY,GAAG;;AAGlD,OAAM,QAAQ,WAAW,MAAM,QAAQ"}
@@ -1,4 +1,4 @@
1
- const require_dotprops = require('../dotprops-C_4L7RPD.js');
1
+ const require_dotprops = require('../dotprops-tnhpnszJ.js');
2
2
 
3
3
  exports.getNestedValue = require_dotprops.getNestedValue;
4
4
  exports.setNestedValue = require_dotprops.setNestedValue;
package/dist/kv/kv.js CHANGED
@@ -1,8 +1,9 @@
1
1
  const require_chunk = require('../chunk-nOFOJqeH.js');
2
2
  require('../constants-4oxxvaJA.js');
3
- const require_dotprops = require('../dotprops-C_4L7RPD.js');
4
- const require_serde = require('../serde-CHySNpFr.js');
5
- const node_sqlite = require_chunk.__toESM(require("node:sqlite"));
3
+ const require_dotprops = require('../dotprops-tnhpnszJ.js');
4
+ const require_serde = require('../serde-Cc8iUa9J.js');
5
+ let node_sqlite = require("node:sqlite");
6
+ node_sqlite = require_chunk.__toESM(node_sqlite);
6
7
 
7
8
  //#region src/kv/kv.ts
8
9
  /**
@@ -138,7 +139,7 @@ var KV = class KV {
138
139
  if (!result) return void 0;
139
140
  if (result.expires_at && Number(result.expires_at) <= this.getCurrentTime()) {
140
141
  this.delete(key);
141
- return void 0;
142
+ return;
142
143
  }
143
144
  const serialized = JSON.parse(result.value);
144
145
  const deserialized = require_serde.deserializer(serialized);
@@ -387,8 +388,7 @@ var KV = class KV {
387
388
  * ```
388
389
  */
389
390
  keys() {
390
- const result = this.statements.keys.all(this.getCurrentTime());
391
- return result.map((row) => row.key);
391
+ return this.statements.keys.all(this.getCurrentTime()).map((row) => row.key);
392
392
  }
393
393
  /**
394
394
  * Gets all values in the current namespace (excluding expired keys)
@@ -402,8 +402,7 @@ var KV = class KV {
402
402
  * ```
403
403
  */
404
404
  values() {
405
- const result = this.statements.values.all(this.getCurrentTime());
406
- return result.map((row) => {
405
+ return this.statements.values.all(this.getCurrentTime()).map((row) => {
407
406
  const serialized = JSON.parse(row.value);
408
407
  return require_serde.deserializer(serialized);
409
408
  });
@@ -465,8 +464,7 @@ var KV = class KV {
465
464
  * ```
466
465
  */
467
466
  namespaces() {
468
- const result = this.statements.namespaces.all();
469
- return result.map((row) => row.name);
467
+ return this.statements.namespaces.all().map((row) => row.name);
470
468
  }
471
469
  /**
472
470
  * Gets the current namespace name
package/dist/kv/kv.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"kv.js","names":[],"sources":["../../src/kv/kv.ts"],"sourcesContent":["import { DatabaseSync, StatementSync } from 'node:sqlite';\nimport { deserializer, serializer } from './serde';\nimport { getNestedValue, setNestedValue } from './dotprops';\n\nexport type { SerializedValue } from './serde';\n\n/**\n * Mathematical operators supported by the KV math method\n */\nexport type KvMathOperator = '+' | '-' | '*' | '/' | '^' | '%';\n\n/**\n * Configuration options for the KV store\n */\nexport interface KvOptions {\n /** Enable Write-Ahead Logging for better performance and durability */\n enableWAL?: boolean;\n /** Namespace for the key-value store table */\n namespace?: string;\n}\n\n/**\n * A key-value store implementation using SQLite\n *\n * This class provides a simple, persistent key-value storage solution\n * with support for namespaces, automatic cleanup, iteration, expiration, and JSON serialization.\n *\n * @example\n * ```typescript\n * const kv = new KV('data.db');\n *\n * // Store any JSON-serializable data\n * kv.set('user:123', { name: 'John', age: 30 });\n * kv.set('counter', 42);\n * kv.set('active', true);\n * kv.set('dates', [new Date(), new Date()]);\n *\n * // Use dot notation for nested properties\n * kv.set('user:123.name', 'John');\n * kv.set('user:123.settings.theme', 'dark');\n *\n * // Retrieve data\n * const user = kv.get('user:123'); // { name: 'John', age: 30, settings: { theme: 'dark' } }\n * const name = kv.get('user:123.name'); // 'John'\n * ```\n */\nexport class KV implements Disposable, AsyncDisposable {\n private db: DatabaseSync;\n private statements: Record<string, StatementSync> = {};\n\n /**\n * Creates a new KV store instance\n *\n * @param path - Database file path, buffer, URL, or existing DatabaseSync instance\n * @param options - Configuration options for the KV store\n */\n public constructor(\n path: string | Buffer | URL | DatabaseSync,\n private options: KvOptions = {\n enableWAL: true,\n namespace: 'commandkit_kv',\n },\n ) {\n this.db =\n path instanceof DatabaseSync\n ? path\n : new DatabaseSync(path, { open: true });\n\n if (options.enableWAL) {\n this.db.exec(/* sql */ `PRAGMA journal_mode = WAL;`);\n }\n\n const namespace = this.options.namespace ?? 'commandkit_kv';\n\n this.db.exec(/* sql */ `\n CREATE TABLE IF NOT EXISTS ${namespace} (\n key TEXT PRIMARY KEY,\n value TEXT,\n expires_at INTEGER\n )\n `);\n\n this.statements = {\n get: this.db.prepare(\n /* sql */ `SELECT value, expires_at FROM ${namespace} WHERE key = ?`,\n ),\n set: this.db.prepare(\n /* sql */ `INSERT OR REPLACE INTO ${namespace} (key, value, expires_at) VALUES (?, ?, ?)`,\n ),\n setex: this.db.prepare(\n /* sql */ `INSERT OR REPLACE INTO ${namespace} (key, value, expires_at) VALUES (?, ?, ?)`,\n ),\n delete: this.db.prepare(\n /* sql */ `DELETE FROM ${namespace} WHERE key = ?`,\n ),\n has: this.db.prepare(\n /* sql */ `SELECT COUNT(*) FROM ${namespace} WHERE key = ? AND (expires_at IS NULL OR expires_at > ?)`,\n ),\n keys: this.db.prepare(\n /* sql */ `SELECT key FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n values: this.db.prepare(\n /* sql */ `SELECT value FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n clear: this.db.prepare(/* sql */ `DELETE FROM ${namespace}`),\n count: this.db.prepare(\n /* sql */ `SELECT COUNT(*) FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n all: this.db.prepare(\n /* sql */ `SELECT key, value FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n expire: this.db.prepare(\n /* sql */ `UPDATE ${namespace} SET expires_at = ? WHERE key = ?`,\n ),\n ttl: this.db.prepare(\n /* sql */ `SELECT expires_at FROM ${namespace} WHERE key = ?`,\n ),\n namespaces: this.db.prepare(\n /* sql */ `SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'`,\n ),\n begin: this.db.prepare(/* sql */ `BEGIN TRANSACTION`),\n commit: this.db.prepare(/* sql */ `COMMIT`),\n rollback: this.db.prepare(/* sql */ `ROLLBACK`),\n };\n }\n\n /**\n * Gets the current timestamp in milliseconds\n */\n private getCurrentTime(): number {\n return Date.now();\n }\n\n /**\n * Checks if the database connection is open\n *\n * @returns `true` if the database is open, `false` otherwise\n */\n public isOpen(): boolean {\n return this.db.isOpen;\n }\n\n /**\n * Gets the underlying SQLite database instance\n *\n * @returns The DatabaseSync instance\n */\n public getDatabase(): DatabaseSync {\n return this.db;\n }\n\n /**\n * Closes the database connection\n */\n public close(): void {\n if (this.db.isOpen) this.db.close();\n }\n\n /**\n * Disposable implementation - closes the database when disposed\n */\n public [Symbol.dispose]() {\n this.close();\n }\n\n /**\n * AsyncDisposable implementation - closes the database when disposed\n */\n public async [Symbol.asyncDispose]() {\n this.close();\n }\n\n /**\n * Retrieves a value by key\n *\n * @param key - The key to retrieve (supports dot notation for nested properties)\n * @returns The value associated with the key, or `undefined` if not found or expired\n *\n * @example\n * ```typescript\n * // Store an object\n * kv.set('user:123', { name: 'John', age: 30, settings: { theme: 'dark' } });\n *\n * // Get the entire object\n * const user = kv.get('user:123');\n * // { name: 'John', age: 30, settings: { theme: 'dark' } }\n *\n * // Get nested properties using dot notation\n * const name = kv.get('user:123.name'); // 'John'\n * const theme = kv.get('user:123.settings.theme'); // 'dark'\n * ```\n */\n public get<T = any>(key: string): T | undefined {\n const result = this.statements.get.get(key);\n\n if (!result) return undefined;\n\n // Check if the key has expired\n if (\n result.expires_at &&\n Number(result.expires_at) <= this.getCurrentTime()\n ) {\n this.delete(key);\n return undefined;\n }\n\n const serialized = JSON.parse(result.value as string);\n const deserialized = deserializer(serialized);\n\n // Handle dot notation for nested properties\n if (key.includes('.')) {\n return getNestedValue(deserialized, key.split('.').slice(1).join('.'));\n }\n\n return deserialized;\n }\n\n /**\n * Sets a key-value pair\n *\n * @param key - The key to set (supports dot notation for nested properties)\n * @param value - The value to associate with the key (any JSON-serializable type)\n *\n * @example\n * ```typescript\n * // Store primitive values\n * kv.set('counter', 42);\n * kv.set('active', true);\n * kv.set('name', 'John');\n *\n * // Store objects\n * kv.set('user:123', { name: 'John', age: 30 });\n *\n * // Store arrays\n * kv.set('tags', ['javascript', 'typescript', 'sqlite']);\n *\n * // Store dates\n * kv.set('created', new Date());\n *\n * // Store maps and sets\n * kv.set('permissions', new Map([['admin', true], ['user', false]]));\n * kv.set('unique_ids', new Set([1, 2, 3, 4, 5]));\n *\n * // Use dot notation for nested properties\n * kv.set('user:123.settings.theme', 'dark');\n * kv.set('user:123.settings.notifications', true);\n * ```\n */\n public set(key: string, value: any): void {\n let serializedValue: string;\n\n if (key.includes('.')) {\n // Handle dot notation for nested properties\n const [baseKey, ...pathParts] = key.split('.');\n const path = pathParts.join('.');\n\n // Get existing value or create new object\n const existing = this.get(baseKey) || {};\n setNestedValue(existing, path, value);\n\n const serialized = serializer(existing);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.set.run(baseKey, serializedValue, null);\n } else {\n const serialized = serializer(value);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.set.run(key, serializedValue, null);\n }\n }\n\n /**\n * Sets a key-value pair with expiration\n *\n * @param key - The key to set (supports dot notation for nested properties)\n * @param value - The value to associate with the key (any JSON-serializable type)\n * @param ttl - Time to live in milliseconds\n *\n * @example\n * ```typescript\n * // Set with 1 hour expiration\n * kv.setex('session:123', { userId: 123, token: 'abc123' }, 60 * 60 * 1000);\n *\n * // Set with 5 minutes expiration\n * kv.setex('temp:data', { cached: true, timestamp: Date.now() }, 5 * 60 * 1000);\n *\n * // Use dot notation with expiration\n * kv.setex('user:123.temp_settings', { theme: 'light' }, 30 * 60 * 1000);\n * ```\n */\n public setex(key: string, value: any, ttl: number): void {\n const expiresAt = this.getCurrentTime() + ttl;\n let serializedValue: string;\n\n if (key.includes('.')) {\n // Handle dot notation for nested properties\n const [baseKey, ...pathParts] = key.split('.');\n const path = pathParts.join('.');\n\n // Get existing value or create new object\n const existing = this.get(baseKey) || {};\n setNestedValue(existing, path, value);\n\n const serialized = serializer(existing);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.setex.run(baseKey, serializedValue, expiresAt);\n } else {\n const serialized = serializer(value);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.setex.run(key, serializedValue, expiresAt);\n }\n }\n\n /**\n * Performs mathematical operations on numeric values in the KV store\n *\n * @param key - The key to perform math operation on (supports dot notation for nested properties)\n * @param operator - The mathematical operator to apply\n * @param value - The value to use in the operation\n * @returns The updated value after the mathematical operation\n * @throws Error if the existing value is not numeric or if the operation is invalid\n *\n * @example\n * ```typescript\n * // Initialize a counter\n * kv.set('counter', 10);\n *\n * // Increment by 5\n * const result1 = kv.math('counter', '+', 5); // 15\n *\n * // Multiply by 2\n * const result2 = kv.math('counter', '*', 2); // 30\n *\n * // Use with bigint\n * kv.set('big_counter', BigInt(1000));\n * const result3 = kv.math('big_counter', '+', BigInt(500)); // 1500n\n *\n * // Use with dot notation\n * kv.set('user:123', { score: 100, level: 5 });\n * const result4 = kv.math('user:123.score', '+', 50); // 150\n * ```\n */\n public math(\n key: string,\n operator: KvMathOperator,\n value: number | bigint,\n ): number | bigint {\n const existingValue = this.get(key);\n\n if (existingValue === undefined) {\n throw new Error(`Key '${key}' does not exist`);\n }\n\n if (\n typeof existingValue !== 'number' &&\n typeof existingValue !== 'bigint'\n ) {\n throw new Error(\n `Value at key '${key}' is not numeric. Expected number or bigint, got ${typeof existingValue}`,\n );\n }\n\n // Handle mixed number/bigint operations by converting to bigint\n const isBigIntOperation =\n typeof existingValue === 'bigint' || typeof value === 'bigint';\n\n const existing = isBigIntOperation\n ? typeof existingValue === 'bigint'\n ? existingValue\n : BigInt(existingValue)\n : (existingValue as number);\n const operand = isBigIntOperation\n ? typeof value === 'bigint'\n ? value\n : BigInt(value)\n : (value as number);\n\n let result: number | bigint;\n\n switch (operator) {\n case '+':\n result = (existing as any) + (operand as any);\n break;\n case '-':\n result = (existing as any) - (operand as any);\n break;\n case '*':\n result = (existing as any) * (operand as any);\n break;\n case '/':\n if (operand === 0 || operand === 0n) {\n throw new Error('Division by zero');\n }\n result = (existing as any) / (operand as any);\n break;\n case '^':\n if (isBigIntOperation && operand < 0n) {\n throw new Error(\n 'Exponentiation with negative exponent is not supported for bigint',\n );\n }\n result = (existing as any) ** (operand as any);\n break;\n case '%':\n if (operand === 0 || operand === 0n) {\n throw new Error('Modulo by zero');\n }\n result = (existing as any) % (operand as any);\n break;\n default:\n throw new Error(`Invalid operator: ${operator}`);\n }\n\n // Update the value in the store\n this.set(key, result);\n\n return result;\n }\n\n /**\n * Sets expiration for an existing key\n *\n * @param key - The key to set expiration for\n * @param ttl - Time to live in milliseconds\n * @returns `true` if the key exists and expiration was set, `false` otherwise\n *\n * @example\n * ```typescript\n * kv.set('user:123', { name: 'John', age: 30 });\n *\n * // Set 30 minute expiration\n * if (kv.expire('user:123', 30 * 60 * 1000)) {\n * console.log('Expiration set successfully');\n * }\n * ```\n */\n public expire(key: string, ttl: number): boolean {\n if (!this.has(key)) return false;\n\n const expiresAt = this.getCurrentTime() + ttl;\n this.statements.expire.run(expiresAt, key);\n return true;\n }\n\n /**\n * Gets the time to live for a key\n *\n * @param key - The key to check\n * @returns Time to live in milliseconds, or `-1` if the key doesn't exist, or `-2` if the key has no expiration\n *\n * @example\n * ```typescript\n * const ttl = kv.ttl('user:123');\n * if (ttl > 0) {\n * console.log(`Key expires in ${ttl}ms`);\n * } else if (ttl === -2) {\n * console.log('Key has no expiration');\n * } else {\n * console.log('Key does not exist');\n * }\n * ```\n */\n public ttl(key: string): number {\n const result = this.statements.ttl.get(key);\n\n if (!result) return -1; // Key doesn't exist\n\n if (!result.expires_at) return -2; // No expiration\n\n const remaining = Number(result.expires_at) - this.getCurrentTime();\n return remaining > 0 ? remaining : -1; // Expired or doesn't exist\n }\n\n /**\n * Deletes a key-value pair\n *\n * @param key - The key to delete\n *\n * @example\n * ```typescript\n * kv.delete('user:123');\n * kv.delete('user:123.settings.theme'); // Delete nested property\n * ```\n */\n public delete(key: string): void {\n this.statements.delete.run(key);\n }\n\n /**\n * Checks if a key exists and is not expired\n *\n * @param key - The key to check\n * @returns `true` if the key exists and is not expired, `false` otherwise\n *\n * @example\n * ```typescript\n * if (kv.has('user:123')) {\n * console.log('User exists and is not expired');\n * }\n *\n * if (kv.has('user:123.settings.theme')) {\n * console.log('Theme setting exists');\n * }\n * ```\n */\n public has(key: string): boolean {\n const result = this.statements.has.get(key, this.getCurrentTime());\n\n return (\n result?.count !== undefined &&\n result.count !== null &&\n Number(result.count) > 0\n );\n }\n\n /**\n * Gets all keys in the current namespace (excluding expired keys)\n *\n * @returns Array of all non-expired keys\n *\n * @example\n * ```typescript\n * const keys = kv.keys();\n * console.log('All keys:', keys);\n * ```\n */\n public keys(): string[] {\n const result = this.statements.keys.all(this.getCurrentTime());\n\n return result.map((row) => row.key as string);\n }\n\n /**\n * Gets all values in the current namespace (excluding expired keys)\n *\n * @returns Array of all non-expired values\n *\n * @example\n * ```typescript\n * const values = kv.values();\n * console.log('All values:', values);\n * ```\n */\n public values(): any[] {\n const result = this.statements.values.all(this.getCurrentTime());\n\n return result.map((row) => {\n const serialized = JSON.parse(row.value as string);\n return deserializer(serialized);\n });\n }\n\n /**\n * Gets the total number of key-value pairs in the current namespace (excluding expired keys)\n *\n * @returns The count of non-expired key-value pairs\n *\n * @example\n * ```typescript\n * const count = kv.count();\n * console.log(`Total entries: ${count}`);\n * ```\n */\n public count(): number {\n const result = this.statements.count.get(this.getCurrentTime());\n\n return Number(result?.count ?? 0);\n }\n\n /**\n * Removes all key-value pairs from the current namespace\n *\n * @example\n * ```typescript\n * kv.clear(); // Removes all entries in current namespace\n * ```\n */\n public clear(): void {\n this.statements.clear.run();\n }\n\n /**\n * Gets all key-value pairs as an object (excluding expired keys)\n *\n * @returns Object with all non-expired key-value pairs\n *\n * @example\n * ```typescript\n * const all = kv.all();\n * console.log('All entries:', all);\n * // Output: { 'key1': value1, 'key2': value2 }\n * ```\n */\n public all(): Record<string, any> {\n const result = this.statements.all.all(this.getCurrentTime());\n\n return Object.fromEntries(\n result.map((row) => {\n const serialized = JSON.parse(row.value as string);\n return [row.key as string, deserializer(serialized)];\n }),\n );\n }\n\n /**\n * Gets all available namespaces (tables) in the database\n *\n * @returns Array of namespace names\n *\n * @example\n * ```typescript\n * const namespaces = kv.namespaces();\n * console.log('Available namespaces:', namespaces);\n * ```\n */\n public namespaces(): string[] {\n const result = this.statements.namespaces.all();\n\n return result.map((row) => row.name as string);\n }\n\n /**\n * Gets the current namespace name\n *\n * @returns The current namespace string\n */\n public getCurrentNamespace(): string {\n return this.options.namespace ?? 'commandkit_kv';\n }\n\n /**\n * Creates a new KV instance with a different namespace\n *\n * @param namespace - The namespace to use for the new instance\n * @returns A new KV instance with the specified namespace\n *\n * @example\n * ```typescript\n * const userKv = kv.namespace('users');\n * const configKv = kv.namespace('config');\n *\n * userKv.set('123', { name: 'John', age: 30 });\n * configKv.set('theme', 'dark');\n * ```\n */\n public namespace(namespace: string): KV {\n return new KV(this.db, {\n enableWAL: this.options.enableWAL,\n namespace,\n });\n }\n\n /**\n * Iterator implementation for iterating over all non-expired key-value pairs\n *\n * @returns Iterator yielding [key, value] tuples\n *\n * @example\n * ```typescript\n * for (const [key, value] of kv) {\n * console.log(`${key}:`, value);\n * }\n *\n * // Or using spread operator\n * const entries = [...kv];\n * ```\n */\n public *[Symbol.iterator](): Iterator<[string, any]> {\n const result = this.statements.all.iterate(this.getCurrentTime());\n\n for (const row of result) {\n const serialized = JSON.parse(row.value as string);\n yield [row.key as string, deserializer(serialized)];\n }\n }\n\n /**\n * Executes a function within a transaction\n *\n * @param fn - Function to execute within the transaction (can be async)\n * @returns The result of the function\n *\n * @example\n * ```typescript\n * // Synchronous transaction\n * kv.transaction(() => {\n * kv.set('user:123', { name: 'John', age: 30 });\n * kv.set('user:456', { name: 'Jane', age: 25 });\n * // If any operation fails, all changes are rolled back\n * });\n *\n * // Async transaction\n * await kv.transaction(async () => {\n * kv.set('user:123', { name: 'John', age: 30 });\n * await someAsyncOperation();\n * kv.set('user:456', { name: 'Jane', age: 25 });\n * // If any operation fails, all changes are rolled back\n * });\n * ```\n */\n public async transaction<T>(fn: () => T | Promise<T>): Promise<T> {\n try {\n // Begin transaction\n this.statements.begin.run();\n\n // Execute the function\n const result = await fn();\n\n // Commit transaction\n this.statements.commit.run();\n\n return result;\n } catch (error) {\n // Rollback transaction on error\n this.statements.rollback.run();\n throw error;\n }\n }\n}\n\n/**\n * Opens a new KV instance\n *\n * @param path - Database file path, buffer, URL, or existing DatabaseSync instance\n * @param options - Configuration options for the KV store\n * @returns A new KV instance\n */\nexport function openKV(\n path: string | Buffer | URL | DatabaseSync = 'commandkit_kv.db',\n options: KvOptions = { enableWAL: true, namespace: 'commandkit_kv' },\n): KV {\n return new KV(path, options);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kv.js","names":[],"sources":["../../src/kv/kv.ts"],"sourcesContent":["import { DatabaseSync, StatementSync } from 'node:sqlite';\nimport { deserializer, serializer } from './serde';\nimport { getNestedValue, setNestedValue } from './dotprops';\n\nexport type { SerializedValue } from './serde';\n\n/**\n * Mathematical operators supported by the KV math method\n */\nexport type KvMathOperator = '+' | '-' | '*' | '/' | '^' | '%';\n\n/**\n * Configuration options for the KV store\n */\nexport interface KvOptions {\n /** Enable Write-Ahead Logging for better performance and durability */\n enableWAL?: boolean;\n /** Namespace for the key-value store table */\n namespace?: string;\n}\n\n/**\n * A key-value store implementation using SQLite\n *\n * This class provides a simple, persistent key-value storage solution\n * with support for namespaces, automatic cleanup, iteration, expiration, and JSON serialization.\n *\n * @example\n * ```typescript\n * const kv = new KV('data.db');\n *\n * // Store any JSON-serializable data\n * kv.set('user:123', { name: 'John', age: 30 });\n * kv.set('counter', 42);\n * kv.set('active', true);\n * kv.set('dates', [new Date(), new Date()]);\n *\n * // Use dot notation for nested properties\n * kv.set('user:123.name', 'John');\n * kv.set('user:123.settings.theme', 'dark');\n *\n * // Retrieve data\n * const user = kv.get('user:123'); // { name: 'John', age: 30, settings: { theme: 'dark' } }\n * const name = kv.get('user:123.name'); // 'John'\n * ```\n */\nexport class KV implements Disposable, AsyncDisposable {\n private db: DatabaseSync;\n private statements: Record<string, StatementSync> = {};\n\n /**\n * Creates a new KV store instance\n *\n * @param path - Database file path, buffer, URL, or existing DatabaseSync instance\n * @param options - Configuration options for the KV store\n */\n public constructor(\n path: string | Buffer | URL | DatabaseSync,\n private options: KvOptions = {\n enableWAL: true,\n namespace: 'commandkit_kv',\n },\n ) {\n this.db =\n path instanceof DatabaseSync\n ? path\n : new DatabaseSync(path, { open: true });\n\n if (options.enableWAL) {\n this.db.exec(/* sql */ `PRAGMA journal_mode = WAL;`);\n }\n\n const namespace = this.options.namespace ?? 'commandkit_kv';\n\n this.db.exec(/* sql */ `\n CREATE TABLE IF NOT EXISTS ${namespace} (\n key TEXT PRIMARY KEY,\n value TEXT,\n expires_at INTEGER\n )\n `);\n\n this.statements = {\n get: this.db.prepare(\n /* sql */ `SELECT value, expires_at FROM ${namespace} WHERE key = ?`,\n ),\n set: this.db.prepare(\n /* sql */ `INSERT OR REPLACE INTO ${namespace} (key, value, expires_at) VALUES (?, ?, ?)`,\n ),\n setex: this.db.prepare(\n /* sql */ `INSERT OR REPLACE INTO ${namespace} (key, value, expires_at) VALUES (?, ?, ?)`,\n ),\n delete: this.db.prepare(\n /* sql */ `DELETE FROM ${namespace} WHERE key = ?`,\n ),\n has: this.db.prepare(\n /* sql */ `SELECT COUNT(*) FROM ${namespace} WHERE key = ? AND (expires_at IS NULL OR expires_at > ?)`,\n ),\n keys: this.db.prepare(\n /* sql */ `SELECT key FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n values: this.db.prepare(\n /* sql */ `SELECT value FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n clear: this.db.prepare(/* sql */ `DELETE FROM ${namespace}`),\n count: this.db.prepare(\n /* sql */ `SELECT COUNT(*) FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n all: this.db.prepare(\n /* sql */ `SELECT key, value FROM ${namespace} WHERE expires_at IS NULL OR expires_at > ?`,\n ),\n expire: this.db.prepare(\n /* sql */ `UPDATE ${namespace} SET expires_at = ? WHERE key = ?`,\n ),\n ttl: this.db.prepare(\n /* sql */ `SELECT expires_at FROM ${namespace} WHERE key = ?`,\n ),\n namespaces: this.db.prepare(\n /* sql */ `SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'`,\n ),\n begin: this.db.prepare(/* sql */ `BEGIN TRANSACTION`),\n commit: this.db.prepare(/* sql */ `COMMIT`),\n rollback: this.db.prepare(/* sql */ `ROLLBACK`),\n };\n }\n\n /**\n * Gets the current timestamp in milliseconds\n */\n private getCurrentTime(): number {\n return Date.now();\n }\n\n /**\n * Checks if the database connection is open\n *\n * @returns `true` if the database is open, `false` otherwise\n */\n public isOpen(): boolean {\n return this.db.isOpen;\n }\n\n /**\n * Gets the underlying SQLite database instance\n *\n * @returns The DatabaseSync instance\n */\n public getDatabase(): DatabaseSync {\n return this.db;\n }\n\n /**\n * Closes the database connection\n */\n public close(): void {\n if (this.db.isOpen) this.db.close();\n }\n\n /**\n * Disposable implementation - closes the database when disposed\n */\n public [Symbol.dispose]() {\n this.close();\n }\n\n /**\n * AsyncDisposable implementation - closes the database when disposed\n */\n public async [Symbol.asyncDispose]() {\n this.close();\n }\n\n /**\n * Retrieves a value by key\n *\n * @param key - The key to retrieve (supports dot notation for nested properties)\n * @returns The value associated with the key, or `undefined` if not found or expired\n *\n * @example\n * ```typescript\n * // Store an object\n * kv.set('user:123', { name: 'John', age: 30, settings: { theme: 'dark' } });\n *\n * // Get the entire object\n * const user = kv.get('user:123');\n * // { name: 'John', age: 30, settings: { theme: 'dark' } }\n *\n * // Get nested properties using dot notation\n * const name = kv.get('user:123.name'); // 'John'\n * const theme = kv.get('user:123.settings.theme'); // 'dark'\n * ```\n */\n public get<T = any>(key: string): T | undefined {\n const result = this.statements.get.get(key);\n\n if (!result) return undefined;\n\n // Check if the key has expired\n if (\n result.expires_at &&\n Number(result.expires_at) <= this.getCurrentTime()\n ) {\n this.delete(key);\n return undefined;\n }\n\n const serialized = JSON.parse(result.value as string);\n const deserialized = deserializer(serialized);\n\n // Handle dot notation for nested properties\n if (key.includes('.')) {\n return getNestedValue(deserialized, key.split('.').slice(1).join('.'));\n }\n\n return deserialized;\n }\n\n /**\n * Sets a key-value pair\n *\n * @param key - The key to set (supports dot notation for nested properties)\n * @param value - The value to associate with the key (any JSON-serializable type)\n *\n * @example\n * ```typescript\n * // Store primitive values\n * kv.set('counter', 42);\n * kv.set('active', true);\n * kv.set('name', 'John');\n *\n * // Store objects\n * kv.set('user:123', { name: 'John', age: 30 });\n *\n * // Store arrays\n * kv.set('tags', ['javascript', 'typescript', 'sqlite']);\n *\n * // Store dates\n * kv.set('created', new Date());\n *\n * // Store maps and sets\n * kv.set('permissions', new Map([['admin', true], ['user', false]]));\n * kv.set('unique_ids', new Set([1, 2, 3, 4, 5]));\n *\n * // Use dot notation for nested properties\n * kv.set('user:123.settings.theme', 'dark');\n * kv.set('user:123.settings.notifications', true);\n * ```\n */\n public set(key: string, value: any): void {\n let serializedValue: string;\n\n if (key.includes('.')) {\n // Handle dot notation for nested properties\n const [baseKey, ...pathParts] = key.split('.');\n const path = pathParts.join('.');\n\n // Get existing value or create new object\n const existing = this.get(baseKey) || {};\n setNestedValue(existing, path, value);\n\n const serialized = serializer(existing);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.set.run(baseKey, serializedValue, null);\n } else {\n const serialized = serializer(value);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.set.run(key, serializedValue, null);\n }\n }\n\n /**\n * Sets a key-value pair with expiration\n *\n * @param key - The key to set (supports dot notation for nested properties)\n * @param value - The value to associate with the key (any JSON-serializable type)\n * @param ttl - Time to live in milliseconds\n *\n * @example\n * ```typescript\n * // Set with 1 hour expiration\n * kv.setex('session:123', { userId: 123, token: 'abc123' }, 60 * 60 * 1000);\n *\n * // Set with 5 minutes expiration\n * kv.setex('temp:data', { cached: true, timestamp: Date.now() }, 5 * 60 * 1000);\n *\n * // Use dot notation with expiration\n * kv.setex('user:123.temp_settings', { theme: 'light' }, 30 * 60 * 1000);\n * ```\n */\n public setex(key: string, value: any, ttl: number): void {\n const expiresAt = this.getCurrentTime() + ttl;\n let serializedValue: string;\n\n if (key.includes('.')) {\n // Handle dot notation for nested properties\n const [baseKey, ...pathParts] = key.split('.');\n const path = pathParts.join('.');\n\n // Get existing value or create new object\n const existing = this.get(baseKey) || {};\n setNestedValue(existing, path, value);\n\n const serialized = serializer(existing);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.setex.run(baseKey, serializedValue, expiresAt);\n } else {\n const serialized = serializer(value);\n serializedValue = JSON.stringify(serialized);\n\n this.statements.setex.run(key, serializedValue, expiresAt);\n }\n }\n\n /**\n * Performs mathematical operations on numeric values in the KV store\n *\n * @param key - The key to perform math operation on (supports dot notation for nested properties)\n * @param operator - The mathematical operator to apply\n * @param value - The value to use in the operation\n * @returns The updated value after the mathematical operation\n * @throws Error if the existing value is not numeric or if the operation is invalid\n *\n * @example\n * ```typescript\n * // Initialize a counter\n * kv.set('counter', 10);\n *\n * // Increment by 5\n * const result1 = kv.math('counter', '+', 5); // 15\n *\n * // Multiply by 2\n * const result2 = kv.math('counter', '*', 2); // 30\n *\n * // Use with bigint\n * kv.set('big_counter', BigInt(1000));\n * const result3 = kv.math('big_counter', '+', BigInt(500)); // 1500n\n *\n * // Use with dot notation\n * kv.set('user:123', { score: 100, level: 5 });\n * const result4 = kv.math('user:123.score', '+', 50); // 150\n * ```\n */\n public math(\n key: string,\n operator: KvMathOperator,\n value: number | bigint,\n ): number | bigint {\n const existingValue = this.get(key);\n\n if (existingValue === undefined) {\n throw new Error(`Key '${key}' does not exist`);\n }\n\n if (\n typeof existingValue !== 'number' &&\n typeof existingValue !== 'bigint'\n ) {\n throw new Error(\n `Value at key '${key}' is not numeric. Expected number or bigint, got ${typeof existingValue}`,\n );\n }\n\n // Handle mixed number/bigint operations by converting to bigint\n const isBigIntOperation =\n typeof existingValue === 'bigint' || typeof value === 'bigint';\n\n const existing = isBigIntOperation\n ? typeof existingValue === 'bigint'\n ? existingValue\n : BigInt(existingValue)\n : (existingValue as number);\n const operand = isBigIntOperation\n ? typeof value === 'bigint'\n ? value\n : BigInt(value)\n : (value as number);\n\n let result: number | bigint;\n\n switch (operator) {\n case '+':\n result = (existing as any) + (operand as any);\n break;\n case '-':\n result = (existing as any) - (operand as any);\n break;\n case '*':\n result = (existing as any) * (operand as any);\n break;\n case '/':\n if (operand === 0 || operand === 0n) {\n throw new Error('Division by zero');\n }\n result = (existing as any) / (operand as any);\n break;\n case '^':\n if (isBigIntOperation && operand < 0n) {\n throw new Error(\n 'Exponentiation with negative exponent is not supported for bigint',\n );\n }\n result = (existing as any) ** (operand as any);\n break;\n case '%':\n if (operand === 0 || operand === 0n) {\n throw new Error('Modulo by zero');\n }\n result = (existing as any) % (operand as any);\n break;\n default:\n throw new Error(`Invalid operator: ${operator}`);\n }\n\n // Update the value in the store\n this.set(key, result);\n\n return result;\n }\n\n /**\n * Sets expiration for an existing key\n *\n * @param key - The key to set expiration for\n * @param ttl - Time to live in milliseconds\n * @returns `true` if the key exists and expiration was set, `false` otherwise\n *\n * @example\n * ```typescript\n * kv.set('user:123', { name: 'John', age: 30 });\n *\n * // Set 30 minute expiration\n * if (kv.expire('user:123', 30 * 60 * 1000)) {\n * console.log('Expiration set successfully');\n * }\n * ```\n */\n public expire(key: string, ttl: number): boolean {\n if (!this.has(key)) return false;\n\n const expiresAt = this.getCurrentTime() + ttl;\n this.statements.expire.run(expiresAt, key);\n return true;\n }\n\n /**\n * Gets the time to live for a key\n *\n * @param key - The key to check\n * @returns Time to live in milliseconds, or `-1` if the key doesn't exist, or `-2` if the key has no expiration\n *\n * @example\n * ```typescript\n * const ttl = kv.ttl('user:123');\n * if (ttl > 0) {\n * console.log(`Key expires in ${ttl}ms`);\n * } else if (ttl === -2) {\n * console.log('Key has no expiration');\n * } else {\n * console.log('Key does not exist');\n * }\n * ```\n */\n public ttl(key: string): number {\n const result = this.statements.ttl.get(key);\n\n if (!result) return -1; // Key doesn't exist\n\n if (!result.expires_at) return -2; // No expiration\n\n const remaining = Number(result.expires_at) - this.getCurrentTime();\n return remaining > 0 ? remaining : -1; // Expired or doesn't exist\n }\n\n /**\n * Deletes a key-value pair\n *\n * @param key - The key to delete\n *\n * @example\n * ```typescript\n * kv.delete('user:123');\n * kv.delete('user:123.settings.theme'); // Delete nested property\n * ```\n */\n public delete(key: string): void {\n this.statements.delete.run(key);\n }\n\n /**\n * Checks if a key exists and is not expired\n *\n * @param key - The key to check\n * @returns `true` if the key exists and is not expired, `false` otherwise\n *\n * @example\n * ```typescript\n * if (kv.has('user:123')) {\n * console.log('User exists and is not expired');\n * }\n *\n * if (kv.has('user:123.settings.theme')) {\n * console.log('Theme setting exists');\n * }\n * ```\n */\n public has(key: string): boolean {\n const result = this.statements.has.get(key, this.getCurrentTime());\n\n return (\n result?.count !== undefined &&\n result.count !== null &&\n Number(result.count) > 0\n );\n }\n\n /**\n * Gets all keys in the current namespace (excluding expired keys)\n *\n * @returns Array of all non-expired keys\n *\n * @example\n * ```typescript\n * const keys = kv.keys();\n * console.log('All keys:', keys);\n * ```\n */\n public keys(): string[] {\n const result = this.statements.keys.all(this.getCurrentTime());\n\n return result.map((row) => row.key as string);\n }\n\n /**\n * Gets all values in the current namespace (excluding expired keys)\n *\n * @returns Array of all non-expired values\n *\n * @example\n * ```typescript\n * const values = kv.values();\n * console.log('All values:', values);\n * ```\n */\n public values(): any[] {\n const result = this.statements.values.all(this.getCurrentTime());\n\n return result.map((row) => {\n const serialized = JSON.parse(row.value as string);\n return deserializer(serialized);\n });\n }\n\n /**\n * Gets the total number of key-value pairs in the current namespace (excluding expired keys)\n *\n * @returns The count of non-expired key-value pairs\n *\n * @example\n * ```typescript\n * const count = kv.count();\n * console.log(`Total entries: ${count}`);\n * ```\n */\n public count(): number {\n const result = this.statements.count.get(this.getCurrentTime());\n\n return Number(result?.count ?? 0);\n }\n\n /**\n * Removes all key-value pairs from the current namespace\n *\n * @example\n * ```typescript\n * kv.clear(); // Removes all entries in current namespace\n * ```\n */\n public clear(): void {\n this.statements.clear.run();\n }\n\n /**\n * Gets all key-value pairs as an object (excluding expired keys)\n *\n * @returns Object with all non-expired key-value pairs\n *\n * @example\n * ```typescript\n * const all = kv.all();\n * console.log('All entries:', all);\n * // Output: { 'key1': value1, 'key2': value2 }\n * ```\n */\n public all(): Record<string, any> {\n const result = this.statements.all.all(this.getCurrentTime());\n\n return Object.fromEntries(\n result.map((row) => {\n const serialized = JSON.parse(row.value as string);\n return [row.key as string, deserializer(serialized)];\n }),\n );\n }\n\n /**\n * Gets all available namespaces (tables) in the database\n *\n * @returns Array of namespace names\n *\n * @example\n * ```typescript\n * const namespaces = kv.namespaces();\n * console.log('Available namespaces:', namespaces);\n * ```\n */\n public namespaces(): string[] {\n const result = this.statements.namespaces.all();\n\n return result.map((row) => row.name as string);\n }\n\n /**\n * Gets the current namespace name\n *\n * @returns The current namespace string\n */\n public getCurrentNamespace(): string {\n return this.options.namespace ?? 'commandkit_kv';\n }\n\n /**\n * Creates a new KV instance with a different namespace\n *\n * @param namespace - The namespace to use for the new instance\n * @returns A new KV instance with the specified namespace\n *\n * @example\n * ```typescript\n * const userKv = kv.namespace('users');\n * const configKv = kv.namespace('config');\n *\n * userKv.set('123', { name: 'John', age: 30 });\n * configKv.set('theme', 'dark');\n * ```\n */\n public namespace(namespace: string): KV {\n return new KV(this.db, {\n enableWAL: this.options.enableWAL,\n namespace,\n });\n }\n\n /**\n * Iterator implementation for iterating over all non-expired key-value pairs\n *\n * @returns Iterator yielding [key, value] tuples\n *\n * @example\n * ```typescript\n * for (const [key, value] of kv) {\n * console.log(`${key}:`, value);\n * }\n *\n * // Or using spread operator\n * const entries = [...kv];\n * ```\n */\n public *[Symbol.iterator](): Iterator<[string, any]> {\n const result = this.statements.all.iterate(this.getCurrentTime());\n\n for (const row of result) {\n const serialized = JSON.parse(row.value as string);\n yield [row.key as string, deserializer(serialized)];\n }\n }\n\n /**\n * Executes a function within a transaction\n *\n * @param fn - Function to execute within the transaction (can be async)\n * @returns The result of the function\n *\n * @example\n * ```typescript\n * // Synchronous transaction\n * kv.transaction(() => {\n * kv.set('user:123', { name: 'John', age: 30 });\n * kv.set('user:456', { name: 'Jane', age: 25 });\n * // If any operation fails, all changes are rolled back\n * });\n *\n * // Async transaction\n * await kv.transaction(async () => {\n * kv.set('user:123', { name: 'John', age: 30 });\n * await someAsyncOperation();\n * kv.set('user:456', { name: 'Jane', age: 25 });\n * // If any operation fails, all changes are rolled back\n * });\n * ```\n */\n public async transaction<T>(fn: () => T | Promise<T>): Promise<T> {\n try {\n // Begin transaction\n this.statements.begin.run();\n\n // Execute the function\n const result = await fn();\n\n // Commit transaction\n this.statements.commit.run();\n\n return result;\n } catch (error) {\n // Rollback transaction on error\n this.statements.rollback.run();\n throw error;\n }\n }\n}\n\n/**\n * Opens a new KV instance\n *\n * @param path - Database file path, buffer, URL, or existing DatabaseSync instance\n * @param options - Configuration options for the KV store\n * @returns A new KV instance\n */\nexport function openKV(\n path: string | Buffer | URL | DatabaseSync = 'commandkit_kv.db',\n options: KvOptions = { enableWAL: true, namespace: 'commandkit_kv' },\n): KV {\n return new KV(path, options);\n}\n"],"mappings":"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"}
package/dist/kv/serde.js CHANGED
@@ -1,5 +1,5 @@
1
1
  require('../constants-4oxxvaJA.js');
2
- const require_serde = require('../serde-CHySNpFr.js');
2
+ const require_serde = require('../serde-Cc8iUa9J.js');
3
3
 
4
4
  exports.deserializer = require_serde.deserializer;
5
5
  exports.serializer = require_serde.serializer;
@@ -1,37 +1,37 @@
1
- require('../colors-Cd4Oz-r-.js');
2
- require('../ActionRow-CmTHbo2t.js');
1
+ require('../colors-DL3ucTiT.js');
2
+ require('../ActionRow-CbdGFWMT.js');
3
3
  require('../error-codes-Ds0bnPvT.js');
4
- const require_commandkit = require('../commandkit-vWHgiaKd.js');
4
+ const require_commandkit = require('../commandkit-Dy4V-Rk2.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
- require('../container-z621KfH5.js');
8
- require('../file-DVZC0QXI.js');
9
- require('../media-gallery-CIKypjbJ.js');
10
- require('../section-CuYr0Inu.js');
11
- require('../separator-DLdWBjSN.js');
12
- require('../text-display--p2-BoUa.js');
7
+ require('../container-C6GtfAPW.js');
8
+ require('../file-DVOELoNv.js');
9
+ require('../media-gallery-zDtJ3kxb.js');
10
+ require('../section-DlvrDoJK.js');
11
+ require('../separator-DL6QH5H1.js');
12
+ require('../text-display-DbMumig_.js');
13
13
  require('../v2-DofkPKHs.js');
14
14
  require('../element-Bak9llw_.js');
15
15
  require('../types-CUZOquUl.js');
16
- require('../EventInterceptor-CQ4PBpBJ.js');
16
+ require('../EventInterceptor-CQEXyUTp.js');
17
17
  require('../constants-B5_Ta7PR.js');
18
- require('../PluginCommon-Di1xIa8d.js');
19
- require('../CompilerPlugin-CjoZAAR8.js');
20
- require('../RuntimePlugin-eTdFJwGd.js');
18
+ require('../PluginCommon-Cvl5yYM_.js');
19
+ require('../CompilerPlugin-M8r3yNAl.js');
20
+ require('../RuntimePlugin-BUecuBIU.js');
21
21
  require('../types-q0Nm882H.js');
22
- require('../resolve-file-url-DYjaxg_S.js');
22
+ require('../resolve-file-url-ChIyw-Vf.js');
23
23
  require('../runtime-DB9CiPfe.js');
24
24
  require('../utils-KsNof0Xz.js');
25
- require('../types-package-DrnIdWLg.js');
26
- require('../constants-DxfYtA6t.js');
27
- require('../EventWorkerContext-TZIKxVCu.js');
28
- require('../signals-r7qPAvOR.js');
29
- require('../MessageCommandParser-TPEPhjvx.js');
30
- require('../CommandsRouter-tMAivEfv.js');
31
- require('../EventsRouter-C_J0M3uO.js');
25
+ require('../types-package-BWArjyBF.js');
26
+ require('../constants-BOOGN85p.js');
27
+ require('../EventWorkerContext-Dq29tieI.js');
28
+ require('../signals-ChFMD7mB.js');
29
+ require('../MessageCommandParser-CEuO6Ex3.js');
30
+ require('../CommandsRouter-DZAeB2v_.js');
31
+ require('../EventsRouter-Dzpm7ubq.js');
32
32
  require('../router-DHnFRADH.js');
33
- require('../common-DNADUU3_.js');
34
- require('../CommandKitEventsChannel-Bgw0XCOl.js');
35
- require('../store-CiqLHedg.js');
33
+ require('../common-DVM_onKu.js');
34
+ require('../CommandKitEventsChannel-B5vbINtP.js');
35
+ require('../store-Hcgz7DSt.js');
36
36
 
37
37
  exports.DefaultLogger = require_commandkit.DefaultLogger;
@@ -1,38 +1,38 @@
1
- require('../colors-Cd4Oz-r-.js');
2
- require('../ActionRow-CmTHbo2t.js');
1
+ require('../colors-DL3ucTiT.js');
2
+ require('../ActionRow-CbdGFWMT.js');
3
3
  require('../error-codes-Ds0bnPvT.js');
4
- const require_commandkit = require('../commandkit-vWHgiaKd.js');
4
+ const require_commandkit = require('../commandkit-Dy4V-Rk2.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
- require('../container-z621KfH5.js');
8
- require('../file-DVZC0QXI.js');
9
- require('../media-gallery-CIKypjbJ.js');
10
- require('../section-CuYr0Inu.js');
11
- require('../separator-DLdWBjSN.js');
12
- require('../text-display--p2-BoUa.js');
7
+ require('../container-C6GtfAPW.js');
8
+ require('../file-DVOELoNv.js');
9
+ require('../media-gallery-zDtJ3kxb.js');
10
+ require('../section-DlvrDoJK.js');
11
+ require('../separator-DL6QH5H1.js');
12
+ require('../text-display-DbMumig_.js');
13
13
  require('../v2-DofkPKHs.js');
14
14
  require('../element-Bak9llw_.js');
15
15
  require('../types-CUZOquUl.js');
16
- require('../EventInterceptor-CQ4PBpBJ.js');
16
+ require('../EventInterceptor-CQEXyUTp.js');
17
17
  require('../constants-B5_Ta7PR.js');
18
- require('../PluginCommon-Di1xIa8d.js');
19
- require('../CompilerPlugin-CjoZAAR8.js');
20
- require('../RuntimePlugin-eTdFJwGd.js');
18
+ require('../PluginCommon-Cvl5yYM_.js');
19
+ require('../CompilerPlugin-M8r3yNAl.js');
20
+ require('../RuntimePlugin-BUecuBIU.js');
21
21
  require('../types-q0Nm882H.js');
22
- require('../resolve-file-url-DYjaxg_S.js');
22
+ require('../resolve-file-url-ChIyw-Vf.js');
23
23
  require('../runtime-DB9CiPfe.js');
24
24
  require('../utils-KsNof0Xz.js');
25
- require('../types-package-DrnIdWLg.js');
26
- require('../constants-DxfYtA6t.js');
27
- require('../EventWorkerContext-TZIKxVCu.js');
28
- require('../signals-r7qPAvOR.js');
29
- require('../MessageCommandParser-TPEPhjvx.js');
30
- require('../CommandsRouter-tMAivEfv.js');
31
- require('../EventsRouter-C_J0M3uO.js');
25
+ require('../types-package-BWArjyBF.js');
26
+ require('../constants-BOOGN85p.js');
27
+ require('../EventWorkerContext-Dq29tieI.js');
28
+ require('../signals-ChFMD7mB.js');
29
+ require('../MessageCommandParser-CEuO6Ex3.js');
30
+ require('../CommandsRouter-DZAeB2v_.js');
31
+ require('../EventsRouter-Dzpm7ubq.js');
32
32
  require('../router-DHnFRADH.js');
33
- require('../common-DNADUU3_.js');
34
- require('../CommandKitEventsChannel-Bgw0XCOl.js');
35
- require('../store-CiqLHedg.js');
33
+ require('../common-DVM_onKu.js');
34
+ require('../CommandKitEventsChannel-B5vbINtP.js');
35
+ require('../store-Hcgz7DSt.js');
36
36
 
37
37
  exports.Logger = require_commandkit.Logger;
38
38
  exports.createLogger = require_commandkit.createLogger;
@@ -1,6 +1,7 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
2
  const require_common = require('./common-vnMIelAE.js');
3
- const discord_js = require_chunk.__toESM(require("discord.js"));
3
+ let discord_js = require("discord.js");
4
+ discord_js = require_chunk.__toESM(discord_js);
4
5
 
5
6
  //#region src/components/v2/media-gallery.ts
6
7
  /**
@@ -58,4 +59,4 @@ Object.defineProperty(exports, 'MediaGalleryItem', {
58
59
  return MediaGalleryItem;
59
60
  }
60
61
  });
61
- //# sourceMappingURL=media-gallery-CIKypjbJ.js.map
62
+ //# sourceMappingURL=media-gallery-zDtJ3kxb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media-gallery-CIKypjbJ.js","names":[],"sources":["../src/components/v2/media-gallery.ts"],"sourcesContent":["import { MediaGalleryBuilder, MediaGalleryItemBuilder } from 'discord.js';\nimport { applyId } from './common';\n\n/**\n * Represents the properties for a media gallery component.\n */\nexport interface MediaGalleryProps {\n id?: number;\n children?: MediaGalleryItemBuilder[];\n}\n\n/**\n * The media gallery component\n * @param props The properties for the media gallery component.\n * @returns The media gallery builder instance.\n * @example ```tsx\n * import { MediaGallery } from 'commandkit';\n *\n * const gallery = (\n * <MediaGallery>\n * <MediaGalleryItem url=\"https://example.com/image1.png\" description=\"Image 1\" />\n * <MediaGalleryItem url=\"https://example.com/image2.png\" description=\"Image 2\" />\n * </MediaGallery>\n * );\n * ```\n */\nexport function MediaGallery(props: MediaGalleryProps) {\n const gallery = new MediaGalleryBuilder();\n\n applyId(props, gallery);\n\n if (props.children != null) {\n if (!Array.isArray(props.children)) props.children = [props.children];\n gallery.addItems(props.children.flat());\n }\n\n return gallery;\n}\n\n/**\n * Represents the properties for a media gallery item component.\n */\nexport interface MediaGalleryItemProps {\n description?: string;\n spoiler?: boolean;\n url?: string;\n}\n\n/**\n * The media gallery item component\n * @param props The properties for the media gallery item component.\n * @returns The media gallery item builder instance.\n * @example ```tsx\n * import { MediaGalleryItem } from 'commandkit';\n *\n * const item = <MediaGalleryItem url=\"https://example.com/image.png\" description=\"An image\" />;\n * ```\n */\nexport function MediaGalleryItem(props: MediaGalleryItemProps) {\n const item = new MediaGalleryItemBuilder();\n\n if (props.description != null) {\n item.setDescription(props.description);\n }\n\n if (props.spoiler != null) {\n item.setSpoiler(props.spoiler);\n }\n\n if (props.url != null) {\n item.setURL(props.url);\n }\n\n return item;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,aAAa,OAA0B;CACrD,MAAM,UAAU,IAAI;AAEpB,wBAAQ,OAAO;AAEf,KAAI,MAAM,YAAY,MAAM;AAC1B,MAAI,CAAC,MAAM,QAAQ,MAAM,UAAW,OAAM,WAAW,CAAC,MAAM;AAC5D,UAAQ,SAAS,MAAM,SAAS;;AAGlC,QAAO;;;;;;;;;;;;AAsBT,SAAgB,iBAAiB,OAA8B;CAC7D,MAAM,OAAO,IAAI;AAEjB,KAAI,MAAM,eAAe,KACvB,MAAK,eAAe,MAAM;AAG5B,KAAI,MAAM,WAAW,KACnB,MAAK,WAAW,MAAM;AAGxB,KAAI,MAAM,OAAO,KACf,MAAK,OAAO,MAAM;AAGpB,QAAO"}
1
+ {"version":3,"file":"media-gallery-zDtJ3kxb.js","names":[],"sources":["../src/components/v2/media-gallery.ts"],"sourcesContent":["import { MediaGalleryBuilder, MediaGalleryItemBuilder } from 'discord.js';\nimport { applyId } from './common';\n\n/**\n * Represents the properties for a media gallery component.\n */\nexport interface MediaGalleryProps {\n id?: number;\n children?: MediaGalleryItemBuilder[];\n}\n\n/**\n * The media gallery component\n * @param props The properties for the media gallery component.\n * @returns The media gallery builder instance.\n * @example ```tsx\n * import { MediaGallery } from 'commandkit';\n *\n * const gallery = (\n * <MediaGallery>\n * <MediaGalleryItem url=\"https://example.com/image1.png\" description=\"Image 1\" />\n * <MediaGalleryItem url=\"https://example.com/image2.png\" description=\"Image 2\" />\n * </MediaGallery>\n * );\n * ```\n */\nexport function MediaGallery(props: MediaGalleryProps) {\n const gallery = new MediaGalleryBuilder();\n\n applyId(props, gallery);\n\n if (props.children != null) {\n if (!Array.isArray(props.children)) props.children = [props.children];\n gallery.addItems(props.children.flat());\n }\n\n return gallery;\n}\n\n/**\n * Represents the properties for a media gallery item component.\n */\nexport interface MediaGalleryItemProps {\n description?: string;\n spoiler?: boolean;\n url?: string;\n}\n\n/**\n * The media gallery item component\n * @param props The properties for the media gallery item component.\n * @returns The media gallery item builder instance.\n * @example ```tsx\n * import { MediaGalleryItem } from 'commandkit';\n *\n * const item = <MediaGalleryItem url=\"https://example.com/image.png\" description=\"An image\" />;\n * ```\n */\nexport function MediaGalleryItem(props: MediaGalleryItemProps) {\n const item = new MediaGalleryItemBuilder();\n\n if (props.description != null) {\n item.setDescription(props.description);\n }\n\n if (props.spoiler != null) {\n item.setSpoiler(props.spoiler);\n }\n\n if (props.url != null) {\n item.setURL(props.url);\n }\n\n return item;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,aAAa,OAA0B;CACrD,MAAM,UAAU,IAAI,gCAAqB;AAEzC,wBAAQ,OAAO,QAAQ;AAEvB,KAAI,MAAM,YAAY,MAAM;AAC1B,MAAI,CAAC,MAAM,QAAQ,MAAM,SAAS,CAAE,OAAM,WAAW,CAAC,MAAM,SAAS;AACrE,UAAQ,SAAS,MAAM,SAAS,MAAM,CAAC;;AAGzC,QAAO;;;;;;;;;;;;AAsBT,SAAgB,iBAAiB,OAA8B;CAC7D,MAAM,OAAO,IAAI,oCAAyB;AAE1C,KAAI,MAAM,eAAe,KACvB,MAAK,eAAe,MAAM,YAAY;AAGxC,KAAI,MAAM,WAAW,KACnB,MAAK,WAAW,MAAM,QAAQ;AAGhC,KAAI,MAAM,OAAO,KACf,MAAK,OAAO,MAAM,IAAI;AAGxB,QAAO"}