stoatx 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -5
- package/dist/index.mjs.map +1 -0
- package/package.json +4 -10
- package/dist/.tsbuildinfo +0 -1
- package/dist/decorators/Events.d.ts +0 -55
- package/dist/decorators/Events.d.ts.map +0 -1
- package/dist/decorators/Events.js +0 -71
- package/dist/decorators/Events.js.map +0 -1
- package/dist/decorators/Guard.d.ts +0 -38
- package/dist/decorators/Guard.d.ts.map +0 -1
- package/dist/decorators/Guard.js +0 -47
- package/dist/decorators/Guard.js.map +0 -1
- package/dist/decorators/SimpleCommand.d.ts +0 -35
- package/dist/decorators/SimpleCommand.d.ts.map +0 -1
- package/dist/decorators/SimpleCommand.js +0 -43
- package/dist/decorators/SimpleCommand.js.map +0 -1
- package/dist/decorators/Stoat.d.ts +0 -30
- package/dist/decorators/Stoat.d.ts.map +0 -1
- package/dist/decorators/Stoat.js +0 -39
- package/dist/decorators/Stoat.js.map +0 -1
- package/dist/decorators/index.d.ts +0 -9
- package/dist/decorators/index.d.ts.map +0 -1
- package/dist/decorators/index.js +0 -10
- package/dist/decorators/index.js.map +0 -1
- package/dist/decorators/keys.d.ts +0 -10
- package/dist/decorators/keys.d.ts.map +0 -1
- package/dist/decorators/keys.js +0 -10
- package/dist/decorators/keys.js.map +0 -1
- package/dist/decorators/store.d.ts +0 -46
- package/dist/decorators/store.d.ts.map +0 -1
- package/dist/decorators/store.js +0 -70
- package/dist/decorators/store.js.map +0 -1
- package/dist/decorators/utils.d.ts +0 -6
- package/dist/decorators/utils.d.ts.map +0 -1
- package/dist/decorators/utils.js +0 -16
- package/dist/decorators/utils.js.map +0 -1
- package/dist/decorators.d.ts +0 -9
- package/dist/decorators.d.ts.map +0 -1
- package/dist/decorators.js +0 -21
- package/dist/decorators.js.map +0 -1
- package/dist/handler.d.ts +0 -145
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.js +0 -355
- package/dist/handler.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/registry.d.ts +0 -125
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -279
- package/dist/registry.js.map +0 -1
- package/dist/types.d.ts +0 -111
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
package/dist/handler.js
DELETED
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
|
-
import { CommandRegistry } from "./registry";
|
|
3
|
-
import { Client as StoatClient } from "stoat.js";
|
|
4
|
-
/**
|
|
5
|
-
* Client - An extended Client that integrates StoatxHandler directly
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```ts
|
|
9
|
-
* import { Client } from 'stoatx';
|
|
10
|
-
*
|
|
11
|
-
* const client = new Client({
|
|
12
|
-
* prefix: '!',
|
|
13
|
-
* owners: ['owner-user-id'],
|
|
14
|
-
* });
|
|
15
|
-
*
|
|
16
|
-
* await client.initCommands();
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
export class Client extends StoatClient {
|
|
20
|
-
handler;
|
|
21
|
-
constructor(options) {
|
|
22
|
-
super();
|
|
23
|
-
this.handler = new StoatxHandler({ ...options, client: this });
|
|
24
|
-
// Automatically hook up the message handler
|
|
25
|
-
this.on("messageCreate", async (message) => {
|
|
26
|
-
await this.handler.handle(message);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Initialize the StoatxHandler commands
|
|
31
|
-
*/
|
|
32
|
-
async initCommands() {
|
|
33
|
-
await this.handler.init();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* StoatxHandler - The execution engine for commands
|
|
38
|
-
*
|
|
39
|
-
* Handles message parsing, middleware execution, and command dispatching
|
|
40
|
-
*
|
|
41
|
-
* @internal This class is not intended to be instantiated directly. Use the `Client` from `stoatx` instead.
|
|
42
|
-
*/
|
|
43
|
-
export class StoatxHandler {
|
|
44
|
-
commandsDir;
|
|
45
|
-
discoveryOptions;
|
|
46
|
-
prefixResolver;
|
|
47
|
-
owners;
|
|
48
|
-
registry;
|
|
49
|
-
cooldowns = new Map();
|
|
50
|
-
disableMentionPrefix;
|
|
51
|
-
client;
|
|
52
|
-
constructor(options) {
|
|
53
|
-
this.client = options.client;
|
|
54
|
-
this.commandsDir = options.commandsDir;
|
|
55
|
-
this.discoveryOptions = options.discovery;
|
|
56
|
-
this.prefixResolver = options.prefix;
|
|
57
|
-
this.owners = new Set(options.owners ?? []);
|
|
58
|
-
this.registry = new CommandRegistry(options.extensions);
|
|
59
|
-
this.disableMentionPrefix = options.disableMentionPrefix ?? false;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Initialize the handler - load all commands
|
|
63
|
-
*/
|
|
64
|
-
async init() {
|
|
65
|
-
if (this.commandsDir) {
|
|
66
|
-
await this.registry.loadFromDirectory(this.commandsDir);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
await this.registry.autoDiscover(this.discoveryOptions);
|
|
70
|
-
}
|
|
71
|
-
this.attachEvents();
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Attach registered events to the client
|
|
75
|
-
*/
|
|
76
|
-
attachEvents() {
|
|
77
|
-
const events = this.registry.getEvents();
|
|
78
|
-
for (const eventDef of events) {
|
|
79
|
-
const handler = async (...args) => {
|
|
80
|
-
try {
|
|
81
|
-
await eventDef.instance[eventDef.methodName](...args, this.client);
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
console.error(`[Stoatx] Event Handler Error in @${eventDef.type === "on" ? "On" : "Once"}('${eventDef.event}'):`, error);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
if (eventDef.type === "once") {
|
|
88
|
-
this.client.once(eventDef.event, handler);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
this.client.on(eventDef.event, handler);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Parse a raw message into command context
|
|
97
|
-
*/
|
|
98
|
-
async parseMessage(rawContent, message, meta) {
|
|
99
|
-
const prefix = await this.resolvePrefix(meta.serverId);
|
|
100
|
-
let usedPrefix = prefix;
|
|
101
|
-
let withoutPrefix = "";
|
|
102
|
-
// Check for string prefix
|
|
103
|
-
if (rawContent.startsWith(prefix)) {
|
|
104
|
-
withoutPrefix = rawContent.slice(prefix.length).trim();
|
|
105
|
-
usedPrefix = prefix;
|
|
106
|
-
}
|
|
107
|
-
// Check for mention prefix (e.g., "<@bot-id> command") - unless disabled
|
|
108
|
-
else if (!this.disableMentionPrefix && rawContent.match(/^<@!?[\w]+>/)) {
|
|
109
|
-
const mentionMatch = rawContent.match(/^<@!?([\w]+)>\s*/);
|
|
110
|
-
if (mentionMatch) {
|
|
111
|
-
const mentionedId = mentionMatch[1];
|
|
112
|
-
const botId = this.client.user?.id;
|
|
113
|
-
// Only process if mentioned user is the bot
|
|
114
|
-
if (botId && mentionedId === botId) {
|
|
115
|
-
usedPrefix = mentionMatch[0];
|
|
116
|
-
withoutPrefix = rawContent.slice(mentionMatch[0].length).trim();
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (!withoutPrefix) {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
const [commandName, ...args] = withoutPrefix.split(/\s+/);
|
|
126
|
-
if (!commandName) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
client: this.client,
|
|
131
|
-
content: rawContent,
|
|
132
|
-
authorId: meta.authorId,
|
|
133
|
-
channelId: meta.channelId,
|
|
134
|
-
serverId: meta.serverId,
|
|
135
|
-
args,
|
|
136
|
-
prefix: usedPrefix,
|
|
137
|
-
commandName: commandName.toLowerCase(),
|
|
138
|
-
reply: meta.reply,
|
|
139
|
-
message,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Handle a message object using the configured message adapter
|
|
144
|
-
*
|
|
145
|
-
* @example
|
|
146
|
-
* ```ts
|
|
147
|
-
* // With message adapter configured
|
|
148
|
-
* client.on('messageCreate', (message) => {
|
|
149
|
-
* handler.handle(message);
|
|
150
|
-
* });
|
|
151
|
-
* ```
|
|
152
|
-
*/
|
|
153
|
-
async handle(message) {
|
|
154
|
-
if (!message.channel || !message.author) {
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
// Skip messages from bots
|
|
158
|
-
if (message.author.bot) {
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
const rawContent = message.content;
|
|
162
|
-
const authorId = message.author.id;
|
|
163
|
-
const channelId = message.channel.id;
|
|
164
|
-
const serverId = message.server?.id;
|
|
165
|
-
const reply = async (content) => {
|
|
166
|
-
return await message.channel.sendMessage(content);
|
|
167
|
-
};
|
|
168
|
-
return this.handleMessage(rawContent, message, {
|
|
169
|
-
authorId,
|
|
170
|
-
channelId,
|
|
171
|
-
serverId,
|
|
172
|
-
reply,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Handle a raw message string with metadata
|
|
177
|
-
*
|
|
178
|
-
* @example
|
|
179
|
-
* ```ts
|
|
180
|
-
* // Manual usage without message adapter
|
|
181
|
-
* client.on('messageCreate', (message) => {
|
|
182
|
-
* handler.handleMessage(message.content, message, {
|
|
183
|
-
* authorId: message.author.id,
|
|
184
|
-
* channelId: message.channel.id,
|
|
185
|
-
* serverId: message.server?.id,
|
|
186
|
-
* reply: (content) => message.channel.sendMessage(content),
|
|
187
|
-
* });
|
|
188
|
-
* });
|
|
189
|
-
* ```
|
|
190
|
-
*/
|
|
191
|
-
async handleMessage(rawContent, message, meta) {
|
|
192
|
-
const ctx = await this.parseMessage(rawContent, message, meta);
|
|
193
|
-
if (!ctx) {
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
return this.execute(ctx);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Execute a command with the given context
|
|
200
|
-
*/
|
|
201
|
-
async execute(ctx) {
|
|
202
|
-
const registered = this.registry.get(ctx.commandName);
|
|
203
|
-
if (!registered) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
const { instance, metadata, methodName, classConstructor } = registered;
|
|
207
|
-
// Owner-only check
|
|
208
|
-
if (metadata.ownerOnly && !this.owners.has(ctx.authorId)) {
|
|
209
|
-
await ctx.reply("This command is owner-only.");
|
|
210
|
-
return false;
|
|
211
|
-
}
|
|
212
|
-
// Guard checks - use classConstructor for guard metadata
|
|
213
|
-
const guards = Reflect.getMetadata("stoatx:command:guards", classConstructor) || [];
|
|
214
|
-
for (const guardClass of guards) {
|
|
215
|
-
const guardInstance = new guardClass();
|
|
216
|
-
if (typeof guardInstance.run === "function") {
|
|
217
|
-
const guardResult = await guardInstance.run(ctx);
|
|
218
|
-
if (!guardResult) {
|
|
219
|
-
if (typeof guardInstance.guardFail === "function") {
|
|
220
|
-
await guardInstance.guardFail(ctx);
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
console.error("[Stoatx] Guard check failed but no guardFail method defined on", guardClass.name);
|
|
224
|
-
}
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
// Cooldown check
|
|
230
|
-
if (!this.checkCooldown(ctx.authorId, metadata)) {
|
|
231
|
-
const remaining = this.getRemainingCooldown(ctx.authorId, metadata);
|
|
232
|
-
// For method-based commands, check if instance has onCooldown
|
|
233
|
-
if (typeof instance.onCooldown === "function") {
|
|
234
|
-
await instance.onCooldown(ctx, remaining);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
await ctx.reply(`Please wait ${(remaining / 1000).toFixed(1)} seconds before using this command again.`);
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
try {
|
|
242
|
-
await instance[methodName](ctx);
|
|
243
|
-
// Set cooldown after successful execution
|
|
244
|
-
if (metadata.cooldown > 0) {
|
|
245
|
-
this.setCooldown(ctx.authorId, metadata);
|
|
246
|
-
}
|
|
247
|
-
return true;
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
// Handle errors
|
|
251
|
-
if (typeof instance.onError === "function") {
|
|
252
|
-
await instance.onError(ctx, error);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
console.error(`[Stoatx] Error in command ${metadata.name}:`, error);
|
|
256
|
-
await ctx.reply(`An error occurred: ${error.message}`);
|
|
257
|
-
}
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Get the command registry
|
|
263
|
-
*/
|
|
264
|
-
getRegistry() {
|
|
265
|
-
return this.registry;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Get a command by name or alias
|
|
269
|
-
*/
|
|
270
|
-
getCommand(name) {
|
|
271
|
-
return this.registry.get(name);
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Get all commands
|
|
275
|
-
*/
|
|
276
|
-
getCommands() {
|
|
277
|
-
return this.registry.getAll();
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Reload all commands
|
|
281
|
-
*/
|
|
282
|
-
async reload() {
|
|
283
|
-
this.registry.clear();
|
|
284
|
-
this.cooldowns.clear();
|
|
285
|
-
if (this.commandsDir) {
|
|
286
|
-
await this.registry.loadFromDirectory(this.commandsDir);
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
await this.registry.autoDiscover(this.discoveryOptions);
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Check if a user is an owner
|
|
293
|
-
*/
|
|
294
|
-
isOwner(userId) {
|
|
295
|
-
return this.owners.has(userId);
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Add an owner
|
|
299
|
-
*/
|
|
300
|
-
addOwner(userId) {
|
|
301
|
-
this.owners.add(userId);
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Remove an owner
|
|
305
|
-
*/
|
|
306
|
-
removeOwner(userId) {
|
|
307
|
-
this.owners.delete(userId);
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Resolve the prefix for a context
|
|
311
|
-
*/
|
|
312
|
-
async resolvePrefix(serverId) {
|
|
313
|
-
if (typeof this.prefixResolver === "function") {
|
|
314
|
-
return this.prefixResolver({ serverId });
|
|
315
|
-
}
|
|
316
|
-
return this.prefixResolver;
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Check if user is on cooldown
|
|
320
|
-
*/
|
|
321
|
-
checkCooldown(userId, metadata) {
|
|
322
|
-
if (metadata.cooldown <= 0)
|
|
323
|
-
return true;
|
|
324
|
-
const commandCooldowns = this.cooldowns.get(metadata.name);
|
|
325
|
-
if (!commandCooldowns)
|
|
326
|
-
return true;
|
|
327
|
-
const userCooldown = commandCooldowns.get(userId);
|
|
328
|
-
if (!userCooldown)
|
|
329
|
-
return true;
|
|
330
|
-
return Date.now() >= userCooldown;
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Get remaining cooldown time in ms
|
|
334
|
-
*/
|
|
335
|
-
getRemainingCooldown(userId, metadata) {
|
|
336
|
-
const commandCooldowns = this.cooldowns.get(metadata.name);
|
|
337
|
-
if (!commandCooldowns)
|
|
338
|
-
return 0;
|
|
339
|
-
const userCooldown = commandCooldowns.get(userId);
|
|
340
|
-
if (!userCooldown)
|
|
341
|
-
return 0;
|
|
342
|
-
return Math.max(0, userCooldown - Date.now());
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Set cooldown for a user
|
|
346
|
-
*/
|
|
347
|
-
setCooldown(userId, metadata) {
|
|
348
|
-
if (!this.cooldowns.has(metadata.name)) {
|
|
349
|
-
this.cooldowns.set(metadata.name, new Map());
|
|
350
|
-
}
|
|
351
|
-
const commandCooldowns = this.cooldowns.get(metadata.name);
|
|
352
|
-
commandCooldowns.set(userId, Date.now() + metadata.cooldown);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
//# sourceMappingURL=handler.js.map
|
package/dist/handler.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/registry.d.ts
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import type { CommandMetadata } from "./types";
|
|
2
|
-
interface AutoDiscoveryOptions {
|
|
3
|
-
roots?: string[];
|
|
4
|
-
include?: string[];
|
|
5
|
-
ignore?: string[];
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Stored command entry from @Stoat/@SimpleCommand registration.
|
|
9
|
-
*/
|
|
10
|
-
export interface RegisteredCommand {
|
|
11
|
-
/** Instance of the @Stoat class */
|
|
12
|
-
instance: object;
|
|
13
|
-
/** Command metadata */
|
|
14
|
-
metadata: CommandMetadata;
|
|
15
|
-
/** Method name to call */
|
|
16
|
-
methodName: string;
|
|
17
|
-
/** The original class constructor (for guard validation) */
|
|
18
|
-
classConstructor: Function;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Stored event entry from @On/@Once registration.
|
|
22
|
-
*/
|
|
23
|
-
export interface RegisteredEvent {
|
|
24
|
-
instance: object;
|
|
25
|
-
methodName: string;
|
|
26
|
-
event: string;
|
|
27
|
-
type: "on" | "once";
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* CommandRegistry - Scans directories and stores commands in a Map
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* ```ts
|
|
34
|
-
* const registry = new CommandRegistry();
|
|
35
|
-
* await registry.loadFromDirectory('./src/commands');
|
|
36
|
-
*
|
|
37
|
-
* const ping = registry.get('ping');
|
|
38
|
-
* const allCommands = registry.getAll();
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export declare class CommandRegistry {
|
|
42
|
-
private static readonly DEFAULT_AUTO_DISCOVERY_IGNORES;
|
|
43
|
-
private readonly commands;
|
|
44
|
-
private readonly aliases;
|
|
45
|
-
private readonly registeredEvents;
|
|
46
|
-
private readonly extensions;
|
|
47
|
-
private readonly processedStoatClasses;
|
|
48
|
-
constructor(extensions?: string[]);
|
|
49
|
-
/**
|
|
50
|
-
* Get the number of registered commands
|
|
51
|
-
*/
|
|
52
|
-
get size(): number;
|
|
53
|
-
/**
|
|
54
|
-
* Load commands from a directory using glob pattern matching
|
|
55
|
-
*/
|
|
56
|
-
loadFromDirectory(directory: string): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Auto-discover command files across one or more roots.
|
|
59
|
-
*/
|
|
60
|
-
autoDiscover(options?: AutoDiscoveryOptions): Promise<void>;
|
|
61
|
-
private getDefaultAutoDiscoveryPatterns;
|
|
62
|
-
private isLikelyCommandModule;
|
|
63
|
-
/**
|
|
64
|
-
* Register a command instance
|
|
65
|
-
*/
|
|
66
|
-
register(instance: object, metadata: CommandMetadata, classConstructor: Function, methodName: string): void;
|
|
67
|
-
/**
|
|
68
|
-
* Get a command by name or alias
|
|
69
|
-
*/
|
|
70
|
-
get(name: string): RegisteredCommand | undefined;
|
|
71
|
-
/**
|
|
72
|
-
* Check if a command exists
|
|
73
|
-
*/
|
|
74
|
-
has(name: string): boolean;
|
|
75
|
-
/**
|
|
76
|
-
* Get all registered commands
|
|
77
|
-
*/
|
|
78
|
-
getAll(): RegisteredCommand[];
|
|
79
|
-
/**
|
|
80
|
-
* Get all command metadata
|
|
81
|
-
*/
|
|
82
|
-
getAllMetadata(): CommandMetadata[];
|
|
83
|
-
/**
|
|
84
|
-
* Get all registered events
|
|
85
|
-
*/
|
|
86
|
-
getEvents(): RegisteredEvent[];
|
|
87
|
-
/**
|
|
88
|
-
* Get commands grouped by category
|
|
89
|
-
*/
|
|
90
|
-
getByCategory(): Map<string, RegisteredCommand[]>;
|
|
91
|
-
/**
|
|
92
|
-
* Clear all commands
|
|
93
|
-
*/
|
|
94
|
-
clear(): void;
|
|
95
|
-
/**
|
|
96
|
-
* Iterate over commands
|
|
97
|
-
*/
|
|
98
|
-
[Symbol.iterator](): IterableIterator<[string, RegisteredCommand]>;
|
|
99
|
-
/**
|
|
100
|
-
* Iterate over command values
|
|
101
|
-
*/
|
|
102
|
-
values(): IterableIterator<RegisteredCommand>;
|
|
103
|
-
/**
|
|
104
|
-
* Iterate over command names
|
|
105
|
-
*/
|
|
106
|
-
keys(): IterableIterator<string>;
|
|
107
|
-
/**
|
|
108
|
-
* Validate that all guards on a command implement the required methods
|
|
109
|
-
* @param commandClass
|
|
110
|
-
* @param commandName
|
|
111
|
-
* @private
|
|
112
|
-
*/
|
|
113
|
-
private validateGuards;
|
|
114
|
-
/**
|
|
115
|
-
* Load commands from a single file
|
|
116
|
-
*/
|
|
117
|
-
private loadFile;
|
|
118
|
-
private registerStoatClassCommands;
|
|
119
|
-
/**
|
|
120
|
-
* Derive category from file path relative to base directory
|
|
121
|
-
*/
|
|
122
|
-
private getCategoryFromPath;
|
|
123
|
-
}
|
|
124
|
-
export {};
|
|
125
|
-
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,gBAAgB,EAAE,QAAQ,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAMpD;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4B;gBAEtD,UAAU,GAAE,MAAM,EAA4B;IAI1D;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzD;;OAEG;IACG,YAAY,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCrE,OAAO,CAAC,+BAA+B;YAKzB,qBAAqB;IAenC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAsB3G;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAMhD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK1B;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE;IAI7B;;OAEG;IACH,cAAc,IAAI,eAAe,EAAE;IAInC;;OAEG;IACH,SAAS,IAAI,eAAe,EAAE;IAI9B;;OAEG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAajD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAIlE;;OAEG;IACH,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,CAAC;IAI7C;;OAEG;IACH,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;YACW,QAAQ;IAkBtB,OAAO,CAAC,0BAA0B;IA0ClC;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAU5B"}
|