Skip to content

Commit 4eb2523

Browse files
authored
Merge pull request #381 from underctrl-io/sqlite-job
feat: sqlite task driver
2 parents 21981b7 + 075cca7 commit 4eb2523

29 files changed

+1010
-1989
lines changed

apps/test-bot/src/app.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Client } from 'discord.js';
22
import { Logger, commandkit } from 'commandkit';
33
import { setDriver } from '@commandkit/tasks';
4-
import { HyperCronDriver } from '@commandkit/tasks/hypercron';
4+
import { SQLiteDriver } from '@commandkit/tasks/sqlite';
55
import './ai.ts';
66

77
const client = new Client({
@@ -14,7 +14,7 @@ const client = new Client({
1414
],
1515
});
1616

17-
setDriver(new HyperCronDriver());
17+
setDriver(new SQLiteDriver('./tasks.db'));
1818

1919
Logger.log('Application bootstrapped successfully!');
2020

apps/test-bot/src/app/commands/remind.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,7 @@ export const chatInput: ChatInputCommand = async (ctx) => {
3636
channelId: ctx.interaction.channelId,
3737
setAt: Date.now(),
3838
} satisfies RemindTaskData,
39-
schedule: {
40-
type: 'date',
41-
value: timeMs,
42-
},
39+
schedule: timeMs,
4340
});
4441

4542
await ctx.interaction.reply(
@@ -60,10 +57,7 @@ export const message: MessageCommand = async (ctx) => {
6057
channelId: ctx.message.channelId,
6158
setAt: Date.now(),
6259
} satisfies RemindTaskData,
63-
schedule: {
64-
type: 'date',
65-
value: timeMs,
66-
},
60+
schedule: timeMs,
6761
});
6862

6963
await ctx.message.reply(

apps/website/docs/api-reference/tasks/classes/hyper-cron-driver.mdx

Lines changed: 0 additions & 95 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
title: "SQLiteDriver"
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+
## SQLiteDriver
15+
16+
<GenerationInfo sourceFile="packages/tasks/src/drivers/sqlite.ts" sourceLine="20" packageName="@commandkit/tasks" />
17+
18+
SQLite-based persistent job queue manager for CommandKit tasks.
19+
20+
- Jobs are recoverable on restart (pending jobs from the past are run on startup)
21+
- Job data is persisted in SQLite
22+
- Supports both cron and date-based schedules (uses cron-parser for cron)
23+
24+
25+
26+
*Example*
27+
28+
```ts
29+
import { SQLiteDriver } from '@commandkit/tasks/sqlite';
30+
import { setDriver } from '@commandkit/tasks';
31+
32+
const driver = new SQLiteDriver('./tasks.db');
33+
setDriver(driver);
34+
```
35+
36+
```ts title="Signature"
37+
class SQLiteDriver implements TaskDriver {
38+
constructor(dbPath: = './commandkit-tasks.db')
39+
destroy() => ;
40+
create(task: TaskData) => Promise<string>;
41+
delete(identifier: string) => Promise<void>;
42+
setTaskRunner(runner: TaskRunner) => Promise<void>;
43+
}
44+
```
45+
* Implements: <code><a href='/docs/next/api-reference/tasks/interfaces/task-driver#taskdriver'>TaskDriver</a></code>
46+
47+
48+
49+
<div className="members-wrapper">
50+
51+
### constructor
52+
53+
<MemberInfo kind="method" type={`(dbPath: = './commandkit-tasks.db') => SQLiteDriver`} />
54+
55+
Create a new SQLiteDriver instance.
56+
### destroy
57+
58+
<MemberInfo kind="method" type={`() => `} />
59+
60+
Destroy the SQLite driver and stop the polling loop.
61+
### create
62+
63+
<MemberInfo kind="method" type={`(task: <a href='/docs/next/api-reference/tasks/interfaces/task-data#taskdata'>TaskData</a>) => Promise&#60;string&#62;`} />
64+
65+
Schedule a new job.
66+
### delete
67+
68+
<MemberInfo kind="method" type={`(identifier: string) => Promise&#60;void&#62;`} />
69+
70+
Delete a scheduled job by its ID.
71+
### setTaskRunner
72+
73+
<MemberInfo kind="method" type={`(runner: <a href='/docs/next/api-reference/tasks/types/task-runner#taskrunner'>TaskRunner</a>) => Promise&#60;void&#62;`} />
74+
75+
Set the task runner function to be called when a job is due.
76+
77+
78+
</div>

apps/website/docs/api-reference/tasks/classes/task-driver-manager.mdx

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

1414
## TaskDriverManager
1515

16-
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="27" packageName="@commandkit/tasks" />
16+
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="26" packageName="@commandkit/tasks" />
1717

1818
Manages the active task driver and provides a unified interface for task operations.
1919

@@ -27,10 +27,9 @@ any operations are performed.
2727

2828
```ts
2929
import { TaskDriverManager } from '@commandkit/tasks';
30-
import { HyperCronDriver } from '@commandkit/tasks/hypercron';
3130

3231
const manager = new TaskDriverManager();
33-
manager.setDriver(new HyperCronDriver());
32+
// Set your preferred driver here
3433

3534
// Now you can create and manage tasks
3635
const taskId = await manager.createTask({

apps/website/docs/api-reference/tasks/classes/task.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class Task<T extends Record<string, any> = Record<string, any>> {
5151
schedule: TaskSchedule | null
5252
isCron() => boolean;
5353
isDate() => boolean;
54+
timezone: string | undefined
5455
prepare(ctx: TaskContext<T>) => Promise<boolean>;
5556
execute(ctx: TaskContext<T>) => Promise<void>;
5657
}
@@ -90,6 +91,12 @@ Checks if this task uses cron-based scheduling.
9091
<MemberInfo kind="method" type={`() => boolean`} />
9192

9293
Checks if this task uses date-based scheduling.
94+
### timezone
95+
96+
<MemberInfo kind="property" type={`string | undefined`} />
97+
98+
The timezone for the task schedule.
99+
Returns undefined if no timezone is defined.
93100
### prepare
94101

95102
<MemberInfo kind="method" type={`(ctx: <a href='/docs/next/api-reference/tasks/classes/task-context#taskcontext'>TaskContext</a>&#60;T&#62;) => Promise&#60;boolean&#62;`} />

apps/website/docs/api-reference/tasks/functions/create-task.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
## createTask
1515

16-
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="135" packageName="@commandkit/tasks" />
16+
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="134" packageName="@commandkit/tasks" />
1717

1818
Creates a new scheduled task using the global driver manager.
1919

apps/website/docs/api-reference/tasks/functions/delete-task.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
## deleteTask
1515

16-
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="153" packageName="@commandkit/tasks" />
16+
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="152" packageName="@commandkit/tasks" />
1717

1818
Deletes a scheduled task using the global driver manager.
1919

apps/website/docs/api-reference/tasks/functions/set-driver.mdx

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

1414
## setDriver
1515

16-
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="112" packageName="@commandkit/tasks" />
16+
<GenerationInfo sourceFile="packages/tasks/src/driver-manager.ts" sourceLine="111" packageName="@commandkit/tasks" />
1717

1818
Sets the global task driver.
1919

@@ -25,9 +25,9 @@ This is a convenience function that sets the driver on the global task driver ma
2525

2626
```ts
2727
import { setDriver } from '@commandkit/tasks';
28-
import { HyperCronDriver } from '@commandkit/tasks/hypercron';
28+
import { SQLiteDriver } from '@commandkit/tasks/sqlite';
2929

30-
setDriver(new HyperCronDriver());
30+
setDriver(new SQLiteDriver('./tasks.db'));
3131
```
3232

3333
```ts title="Signature"

apps/website/docs/api-reference/tasks/functions/task.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
## task
1515

16-
<GenerationInfo sourceFile="packages/tasks/src/task.ts" sourceLine="130" packageName="@commandkit/tasks" />
16+
<GenerationInfo sourceFile="packages/tasks/src/task.ts" sourceLine="139" packageName="@commandkit/tasks" />
1717

1818
Creates a new task definition.
1919

0 commit comments

Comments
 (0)