@went.tf/discord-bot-framework 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -0
  3. package/build/.tsbuildinfo +1 -0
  4. package/build/api-client/api-client.d.ts +13 -0
  5. package/build/api-client/api-client.d.ts.map +1 -0
  6. package/build/api-client/api-client.js +147 -0
  7. package/build/api-client/api-client.js.map +1 -0
  8. package/build/api-client/api-http-exception.d.ts +7 -0
  9. package/build/api-client/api-http-exception.d.ts.map +1 -0
  10. package/build/api-client/api-http-exception.js +12 -0
  11. package/build/api-client/api-http-exception.js.map +1 -0
  12. package/build/api-client/index.d.ts +4 -0
  13. package/build/api-client/index.d.ts.map +1 -0
  14. package/build/api-client/index.js +4 -0
  15. package/build/api-client/index.js.map +1 -0
  16. package/build/api-client/types.d.ts +105 -0
  17. package/build/api-client/types.d.ts.map +1 -0
  18. package/build/api-client/types.js +8 -0
  19. package/build/api-client/types.js.map +1 -0
  20. package/build/client/create-bot-client.d.ts +14 -0
  21. package/build/client/create-bot-client.d.ts.map +1 -0
  22. package/build/client/create-bot-client.js +19 -0
  23. package/build/client/create-bot-client.js.map +1 -0
  24. package/build/client/create-shard-manager.d.ts +17 -0
  25. package/build/client/create-shard-manager.d.ts.map +1 -0
  26. package/build/client/create-shard-manager.js +26 -0
  27. package/build/client/create-shard-manager.js.map +1 -0
  28. package/build/client/index.d.ts +3 -0
  29. package/build/client/index.d.ts.map +1 -0
  30. package/build/client/index.js +3 -0
  31. package/build/client/index.js.map +1 -0
  32. package/build/commands/build-application-commands-body.d.ts +39 -0
  33. package/build/commands/build-application-commands-body.d.ts.map +1 -0
  34. package/build/commands/build-application-commands-body.js +127 -0
  35. package/build/commands/build-application-commands-body.js.map +1 -0
  36. package/build/commands/fixed-reply-command-factory.d.ts +10 -0
  37. package/build/commands/fixed-reply-command-factory.d.ts.map +1 -0
  38. package/build/commands/fixed-reply-command-factory.js +19 -0
  39. package/build/commands/fixed-reply-command-factory.js.map +1 -0
  40. package/build/commands/index.d.ts +4 -0
  41. package/build/commands/index.d.ts.map +1 -0
  42. package/build/commands/index.js +4 -0
  43. package/build/commands/index.js.map +1 -0
  44. package/build/commands/registration.d.ts +24 -0
  45. package/build/commands/registration.d.ts.map +1 -0
  46. package/build/commands/registration.js +69 -0
  47. package/build/commands/registration.js.map +1 -0
  48. package/build/commands/schema/application-command-leaf-option.schema.d.ts +230 -0
  49. package/build/commands/schema/application-command-leaf-option.schema.d.ts.map +1 -0
  50. package/build/commands/schema/application-command-leaf-option.schema.js +129 -0
  51. package/build/commands/schema/application-command-leaf-option.schema.js.map +1 -0
  52. package/build/commands/schema/application-command-leaf-option.schema.json +258 -0
  53. package/build/commands/schema/application-command-option-choice.schema.d.ts +18 -0
  54. package/build/commands/schema/application-command-option-choice.schema.d.ts.map +1 -0
  55. package/build/commands/schema/application-command-option-choice.schema.js +12 -0
  56. package/build/commands/schema/application-command-option-choice.schema.js.map +1 -0
  57. package/build/commands/schema/application-command-option-choice.schema.json +23 -0
  58. package/build/commands/schema/application-command-option.schema.d.ts +12 -0
  59. package/build/commands/schema/application-command-option.schema.d.ts.map +1 -0
  60. package/build/commands/schema/application-command-option.schema.js +13 -0
  61. package/build/commands/schema/application-command-option.schema.js.map +1 -0
  62. package/build/commands/schema/application-command-option.schema.json +14 -0
  63. package/build/commands/schema/application-command-subcommand-group.schema.d.ts +28 -0
  64. package/build/commands/schema/application-command-subcommand-group.schema.d.ts.map +1 -0
  65. package/build/commands/schema/application-command-subcommand-group.schema.js +22 -0
  66. package/build/commands/schema/application-command-subcommand-group.schema.js.map +1 -0
  67. package/build/commands/schema/application-command-subcommand-group.schema.json +26 -0
  68. package/build/commands/schema/application-command-subcommand.schema.d.ts +29 -0
  69. package/build/commands/schema/application-command-subcommand.schema.d.ts.map +1 -0
  70. package/build/commands/schema/application-command-subcommand.schema.js +23 -0
  71. package/build/commands/schema/application-command-subcommand.schema.js.map +1 -0
  72. package/build/commands/schema/application-command-subcommand.schema.json +26 -0
  73. package/build/commands/schema/application-command-type.schema.d.ts +6 -0
  74. package/build/commands/schema/application-command-type.schema.d.ts.map +1 -0
  75. package/build/commands/schema/application-command-type.schema.js +6 -0
  76. package/build/commands/schema/application-command-type.schema.js.map +1 -0
  77. package/build/commands/schema/application-command-type.schema.json +9 -0
  78. package/build/commands/schema/application-integration-type.schema.d.ts +6 -0
  79. package/build/commands/schema/application-integration-type.schema.d.ts.map +1 -0
  80. package/build/commands/schema/application-integration-type.schema.js +6 -0
  81. package/build/commands/schema/application-integration-type.schema.js.map +1 -0
  82. package/build/commands/schema/application-integration-type.schema.json +8 -0
  83. package/build/commands/schema/channel-type.schema.d.ts +6 -0
  84. package/build/commands/schema/channel-type.schema.d.ts.map +1 -0
  85. package/build/commands/schema/channel-type.schema.js +6 -0
  86. package/build/commands/schema/channel-type.schema.js.map +1 -0
  87. package/build/commands/schema/channel-type.schema.json +16 -0
  88. package/build/commands/schema/chat-input-command.schema.d.ts +45 -0
  89. package/build/commands/schema/chat-input-command.schema.d.ts.map +1 -0
  90. package/build/commands/schema/chat-input-command.schema.js +34 -0
  91. package/build/commands/schema/chat-input-command.schema.js.map +1 -0
  92. package/build/commands/schema/chat-input-command.schema.json +46 -0
  93. package/build/commands/schema/commands-file.schema.d.ts +18 -0
  94. package/build/commands/schema/commands-file.schema.d.ts.map +1 -0
  95. package/build/commands/schema/commands-file.schema.js +16 -0
  96. package/build/commands/schema/commands-file.schema.js.map +1 -0
  97. package/build/commands/schema/commands-file.schema.json +14 -0
  98. package/build/commands/schema/context-menu-command.schema.d.ts +40 -0
  99. package/build/commands/schema/context-menu-command.schema.d.ts.map +1 -0
  100. package/build/commands/schema/context-menu-command.schema.js +32 -0
  101. package/build/commands/schema/context-menu-command.schema.js.map +1 -0
  102. package/build/commands/schema/context-menu-command.schema.json +40 -0
  103. package/build/commands/schema/context-menu-name.schema.d.ts +7 -0
  104. package/build/commands/schema/context-menu-name.schema.d.ts.map +1 -0
  105. package/build/commands/schema/context-menu-name.schema.js +7 -0
  106. package/build/commands/schema/context-menu-name.schema.js.map +1 -0
  107. package/build/commands/schema/context-menu-name.schema.json +6 -0
  108. package/build/commands/schema/default-member-permissions.schema.d.ts +7 -0
  109. package/build/commands/schema/default-member-permissions.schema.d.ts.map +1 -0
  110. package/build/commands/schema/default-member-permissions.schema.js +7 -0
  111. package/build/commands/schema/default-member-permissions.schema.js.map +1 -0
  112. package/build/commands/schema/default-member-permissions.schema.json +6 -0
  113. package/build/commands/schema/index.d.ts +77 -0
  114. package/build/commands/schema/index.d.ts.map +1 -0
  115. package/build/commands/schema/index.js +48 -0
  116. package/build/commands/schema/index.js.map +1 -0
  117. package/build/commands/schema/interaction-context-type.schema.d.ts +6 -0
  118. package/build/commands/schema/interaction-context-type.schema.d.ts.map +1 -0
  119. package/build/commands/schema/interaction-context-type.schema.js +6 -0
  120. package/build/commands/schema/interaction-context-type.schema.js.map +1 -0
  121. package/build/commands/schema/interaction-context-type.schema.json +9 -0
  122. package/build/commands/schema/option-name.schema.d.ts +7 -0
  123. package/build/commands/schema/option-name.schema.d.ts.map +1 -0
  124. package/build/commands/schema/option-name.schema.js +7 -0
  125. package/build/commands/schema/option-name.schema.js.map +1 -0
  126. package/build/commands/schema/option-name.schema.json +6 -0
  127. package/build/commands/schema/parse-commands-file.d.ts +19 -0
  128. package/build/commands/schema/parse-commands-file.d.ts.map +1 -0
  129. package/build/commands/schema/parse-commands-file.js +19 -0
  130. package/build/commands/schema/parse-commands-file.js.map +1 -0
  131. package/build/db/create-postgres-prisma-db.d.ts +20 -0
  132. package/build/db/create-postgres-prisma-db.d.ts.map +1 -0
  133. package/build/db/create-postgres-prisma-db.js +17 -0
  134. package/build/db/create-postgres-prisma-db.js.map +1 -0
  135. package/build/db/index.d.ts +2 -0
  136. package/build/db/index.d.ts.map +1 -0
  137. package/build/db/index.js +2 -0
  138. package/build/db/index.js.map +1 -0
  139. package/build/dev/create-handler-watcher.d.ts +23 -0
  140. package/build/dev/create-handler-watcher.d.ts.map +1 -0
  141. package/build/dev/create-handler-watcher.js +55 -0
  142. package/build/dev/create-handler-watcher.js.map +1 -0
  143. package/build/dev/create-source-reloader.d.ts +37 -0
  144. package/build/dev/create-source-reloader.d.ts.map +1 -0
  145. package/build/dev/create-source-reloader.js +42 -0
  146. package/build/dev/create-source-reloader.js.map +1 -0
  147. package/build/dev/index.d.ts +3 -0
  148. package/build/dev/index.d.ts.map +1 -0
  149. package/build/dev/index.js +3 -0
  150. package/build/dev/index.js.map +1 -0
  151. package/build/dev/reload-loader.d.ts +11 -0
  152. package/build/dev/reload-loader.d.ts.map +1 -0
  153. package/build/dev/reload-loader.js +28 -0
  154. package/build/dev/reload-loader.js.map +1 -0
  155. package/build/env/define-env.d.ts +25 -0
  156. package/build/env/define-env.d.ts.map +1 -0
  157. package/build/env/define-env.js +24 -0
  158. package/build/env/define-env.js.map +1 -0
  159. package/build/env/helpers.d.ts +9 -0
  160. package/build/env/helpers.d.ts.map +1 -0
  161. package/build/env/helpers.js +9 -0
  162. package/build/env/helpers.js.map +1 -0
  163. package/build/env/index.d.ts +3 -0
  164. package/build/env/index.d.ts.map +1 -0
  165. package/build/env/index.js +3 -0
  166. package/build/env/index.js.map +1 -0
  167. package/build/i18n/create-command-localizer.d.ts +27 -0
  168. package/build/i18n/create-command-localizer.d.ts.map +1 -0
  169. package/build/i18n/create-command-localizer.js +40 -0
  170. package/build/i18n/create-command-localizer.js.map +1 -0
  171. package/build/i18n/create-i18n-initializer.d.ts +18 -0
  172. package/build/i18n/create-i18n-initializer.d.ts.map +1 -0
  173. package/build/i18n/create-i18n-initializer.js +34 -0
  174. package/build/i18n/create-i18n-initializer.js.map +1 -0
  175. package/build/i18n/index.d.ts +3 -0
  176. package/build/i18n/index.d.ts.map +1 -0
  177. package/build/i18n/index.js +3 -0
  178. package/build/i18n/index.js.map +1 -0
  179. package/build/index.d.ts +8 -0
  180. package/build/index.d.ts.map +1 -0
  181. package/build/index.js +12 -0
  182. package/build/index.js.map +1 -0
  183. package/build/interactions/custom-id.d.ts +9 -0
  184. package/build/interactions/custom-id.d.ts.map +1 -0
  185. package/build/interactions/custom-id.js +15 -0
  186. package/build/interactions/custom-id.js.map +1 -0
  187. package/build/interactions/dispatch.d.ts +35 -0
  188. package/build/interactions/dispatch.d.ts.map +1 -0
  189. package/build/interactions/dispatch.js +87 -0
  190. package/build/interactions/dispatch.js.map +1 -0
  191. package/build/interactions/handle-interaction-error.d.ts +22 -0
  192. package/build/interactions/handle-interaction-error.d.ts.map +1 -0
  193. package/build/interactions/handle-interaction-error.js +65 -0
  194. package/build/interactions/handle-interaction-error.js.map +1 -0
  195. package/build/interactions/index.d.ts +7 -0
  196. package/build/interactions/index.d.ts.map +1 -0
  197. package/build/interactions/index.js +7 -0
  198. package/build/interactions/index.js.map +1 -0
  199. package/build/interactions/registry.d.ts +32 -0
  200. package/build/interactions/registry.d.ts.map +1 -0
  201. package/build/interactions/registry.js +49 -0
  202. package/build/interactions/registry.js.map +1 -0
  203. package/build/interactions/router.d.ts +28 -0
  204. package/build/interactions/router.d.ts.map +1 -0
  205. package/build/interactions/router.js +48 -0
  206. package/build/interactions/router.js.map +1 -0
  207. package/build/interactions/types.d.ts +37 -0
  208. package/build/interactions/types.d.ts.map +1 -0
  209. package/build/interactions/types.js +2 -0
  210. package/build/interactions/types.js.map +1 -0
  211. package/build/logger/create-logger.d.ts +27 -0
  212. package/build/logger/create-logger.d.ts.map +1 -0
  213. package/build/logger/create-logger.js +36 -0
  214. package/build/logger/create-logger.js.map +1 -0
  215. package/build/logger/dev-null-logger.d.ts +11 -0
  216. package/build/logger/dev-null-logger.d.ts.map +1 -0
  217. package/build/logger/dev-null-logger.js +19 -0
  218. package/build/logger/dev-null-logger.js.map +1 -0
  219. package/build/logger/discord-webhook-batcher.d.ts +38 -0
  220. package/build/logger/discord-webhook-batcher.d.ts.map +1 -0
  221. package/build/logger/discord-webhook-batcher.js +87 -0
  222. package/build/logger/discord-webhook-batcher.js.map +1 -0
  223. package/build/logger/discord-webhook-transport.d.ts +9 -0
  224. package/build/logger/discord-webhook-transport.d.ts.map +1 -0
  225. package/build/logger/discord-webhook-transport.js +20 -0
  226. package/build/logger/discord-webhook-transport.js.map +1 -0
  227. package/build/logger/index.d.ts +5 -0
  228. package/build/logger/index.d.ts.map +1 -0
  229. package/build/logger/index.js +5 -0
  230. package/build/logger/index.js.map +1 -0
  231. package/build/logger/logger.d.ts +30 -0
  232. package/build/logger/logger.d.ts.map +1 -0
  233. package/build/logger/logger.js +84 -0
  234. package/build/logger/logger.js.map +1 -0
  235. package/build/logger/pino-pretty-options.d.ts +12 -0
  236. package/build/logger/pino-pretty-options.d.ts.map +1 -0
  237. package/build/logger/pino-pretty-options.js +17 -0
  238. package/build/logger/pino-pretty-options.js.map +1 -0
  239. package/build/logger/types.d.ts +6 -0
  240. package/build/logger/types.d.ts.map +1 -0
  241. package/build/logger/types.js +2 -0
  242. package/build/logger/types.js.map +1 -0
  243. package/build/utils/discord-lookups.d.ts +16 -0
  244. package/build/utils/discord-lookups.d.ts.map +1 -0
  245. package/build/utils/discord-lookups.js +39 -0
  246. package/build/utils/discord-lookups.js.map +1 -0
  247. package/build/utils/get-git-data.d.ts +8 -0
  248. package/build/utils/get-git-data.d.ts.map +1 -0
  249. package/build/utils/get-git-data.js +18 -0
  250. package/build/utils/get-git-data.js.map +1 -0
  251. package/build/utils/index.d.ts +7 -0
  252. package/build/utils/index.d.ts.map +1 -0
  253. package/build/utils/index.js +7 -0
  254. package/build/utils/index.js.map +1 -0
  255. package/build/utils/messaging.d.ts +15 -0
  256. package/build/utils/messaging.d.ts.map +1 -0
  257. package/build/utils/messaging.js +71 -0
  258. package/build/utils/messaging.js.map +1 -0
  259. package/build/utils/promises.d.ts +6 -0
  260. package/build/utils/promises.d.ts.map +1 -0
  261. package/build/utils/promises.js +13 -0
  262. package/build/utils/promises.js.map +1 -0
  263. package/build/utils/run-attempts.d.ts +6 -0
  264. package/build/utils/run-attempts.d.ts.map +1 -0
  265. package/build/utils/run-attempts.js +16 -0
  266. package/build/utils/run-attempts.js.map +1 -0
  267. package/build/utils/strings.d.ts +7 -0
  268. package/build/utils/strings.d.ts.map +1 -0
  269. package/build/utils/strings.js +39 -0
  270. package/build/utils/strings.js.map +1 -0
  271. package/package.json +146 -0
@@ -0,0 +1,32 @@
1
+ import { applicationIntegrationTypeSchema } from './application-integration-type.schema.js';
2
+ import { contextMenuNameSchema } from './context-menu-name.schema.js';
3
+ import { defaultMemberPermissionsSchema } from './default-member-permissions.schema.js';
4
+ import { interactionContextTypeSchema } from './interaction-context-type.schema.js';
5
+ /**
6
+ * One USER or MESSAGE context-menu command entry. No description/options -
7
+ * Discord doesn't accept them for context-menu commands, and
8
+ * additionalProperties:false enforces that here (nothing enforced this before).
9
+ */
10
+ export const contextMenuCommandSchema = {
11
+ $id: 'https://schema.went.tf/discord-bot-framework/context-menu-command.json',
12
+ type: 'object',
13
+ properties: {
14
+ type: { enum: [2, 3] },
15
+ name: { $ref: contextMenuNameSchema.$id },
16
+ default_member_permissions: { $ref: defaultMemberPermissionsSchema.$id },
17
+ contexts: {
18
+ type: 'array',
19
+ items: { $ref: interactionContextTypeSchema.$id },
20
+ uniqueItems: true,
21
+ },
22
+ integration_types: {
23
+ type: 'array',
24
+ items: { $ref: applicationIntegrationTypeSchema.$id },
25
+ uniqueItems: true,
26
+ },
27
+ nsfw: { type: 'boolean' },
28
+ },
29
+ required: ['type', 'name'],
30
+ additionalProperties: false,
31
+ };
32
+ //# sourceMappingURL=context-menu-command.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu-command.schema.js","sourceRoot":"","sources":["../../../src/commands/schema/context-menu-command.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,GAAG,EAAE,wEAAwE;IAC7E,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACtB,IAAI,EAAE,EAAE,IAAI,EAAE,qBAAqB,CAAC,GAAG,EAAE;QACzC,0BAA0B,EAAE,EAAE,IAAI,EAAE,8BAA8B,CAAC,GAAG,EAAE;QACxE,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,CAAC,GAAG,EAAE;YACjD,WAAW,EAAE,IAAI;SAClB;QACD,iBAAiB,EAAE;YACjB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,gCAAgC,CAAC,GAAG,EAAE;YACrD,WAAW,EAAE,IAAI;SAClB;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC1B;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,KAAK;CACnB,CAAC"}
@@ -0,0 +1,40 @@
1
+ {
2
+ "$id": "https://schema.went.tf/discord-bot-framework/context-menu-command.json",
3
+ "type": "object",
4
+ "properties": {
5
+ "type": {
6
+ "enum": [
7
+ 2,
8
+ 3
9
+ ]
10
+ },
11
+ "name": {
12
+ "$ref": "https://schema.went.tf/discord-bot-framework/context-menu-name.json"
13
+ },
14
+ "default_member_permissions": {
15
+ "$ref": "https://schema.went.tf/discord-bot-framework/default-member-permissions.json"
16
+ },
17
+ "contexts": {
18
+ "type": "array",
19
+ "items": {
20
+ "$ref": "https://schema.went.tf/discord-bot-framework/interaction-context-type.json"
21
+ },
22
+ "uniqueItems": true
23
+ },
24
+ "integration_types": {
25
+ "type": "array",
26
+ "items": {
27
+ "$ref": "https://schema.went.tf/discord-bot-framework/application-integration-type.json"
28
+ },
29
+ "uniqueItems": true
30
+ },
31
+ "nsfw": {
32
+ "type": "boolean"
33
+ }
34
+ },
35
+ "required": [
36
+ "type",
37
+ "name"
38
+ ],
39
+ "additionalProperties": false
40
+ }
@@ -0,0 +1,7 @@
1
+ export declare const contextMenuNameSchema: {
2
+ readonly $id: "https://schema.went.tf/discord-bot-framework/context-menu-name.json";
3
+ readonly description: "Discord's name pattern for USER/MESSAGE context-menu commands - mixed case allowed, spaces allowed, 1-32 characters. Narrowed to ASCII for the same regex-flag reason documented in option-name.schema.ts.";
4
+ readonly type: "string";
5
+ readonly pattern: "^[-' _a-zA-Z0-9]{1,32}$";
6
+ };
7
+ //# sourceMappingURL=context-menu-name.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu-name.schema.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/context-menu-name.schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;CAMxB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const contextMenuNameSchema = {
2
+ $id: 'https://schema.went.tf/discord-bot-framework/context-menu-name.json',
3
+ description: "Discord's name pattern for USER/MESSAGE context-menu commands - mixed case allowed, spaces allowed, 1-32 characters. Narrowed to ASCII for the same regex-flag reason documented in option-name.schema.ts.",
4
+ type: 'string',
5
+ pattern: "^[-' _a-zA-Z0-9]{1,32}$",
6
+ };
7
+ //# sourceMappingURL=context-menu-name.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu-name.schema.js","sourceRoot":"","sources":["../../../src/commands/schema/context-menu-name.schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,qEAAqE;IAC1E,WAAW,EACT,4MAA4M;IAC9M,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,yBAAyB;CAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "$id": "https://schema.went.tf/discord-bot-framework/context-menu-name.json",
3
+ "description": "Discord's name pattern for USER/MESSAGE context-menu commands - mixed case allowed, spaces allowed, 1-32 characters. Narrowed to ASCII for the same regex-flag reason documented in option-name.schema.ts.",
4
+ "type": "string",
5
+ "pattern": "^[-' _a-zA-Z0-9]{1,32}$"
6
+ }
@@ -0,0 +1,7 @@
1
+ export declare const defaultMemberPermissionsSchema: {
2
+ readonly $id: "https://schema.went.tf/discord-bot-framework/default-member-permissions.json";
3
+ readonly description: "Discord sends default_member_permissions as a stringified permissions bitfield integer.";
4
+ readonly type: "string";
5
+ readonly pattern: "^-?[0-9]+$";
6
+ };
7
+ //# sourceMappingURL=default-member-permissions.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-member-permissions.schema.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/default-member-permissions.schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B;;;;;CAKjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const defaultMemberPermissionsSchema = {
2
+ $id: 'https://schema.went.tf/discord-bot-framework/default-member-permissions.json',
3
+ description: 'Discord sends default_member_permissions as a stringified permissions bitfield integer.',
4
+ type: 'string',
5
+ pattern: '^-?[0-9]+$',
6
+ };
7
+ //# sourceMappingURL=default-member-permissions.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-member-permissions.schema.js","sourceRoot":"","sources":["../../../src/commands/schema/default-member-permissions.schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,GAAG,EAAE,8EAA8E;IACnF,WAAW,EAAE,yFAAyF;IACtG,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,YAAY;CACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "$id": "https://schema.went.tf/discord-bot-framework/default-member-permissions.json",
3
+ "description": "Discord sends default_member_permissions as a stringified permissions bitfield integer.",
4
+ "type": "string",
5
+ "pattern": "^-?[0-9]+$"
6
+ }
@@ -0,0 +1,77 @@
1
+ import type { Ajv } from 'ajv';
2
+ import type { FromSchema } from 'json-schema-to-ts';
3
+ import { applicationCommandLeafOptionSchema } from './application-command-leaf-option.schema.js';
4
+ import { applicationCommandOptionChoiceSchema } from './application-command-option-choice.schema.js';
5
+ import { applicationCommandOptionSchema } from './application-command-option.schema.js';
6
+ import { applicationCommandSubcommandGroupSchema } from './application-command-subcommand-group.schema.js';
7
+ import { applicationCommandSubcommandSchema } from './application-command-subcommand.schema.js';
8
+ import { applicationCommandTypeSchema } from './application-command-type.schema.js';
9
+ import { applicationIntegrationTypeSchema } from './application-integration-type.schema.js';
10
+ import { channelTypeSchema } from './channel-type.schema.js';
11
+ import { chatInputCommandSchema } from './chat-input-command.schema.js';
12
+ import { commandsFileSchema } from './commands-file.schema.js';
13
+ import { contextMenuCommandSchema } from './context-menu-command.schema.js';
14
+ import { contextMenuNameSchema } from './context-menu-name.schema.js';
15
+ import { defaultMemberPermissionsSchema } from './default-member-permissions.schema.js';
16
+ import { interactionContextTypeSchema } from './interaction-context-type.schema.js';
17
+ import { optionNameSchema } from './option-name.schema.js';
18
+ export { parseCommandsFile } from './parse-commands-file.js';
19
+ export type { ParseCommandsFileOptions } from './parse-commands-file.js';
20
+ export { applicationCommandTypeSchema, interactionContextTypeSchema, applicationIntegrationTypeSchema, channelTypeSchema, optionNameSchema, contextMenuNameSchema, applicationCommandOptionChoiceSchema, defaultMemberPermissionsSchema, applicationCommandLeafOptionSchema, applicationCommandSubcommandSchema, applicationCommandSubcommandGroupSchema, applicationCommandOptionSchema, chatInputCommandSchema, contextMenuCommandSchema, commandsFileSchema, };
21
+ /**
22
+ * Registers every generic fragment this package ships onto a bot's own ajv
23
+ * instance, so the bot's own composed commands.schema.json can `$ref` them
24
+ * by `$id`. Call this before `ajv.compile()`-ing the bot's own schema.
25
+ */
26
+ export declare function registerFrameworkSchemas(ajv: Ajv): void;
27
+ export type ApplicationCommandOptionChoice = FromSchema<typeof applicationCommandOptionChoiceSchema>;
28
+ export type ApplicationCommandLeafOption = FromSchema<typeof applicationCommandLeafOptionSchema, {
29
+ references: [typeof optionNameSchema, typeof applicationCommandOptionChoiceSchema, typeof channelTypeSchema];
30
+ }>;
31
+ export type ApplicationCommandSubcommand = FromSchema<typeof applicationCommandSubcommandSchema, {
32
+ references: [typeof optionNameSchema, typeof applicationCommandLeafOptionSchema, typeof applicationCommandOptionChoiceSchema, typeof channelTypeSchema];
33
+ }>;
34
+ export type ApplicationCommandSubcommandGroup = FromSchema<typeof applicationCommandSubcommandGroupSchema, {
35
+ references: [
36
+ typeof optionNameSchema,
37
+ typeof applicationCommandSubcommandSchema,
38
+ typeof applicationCommandLeafOptionSchema,
39
+ typeof applicationCommandOptionChoiceSchema,
40
+ typeof channelTypeSchema
41
+ ];
42
+ }>;
43
+ type ApplicationCommandOptionReferences = [
44
+ typeof optionNameSchema,
45
+ typeof applicationCommandLeafOptionSchema,
46
+ typeof applicationCommandSubcommandSchema,
47
+ typeof applicationCommandSubcommandGroupSchema,
48
+ typeof applicationCommandOptionChoiceSchema,
49
+ typeof channelTypeSchema
50
+ ];
51
+ export type ApplicationCommandOption = FromSchema<typeof applicationCommandOptionSchema, {
52
+ references: ApplicationCommandOptionReferences;
53
+ }>;
54
+ export type ChatInputCommandFileEntry = FromSchema<typeof chatInputCommandSchema, {
55
+ references: [
56
+ ...ApplicationCommandOptionReferences,
57
+ typeof applicationCommandOptionSchema,
58
+ typeof defaultMemberPermissionsSchema,
59
+ typeof interactionContextTypeSchema,
60
+ typeof applicationIntegrationTypeSchema
61
+ ];
62
+ }>;
63
+ export type ContextMenuCommandFileEntry = FromSchema<typeof contextMenuCommandSchema, {
64
+ references: [typeof contextMenuNameSchema, typeof defaultMemberPermissionsSchema, typeof interactionContextTypeSchema, typeof applicationIntegrationTypeSchema];
65
+ }>;
66
+ export type CommandFileEntry = ChatInputCommandFileEntry | ContextMenuCommandFileEntry;
67
+ /**
68
+ * Composed from the already-derived per-entry types rather than a second
69
+ * `FromSchema<typeof commandsFileSchema, ...>` call - deriving the whole-file
70
+ * array type by re-walking the same deeply-nested option oneOf structure one
71
+ * level up hits TS's type-instantiation depth limit (TS2589), confirmed
72
+ * during implementation. `commandsFileSchema` itself remains the runtime
73
+ * source of truth for ajv validation; only its *type* derivation is composed
74
+ * this way.
75
+ */
76
+ export type CommandsFile = readonly CommandFileEntry[];
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { applicationCommandLeafOptionSchema } from './application-command-leaf-option.schema.js';
2
+ import { applicationCommandOptionChoiceSchema } from './application-command-option-choice.schema.js';
3
+ import { applicationCommandOptionSchema } from './application-command-option.schema.js';
4
+ import { applicationCommandSubcommandGroupSchema } from './application-command-subcommand-group.schema.js';
5
+ import { applicationCommandSubcommandSchema } from './application-command-subcommand.schema.js';
6
+ import { applicationCommandTypeSchema } from './application-command-type.schema.js';
7
+ import { applicationIntegrationTypeSchema } from './application-integration-type.schema.js';
8
+ import { channelTypeSchema } from './channel-type.schema.js';
9
+ import { chatInputCommandSchema } from './chat-input-command.schema.js';
10
+ import { commandsFileSchema } from './commands-file.schema.js';
11
+ import { contextMenuCommandSchema } from './context-menu-command.schema.js';
12
+ import { contextMenuNameSchema } from './context-menu-name.schema.js';
13
+ import { defaultMemberPermissionsSchema } from './default-member-permissions.schema.js';
14
+ import { interactionContextTypeSchema } from './interaction-context-type.schema.js';
15
+ import { optionNameSchema } from './option-name.schema.js';
16
+ export { parseCommandsFile } from './parse-commands-file.js';
17
+ export { applicationCommandTypeSchema, interactionContextTypeSchema, applicationIntegrationTypeSchema, channelTypeSchema, optionNameSchema, contextMenuNameSchema, applicationCommandOptionChoiceSchema, defaultMemberPermissionsSchema, applicationCommandLeafOptionSchema, applicationCommandSubcommandSchema, applicationCommandSubcommandGroupSchema, applicationCommandOptionSchema, chatInputCommandSchema, contextMenuCommandSchema, commandsFileSchema, };
18
+ /** Every fragment this package ships, in an order safe to `ajv.addSchema()` sequentially. */
19
+ const frameworkSchemas = [
20
+ applicationCommandTypeSchema,
21
+ interactionContextTypeSchema,
22
+ applicationIntegrationTypeSchema,
23
+ channelTypeSchema,
24
+ optionNameSchema,
25
+ contextMenuNameSchema,
26
+ applicationCommandOptionChoiceSchema,
27
+ defaultMemberPermissionsSchema,
28
+ applicationCommandLeafOptionSchema,
29
+ applicationCommandSubcommandSchema,
30
+ applicationCommandSubcommandGroupSchema,
31
+ applicationCommandOptionSchema,
32
+ chatInputCommandSchema,
33
+ contextMenuCommandSchema,
34
+ commandsFileSchema,
35
+ ];
36
+ /**
37
+ * Registers every generic fragment this package ships onto a bot's own ajv
38
+ * instance, so the bot's own composed commands.schema.json can `$ref` them
39
+ * by `$id`. Call this before `ajv.compile()`-ing the bot's own schema.
40
+ */
41
+ export function registerFrameworkSchemas(ajv) {
42
+ for (const schema of frameworkSchemas) {
43
+ if (!ajv.getSchema(schema.$id)) {
44
+ ajv.addSchema(schema);
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/schema/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AACjG,OAAO,EAAE,oCAAoC,EAAE,MAAM,+CAA+C,CAAC;AACrG,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AAC3G,OAAO,EAAE,kCAAkC,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,EAChC,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,oCAAoC,EACpC,8BAA8B,EAC9B,kCAAkC,EAClC,kCAAkC,EAClC,uCAAuC,EACvC,8BAA8B,EAC9B,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,GACnB,CAAC;AAEF,6FAA6F;AAC7F,MAAM,gBAAgB,GAAG;IACvB,4BAA4B;IAC5B,4BAA4B;IAC5B,gCAAgC;IAChC,iBAAiB;IACjB,gBAAgB;IAChB,qBAAqB;IACrB,oCAAoC;IACpC,8BAA8B;IAC9B,kCAAkC;IAClC,kCAAkC;IAClC,uCAAuC;IACvC,8BAA8B;IAC9B,sBAAsB;IACtB,wBAAwB;IACxB,kBAAkB;CACV,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAQ;IAC/C,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const interactionContextTypeSchema: {
2
+ readonly $id: "https://schema.went.tf/discord-bot-framework/interaction-context-type.json";
3
+ readonly description: "InteractionContextType (discord-api-types): 0 Guild, 1 BotDM, 2 PrivateChannel.";
4
+ readonly enum: readonly [0, 1, 2];
5
+ };
6
+ //# sourceMappingURL=interaction-context-type.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-context-type.schema.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/interaction-context-type.schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const interactionContextTypeSchema = {
2
+ $id: 'https://schema.went.tf/discord-bot-framework/interaction-context-type.json',
3
+ description: 'InteractionContextType (discord-api-types): 0 Guild, 1 BotDM, 2 PrivateChannel.',
4
+ enum: [0, 1, 2],
5
+ };
6
+ //# sourceMappingURL=interaction-context-type.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-context-type.schema.js","sourceRoot":"","sources":["../../../src/commands/schema/interaction-context-type.schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,GAAG,EAAE,4EAA4E;IACjF,WAAW,EAAE,iFAAiF;IAC9F,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "$id": "https://schema.went.tf/discord-bot-framework/interaction-context-type.json",
3
+ "description": "InteractionContextType (discord-api-types): 0 Guild, 1 BotDM, 2 PrivateChannel.",
4
+ "enum": [
5
+ 0,
6
+ 1,
7
+ 2
8
+ ]
9
+ }
@@ -0,0 +1,7 @@
1
+ export declare const optionNameSchema: {
2
+ readonly $id: "https://schema.went.tf/discord-bot-framework/option-name.json";
3
+ readonly description: "Discord's name pattern for CHAT_INPUT commands, subcommands, subcommand groups, and every option name - always lowercase regardless of the parent command's own type. Discord's real rule permits non-Latin scripts (Devanagari, Thai, any lowercase/caseless Unicode letter) via \\p{} regex classes, but JSON Schema's `pattern` keyword has no way to request the `u` RegExp flag those classes require, and ajv compiles patterns without it by default - so this is deliberately narrowed to ASCII lowercase/digits/hyphen/underscore. Bots needing non-Latin command/option names can loosen this in their own composed schema.";
4
+ readonly type: "string";
5
+ readonly pattern: "^[-_a-z0-9]{1,32}$";
6
+ };
7
+ //# sourceMappingURL=option-name.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-name.schema.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/option-name.schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;;;;;CAMnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const optionNameSchema = {
2
+ $id: 'https://schema.went.tf/discord-bot-framework/option-name.json',
3
+ description: "Discord's name pattern for CHAT_INPUT commands, subcommands, subcommand groups, and every option name - always lowercase regardless of the parent command's own type. Discord's real rule permits non-Latin scripts (Devanagari, Thai, any lowercase/caseless Unicode letter) via \\p{} regex classes, but JSON Schema's `pattern` keyword has no way to request the `u` RegExp flag those classes require, and ajv compiles patterns without it by default - so this is deliberately narrowed to ASCII lowercase/digits/hyphen/underscore. Bots needing non-Latin command/option names can loosen this in their own composed schema.",
4
+ type: 'string',
5
+ pattern: '^[-_a-z0-9]{1,32}$',
6
+ };
7
+ //# sourceMappingURL=option-name.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-name.schema.js","sourceRoot":"","sources":["../../../src/commands/schema/option-name.schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,+DAA+D;IACpE,WAAW,EACT,umBAAumB;IACzmB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,oBAAoB;CACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "$id": "https://schema.went.tf/discord-bot-framework/option-name.json",
3
+ "description": "Discord's name pattern for CHAT_INPUT commands, subcommands, subcommand groups, and every option name - always lowercase regardless of the parent command's own type. Discord's real rule permits non-Latin scripts (Devanagari, Thai, any lowercase/caseless Unicode letter) via \\p{} regex classes, but JSON Schema's `pattern` keyword has no way to request the `u` RegExp flag those classes require, and ajv compiles patterns without it by default - so this is deliberately narrowed to ASCII lowercase/digits/hyphen/underscore. Bots needing non-Latin command/option names can loosen this in their own composed schema.",
4
+ "type": "string",
5
+ "pattern": "^[-_a-z0-9]{1,32}$"
6
+ }
@@ -0,0 +1,19 @@
1
+ import type { ValidateFunction } from 'ajv';
2
+ export interface ParseCommandsFileOptions {
3
+ /**
4
+ * A pre-compiled ajv validate function for the bot's own composed
5
+ * commands.schema (e.g. from `ajv.compile(myCommandsSchema)`, after calling
6
+ * `registerFrameworkSchemas(ajv)`).
7
+ */
8
+ validate: ValidateFunction;
9
+ }
10
+ /**
11
+ * Validates already-parsed commands.json data (e.g. from a native JSON
12
+ * import, or `JSON.parse(readFileSync(...))`) against a bot-supplied ajv
13
+ * validate function, throwing one formatted error listing every failing
14
+ * path. This is the structural pass only - it runs right after parsing and
15
+ * cannot validate description-completeness, since descriptions may be
16
+ * legitimately absent pending i18n resolution in `buildApplicationCommandsBody`.
17
+ */
18
+ export declare function parseCommandsFile<T>(data: unknown, options: ParseCommandsFileOptions): T;
19
+ //# sourceMappingURL=parse-commands-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-commands-file.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/parse-commands-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAEzD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAOD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,GAAG,CAAC,CAMxF"}
@@ -0,0 +1,19 @@
1
+ const formatAjvErrors = (errors) => {
2
+ const lines = errors.map((error) => ` - ${error.instancePath || '(root)'}: ${error.message}`);
3
+ return `commands.json validation failed:\n${lines.join('\n')}`;
4
+ };
5
+ /**
6
+ * Validates already-parsed commands.json data (e.g. from a native JSON
7
+ * import, or `JSON.parse(readFileSync(...))`) against a bot-supplied ajv
8
+ * validate function, throwing one formatted error listing every failing
9
+ * path. This is the structural pass only - it runs right after parsing and
10
+ * cannot validate description-completeness, since descriptions may be
11
+ * legitimately absent pending i18n resolution in `buildApplicationCommandsBody`.
12
+ */
13
+ export function parseCommandsFile(data, options) {
14
+ if (!options.validate(data)) {
15
+ throw new Error(formatAjvErrors(options.validate.errors ?? []));
16
+ }
17
+ return data;
18
+ }
19
+ //# sourceMappingURL=parse-commands-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-commands-file.js","sourceRoot":"","sources":["../../../src/commands/schema/parse-commands-file.ts"],"names":[],"mappings":"AAWA,MAAM,eAAe,GAAG,CAAC,MAA8B,EAAU,EAAE;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,YAAY,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/F,OAAO,qCAAqC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAI,IAAa,EAAE,OAAiC;IACnF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { PrismaPg } from '@prisma/adapter-pg';
2
+ export interface CreatePostgresPrismaDbOptions {
3
+ connectionString: string;
4
+ }
5
+ /**
6
+ * Constructs a Prisma client backed by the `@prisma/adapter-pg` driver
7
+ * adapter (Prisma's Postgres-only, ORM-optional pattern). The generated
8
+ * Prisma client is always bot-specific, so its constructor is passed in
9
+ * rather than imported here. Only importing this module (the `./db`
10
+ * subpath) requires `@prisma/adapter-pg`/`@prisma/client` to be installed —
11
+ * bots that never import it don't need those peer dependencies at all.
12
+ *
13
+ * @example
14
+ * import { PrismaClient } from './generated/prisma/client.js';
15
+ * const db = createPostgresPrismaDb(PrismaClient, { connectionString: env.DATABASE_URL });
16
+ */
17
+ export declare function createPostgresPrismaDb<Client>(PrismaClientCtor: new (options: {
18
+ adapter: PrismaPg;
19
+ }) => Client, options: CreatePostgresPrismaDbOptions): Client;
20
+ //# sourceMappingURL=create-postgres-prisma-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-postgres-prisma-db.d.ts","sourceRoot":"","sources":["../../src/db/create-postgres-prisma-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,WAAW,6BAA6B;IAC5C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAC3C,gBAAgB,EAAE,KAAK,OAAO,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,KAAK,MAAM,EAChE,OAAO,EAAE,6BAA6B,GACrC,MAAM,CAER"}
@@ -0,0 +1,17 @@
1
+ import { PrismaPg } from '@prisma/adapter-pg';
2
+ /**
3
+ * Constructs a Prisma client backed by the `@prisma/adapter-pg` driver
4
+ * adapter (Prisma's Postgres-only, ORM-optional pattern). The generated
5
+ * Prisma client is always bot-specific, so its constructor is passed in
6
+ * rather than imported here. Only importing this module (the `./db`
7
+ * subpath) requires `@prisma/adapter-pg`/`@prisma/client` to be installed —
8
+ * bots that never import it don't need those peer dependencies at all.
9
+ *
10
+ * @example
11
+ * import { PrismaClient } from './generated/prisma/client.js';
12
+ * const db = createPostgresPrismaDb(PrismaClient, { connectionString: env.DATABASE_URL });
13
+ */
14
+ export function createPostgresPrismaDb(PrismaClientCtor, options) {
15
+ return new PrismaClientCtor({ adapter: new PrismaPg({ connectionString: options.connectionString }) });
16
+ }
17
+ //# sourceMappingURL=create-postgres-prisma-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-postgres-prisma-db.js","sourceRoot":"","sources":["../../src/db/create-postgres-prisma-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAM9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CACpC,gBAAgE,EAChE,OAAsC;IAEtC,OAAO,IAAI,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,QAAQ,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC;AACzG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './create-postgres-prisma-db.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './create-postgres-prisma-db.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { NestableLogger } from '../logger/index.js';
2
+ export interface HandlerWatcherOptions {
3
+ /** One or more root directories to watch recursively (e.g. `build/commands`). */
4
+ paths: string[];
5
+ /** Called once per settled file change, after debouncing. Errors are caught and logged, never thrown. */
6
+ onChange: (filePath: string) => void | Promise<void>;
7
+ /** Debounce window per file path, in ms. Default 250. */
8
+ debounceMs?: number;
9
+ /** Only invoke `onChange` for paths matching this filter. Default: matches `.js`/`.mjs`/`.cjs` (compiled output). */
10
+ filter?: (filePath: string) => boolean;
11
+ logger?: NestableLogger;
12
+ }
13
+ export interface HandlerWatcher {
14
+ close: () => void;
15
+ }
16
+ /**
17
+ * A generic, dependency-free file watcher for reloading compiled handler
18
+ * implementations in development. It only watches paths, debounces/coalesces
19
+ * fs events per file, and invokes `onChange` — it has no opinion on how to
20
+ * re-import a module or merge it into a registry, since that varies per bot.
21
+ */
22
+ export declare function createHandlerWatcher(options: HandlerWatcherOptions): HandlerWatcher;
23
+ //# sourceMappingURL=create-handler-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-handler-watcher.d.ts","sourceRoot":"","sources":["../../src/dev/create-handler-watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yGAAyG;IACzG,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qHAAqH;IACrH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAKD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA8CnF"}
@@ -0,0 +1,55 @@
1
+ import { watch } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ const DEFAULT_DEBOUNCE_MS = 250;
4
+ const DEFAULT_FILTER = (filePath) => /\.(m|c)?js$/.test(filePath);
5
+ /**
6
+ * A generic, dependency-free file watcher for reloading compiled handler
7
+ * implementations in development. It only watches paths, debounces/coalesces
8
+ * fs events per file, and invokes `onChange` — it has no opinion on how to
9
+ * re-import a module or merge it into a registry, since that varies per bot.
10
+ */
11
+ export function createHandlerWatcher(options) {
12
+ const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
13
+ const filter = options.filter ?? DEFAULT_FILTER;
14
+ const timers = new Map();
15
+ const watchers = [];
16
+ const scheduleChange = (filePath) => {
17
+ if (!filter(filePath))
18
+ return;
19
+ const existing = timers.get(filePath);
20
+ if (existing)
21
+ clearTimeout(existing);
22
+ timers.set(filePath, setTimeout(() => {
23
+ timers.delete(filePath);
24
+ Promise.resolve()
25
+ .then(() => options.onChange(filePath))
26
+ .catch((error) => {
27
+ options.logger?.error(`Handler watcher onChange callback threw (file=${filePath})`, error);
28
+ });
29
+ }, debounceMs));
30
+ };
31
+ for (const root of options.paths) {
32
+ const absoluteRoot = resolve(root);
33
+ const watcher = watch(absoluteRoot, { recursive: true }, (_eventType, filename) => {
34
+ if (!filename)
35
+ return;
36
+ scheduleChange(resolve(absoluteRoot, filename.toString()));
37
+ });
38
+ watcher.on('error', (error) => {
39
+ options.logger?.error(`Handler watcher failed for path (path=${absoluteRoot})`, error);
40
+ });
41
+ watchers.push(watcher);
42
+ options.logger?.log(`Watching for handler changes (path=${absoluteRoot})`);
43
+ }
44
+ return {
45
+ close: () => {
46
+ for (const timer of timers.values())
47
+ clearTimeout(timer);
48
+ timers.clear();
49
+ for (const watcher of watchers)
50
+ watcher.close();
51
+ options.logger?.log('Handler watcher closed');
52
+ },
53
+ };
54
+ }
55
+ //# sourceMappingURL=create-handler-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-handler-watcher.js","sourceRoot":"","sources":["../../src/dev/create-handler-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,MAAM,QAAQ,GAAgB,EAAE,CAAC;IAEjC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAQ,EAAE;QAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO;QAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAErC,MAAM,CAAC,GAAG,CACR,QAAQ,EACR,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACtC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACxB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,iDAAiD,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7F,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,UAAU,CAAC,CACf,CAAC;IACJ,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YAChF,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YACrC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,yCAAyC,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,sCAAsC,YAAY,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK,EAAE,GAAS,EAAE;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAChD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { NestableLogger } from '../logger/index.js';
2
+ export interface SourceReloaderOptions {
3
+ /**
4
+ * Absolute path to the source root whose modules should be hot-reloaded (e.g. the
5
+ * app's `src/` directory). Anything resolved outside this root — node_modules, this
6
+ * framework, compiled output elsewhere — is left untouched and stays on Node's normal
7
+ * module cache, so singletons living there (a DB pool, the gateway client) are never
8
+ * duplicated or reconnected by a reload.
9
+ */
10
+ rootDir: string;
11
+ logger?: NestableLogger;
12
+ }
13
+ export interface SourceReloader {
14
+ /**
15
+ * Re-imports `specifier` (an absolute path or `file://` URL under `rootDir`) as a
16
+ * brand new module instance, along with every module under `rootDir` it transitively
17
+ * imports. Intended for a small, side-effect-free aggregator module (e.g. one that
18
+ * only builds command/component registries from plain object exports) — reloading a
19
+ * module with top-level side effects (opening a DB pool, connecting a client) will
20
+ * duplicate those side effects on every call.
21
+ */
22
+ reimport: <T = unknown>(specifier: string | URL) => Promise<T>;
23
+ }
24
+ /**
25
+ * Sets up cache-busted re-importing of a local module subtree for development hot
26
+ * reload, via a `module.register()` hook that tags every module resolved under
27
+ * `rootDir` with a shared, incrementing epoch — forcing Node to treat it as a new
28
+ * module instance on each `reimport()` call, without needing to restart the process
29
+ * (and, for a Discord bot, without reconnecting the gateway).
30
+ *
31
+ * Pair with `createHandlerWatcher` to trigger `reimport()` on file changes, then merge
32
+ * the returned module's exports into whatever long-lived registries/objects your
33
+ * running process already holds live references to (mutate them in place — replacing
34
+ * the binding itself isn't possible from outside the module that declared it).
35
+ */
36
+ export declare function createSourceReloader({ rootDir, logger }: SourceReloaderOptions): SourceReloader;
37
+ //# sourceMappingURL=create-source-reloader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-source-reloader.d.ts","sourceRoot":"","sources":["../../src/dev/create-source-reloader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAChE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,qBAAqB,GAAG,cAAc,CA2B/F"}