meocord 4.2.1 → 4.2.3

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 (137) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/dist/cjs/_shared/{controller.decorator-XKMlcUZz.cjs → controller.decorator-hp5xdJU4.cjs} +550 -189
  3. package/dist/cjs/_shared/{startup-roots-CgfPQrNl.cjs → event-sources-DzqTODXg.cjs} +274 -88
  4. package/dist/cjs/_shared/{providers-BZgJyfZS.cjs → providers-BBvbnmLP.cjs} +837 -295
  5. package/dist/cjs/_shared/{sharded-cooldown-store-CsJJyCZd.cjs → sharded-cooldown-store-B62g5O88.cjs} +11 -9
  6. package/dist/cjs/_shared/{translate-error-BUAR1WYG.cjs → translate-error-wsgfsUET.cjs} +1 -1
  7. package/dist/cjs/common/index.cjs +4 -104
  8. package/dist/cjs/core/index.cjs +435 -182
  9. package/dist/cjs/decorator/index.cjs +116 -121
  10. package/dist/cjs/testing/index.cjs +1923 -808
  11. package/dist/cli.json +1 -1
  12. package/dist/esm/bin/app-template/package.json.template +9 -9
  13. package/dist/esm/bin/app-template/src/main.ts.template +3 -2
  14. package/dist/esm/bin/generator.js +6 -4
  15. package/dist/esm/bin/helper/filter-generator.helper.js +6 -4
  16. package/dist/esm/bin/helper/guard-generator.helper.js +6 -4
  17. package/dist/esm/bin/helper/interceptor-generator.helper.js +6 -4
  18. package/dist/esm/bin/helper/observer-generator.helper.js +6 -4
  19. package/dist/esm/bin/helper/pipe-generator.helper.js +6 -4
  20. package/dist/esm/bin/helper/service-generator.helper.js +6 -4
  21. package/dist/esm/bin/meocord.js +106 -48
  22. package/dist/esm/build/native-addons.js +75 -19
  23. package/dist/esm/build/rsbuild-config.js +11 -3
  24. package/dist/esm/build/typed-externals.js +15 -2
  25. package/dist/esm/common/cooldown-store.js +38 -14
  26. package/dist/esm/common/deprecation.js +4 -1
  27. package/dist/esm/common/execution-context.js +3 -1
  28. package/dist/esm/common/explained-error.js +7 -3
  29. package/dist/esm/common/log-level.js +13 -9
  30. package/dist/esm/common/logger.js +4 -2
  31. package/dist/esm/common/meocord-text.js +11 -6
  32. package/dist/esm/common/redis-cooldown-store.js +3 -7
  33. package/dist/esm/common/response/flags.js +17 -1
  34. package/dist/esm/common/response/install-context.js +27 -16
  35. package/dist/esm/common/response/presenter.js +7 -3
  36. package/dist/esm/common/response/response-state.js +32 -10
  37. package/dist/esm/common/sharded-cooldown-store.js +11 -9
  38. package/dist/esm/common/theme.js +3 -1
  39. package/dist/esm/common/translator.js +27 -8
  40. package/dist/esm/core/autocomplete-routes.js +26 -0
  41. package/dist/esm/core/command-conflicts.js +15 -7
  42. package/dist/esm/core/command-registration.js +15 -1
  43. package/dist/esm/core/cooldown-runner.js +7 -9
  44. package/dist/esm/core/defer.js +2 -5
  45. package/dist/esm/core/dispatcher.js +92 -66
  46. package/dist/esm/core/event-requirements.js +67 -19
  47. package/dist/esm/core/event-sources.js +100 -0
  48. package/dist/esm/core/fallback.js +3 -1
  49. package/dist/esm/core/filter-runner.js +6 -6
  50. package/dist/esm/core/guard-runner.js +173 -52
  51. package/dist/esm/core/handler-input.js +24 -3
  52. package/dist/esm/core/handler-pipeline.js +54 -32
  53. package/dist/esm/core/handler-registry.js +51 -21
  54. package/dist/esm/core/input-runner.js +7 -8
  55. package/dist/esm/core/interceptor-runner.js +4 -5
  56. package/dist/esm/core/lifecycle-hooks.js +3 -8
  57. package/dist/esm/core/lifecycle-order.js +1 -15
  58. package/dist/esm/core/meocord-classes.js +14 -1
  59. package/dist/esm/core/meocord-factory.js +83 -54
  60. package/dist/esm/core/meocord.app.js +174 -89
  61. package/dist/esm/core/message-help.js +37 -15
  62. package/dist/esm/core/message-params.js +126 -46
  63. package/dist/esm/core/message-routes.js +225 -45
  64. package/dist/esm/core/message-words.js +30 -2
  65. package/dist/esm/core/observer-runner.js +4 -2
  66. package/dist/esm/core/process-state.js +19 -0
  67. package/dist/esm/core/providers.js +39 -4
  68. package/dist/esm/core/scalar-types.js +57 -16
  69. package/dist/esm/core/shard-context.js +11 -10
  70. package/dist/esm/core/shard-exit.js +3 -3
  71. package/dist/esm/core/shard-manager.js +16 -6
  72. package/dist/esm/core/stage-scope.js +2 -1
  73. package/dist/esm/core/startup-roots.js +28 -8
  74. package/dist/esm/core/theme-resolvers.js +26 -11
  75. package/dist/esm/core/theme-runtime.js +23 -13
  76. package/dist/esm/core/theme-scope.js +31 -30
  77. package/dist/esm/core/theme-validation.js +1 -1
  78. package/dist/esm/decorator/app.decorator.js +37 -1
  79. package/dist/esm/decorator/command-builder.decorator.js +14 -0
  80. package/dist/esm/decorator/controller-class.decorator.js +1 -1
  81. package/dist/esm/decorator/controller.decorator.js +48 -19
  82. package/dist/esm/decorator/defer.decorator.js +2 -2
  83. package/dist/esm/decorator/event.decorator.js +4 -5
  84. package/dist/esm/decorator/filter.decorator.js +4 -4
  85. package/dist/esm/decorator/guard.decorator.js +4 -61
  86. package/dist/esm/decorator/inject.decorator.js +4 -1
  87. package/dist/esm/decorator/interceptor.decorator.js +2 -2
  88. package/dist/esm/decorator/theme.decorator.js +4 -3
  89. package/dist/esm/decorator/validation.decorator.js +5 -5
  90. package/dist/esm/package.json.js +1 -1
  91. package/dist/esm/testing/catalog.js +32 -25
  92. package/dist/esm/testing/cooldown-store-suite.js +3 -3
  93. package/dist/esm/testing/discord-defaults.js +449 -335
  94. package/dist/esm/testing/inspect-handler.js +91 -10
  95. package/dist/esm/testing/meocord-testing-module.js +217 -91
  96. package/dist/esm/testing/mock-fn.js +8 -2
  97. package/dist/esm/testing/mock-interaction.js +864 -124
  98. package/dist/esm/testing/response-log.js +8 -0
  99. package/dist/esm/testing/response.js +7 -5
  100. package/dist/esm/testing/routing.js +48 -6
  101. package/dist/esm/testing/strict-mocks.js +8 -4
  102. package/dist/esm/testing/theme.js +3 -2
  103. package/dist/esm/util/common.util.js +30 -9
  104. package/dist/esm/util/generator-cli.util.js +6 -4
  105. package/dist/esm/util/inherited-env.util.js +72 -13
  106. package/dist/esm/util/json.util.js +10 -3
  107. package/dist/esm/util/meocord-cli.util.js +3 -2
  108. package/dist/esm/util/meocord-config-loader.util.js +14 -1
  109. package/dist/esm/util/meocord-config-validation.util.js +13 -3
  110. package/dist/esm/util/meocord-source-config.util.js +13 -3
  111. package/dist/esm/util/platform.util.js +3 -2
  112. package/dist/esm/util/refusal.util.js +29 -11
  113. package/dist/esm/util/registration-mode.util.js +14 -1
  114. package/dist/esm/util/timer-limit.util.js +4 -1
  115. package/dist/esm/util/tsconfig-paths.util.js +38 -7
  116. package/dist/esm/util/tsconfig.util.js +16 -58
  117. package/dist/esm/util/user-text.util.js +8 -4
  118. package/dist/esm/util/value.util.js +33 -5
  119. package/dist/types/common/index.d.cts +17 -10
  120. package/dist/types/common/index.d.ts +17 -10
  121. package/dist/types/core/index.d.cts +21 -11
  122. package/dist/types/core/index.d.ts +21 -11
  123. package/dist/types/decorator/index.d.cts +63 -63
  124. package/dist/types/decorator/index.d.ts +63 -63
  125. package/dist/types/{index-DKJclIi-.d.ts → index-Brkd6QGL.d.ts} +81 -35
  126. package/dist/types/{index-Dlf0ZZtS.d.cts → index-CqXImwF_.d.cts} +81 -35
  127. package/dist/types/interface/index.d.cts +1 -1
  128. package/dist/types/interface/index.d.ts +1 -1
  129. package/dist/types/{route-Bh1U13yy.d.ts → route-IQrK-MN2.d.cts} +11 -3
  130. package/dist/types/{route-Bh1U13yy.d.cts → route-bI-okq7g.d.ts} +11 -3
  131. package/dist/types/testing/index.d.cts +158 -61
  132. package/dist/types/testing/index.d.ts +158 -61
  133. package/dist/types/{theme-resolvers-CyEz9pnv.d.cts → theme-resolvers-AtgeaYqF.d.cts} +1 -1
  134. package/dist/types/{theme-resolvers-DA204O-q.d.ts → theme-resolvers-BgqysV8d.d.ts} +1 -1
  135. package/dist/types/{translator-Bg7hwxDF.d.cts → translator-D8aydlCE.d.ts} +12 -11
  136. package/dist/types/{translator-CeP4bCzp.d.ts → translator-iJhDlgwL.d.cts} +12 -11
  137. package/package.json +5 -2
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var controller_decorator = require('./controller.decorator-XKMlcUZz.cjs');
4
+ var controller_decorator = require('./controller.decorator-hp5xdJU4.cjs');
5
5
 
6
6
  /** The `fatal` code of a shard whose app MeoCord refused, which every shard would refuse alike. */ const REFUSED_CODE = 'Refused';
7
7
  /** Whether an IPC message is one of MeoCord's own, rather than one of discord.js's. */ function isShardMessage(message) {
@@ -122,16 +122,12 @@ var controller_decorator = require('./controller.decorator-XKMlcUZz.cjs');
122
122
  * @param limit - The calls allowed, and the window they are counted over.
123
123
  * @returns Whether this call was recorded, and if not, how long until one can be.
124
124
  */ async consume(key, limit) {
125
- const { allowed, retryAfterMs } = await this.consumeMany([
125
+ return controller_decorator.singleVerdict(await this.consumeMany([
126
126
  {
127
127
  key,
128
128
  limit
129
129
  }
130
- ]);
131
- return {
132
- allowed,
133
- retryAfterMs
134
- };
130
+ ]));
135
131
  }
136
132
  /**
137
133
  * Records a call against every entry if all allow it, in one message to the manager.
@@ -170,11 +166,17 @@ var controller_decorator = require('./controller.decorator-XKMlcUZz.cjs');
170
166
  this.pending.set(id, {
171
167
  resolve: (verdict, recorded)=>{
172
168
  settle();
173
- // The manager's undo is the calls it recorded, sent back to it
174
- const release = async ()=>channel.send({
169
+ // The manager's undo is the calls it recorded, sent back once: it finds a call by key and time, so a second
170
+ // undo would take another call recorded in the same millisecond
171
+ let released = false;
172
+ const release = async ()=>{
173
+ if (released) return;
174
+ released = true;
175
+ channel.send({
175
176
  meocord: 'cooldown-release',
176
177
  recorded: recorded ?? []
177
178
  });
179
+ };
178
180
  resolve(!peek && verdict.allowed && recorded ? controller_decorator.withRelease(verdict, release) : verdict);
179
181
  },
180
182
  reject: (error)=>(settle(), reject(error))
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var controller_decorator = require('./controller.decorator-XKMlcUZz.cjs');
3
+ var controller_decorator = require('./controller.decorator-hp5xdJU4.cjs');
4
4
  var discord_js = require('discord.js');
5
5
 
6
6
  const logger = new controller_decorator.Logger('Route');
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var controller_decorator = require('../_shared/controller.decorator-XKMlcUZz.cjs');
3
+ var controller_decorator = require('../_shared/controller.decorator-hp5xdJU4.cjs');
4
4
  require('reflect-metadata');
5
- var translateError = require('../_shared/translate-error-BUAR1WYG.cjs');
6
- var shardedCooldownStore = require('../_shared/sharded-cooldown-store-CsJJyCZd.cjs');
5
+ var translateError = require('../_shared/translate-error-wsgfsUET.cjs');
6
+ var shardedCooldownStore = require('../_shared/sharded-cooldown-store-B62g5O88.cjs');
7
7
  require('../enum/index.cjs');
8
8
  require('discord.js');
9
9
  require('path');
@@ -19,106 +19,6 @@ require('node:fs');
19
19
  require('chalk');
20
20
  require('node:url');
21
21
 
22
- /** The theme role each static stands for; `errorColor` is a fault in the bot, `danger`. */ const ROLES = {
23
- primaryColor: 'primary',
24
- successColor: 'success',
25
- infoColor: 'info',
26
- errorColor: 'danger',
27
- warningColor: 'warning'
28
- };
29
- const logger = new controller_decorator.Logger('Theme');
30
- const assigned = {};
31
- /** Reads a role of the theme where it is read, warning once a run for each static read. */ function read(name) {
32
- controller_decorator.warnDeprecated(logger, `Theme.${name}`, `useTheme().colors.${ROLES[name]}`);
33
- return controller_decorator.useTheme().colors[ROLES[name]];
34
- }
35
- /** Sets a role beneath every theme an app sets; a value that is no colour is reported instead. */ function assign(name, value) {
36
- const role = ROLES[name];
37
- controller_decorator.warnDeprecated(logger, `Assigning Theme.${name}`, `colors.${role} in @MeoCord({ theme })`);
38
- const [problem] = controller_decorator.themeProblems({
39
- colors: {
40
- [role]: value
41
- }
42
- }, `Theme.${name}`);
43
- if (problem) {
44
- logger.warn(`${problem}. It was left unset.`);
45
- return;
46
- }
47
- assigned[role] = value;
48
- controller_decorator.setLegacyThemeLayer({
49
- colors: {
50
- ...assigned
51
- }
52
- });
53
- }
54
- /**
55
- * Five of the theme's colours as static properties: primary, success, info, danger and warning.
56
- *
57
- * Each one reads the matching role of the theme where it is read, `useTheme().colors`, so code written against it
58
- * follows `@MeoCord({ theme })` and `@UseTheme` with no change. Assigning one recolours MeoCord's views, as a
59
- * role beneath every theme an app sets. Reading or assigning each one logs a warning once.
60
- *
61
- * @deprecated Since 4.1, and removed in the next major version (5.0). Use `useTheme().colors` instead. Themes
62
- * follow the app, a controller and a server; set the colours in `@MeoCord({ theme })`: `primaryColor` is
63
- * `colors.primary`, `successColor` `colors.success`, `infoColor` `colors.info`, `errorColor` `colors.danger` and
64
- * `warningColor` `colors.warning`.
65
- *
66
- * @example
67
- * ```ts
68
- * // Both colour the embed with the call's primary colour; write the second in new code
69
- * new EmbedBuilder().setColor(Theme.primaryColor)
70
- * new EmbedBuilder().setColor(useTheme().colors.primary)
71
- * ```
72
- *
73
- * @group Responses
74
- */ class Theme {
75
- /**
76
- * @deprecated Since 4.1, and removed in the next major version (5.0). Use `useTheme().colors.primary` instead. It
77
- * reads the theme where it is read; set `colors.primary` in `@MeoCord({ theme })`.
78
- */ static get primaryColor() {
79
- return read('primaryColor');
80
- }
81
- static set primaryColor(value) {
82
- assign('primaryColor', value);
83
- }
84
- /**
85
- * @deprecated Since 4.1, and removed in the next major version (5.0). Use `useTheme().colors.success` instead. It
86
- * reads the theme where it is read; set `colors.success` in `@MeoCord({ theme })`.
87
- */ static get successColor() {
88
- return read('successColor');
89
- }
90
- static set successColor(value) {
91
- assign('successColor', value);
92
- }
93
- /**
94
- * @deprecated Since 4.1, and removed in the next major version (5.0). Use `useTheme().colors.info` instead. It
95
- * reads the theme where it is read; set `colors.info` in `@MeoCord({ theme })`.
96
- */ static get infoColor() {
97
- return read('infoColor');
98
- }
99
- static set infoColor(value) {
100
- assign('infoColor', value);
101
- }
102
- /**
103
- * @deprecated Since 4.1, and removed in the next major version (5.0). Use `useTheme().colors.danger` instead. It
104
- * reads the theme where it is read; set `colors.danger` in `@MeoCord({ theme })`.
105
- */ static get errorColor() {
106
- return read('errorColor');
107
- }
108
- static set errorColor(value) {
109
- assign('errorColor', value);
110
- }
111
- /**
112
- * @deprecated Since 4.1, and removed in the next major version (5.0). Use `useTheme().colors.warning` instead. It
113
- * reads the theme where it is read; set `colors.warning` in `@MeoCord({ theme })`.
114
- */ static get warningColor() {
115
- return read('warningColor');
116
- }
117
- static set warningColor(value) {
118
- assign('warningColor', value);
119
- }
120
- }
121
-
122
22
  /**
123
23
  * Creates a typed decorator for facts about a handler that guards and other stages read.
124
24
  *
@@ -247,6 +147,7 @@ exports.MemoryCooldownStore = controller_decorator.MemoryCooldownStore;
247
147
  exports.MessageUsageError = controller_decorator.MessageUsageError;
248
148
  exports.RedisCooldownStore = controller_decorator.RedisCooldownStore;
249
149
  exports.SetMetadata = controller_decorator.SetMetadata;
150
+ exports.Theme = controller_decorator.Theme;
250
151
  exports.ThemeCache = controller_decorator.ThemeCache;
251
152
  exports.Translator = controller_decorator.Translator;
252
153
  exports.UserError = controller_decorator.UserError;
@@ -264,7 +165,6 @@ exports.useTheme = controller_decorator.useTheme;
264
165
  exports.route = translateError.route;
265
166
  exports.translateError = translateError.translateError;
266
167
  exports.ShardedCooldownStore = shardedCooldownStore.ShardedCooldownStore;
267
- exports.Theme = Theme;
268
168
  exports.createMetadata = createMetadata;
269
169
  exports.createToken = createToken;
270
170
  exports.factoryProvider = factoryProvider;