Skip to content

Commit 4d3d54e

Browse files
authored
Merge pull request #268 from underctrl-io/useful-stuff
feat: add useful utilities
2 parents d5c8989 + 75adfe9 commit 4d3d54e

File tree

89 files changed

+4388
-25
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+4388
-25
lines changed

apps/website/docs/api-reference/commandkit/classes/app-command-handler.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
1313

1414
## AppCommandHandler
1515

16-
<GenerationInfo sourceFile="packages/commandkit/src/app/handlers/AppCommandHandler.ts" sourceLine="149" packageName="commandkit" />
16+
<GenerationInfo sourceFile="packages/commandkit/src/app/handlers/AppCommandHandler.ts" sourceLine="150" packageName="commandkit" />
1717

1818
Handles application commands for CommandKit, including loading, registration, and execution.
1919
Manages both slash commands and message commands with middleware support.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
---
2+
title: "AsyncQueue"
3+
isDefaultIndex: false
4+
generated: true
5+
---
6+
7+
import MemberInfo from '@site/src/components/MemberInfo';
8+
import GenerationInfo from '@site/src/components/GenerationInfo';
9+
import MemberDescription from '@site/src/components/MemberDescription';
10+
11+
<!-- This file was generated from the CommandKit source. Do not modify. Instead, re-run the "docgen" script -->
12+
13+
14+
## AsyncQueue
15+
16+
<GenerationInfo sourceFile="packages/commandkit/src/utils/useful-stuff/async-queue.ts" sourceLine="17" packageName="commandkit" />
17+
18+
19+
20+
```ts title="Signature"
21+
class AsyncQueue {
22+
constructor(options: AsyncQueueOptions = {})
23+
add(task: AsyncQueueTask<T>, signal?: AbortSignal) => Promise<T>;
24+
pause() => ;
25+
resume() => ;
26+
abort() => ;
27+
clear() => ;
28+
getRunning() => number;
29+
getPending() => number;
30+
isPaused() => boolean;
31+
isAborted() => boolean;
32+
}
33+
```
34+
35+
<div className="members-wrapper">
36+
37+
### constructor
38+
39+
<MemberInfo kind="method" type={`(options: <a href='/docs/next/api-reference/commandkit/interfaces/async-queue-options#asyncqueueoptions'>AsyncQueueOptions</a> = {}) => AsyncQueue`} />
40+
41+
42+
### add
43+
44+
<MemberInfo kind="method" type={`(task: <a href='/docs/next/api-reference/commandkit/types/async-queue-task#asyncqueuetask'>AsyncQueueTask</a>&#60;T&#62;, signal?: AbortSignal) => Promise&#60;T&#62;`} />
45+
46+
Adds a task to the queue.
47+
### pause
48+
49+
<MemberInfo kind="method" type={`() => `} />
50+
51+
Pauses the queue. No new tasks will be started until resumed.
52+
### resume
53+
54+
<MemberInfo kind="method" type={`() => `} />
55+
56+
Resumes the queue and processes pending tasks.
57+
### abort
58+
59+
<MemberInfo kind="method" type={`() => `} />
60+
61+
Aborts the queue, rejecting all pending tasks.
62+
### clear
63+
64+
<MemberInfo kind="method" type={`() => `} />
65+
66+
Clears all pending tasks from the queue.
67+
### getRunning
68+
69+
<MemberInfo kind="method" type={`() => number`} />
70+
71+
Returns the number of running tasks.
72+
### getPending
73+
74+
<MemberInfo kind="method" type={`() => number`} />
75+
76+
Returns the number of pending tasks in the queue.
77+
### isPaused
78+
79+
<MemberInfo kind="method" type={`() => boolean`} />
80+
81+
Returns true if the queue is currently paused.
82+
### isAborted
83+
84+
<MemberInfo kind="method" type={`() => boolean`} />
85+
86+
Returns true if the queue has been aborted.
87+
88+
89+
</div>

apps/website/docs/api-reference/commandkit/classes/compiler-plugin-runtime.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
1313

1414
## CompilerPluginRuntime
1515

16-
<GenerationInfo sourceFile="packages/commandkit/src/plugins/plugin-runtime/CompilerPluginRuntime.ts" sourceLine="42" packageName="commandkit" />
16+
<GenerationInfo sourceFile="packages/commandkit/src/plugins/plugin-runtime/CompilerPluginRuntime.ts" sourceLine="44" packageName="commandkit" />
1717

1818
CompilerPluginRuntime is a runtime for managing compiler plugins in CommandKit.
1919

@@ -66,7 +66,7 @@ This method must be called inside the activate() method of a plugin.
6666

6767
<MemberInfo kind="method" type={`(name: string) => `} />
6868

69-
Unregisters a template handler for a given name.
69+
Unregister a template handler for a given name.
7070
This method must be called inside the deactivate() method of a plugin.
7171
### getTemplate
7272

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: "MemoryMutexStorage"
3+
isDefaultIndex: false
4+
generated: true
5+
---
6+
7+
import MemberInfo from '@site/src/components/MemberInfo';
8+
import GenerationInfo from '@site/src/components/GenerationInfo';
9+
import MemberDescription from '@site/src/components/MemberDescription';
10+
11+
<!-- This file was generated from the CommandKit source. Do not modify. Instead, re-run the "docgen" script -->
12+
13+
14+
## MemoryMutexStorage
15+
16+
<GenerationInfo sourceFile="packages/commandkit/src/utils/useful-stuff/mutex.ts" sourceLine="53" packageName="commandkit" />
17+
18+
In-memory storage implementation for mutex locks.
19+
Suitable for single-instance applications.
20+
21+
```ts title="Signature"
22+
class MemoryMutexStorage implements MutexStorage {
23+
acquire(key: string, timeout: number = 30000, signal?: AbortSignal) => Promise<boolean>;
24+
release(key: string) => Promise<void>;
25+
isLocked(key: string) => Promise<boolean>;
26+
}
27+
```
28+
* Implements: <code><a href='/docs/next/api-reference/commandkit/interfaces/mutex-storage#mutexstorage'>MutexStorage</a></code>
29+
30+
31+
32+
<div className="members-wrapper">
33+
34+
### acquire
35+
36+
<MemberInfo kind="method" type={`(key: string, timeout: number = 30000, signal?: AbortSignal) => Promise&#60;boolean&#62;`} />
37+
38+
Attempts to acquire a lock for a given key
39+
### release
40+
41+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;void&#62;`} />
42+
43+
Releases the lock for a given key
44+
### isLocked
45+
46+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;boolean&#62;`} />
47+
48+
Checks if a lock is currently held for a given key
49+
50+
51+
</div>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: "MemoryRateLimitStorage"
3+
isDefaultIndex: false
4+
generated: true
5+
---
6+
7+
import MemberInfo from '@site/src/components/MemberInfo';
8+
import GenerationInfo from '@site/src/components/GenerationInfo';
9+
import MemberDescription from '@site/src/components/MemberDescription';
10+
11+
<!-- This file was generated from the CommandKit source. Do not modify. Instead, re-run the "docgen" script -->
12+
13+
14+
## MemoryRateLimitStorage
15+
16+
<GenerationInfo sourceFile="packages/commandkit/src/utils/useful-stuff/ratelimiter.ts" sourceLine="55" packageName="commandkit" />
17+
18+
In-memory storage implementation for rate limiting.
19+
Suitable for single-instance applications.
20+
21+
```ts title="Signature"
22+
class MemoryRateLimitStorage implements RateLimitStorage {
23+
get(key: string) => Promise<number>;
24+
set(key: string, value: number) => Promise<void>;
25+
delete(key: string) => Promise<void>;
26+
}
27+
```
28+
* Implements: <code><a href='/docs/next/api-reference/commandkit/interfaces/rate-limit-storage#ratelimitstorage'>RateLimitStorage</a></code>
29+
30+
31+
32+
<div className="members-wrapper">
33+
34+
### get
35+
36+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;number&#62;`} />
37+
38+
Retrieves the current request count for a given key
39+
### set
40+
41+
<MemberInfo kind="method" type={`(key: string, value: number) => Promise&#60;void&#62;`} />
42+
43+
Sets the request count for a given key
44+
### delete
45+
46+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;void&#62;`} />
47+
48+
Deletes the rate limit entry for a given key
49+
50+
51+
</div>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
title: "MemorySemaphoreStorage"
3+
isDefaultIndex: false
4+
generated: true
5+
---
6+
7+
import MemberInfo from '@site/src/components/MemberInfo';
8+
import GenerationInfo from '@site/src/components/GenerationInfo';
9+
import MemberDescription from '@site/src/components/MemberDescription';
10+
11+
<!-- This file was generated from the CommandKit source. Do not modify. Instead, re-run the "docgen" script -->
12+
13+
14+
## MemorySemaphoreStorage
15+
16+
<GenerationInfo sourceFile="packages/commandkit/src/utils/useful-stuff/semaphore.ts" sourceLine="62" packageName="commandkit" />
17+
18+
In-memory storage implementation for semaphore permits.
19+
Suitable for single-instance applications.
20+
21+
```ts title="Signature"
22+
class MemorySemaphoreStorage implements SemaphoreStorage {
23+
acquire(key: string, timeout: number = 30000, signal?: AbortSignal) => Promise<boolean>;
24+
release(key: string) => Promise<void>;
25+
getAvailablePermits(key: string) => Promise<number>;
26+
getTotalPermits(key: string) => Promise<number>;
27+
initialize(key: string, permits: number) => void;
28+
}
29+
```
30+
* Implements: <code><a href='/docs/next/api-reference/commandkit/interfaces/semaphore-storage#semaphorestorage'>SemaphoreStorage</a></code>
31+
32+
33+
34+
<div className="members-wrapper">
35+
36+
### acquire
37+
38+
<MemberInfo kind="method" type={`(key: string, timeout: number = 30000, signal?: AbortSignal) => Promise&#60;boolean&#62;`} />
39+
40+
Attempts to acquire a permit for a given key
41+
### release
42+
43+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;void&#62;`} />
44+
45+
Releases a permit for a given key
46+
### getAvailablePermits
47+
48+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;number&#62;`} />
49+
50+
Gets the number of available permits for a given key
51+
### getTotalPermits
52+
53+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;number&#62;`} />
54+
55+
Gets the total number of permits for a given key
56+
### initialize
57+
58+
<MemberInfo kind="method" type={`(key: string, permits: number) => void`} />
59+
60+
Initializes a semaphore with the specified number of permits
61+
62+
63+
</div>
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
title: "Mutex"
3+
isDefaultIndex: false
4+
generated: true
5+
---
6+
7+
import MemberInfo from '@site/src/components/MemberInfo';
8+
import GenerationInfo from '@site/src/components/GenerationInfo';
9+
import MemberDescription from '@site/src/components/MemberDescription';
10+
11+
<!-- This file was generated from the CommandKit source. Do not modify. Instead, re-run the "docgen" script -->
12+
13+
14+
## Mutex
15+
16+
<GenerationInfo sourceFile="packages/commandkit/src/utils/useful-stuff/mutex.ts" sourceLine="121" packageName="commandkit" />
17+
18+
Async mutex implementation that provides mutual exclusion for shared resources.
19+
Ensures only one task can access a protected resource at a time.
20+
21+
```ts title="Signature"
22+
class Mutex {
23+
constructor(options: MutexOptions = {})
24+
setStorage(storage: MutexStorage) => ;
25+
getStorage() => MutexStorage;
26+
acquire(key: string, timeout?: number, signal?: AbortSignal) => Promise<boolean>;
27+
release(key: string) => Promise<void>;
28+
isLocked(key: string) => Promise<boolean>;
29+
withLock(key: string, fn: () => Promise<T> | T, timeout?: number, signal?: AbortSignal) => Promise<T>;
30+
getConfig() => Omit<MutexOptions, 'storage'>;
31+
}
32+
```
33+
34+
<div className="members-wrapper">
35+
36+
### constructor
37+
38+
<MemberInfo kind="method" type={`(options: <a href='/docs/next/api-reference/commandkit/interfaces/mutex-options#mutexoptions'>MutexOptions</a> = {}) => Mutex`} />
39+
40+
Creates a new mutex instance
41+
### setStorage
42+
43+
<MemberInfo kind="method" type={`(storage: <a href='/docs/next/api-reference/commandkit/interfaces/mutex-storage#mutexstorage'>MutexStorage</a>) => `} />
44+
45+
Sets the storage implementation for the mutex
46+
### getStorage
47+
48+
<MemberInfo kind="method" type={`() => <a href='/docs/next/api-reference/commandkit/interfaces/mutex-storage#mutexstorage'>MutexStorage</a>`} />
49+
50+
Gets the storage implementation for the mutex
51+
### acquire
52+
53+
<MemberInfo kind="method" type={`(key: string, timeout?: number, signal?: AbortSignal) => Promise&#60;boolean&#62;`} />
54+
55+
Acquires a lock for the given key
56+
### release
57+
58+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;void&#62;`} />
59+
60+
Releases the lock for the given key
61+
### isLocked
62+
63+
<MemberInfo kind="method" type={`(key: string) => Promise&#60;boolean&#62;`} />
64+
65+
Checks if a lock is currently held for the given key
66+
### withLock
67+
68+
<MemberInfo kind="method" type={`(key: string, fn: () =&#62; Promise&#60;T&#62; | T, timeout?: number, signal?: AbortSignal) => Promise&#60;T&#62;`} />
69+
70+
Executes a function with exclusive access to the resource
71+
### getConfig
72+
73+
<MemberInfo kind="method" type={`() => Omit&#60;<a href='/docs/next/api-reference/commandkit/interfaces/mutex-options#mutexoptions'>MutexOptions</a>, 'storage'&#62;`} />
74+
75+
Gets the current configuration of the mutex
76+
77+
78+
</div>

0 commit comments

Comments
 (0)