commandkit 1.2.0-rc.12 → 1.2.0-rc.13

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 (343) hide show
  1. package/{COPYING.md → LICENSE.md} +3 -3
  2. package/README.md +3 -3
  3. package/bin/index.mjs +1 -1
  4. package/cli.d.ts +19 -0
  5. package/config.cjs +3 -0
  6. package/config.d.ts +1 -0
  7. package/dist/{ActionRow-B-7n9MMr.d.ts → ActionRow-B-CGmjDp.d.ts} +3 -4
  8. package/dist/{ActionRow-uJxU4UGo.js → ActionRow-CSN_UKmM.js} +2 -3
  9. package/dist/{ActionRow-uJxU4UGo.js.map → ActionRow-CSN_UKmM.js.map} +1 -1
  10. package/dist/{Button-RMp-w8HV.d.ts → Button-C-GPeFA3.d.ts} +6 -7
  11. package/dist/{ButtonKit-9k4yfhYD.d.ts → ButtonKit-DKu0VAe4.d.ts} +36 -37
  12. package/dist/ChannelSelectMenuKit-HQZ4hH5s.d.ts +66 -0
  13. package/dist/{CommandKitEventsChannel-2l9Za-le.js → CommandKitEventsChannel-CnT5ymYe.js} +2 -2
  14. package/dist/{CommandKitEventsChannel-2l9Za-le.js.map → CommandKitEventsChannel-CnT5ymYe.js.map} +1 -1
  15. package/dist/{CommandsRouter-CBdsqaWK.d.ts → CommandsRouter-C7dZEepB.d.ts} +49 -50
  16. package/dist/{CommandsRouter-CWMipIis.js → CommandsRouter-C_HLsrGX.js} +2 -6
  17. package/dist/{CommandsRouter-CWMipIis.js.map → CommandsRouter-C_HLsrGX.js.map} +1 -1
  18. package/dist/{CompilerPlugin-CZ4412Zm.js → CompilerPlugin-CUsGAfgl.js} +2 -2
  19. package/dist/{CompilerPlugin-CZ4412Zm.js.map → CompilerPlugin-CUsGAfgl.js.map} +1 -1
  20. package/dist/EventInterceptor-BWoEJMHZ.js.map +1 -1
  21. package/dist/{EventInterceptor-x-R2qshQ.d.ts → EventInterceptor-CZmWpS08.d.ts} +40 -40
  22. package/dist/{EventWorkerContext-D_9q1Bm2.js → EventWorkerContext-Dfhgv329.js} +2 -3
  23. package/dist/{EventWorkerContext-D_9q1Bm2.js.map → EventWorkerContext-Dfhgv329.js.map} +1 -1
  24. package/dist/EventsRouter-DZ37r54v.d.ts +90 -0
  25. package/dist/{EventsRouter-C04XqRKf.js → EventsRouter-DZYIha6m.js} +2 -6
  26. package/dist/{EventsRouter-C04XqRKf.js.map → EventsRouter-DZYIha6m.js.map} +1 -1
  27. package/dist/MentionableSelectMenuKit-7URDUM3-.d.ts +61 -0
  28. package/dist/{MessageCommandParser-CKh-tM97.js → MessageCommandParser-Bs9fimmd.js} +2 -3
  29. package/dist/{MessageCommandParser-CKh-tM97.js.map → MessageCommandParser-Bs9fimmd.js.map} +1 -1
  30. package/dist/MessageCommandParser-q3dQcE5N.d.ts +194 -0
  31. package/dist/{Modal-Calb46SJ.d.ts → Modal-CZT9MZsy.d.ts} +20 -10
  32. package/dist/{ModalKit-Cq2ns6jv.d.ts → ModalKit-BWXI3Z26.d.ts} +33 -34
  33. package/dist/{PluginCommon-CPWV5xuX.js → PluginCommon-BLxWww5u.js} +6 -7
  34. package/dist/{PluginCommon-CPWV5xuX.js.map → PluginCommon-BLxWww5u.js.map} +1 -1
  35. package/dist/RoleSelectMenuKit-BY-JJ18w.d.ts +66 -0
  36. package/dist/{RuntimePlugin-COeXe8rP.js → RuntimePlugin-CtobluSU.js} +2 -2
  37. package/dist/{RuntimePlugin-COeXe8rP.js.map → RuntimePlugin-CtobluSU.js.map} +1 -1
  38. package/dist/{SelectMenu-VcDhOGoJ.d.ts → SelectMenu-q_b3Mjv9.d.ts} +9 -10
  39. package/dist/StringSelectMenuKit-lVhUMc3g.d.ts +66 -0
  40. package/dist/UserSelectMenuKit-CCj4Fpkr.d.ts +66 -0
  41. package/dist/analytics/analytics-engine.d.ts +1 -33
  42. package/dist/analytics/analytics-engine.js +22 -37
  43. package/dist/analytics/analytics-provider.d.ts +1 -33
  44. package/dist/analytics/constants.js +1 -1
  45. package/dist/analytics/utils.js +22 -37
  46. package/dist/{analytics-engine-NOInIjv8.d.ts → analytics-engine-WQhXmx3H.d.ts} +844 -841
  47. package/dist/app/commands/AppCommandRunner.d.ts +1 -33
  48. package/dist/app/commands/AppCommandRunner.js +22 -37
  49. package/dist/app/commands/Context.d.ts +1 -33
  50. package/dist/app/commands/Context.js +22 -37
  51. package/dist/app/commands/MessageCommandParser.d.ts +1 -1
  52. package/dist/app/commands/MessageCommandParser.js +1 -2
  53. package/dist/app/commands/helpers.d.ts +1 -1
  54. package/dist/app/commands/helpers.js +1 -1
  55. package/dist/app/events/EventWorkerContext.d.ts +42 -35
  56. package/dist/app/events/EventWorkerContext.js +1 -1
  57. package/dist/app/handlers/AppCommandHandler.d.ts +1 -33
  58. package/dist/app/handlers/AppCommandHandler.js +22 -37
  59. package/dist/app/handlers/AppEventsHandler.d.ts +1 -33
  60. package/dist/app/handlers/AppEventsHandler.js +22 -37
  61. package/dist/app/index.d.ts +4 -33
  62. package/dist/app/index.js +22 -38
  63. package/dist/app/interrupt/signals.d.ts +1 -1
  64. package/dist/app/interrupt/signals.js +2 -3
  65. package/dist/app/middlewares/permissions.d.ts +1 -33
  66. package/dist/app/middlewares/permissions.js +22 -37
  67. package/dist/app/register/CommandRegistrar.d.ts +1 -33
  68. package/dist/app/register/CommandRegistrar.js +22 -37
  69. package/dist/app/router/CommandsRouter.d.ts +1 -1
  70. package/dist/app/router/CommandsRouter.js +1 -1
  71. package/dist/app/router/EventsRouter.d.ts +1 -1
  72. package/dist/app/router/EventsRouter.js +1 -1
  73. package/dist/app/router/index.d.ts +2 -3
  74. package/dist/app/router/index.js +2 -2
  75. package/dist/{chunk-nOFOJqeH.js → chunk-kSYXY2_d.js} +10 -6
  76. package/dist/cli/app-process.d.ts +0 -1
  77. package/dist/cli/app-process.js +62 -7
  78. package/dist/cli/app-process.js.map +1 -0
  79. package/dist/cli/build.d.ts +2 -33
  80. package/dist/cli/build.js +189 -42
  81. package/dist/cli/build.js.map +1 -0
  82. package/dist/cli/common.d.ts +1 -33
  83. package/dist/cli/common.js +4 -4
  84. package/dist/cli/development.d.ts +18 -1
  85. package/dist/cli/development.js +41 -49
  86. package/dist/cli/development.js.map +1 -1
  87. package/dist/cli/env.d.ts +4 -0
  88. package/dist/cli/env.js +1 -1
  89. package/dist/cli/generators.js +5 -8
  90. package/dist/cli/generators.js.map +1 -1
  91. package/dist/cli/information.js +5 -5
  92. package/dist/cli/information.js.map +1 -1
  93. package/dist/cli/init.d.ts +12 -2
  94. package/dist/cli/init.js +100 -39
  95. package/dist/cli/init.js.map +1 -0
  96. package/dist/cli/production.d.ts +0 -1
  97. package/dist/cli/production.js +36 -49
  98. package/dist/cli/production.js.map +1 -1
  99. package/dist/cli/type-checker.js +5 -5
  100. package/dist/cli/utils.d.ts +0 -1
  101. package/dist/cli/utils.js +17 -2
  102. package/dist/cli/utils.js.map +1 -0
  103. package/dist/{colors-DL3ucTiT.js → colors-Csc0X4QJ.js} +2 -3
  104. package/dist/{colors-DL3ucTiT.js.map → colors-Csc0X4QJ.js.map} +1 -1
  105. package/dist/{commandkit-DabqpQ6v.js → commandkit-SIjTLD2R.js} +145 -46
  106. package/dist/commandkit-SIjTLD2R.js.map +1 -0
  107. package/dist/commandkit.d.ts +1 -33
  108. package/dist/commandkit.js +22 -37
  109. package/dist/{common-CCx-FJI4.js → common-CEordwf3.js} +1 -1
  110. package/dist/{common-CCx-FJI4.js.map → common-CEordwf3.js.map} +1 -1
  111. package/dist/{common-fIO6fqGZ.js → common-DSRs_mfw.js} +9 -12
  112. package/dist/{common-fIO6fqGZ.js.map → common-DSRs_mfw.js.map} +1 -1
  113. package/dist/{common-DHTTnX82.d.ts → common-DnwCYit8.d.ts} +3 -4
  114. package/dist/components/common/EventInterceptor.d.ts +1 -1
  115. package/dist/components/common/element.d.ts +1 -4
  116. package/dist/components/common/types.d.ts +1 -1
  117. package/dist/components/common/types.js +0 -1
  118. package/dist/components/display/common.d.ts +0 -1
  119. package/dist/components/display/common.js +1 -1
  120. package/dist/components/display/container.d.ts +1 -1
  121. package/dist/components/display/container.js +1 -2
  122. package/dist/components/display/file.d.ts +1 -1
  123. package/dist/components/display/file.js +1 -1
  124. package/dist/components/display/index.d.ts +8 -9
  125. package/dist/components/display/index.js +8 -9
  126. package/dist/components/display/label.d.ts +1 -1
  127. package/dist/components/display/label.js +1 -2
  128. package/dist/components/display/media-gallery.d.ts +1 -1
  129. package/dist/components/display/media-gallery.js +1 -2
  130. package/dist/components/display/poll.d.ts +1 -1
  131. package/dist/components/display/poll.js +1 -1
  132. package/dist/components/display/section.d.ts +1 -1
  133. package/dist/components/display/section.js +1 -2
  134. package/dist/components/display/separator.d.ts +1 -1
  135. package/dist/components/display/separator.js +1 -1
  136. package/dist/components/display/text-display.d.ts +1 -1
  137. package/dist/components/display/text-display.js +1 -1
  138. package/dist/components/index.d.ts +23 -26
  139. package/dist/components/index.js +23 -36
  140. package/dist/components/interactive/action-row/ActionRow.d.ts +1 -5
  141. package/dist/components/interactive/action-row/ActionRow.js +1 -1
  142. package/dist/components/interactive/button/Button.d.ts +1 -6
  143. package/dist/components/interactive/button/Button.js +22 -37
  144. package/dist/components/interactive/button/ButtonKit.d.ts +1 -2
  145. package/dist/components/interactive/button/ButtonKit.js +22 -37
  146. package/dist/components/interactive/modal/Modal.d.ts +2 -7
  147. package/dist/components/interactive/modal/Modal.js +23 -37
  148. package/dist/components/interactive/modal/ModalKit.d.ts +1 -2
  149. package/dist/components/interactive/modal/ModalKit.js +22 -37
  150. package/dist/components/interactive/select-menu/ChannelSelectMenuKit.d.ts +1 -3
  151. package/dist/components/interactive/select-menu/ChannelSelectMenuKit.js +22 -37
  152. package/dist/components/interactive/select-menu/MentionableSelectMenuKit.d.ts +1 -3
  153. package/dist/components/interactive/select-menu/MentionableSelectMenuKit.js +22 -37
  154. package/dist/components/interactive/select-menu/RoleSelectMenuKit.d.ts +1 -3
  155. package/dist/components/interactive/select-menu/RoleSelectMenuKit.js +22 -37
  156. package/dist/components/interactive/select-menu/SelectMenu.d.ts +1 -9
  157. package/dist/components/interactive/select-menu/SelectMenu.js +22 -37
  158. package/dist/components/interactive/select-menu/StringSelectMenuKit.d.ts +1 -3
  159. package/dist/components/interactive/select-menu/StringSelectMenuKit.js +22 -37
  160. package/dist/components/interactive/select-menu/UserSelectMenuKit.d.ts +1 -3
  161. package/dist/components/interactive/select-menu/UserSelectMenuKit.js +22 -37
  162. package/dist/components/interactive/select-menu/common.d.ts +1 -2
  163. package/dist/components/interactive/select-menu/common.js +0 -1
  164. package/dist/config/config.d.ts +15 -35
  165. package/dist/config/config.js +22 -37
  166. package/dist/config/default.d.ts +1 -33
  167. package/dist/config/default.js +22 -37
  168. package/dist/config/loader.d.ts +1 -33
  169. package/dist/config/loader.js +22 -37
  170. package/dist/config/types.d.ts +1 -33
  171. package/dist/config/utils.d.ts +1 -33
  172. package/dist/constants-BFFK-hfP.js +27 -0
  173. package/dist/{constants-AH-9qJ89.js.map → constants-BFFK-hfP.js.map} +1 -1
  174. package/dist/{constants-DqnSDZ6l.d.ts → constants-CuYW0K10.d.ts} +14 -8
  175. package/dist/{constants-D0dawKxO.js → constants-Cw8VjCVz.js} +2 -3
  176. package/dist/{constants-D0dawKxO.js.map → constants-Cw8VjCVz.js.map} +1 -1
  177. package/dist/{constants-BMWH2YUr.js → constants-CxkFFZ7p.js} +16 -1
  178. package/dist/constants-CxkFFZ7p.js.map +1 -0
  179. package/dist/{constants-CCFSX2NG.d.ts → constants-EpKcj0dH.d.ts} +2 -2
  180. package/dist/{container-DC0eQigs.js → container-DCPljKVH.js} +3 -4
  181. package/dist/{container-DC0eQigs.js.map → container-DCPljKVH.js.map} +1 -1
  182. package/dist/{container-1ltvkavy.d.ts → container-DYcb7zGw.d.ts} +2 -3
  183. package/dist/context/async-context.d.ts +1 -33
  184. package/dist/context/async-context.js +22 -37
  185. package/dist/context/environment.d.ts +1 -33
  186. package/dist/context/environment.js +22 -37
  187. package/dist/element-DibzzA5L.js.map +1 -1
  188. package/dist/{element-CvNhvLZ8.d.ts → element-wQo0heGj.d.ts} +4 -5
  189. package/dist/{env-8yY-6pbC.js → env-CmspDhHy.js} +7 -3
  190. package/dist/env-CmspDhHy.js.map +1 -0
  191. package/dist/error-codes-Ds0bnPvT.js.map +1 -1
  192. package/dist/events/CommandKitEventsChannel.d.ts +1 -33
  193. package/dist/events/CommandKitEventsChannel.js +1 -1
  194. package/dist/{file-DAUOZYhC.js → file-Ca1kpEtE.js} +2 -3
  195. package/dist/{file-DAUOZYhC.js.map → file-Ca1kpEtE.js.map} +1 -1
  196. package/dist/{file-n2yl_-vl.d.ts → file-CrV4lSnl.d.ts} +2 -3
  197. package/dist/flags/FlagProvider.d.ts +1 -33
  198. package/dist/flags/feature-flags.d.ts +1 -33
  199. package/dist/flags/feature-flags.js +163 -41
  200. package/dist/flags/feature-flags.js.map +1 -0
  201. package/dist/flags/store.d.ts +1 -33
  202. package/dist/flags/store.js +1 -1
  203. package/dist/{helpers-hDh_tMb6.d.ts → helpers-AQPLVY35.d.ts} +2 -3
  204. package/dist/{helpers-D2_1jih6.js → helpers-Btx1FSZx.js} +2 -3
  205. package/dist/{helpers-D2_1jih6.js.map → helpers-Btx1FSZx.js.map} +1 -1
  206. package/dist/index.d.ts +41 -44
  207. package/dist/index.js +39 -45
  208. package/dist/index.js.map +1 -1
  209. package/dist/kv/constants.d.ts +1 -1
  210. package/dist/kv/constants.js +1 -1
  211. package/dist/kv/dotprops.js +25 -3
  212. package/dist/kv/dotprops.js.map +1 -0
  213. package/dist/kv/kv.d.ts +289 -290
  214. package/dist/kv/kv.js +14 -16
  215. package/dist/kv/kv.js.map +1 -1
  216. package/dist/kv/serde.d.ts +12 -3
  217. package/dist/kv/serde.js +86 -4
  218. package/dist/kv/serde.js.map +1 -0
  219. package/dist/{label-D0KXeBhk.d.ts → label-37kaNWMH.d.ts} +4 -5
  220. package/dist/{label-D-uJWRZ0.js → label-B6vXvwLM.js} +4 -5
  221. package/dist/{label-D-uJWRZ0.js.map → label-B6vXvwLM.js.map} +1 -1
  222. package/dist/logger/DefaultLogger.d.ts +66 -3
  223. package/dist/logger/DefaultLogger.js +22 -37
  224. package/dist/logger/ILogger.d.ts +64 -2
  225. package/dist/logger/ILogger.js +0 -1
  226. package/dist/logger/Logger.d.ts +36 -3
  227. package/dist/logger/Logger.js +22 -37
  228. package/dist/logger/NoopLogger.d.ts +36 -37
  229. package/dist/{media-gallery-BzG70ued.d.ts → media-gallery-Ci3I4ElH.d.ts} +2 -3
  230. package/dist/{media-gallery-BLhwe5lO.js → media-gallery-u3gjX7yD.js} +3 -4
  231. package/dist/{media-gallery-BLhwe5lO.js.map → media-gallery-u3gjX7yD.js.map} +1 -1
  232. package/dist/plugins/CompilerPlugin.d.ts +1 -33
  233. package/dist/plugins/CompilerPlugin.js +1 -2
  234. package/dist/plugins/PluginCommon.d.ts +1 -33
  235. package/dist/plugins/PluginCommon.js +1 -1
  236. package/dist/plugins/RuntimePlugin.d.ts +1 -33
  237. package/dist/plugins/RuntimePlugin.js +1 -2
  238. package/dist/plugins/index.d.ts +1 -33
  239. package/dist/plugins/index.js +24 -37
  240. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +1 -33
  241. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +22 -37
  242. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +1 -33
  243. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +22 -37
  244. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +1 -33
  245. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +22 -37
  246. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +1 -33
  247. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +22 -37
  248. package/dist/plugins/plugin-runtime/runtime.d.ts +1 -33
  249. package/dist/plugins/plugin-runtime/runtime.js +0 -1
  250. package/dist/plugins/types.d.ts +1 -33
  251. package/dist/plugins/types.js +0 -1
  252. package/dist/{poll-Bc6rjeUS.js → poll-CFe8yvoJ.js} +12 -13
  253. package/dist/{poll-Bc6rjeUS.js.map → poll-CFe8yvoJ.js.map} +1 -1
  254. package/dist/{poll-HnaJcB0o.d.ts → poll-Ddtapd6n.d.ts} +8 -9
  255. package/dist/{resolve-file-url-CJoD0FAn.js → resolve-file-url-CdHqwWs3.js} +2 -2
  256. package/dist/{resolve-file-url-CJoD0FAn.js.map → resolve-file-url-CdHqwWs3.js.map} +1 -1
  257. package/dist/{section-BMcHN97i.js → section-BC8LF-B2.js} +3 -4
  258. package/dist/{section-BMcHN97i.js.map → section-BC8LF-B2.js.map} +1 -1
  259. package/dist/{section-BOaJKXiy.d.ts → section-DkUKULnB.d.ts} +2 -3
  260. package/dist/{separator-C___2K-f.js → separator-BUTiW7uz.js} +2 -3
  261. package/dist/{separator-C___2K-f.js.map → separator-BUTiW7uz.js.map} +1 -1
  262. package/dist/{separator-Cb7-6T6N.d.ts → separator-CbXsIFCa.d.ts} +2 -3
  263. package/dist/{signals-Cnqe9dFV.js → signals-B8z1wJ6W.js} +2 -2
  264. package/dist/{signals-Cnqe9dFV.js.map → signals-B8z1wJ6W.js.map} +1 -1
  265. package/dist/{signals-DBS60vTo.d.ts → signals-BbTgTc0i.d.ts} +2 -2
  266. package/dist/{store-ZwL2gN6a.js → store-D8r_hryO.js} +2 -3
  267. package/dist/{store-ZwL2gN6a.js.map → store-D8r_hryO.js.map} +1 -1
  268. package/dist/{text-display-B_hpz50P.d.ts → text-display-D7j39VC-.d.ts} +2 -3
  269. package/dist/{text-display-BtQR88kY.js → text-display-DANahMN3.js} +2 -3
  270. package/dist/{text-display-BtQR88kY.js.map → text-display-DANahMN3.js.map} +1 -1
  271. package/dist/{type-checker-CEFHoQoV.js → type-checker-cVd3Hpnh.js} +4 -6
  272. package/dist/{type-checker-CEFHoQoV.js.map → type-checker-cVd3Hpnh.js.map} +1 -1
  273. package/dist/{types-CJ-XvOFN.d.ts → types-BywA9d2Z.d.ts} +2 -2
  274. package/dist/{types-package-D11rQXLs.js → types-package-CsTNfvv2.js} +3 -6
  275. package/dist/{types-package-D11rQXLs.js.map → types-package-CsTNfvv2.js.map} +1 -1
  276. package/dist/types.d.ts +1 -33
  277. package/dist/utils/colors.js +1 -1
  278. package/dist/utils/constants.d.ts +2 -2
  279. package/dist/utils/constants.js +3 -2
  280. package/dist/utils/dev-hooks.d.ts +1 -33
  281. package/dist/utils/dev-hooks.js +22 -37
  282. package/dist/utils/error-codes.d.ts +54 -2
  283. package/dist/utils/resolve-file-url.d.ts +11 -2
  284. package/dist/utils/resolve-file-url.js +1 -1
  285. package/dist/utils/types-package.js +2 -2
  286. package/dist/utils/useful-stuff/async-queue.d.ts +21 -21
  287. package/dist/utils/useful-stuff/mutex.d.ts +62 -62
  288. package/dist/utils/useful-stuff/ratelimiter.d.ts +56 -56
  289. package/dist/utils/useful-stuff/ratelimiter.js.map +1 -1
  290. package/dist/utils/useful-stuff/semaphore.d.ts +82 -82
  291. package/dist/utils/utilities.d.ts +113 -2
  292. package/dist/utils/utilities.js +25 -38
  293. package/dist/utils-Br3eenD1.js.map +1 -1
  294. package/dist/version.d.ts +8 -2
  295. package/dist/version.js +12 -2
  296. package/dist/version.js.map +1 -0
  297. package/dist/warning-CszH8HeS.js.map +1 -1
  298. package/hooks.cjs +11 -4
  299. package/package.json +14 -7
  300. package/dist/ChannelSelectMenuKit-CsYgIyKe.d.ts +0 -67
  301. package/dist/DefaultLogger-CHMVsizQ.d.ts +0 -67
  302. package/dist/EventWorkerContext-CLhZRHhH.d.ts +0 -43
  303. package/dist/EventsRouter-4pT6vj-U.d.ts +0 -90
  304. package/dist/ILogger-BQ2ew4zR.d.ts +0 -64
  305. package/dist/Logger-DyV7oli4.d.ts +0 -37
  306. package/dist/MentionableSelectMenuKit-CO9phWMf.d.ts +0 -62
  307. package/dist/MessageCommandParser-DEOl_ifb.d.ts +0 -195
  308. package/dist/RoleSelectMenuKit-DvBxzpWh.d.ts +0 -67
  309. package/dist/StringSelectMenuKit-CJ0MzUZJ.d.ts +0 -67
  310. package/dist/UserSelectMenuKit-C_J-9RJs.d.ts +0 -67
  311. package/dist/app-CrjK9yWX.js +0 -0
  312. package/dist/app-process-AQ3Cbf6j.js +0 -68
  313. package/dist/app-process-AQ3Cbf6j.js.map +0 -1
  314. package/dist/build-BYMHMOl_.js +0 -173
  315. package/dist/build-BYMHMOl_.js.map +0 -1
  316. package/dist/commandkit-DabqpQ6v.js.map +0 -1
  317. package/dist/common-0Iw8ZeM6.js +0 -0
  318. package/dist/config-DbgXt6mf.d.ts +0 -16
  319. package/dist/constants-AH-9qJ89.js +0 -27
  320. package/dist/constants-BMWH2YUr.js.map +0 -1
  321. package/dist/dotprops-DvJUE8fw.js +0 -36
  322. package/dist/dotprops-DvJUE8fw.js.map +0 -1
  323. package/dist/env-8yY-6pbC.js.map +0 -1
  324. package/dist/error-codes-BiNRVMiV.d.ts +0 -54
  325. package/dist/feature-flags-BoBV4Dsj.js +0 -160
  326. package/dist/feature-flags-BoBV4Dsj.js.map +0 -1
  327. package/dist/init-CBb0StSB.js +0 -91
  328. package/dist/init-CBb0StSB.js.map +0 -1
  329. package/dist/init-DSYckXwx.d.ts +0 -13
  330. package/dist/resolve-file-url-DFtR8jRR.d.ts +0 -11
  331. package/dist/serde-D4H23l2F.d.ts +0 -12
  332. package/dist/serde-DHHwhltz.js +0 -97
  333. package/dist/serde-DHHwhltz.js.map +0 -1
  334. package/dist/utilities-CQUaua43.d.ts +0 -87
  335. package/dist/utils-Bf-3Eevb.js +0 -23
  336. package/dist/utils-Bf-3Eevb.js.map +0 -1
  337. package/dist/version-DC4j2ZwU.js +0 -18
  338. package/dist/version-DC4j2ZwU.js.map +0 -1
  339. package/dist/version-DggMfP_1.d.ts +0 -8
  340. /package/dist/{ILogger-B0q7p7L1.js → common-C2jAjX4U.js} +0 -0
  341. /package/dist/{index-B5F3AfVc.d.ts → index-BJfko-dP.d.ts} +0 -0
  342. /package/dist/{index-BLwMeReG.d.ts → index-CCggO_hw.d.ts} +0 -0
  343. /package/dist/{index-h64gcVNJ.d.ts → index-CLjpoGi1.d.ts} +0 -0
package/dist/kv/kv.js CHANGED
@@ -1,9 +1,7 @@
1
- const require_chunk = require('../chunk-nOFOJqeH.js');
2
- require('../constants-AH-9qJ89.js');
3
- const require_dotprops = require('../dotprops-DvJUE8fw.js');
4
- const require_serde = require('../serde-DHHwhltz.js');
1
+ const require_chunk = require('../chunk-kSYXY2_d.js');
2
+ const require_kv_dotprops = require('./dotprops.js');
3
+ const require_kv_serde = require('./serde.js');
5
4
  let node_sqlite = require("node:sqlite");
6
- node_sqlite = require_chunk.__toESM(node_sqlite);
7
5
 
8
6
  //#region src/kv/kv.ts
9
7
  /**
@@ -141,8 +139,8 @@ var KV = class KV {
141
139
  this.delete(key);
142
140
  return;
143
141
  }
144
- const deserialized = require_serde.deserializer(JSON.parse(result.value));
145
- if (key.includes(".")) return require_dotprops.getNestedValue(deserialized, key.split(".").slice(1).join("."));
142
+ const deserialized = require_kv_serde.deserializer(JSON.parse(result.value));
143
+ if (key.includes(".")) return require_kv_dotprops.getNestedValue(deserialized, key.split(".").slice(1).join("."));
146
144
  return deserialized;
147
145
  }
148
146
  /**
@@ -182,12 +180,12 @@ var KV = class KV {
182
180
  const [baseKey, ...pathParts] = key.split(".");
183
181
  const path = pathParts.join(".");
184
182
  const existing = this.get(baseKey) || {};
185
- require_dotprops.setNestedValue(existing, path, value);
186
- const serialized = require_serde.serializer(existing);
183
+ require_kv_dotprops.setNestedValue(existing, path, value);
184
+ const serialized = require_kv_serde.serializer(existing);
187
185
  serializedValue = JSON.stringify(serialized);
188
186
  this.statements.set.run(baseKey, serializedValue, null);
189
187
  } else {
190
- const serialized = require_serde.serializer(value);
188
+ const serialized = require_kv_serde.serializer(value);
191
189
  serializedValue = JSON.stringify(serialized);
192
190
  this.statements.set.run(key, serializedValue, null);
193
191
  }
@@ -218,12 +216,12 @@ var KV = class KV {
218
216
  const [baseKey, ...pathParts] = key.split(".");
219
217
  const path = pathParts.join(".");
220
218
  const existing = this.get(baseKey) || {};
221
- require_dotprops.setNestedValue(existing, path, value);
222
- const serialized = require_serde.serializer(existing);
219
+ require_kv_dotprops.setNestedValue(existing, path, value);
220
+ const serialized = require_kv_serde.serializer(existing);
223
221
  serializedValue = JSON.stringify(serialized);
224
222
  this.statements.setex.run(baseKey, serializedValue, expiresAt);
225
223
  } else {
226
- const serialized = require_serde.serializer(value);
224
+ const serialized = require_kv_serde.serializer(value);
227
225
  serializedValue = JSON.stringify(serialized);
228
226
  this.statements.setex.run(key, serializedValue, expiresAt);
229
227
  }
@@ -402,7 +400,7 @@ var KV = class KV {
402
400
  */
403
401
  values() {
404
402
  return this.statements.values.all(this.getCurrentTime()).map((row) => {
405
- return require_serde.deserializer(JSON.parse(row.value));
403
+ return require_kv_serde.deserializer(JSON.parse(row.value));
406
404
  });
407
405
  }
408
406
  /**
@@ -447,7 +445,7 @@ var KV = class KV {
447
445
  const result = this.statements.all.all(this.getCurrentTime());
448
446
  return Object.fromEntries(result.map((row) => {
449
447
  const serialized = JSON.parse(row.value);
450
- return [row.key, require_serde.deserializer(serialized)];
448
+ return [row.key, require_kv_serde.deserializer(serialized)];
451
449
  }));
452
450
  }
453
451
  /**
@@ -512,7 +510,7 @@ var KV = class KV {
512
510
  const result = this.statements.all.iterate(this.getCurrentTime());
513
511
  for (const row of result) {
514
512
  const serialized = JSON.parse(row.value);
515
- yield [row.key, require_serde.deserializer(serialized)];
513
+ yield [row.key, require_kv_serde.deserializer(serialized)];
516
514
  }
517
515
  }
518
516
  /**
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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"}
@@ -1,3 +1,12 @@
1
- import "../constants-CCFSX2NG.js";
2
- import { SerializedValue, deserializer, serializer } from "../serde-D4H23l2F.js";
3
- export { SerializedValue, deserializer, serializer };
1
+ import { t as SerializerType } from "../constants-EpKcj0dH.js";
2
+
3
+ //#region src/kv/serde.d.ts
4
+ interface SerializedValue {
5
+ t: SerializerType;
6
+ v: any;
7
+ }
8
+ declare function serializer(value: any): SerializedValue;
9
+ declare function deserializer(serialized: SerializedValue): any;
10
+ //#endregion
11
+ export { SerializedValue, deserializer, serializer };
12
+ //# sourceMappingURL=serde.d.ts.map
package/dist/kv/serde.js CHANGED
@@ -1,5 +1,87 @@
1
- require('../constants-AH-9qJ89.js');
2
- const require_serde = require('../serde-DHHwhltz.js');
1
+ const require_constants = require('../constants-BFFK-hfP.js');
3
2
 
4
- exports.deserializer = require_serde.deserializer;
5
- exports.serializer = require_serde.serializer;
3
+ //#region src/kv/serde.ts
4
+ function serializer(value) {
5
+ if (value === null) return {
6
+ t: require_constants.SerializerType.Null,
7
+ v: null
8
+ };
9
+ if (value === void 0) return {
10
+ t: require_constants.SerializerType.Undefined,
11
+ v: void 0
12
+ };
13
+ if (typeof value === "string") return {
14
+ t: require_constants.SerializerType.String,
15
+ v: value
16
+ };
17
+ if (typeof value === "number") return {
18
+ t: require_constants.SerializerType.Number,
19
+ v: value
20
+ };
21
+ if (typeof value === "boolean") return {
22
+ t: require_constants.SerializerType.Boolean,
23
+ v: value
24
+ };
25
+ if (typeof value === "bigint") return {
26
+ t: require_constants.SerializerType.BigInt,
27
+ v: value.toString()
28
+ };
29
+ if (value instanceof Date) return {
30
+ t: require_constants.SerializerType.Date,
31
+ v: value.toISOString()
32
+ };
33
+ if (Array.isArray(value)) return {
34
+ t: require_constants.SerializerType.Array,
35
+ v: value
36
+ };
37
+ if (value instanceof Map) return {
38
+ t: require_constants.SerializerType.Map,
39
+ v: Array.from(value.entries())
40
+ };
41
+ if (value instanceof Set) return {
42
+ t: require_constants.SerializerType.Set,
43
+ v: Array.from(value)
44
+ };
45
+ if (Buffer.isBuffer(value)) return {
46
+ t: require_constants.SerializerType.Buffer,
47
+ v: value.toString("base64")
48
+ };
49
+ if (value instanceof RegExp) return {
50
+ t: require_constants.SerializerType.RegExp,
51
+ v: {
52
+ source: value.source,
53
+ flags: value.flags
54
+ }
55
+ };
56
+ if (typeof value === "object") return {
57
+ t: require_constants.SerializerType.Object,
58
+ v: value
59
+ };
60
+ return {
61
+ t: require_constants.SerializerType.String,
62
+ v: String(value)
63
+ };
64
+ }
65
+ function deserializer(serialized) {
66
+ switch (serialized.t) {
67
+ case require_constants.SerializerType.Null: return null;
68
+ case require_constants.SerializerType.Undefined: return;
69
+ case require_constants.SerializerType.String: return serialized.v;
70
+ case require_constants.SerializerType.Number: return serialized.v;
71
+ case require_constants.SerializerType.Boolean: return serialized.v;
72
+ case require_constants.SerializerType.BigInt: return BigInt(serialized.v);
73
+ case require_constants.SerializerType.Date: return new Date(serialized.v);
74
+ case require_constants.SerializerType.Array: return serialized.v;
75
+ case require_constants.SerializerType.Map: return new Map(serialized.v);
76
+ case require_constants.SerializerType.Set: return new Set(serialized.v);
77
+ case require_constants.SerializerType.Buffer: return Buffer.from(serialized.v, "base64");
78
+ case require_constants.SerializerType.RegExp: return new RegExp(serialized.v.source, serialized.v.flags);
79
+ case require_constants.SerializerType.Object: return serialized.v;
80
+ default: return serialized.v;
81
+ }
82
+ }
83
+
84
+ //#endregion
85
+ exports.deserializer = deserializer;
86
+ exports.serializer = serializer;
87
+ //# sourceMappingURL=serde.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serde.js","names":[],"sources":["../../src/kv/serde.ts"],"sourcesContent":["import { SerializerType } from './constants';\n\nexport interface SerializedValue {\n t: SerializerType;\n v: any;\n}\n\nexport function serializer(value: any): SerializedValue {\n if (value === null) {\n return { t: SerializerType.Null, v: null };\n }\n\n if (value === undefined) {\n return { t: SerializerType.Undefined, v: undefined };\n }\n\n if (typeof value === 'string') {\n return { t: SerializerType.String, v: value };\n }\n\n if (typeof value === 'number') {\n return { t: SerializerType.Number, v: value };\n }\n\n if (typeof value === 'boolean') {\n return { t: SerializerType.Boolean, v: value };\n }\n\n if (typeof value === 'bigint') {\n return { t: SerializerType.BigInt, v: value.toString() };\n }\n\n if (value instanceof Date) {\n return { t: SerializerType.Date, v: value.toISOString() };\n }\n\n if (Array.isArray(value)) {\n return { t: SerializerType.Array, v: value };\n }\n\n if (value instanceof Map) {\n return { t: SerializerType.Map, v: Array.from(value.entries()) };\n }\n\n if (value instanceof Set) {\n return { t: SerializerType.Set, v: Array.from(value) };\n }\n\n if (Buffer.isBuffer(value)) {\n return { t: SerializerType.Buffer, v: value.toString('base64') };\n }\n\n if (value instanceof RegExp) {\n return {\n t: SerializerType.RegExp,\n v: { source: value.source, flags: value.flags },\n };\n }\n\n if (typeof value === 'object') {\n return { t: SerializerType.Object, v: value };\n }\n\n // Fallback to string\n return { t: SerializerType.String, v: String(value) };\n}\n\nexport function deserializer(serialized: SerializedValue): any {\n switch (serialized.t) {\n case SerializerType.Null:\n return null;\n case SerializerType.Undefined:\n return undefined;\n case SerializerType.String:\n return serialized.v;\n case SerializerType.Number:\n return serialized.v;\n case SerializerType.Boolean:\n return serialized.v;\n case SerializerType.BigInt:\n return BigInt(serialized.v);\n case SerializerType.Date:\n return new Date(serialized.v);\n case SerializerType.Array:\n return serialized.v;\n case SerializerType.Map:\n return new Map(serialized.v);\n case SerializerType.Set:\n return new Set(serialized.v);\n case SerializerType.Buffer:\n return Buffer.from(serialized.v, 'base64');\n case SerializerType.RegExp:\n return new RegExp(serialized.v.source, serialized.v.flags);\n case SerializerType.Object:\n return serialized.v;\n default:\n return serialized.v;\n }\n}\n"],"mappings":";;;AAOA,SAAgB,WAAW,OAA6B;AACtD,KAAI,UAAU,KACZ,QAAO;EAAE,GAAG,iCAAe;EAAM,GAAG;EAAM;AAG5C,KAAI,UAAU,OACZ,QAAO;EAAE,GAAG,iCAAe;EAAW,GAAG;EAAW;AAGtD,KAAI,OAAO,UAAU,SACnB,QAAO;EAAE,GAAG,iCAAe;EAAQ,GAAG;EAAO;AAG/C,KAAI,OAAO,UAAU,SACnB,QAAO;EAAE,GAAG,iCAAe;EAAQ,GAAG;EAAO;AAG/C,KAAI,OAAO,UAAU,UACnB,QAAO;EAAE,GAAG,iCAAe;EAAS,GAAG;EAAO;AAGhD,KAAI,OAAO,UAAU,SACnB,QAAO;EAAE,GAAG,iCAAe;EAAQ,GAAG,MAAM,UAAU;EAAE;AAG1D,KAAI,iBAAiB,KACnB,QAAO;EAAE,GAAG,iCAAe;EAAM,GAAG,MAAM,aAAa;EAAE;AAG3D,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO;EAAE,GAAG,iCAAe;EAAO,GAAG;EAAO;AAG9C,KAAI,iBAAiB,IACnB,QAAO;EAAE,GAAG,iCAAe;EAAK,GAAG,MAAM,KAAK,MAAM,SAAS,CAAC;EAAE;AAGlE,KAAI,iBAAiB,IACnB,QAAO;EAAE,GAAG,iCAAe;EAAK,GAAG,MAAM,KAAK,MAAM;EAAE;AAGxD,KAAI,OAAO,SAAS,MAAM,CACxB,QAAO;EAAE,GAAG,iCAAe;EAAQ,GAAG,MAAM,SAAS,SAAS;EAAE;AAGlE,KAAI,iBAAiB,OACnB,QAAO;EACL,GAAG,iCAAe;EAClB,GAAG;GAAE,QAAQ,MAAM;GAAQ,OAAO,MAAM;GAAO;EAChD;AAGH,KAAI,OAAO,UAAU,SACnB,QAAO;EAAE,GAAG,iCAAe;EAAQ,GAAG;EAAO;AAI/C,QAAO;EAAE,GAAG,iCAAe;EAAQ,GAAG,OAAO,MAAM;EAAE;;AAGvD,SAAgB,aAAa,YAAkC;AAC7D,SAAQ,WAAW,GAAnB;EACE,KAAK,iCAAe,KAClB,QAAO;EACT,KAAK,iCAAe,UAClB;EACF,KAAK,iCAAe,OAClB,QAAO,WAAW;EACpB,KAAK,iCAAe,OAClB,QAAO,WAAW;EACpB,KAAK,iCAAe,QAClB,QAAO,WAAW;EACpB,KAAK,iCAAe,OAClB,QAAO,OAAO,WAAW,EAAE;EAC7B,KAAK,iCAAe,KAClB,QAAO,IAAI,KAAK,WAAW,EAAE;EAC/B,KAAK,iCAAe,MAClB,QAAO,WAAW;EACpB,KAAK,iCAAe,IAClB,QAAO,IAAI,IAAI,WAAW,EAAE;EAC9B,KAAK,iCAAe,IAClB,QAAO,IAAI,IAAI,WAAW,EAAE;EAC9B,KAAK,iCAAe,OAClB,QAAO,OAAO,KAAK,WAAW,GAAG,SAAS;EAC5C,KAAK,iCAAe,OAClB,QAAO,IAAI,OAAO,WAAW,EAAE,QAAQ,WAAW,EAAE,MAAM;EAC5D,KAAK,iCAAe,OAClB,QAAO,WAAW;EACpB,QACE,QAAO,WAAW"}
@@ -1,14 +1,13 @@
1
1
  import { LabelBuilder, LabelBuilderData } from "discord.js";
2
2
 
3
3
  //#region src/components/display/label.d.ts
4
-
5
4
  /**
6
5
  * The label properties for the label component.
7
6
  */
8
7
  interface LabelProps extends Omit<LabelBuilderData, 'component' | 'type'> {
9
8
  /**
10
- * The component that will be wrapped by the label component.
11
- */
9
+ * The component that will be wrapped by the label component.
10
+ */
12
11
  children: LabelBuilderData['component'] & {};
13
12
  }
14
13
  /**
@@ -25,5 +24,5 @@ interface LabelProps extends Omit<LabelBuilderData, 'component' | 'type'> {
25
24
  */
26
25
  declare function Label(props: LabelProps): LabelBuilder;
27
26
  //#endregion
28
- export { Label, LabelProps };
29
- //# sourceMappingURL=label-D0KXeBhk.d.ts.map
27
+ export { LabelProps as n, Label as t };
28
+ //# sourceMappingURL=label-37kaNWMH.d.ts.map
@@ -1,7 +1,6 @@
1
- const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const require_common = require('./common-CCx-FJI4.js');
1
+ const require_chunk = require('./chunk-kSYXY2_d.js');
2
+ const require_common = require('./common-CEordwf3.js');
3
3
  let discord_js = require("discord.js");
4
- discord_js = require_chunk.__toESM(discord_js);
5
4
 
6
5
  //#region src/components/display/label.ts
7
6
  /**
@@ -17,7 +16,7 @@ discord_js = require_chunk.__toESM(discord_js);
17
16
  * ```
18
17
  */
19
18
  function Label(props) {
20
- const { children, id,...rest } = props;
19
+ const { children, id, ...rest } = props;
21
20
  const label = new discord_js.LabelBuilder({
22
21
  ...rest,
23
22
  component: children
@@ -33,4 +32,4 @@ Object.defineProperty(exports, 'Label', {
33
32
  return Label;
34
33
  }
35
34
  });
36
- //# sourceMappingURL=label-D-uJWRZ0.js.map
35
+ //# sourceMappingURL=label-B6vXvwLM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"label-D-uJWRZ0.js","names":[],"sources":["../src/components/display/label.ts"],"sourcesContent":["import {\n APIComponentInLabel,\n LabelBuilder,\n type LabelBuilderData,\n} from 'discord.js';\nimport { applyId } from './common';\n\n/**\n * The label properties for the label component.\n */\nexport interface LabelProps\n extends Omit<LabelBuilderData, 'component' | 'type'> {\n /**\n * The component that will be wrapped by the label component.\n */\n children: LabelBuilderData['component'] & {};\n}\n\n/**\n * The label component wraps modal components with text as a label and optional description.\n * @param props The label properties.\n * @returns The label builder instance.\n * @example ```tsx\n * import { Label } from 'commandkit';\n *\n * const label = <Label label=\"Name\" description=\"Enter your name\">\n * <ShortInput customId=\"name\" label=\"Name\" placeholder=\"John\" required />\n * </Label>;\n * ```\n */\nexport function Label(props: LabelProps) {\n const { children, id, ...rest } = props;\n\n const label = new LabelBuilder({\n ...rest,\n // channel select menu builder is missing?\n component: children as unknown as APIComponentInLabel,\n });\n\n applyId(props, label);\n\n return label;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA8BA,SAAgB,MAAM,OAAmB;CACvC,MAAM,EAAE,UAAU,GAAI,GAAG,SAAS;CAElC,MAAM,QAAQ,IAAI,wBAAa;EAC7B,GAAG;EAEH,WAAW;EACZ,CAAC;AAEF,wBAAQ,OAAO,MAAM;AAErB,QAAO"}
1
+ {"version":3,"file":"label-B6vXvwLM.js","names":[],"sources":["../src/components/display/label.ts"],"sourcesContent":["import {\n APIComponentInLabel,\n LabelBuilder,\n type LabelBuilderData,\n} from 'discord.js';\nimport { applyId } from './common';\n\n/**\n * The label properties for the label component.\n */\nexport interface LabelProps\n extends Omit<LabelBuilderData, 'component' | 'type'> {\n /**\n * The component that will be wrapped by the label component.\n */\n children: LabelBuilderData['component'] & {};\n}\n\n/**\n * The label component wraps modal components with text as a label and optional description.\n * @param props The label properties.\n * @returns The label builder instance.\n * @example ```tsx\n * import { Label } from 'commandkit';\n *\n * const label = <Label label=\"Name\" description=\"Enter your name\">\n * <ShortInput customId=\"name\" label=\"Name\" placeholder=\"John\" required />\n * </Label>;\n * ```\n */\nexport function Label(props: LabelProps) {\n const { children, id, ...rest } = props;\n\n const label = new LabelBuilder({\n ...rest,\n // channel select menu builder is missing?\n component: children as unknown as APIComponentInLabel,\n });\n\n applyId(props, label);\n\n return label;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA8BA,SAAgB,MAAM,OAAmB;CACvC,MAAM,EAAE,UAAU,IAAI,GAAG,SAAS;CAElC,MAAM,QAAQ,IAAI,wBAAa;EAC7B,GAAG;EAEH,WAAW;EACZ,CAAC;AAEF,wBAAQ,OAAO,MAAM;AAErB,QAAO"}
@@ -1,3 +1,66 @@
1
- import "../ILogger-BQ2ew4zR.js";
2
- import { DefaultLogger } from "../DefaultLogger-CHMVsizQ.js";
3
- export { DefaultLogger };
1
+ import { ILogger } from "./ILogger.js";
2
+
3
+ //#region src/logger/DefaultLogger.d.ts
4
+ /**
5
+ * Default logger implementation that logs messages to the console.
6
+ * It formats the log messages with timestamps, log levels, and context information.
7
+ */
8
+ declare class DefaultLogger implements ILogger {
9
+ stdout: NodeJS.WriteStream & {
10
+ fd: 1;
11
+ };
12
+ stderr: NodeJS.WriteStream & {
13
+ fd: 2;
14
+ };
15
+ private logger;
16
+ /**
17
+ * Creates a new instance of DefaultLogger.
18
+ * @param stdout The output stream for standard messages (default: process.stdout).
19
+ * @param stderr The output stream for error messages (default: process.stderr).
20
+ */
21
+ constructor(stdout?: NodeJS.WriteStream & {
22
+ fd: 1;
23
+ }, stderr?: NodeJS.WriteStream & {
24
+ fd: 2;
25
+ });
26
+ private _formatTime;
27
+ private _getContext;
28
+ private _getLevelLabel;
29
+ private _getPrefix;
30
+ private _log;
31
+ private _logTemplate;
32
+ /**
33
+ * Logs a debug message.
34
+ * @param message The message to log.
35
+ */
36
+ debug(message: any): void;
37
+ debug(strings: TemplateStringsArray, ...values: any[]): void;
38
+ /**
39
+ * Logs an error message.
40
+ * @param message The error message to log.
41
+ */
42
+ error(message: any): void;
43
+ error(strings: TemplateStringsArray, ...values: any[]): void;
44
+ /**
45
+ * Logs a default message.
46
+ * @param message The message to log.
47
+ */
48
+ log(message: any): void;
49
+ log(strings: TemplateStringsArray, ...values: any[]): void;
50
+ /**
51
+ * Logs an info message.
52
+ * @param message The informational message to log.
53
+ */
54
+ info(message: any): void;
55
+ info(strings: TemplateStringsArray, ...values: any[]): void;
56
+ /**
57
+ * Logs a warning message.
58
+ * @param message The warning message to log.
59
+ */
60
+ warn(message: any): void;
61
+ warn(strings: TemplateStringsArray, ...values: any[]): void;
62
+ private _isTemplateStringsArray;
63
+ }
64
+ //#endregion
65
+ export { DefaultLogger };
66
+ //# sourceMappingURL=DefaultLogger.d.ts.map
@@ -1,41 +1,26 @@
1
- require('../colors-DL3ucTiT.js');
2
- require('../ActionRow-uJxU4UGo.js');
3
- require('../error-codes-Ds0bnPvT.js');
4
- const require_commandkit = require('../commandkit-DabqpQ6v.js');
5
- require('../warning-CszH8HeS.js');
6
- require('../common-0Iw8ZeM6.js');
7
- require('../common-CCx-FJI4.js');
8
- require('../container-DC0eQigs.js');
9
- require('../file-DAUOZYhC.js');
10
- require('../media-gallery-BLhwe5lO.js');
11
- require('../section-BMcHN97i.js');
12
- require('../separator-C___2K-f.js');
13
- require('../text-display-BtQR88kY.js');
14
- require('../label-D-uJWRZ0.js');
15
- require('../poll-Bc6rjeUS.js');
1
+ require('../colors-Csc0X4QJ.js');
2
+ require('../ActionRow-CSN_UKmM.js');
3
+ const require_commandkit = require('../commandkit-SIjTLD2R.js');
4
+ require('../container-DCPljKVH.js');
5
+ require('../file-Ca1kpEtE.js');
6
+ require('../media-gallery-u3gjX7yD.js');
7
+ require('../section-BC8LF-B2.js');
8
+ require('../separator-BUTiW7uz.js');
9
+ require('../text-display-DANahMN3.js');
10
+ require('../label-B6vXvwLM.js');
11
+ require('../poll-CFe8yvoJ.js');
16
12
  require('../display-WDb9wMCv.js');
17
- require('../element-DibzzA5L.js');
18
- require('../types-TC4g3w91.js');
19
- require('../EventInterceptor-BWoEJMHZ.js');
20
- require('../constants-BMWH2YUr.js');
21
- require('../PluginCommon-CPWV5xuX.js');
22
- require('../CompilerPlugin-CZ4412Zm.js');
23
- require('../RuntimePlugin-COeXe8rP.js');
24
- require('../types-Cdh4uaFR.js');
25
- require('../resolve-file-url-CJoD0FAn.js');
26
- require('../runtime-Skt5NiOc.js');
27
- require('../utils-Br3eenD1.js');
28
- require('../types-package-D11rQXLs.js');
29
- require('../constants-D0dawKxO.js');
30
- require('../EventWorkerContext-D_9q1Bm2.js');
31
- require('../signals-Cnqe9dFV.js');
32
- require('../helpers-D2_1jih6.js');
33
- require('../MessageCommandParser-CKh-tM97.js');
34
- require('../CommandsRouter-CWMipIis.js');
35
- require('../EventsRouter-C04XqRKf.js');
13
+ require('../constants-CxkFFZ7p.js');
14
+ require('../types-package-CsTNfvv2.js');
15
+ require('../constants-Cw8VjCVz.js');
16
+ require('../EventWorkerContext-Dfhgv329.js');
17
+ require('../signals-B8z1wJ6W.js');
18
+ require('../helpers-Btx1FSZx.js');
19
+ require('../MessageCommandParser-Bs9fimmd.js');
20
+ require('../CommandsRouter-C_HLsrGX.js');
21
+ require('../EventsRouter-DZYIha6m.js');
36
22
  require('../router-BvamdzoF.js');
37
- require('../common-fIO6fqGZ.js');
38
- require('../CommandKitEventsChannel-2l9Za-le.js');
39
- require('../store-ZwL2gN6a.js');
23
+ require('../common-DSRs_mfw.js');
24
+ require('../store-D8r_hryO.js');
40
25
 
41
26
  exports.DefaultLogger = require_commandkit.DefaultLogger;
@@ -1,2 +1,64 @@
1
- import { ILogger } from "../ILogger-BQ2ew4zR.js";
2
- export { ILogger };
1
+ //#region src/logger/ILogger.d.ts
2
+ /**
3
+ * ILogger interface for logging functionality.
4
+ */
5
+ interface ILogger {
6
+ /**
7
+ * Logs a message with the default log level.
8
+ * @param message The message to log.
9
+ */
10
+ log(message: any): void;
11
+ /**
12
+ * Logs a message with the default log level using template literals.
13
+ * @param strings The template literal strings.
14
+ * @param values The values to interpolate.
15
+ */
16
+ log(strings: TemplateStringsArray, ...values: any[]): void;
17
+ /**
18
+ * Logs an error message.
19
+ * @param message The error message to log.
20
+ */
21
+ error(message: any): void;
22
+ /**
23
+ * Logs an error message using template literals.
24
+ * @param strings The template literal strings.
25
+ * @param values The values to interpolate.
26
+ */
27
+ error(strings: TemplateStringsArray, ...values: any[]): void;
28
+ /**
29
+ * Logs a warning message.
30
+ * @param message The warning message to log.
31
+ */
32
+ warn(message: any): void;
33
+ /**
34
+ * Logs a warning message using template literals.
35
+ * @param strings The template literal strings.
36
+ * @param values The values to interpolate.
37
+ */
38
+ warn(strings: TemplateStringsArray, ...values: any[]): void;
39
+ /**
40
+ * Logs an informational message.
41
+ * @param message The informational message to log.
42
+ */
43
+ info(message: any): void;
44
+ /**
45
+ * Logs an informational message using template literals.
46
+ * @param strings The template literal strings.
47
+ * @param values The values to interpolate.
48
+ */
49
+ info(strings: TemplateStringsArray, ...values: any[]): void;
50
+ /**
51
+ * Logs a debug message.
52
+ * @param message The debug message to log.
53
+ */
54
+ debug(message: any): void;
55
+ /**
56
+ * Logs a debug message using template literals.
57
+ * @param strings The template literal strings.
58
+ * @param values The values to interpolate.
59
+ */
60
+ debug(strings: TemplateStringsArray, ...values: any[]): void;
61
+ }
62
+ //#endregion
63
+ export { ILogger };
64
+ //# sourceMappingURL=ILogger.d.ts.map
@@ -1 +0,0 @@
1
- require('../ILogger-B0q7p7L1.js');
@@ -1,3 +1,36 @@
1
- import "../ILogger-BQ2ew4zR.js";
2
- import { CommandKitLoggerOptions, Logger, LoggerImpl, createLogger } from "../Logger-DyV7oli4.js";
3
- export { CommandKitLoggerOptions, Logger, LoggerImpl, createLogger };
1
+ import { ILogger } from "./ILogger.js";
2
+
3
+ //#region src/logger/Logger.d.ts
4
+ /**
5
+ * Options for configuring the CommandKit logger.
6
+ */
7
+ interface CommandKitLoggerOptions {
8
+ /**
9
+ * The logger provider to use.
10
+ */
11
+ provider: ILogger;
12
+ }
13
+ /**
14
+ * Logger implementation for CommandKit.
15
+ */
16
+ interface LoggerImpl extends ILogger {
17
+ /**
18
+ * Configures the logger with the specified options.
19
+ * @param options The logger options to apply.
20
+ */
21
+ configure(options: CommandKitLoggerOptions): void;
22
+ }
23
+ /**
24
+ * Creates a new logger instance with the specified options.
25
+ * @param options The options for configuring the logger.
26
+ * @returns A new logger instance.
27
+ */
28
+ declare function createLogger(options: CommandKitLoggerOptions): LoggerImpl;
29
+ /**
30
+ * Default logger instance for CommandKit. This logger uses the DefaultLogger as its provider.
31
+ * The provider can be replaced with a custom logger implementation using the `configure` method.
32
+ */
33
+ declare const Logger: LoggerImpl;
34
+ //#endregion
35
+ export { CommandKitLoggerOptions, Logger, LoggerImpl, createLogger };
36
+ //# sourceMappingURL=Logger.d.ts.map