@sapphire/plugin-scheduled-tasks 10.0.3-next.fe39124 → 10.0.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.
- package/CHANGELOG.md +26 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/lib/ScheduledTaskHandler.cjs +5 -5
- package/dist/cjs/lib/ScheduledTaskHandler.cjs.map +1 -1
- package/dist/esm/index.d.mts +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/lib/ScheduledTaskHandler.mjs +5 -5
- package/dist/esm/lib/ScheduledTaskHandler.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
# [@sapphire/plugin-scheduled-tasks@10.0.3](https://github.com/sapphiredev/plugins/compare/@sapphire/plugin-scheduled-tasks@10.0.2...@sapphire/plugin-scheduled-tasks@10.0.3) - (2025-05-12)
|
|
6
|
+
|
|
7
|
+
## 🐛 Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **scheduled-tasks:** Bump bullmq ([2497ce9](https://github.com/sapphiredev/plugins/commit/2497ce93f8cf1190435be240d78188fd07984baf))
|
|
10
|
+
- **scheduled-tasks:** Bump bullmq ([147893c](https://github.com/sapphiredev/plugins/commit/147893c2a295fb588b4ae61988cc6ef512452fcf))
|
|
11
|
+
- **deps:** Update all non-major dependencies ([1fc0c36](https://github.com/sapphiredev/plugins/commit/1fc0c36ed68ea90def7f172c0a0e8e5254a8b643)) ([#727](https://github.com/sapphiredev/plugins/pull/727) by @renovate[bot])
|
|
12
|
+
- **deps:** Update all non-major dependencies ([c246384](https://github.com/sapphiredev/plugins/commit/c246384416e7d80326aa11a83a40a9a253d5cb2a)) ([#723](https://github.com/sapphiredev/plugins/pull/723) by @renovate[bot])
|
|
13
|
+
- **deps:** Update all non-major dependencies ([7a67b07](https://github.com/sapphiredev/plugins/commit/7a67b070e800700d344e2b0192a41cf2f67746c0)) ([#716](https://github.com/sapphiredev/plugins/pull/716) by @renovate[bot])
|
|
14
|
+
- **deps:** Update all non-major dependencies ([c1fcec2](https://github.com/sapphiredev/plugins/commit/c1fcec227cd5b369e74025c966c794952f755904)) ([#712](https://github.com/sapphiredev/plugins/pull/712) by @renovate[bot])
|
|
15
|
+
- **deps:** Update all non-major dependencies ([214f8ce](https://github.com/sapphiredev/plugins/commit/214f8cec2dd7964fb08402a07fdd646c3a837493)) ([#710](https://github.com/sapphiredev/plugins/pull/710) by @renovate[bot])
|
|
16
|
+
- **deps:** Update all non-major dependencies ([e879702](https://github.com/sapphiredev/plugins/commit/e8797028bd02dcc33b8f60dd07547a73ac4f4125)) ([#709](https://github.com/sapphiredev/plugins/pull/709) by @renovate[bot])
|
|
17
|
+
- **deps:** Update all non-major dependencies ([cc47e19](https://github.com/sapphiredev/plugins/commit/cc47e198df63b90ae64fd9d945ba2d521d17a8f2)) ([#705](https://github.com/sapphiredev/plugins/pull/705) by @renovate[bot])
|
|
18
|
+
- **deps:** Update all non-major dependencies ([fb563e8](https://github.com/sapphiredev/plugins/commit/fb563e8d6b9bc7e3594563ab99838a6abea9032c)) ([#704](https://github.com/sapphiredev/plugins/pull/704) by @renovate[bot])
|
|
19
|
+
- **deps:** Update all non-major dependencies ([0260b3d](https://github.com/sapphiredev/plugins/commit/0260b3db74d58768732eea448e04b81d1f6befa9)) ([#701](https://github.com/sapphiredev/plugins/pull/701) by @renovate[bot])
|
|
20
|
+
- **deps:** Update all non-major dependencies ([a7d24b1](https://github.com/sapphiredev/plugins/commit/a7d24b13d77c311c4b33c99d1aec6457504e553c)) ([#697](https://github.com/sapphiredev/plugins/pull/697) by @renovate[bot])
|
|
21
|
+
- **deps:** Update all non-major dependencies ([689cfd8](https://github.com/sapphiredev/plugins/commit/689cfd8be9e0dccce1aac838e07b77d56e5cc0fa)) ([#695](https://github.com/sapphiredev/plugins/pull/695) by @renovate[bot])
|
|
22
|
+
- **deps:** Update all non-major dependencies ([48a1e26](https://github.com/sapphiredev/plugins/commit/48a1e26ca064fcfe666b6826dacaa2c8bc7714bb)) ([#694](https://github.com/sapphiredev/plugins/pull/694) by @renovate[bot])
|
|
23
|
+
- **deps:** Update all non-major dependencies ([ebf804c](https://github.com/sapphiredev/plugins/commit/ebf804c63c55d8eb4986f70350612b0c714e79ea)) ([#688](https://github.com/sapphiredev/plugins/pull/688) by @renovate[bot])
|
|
24
|
+
- **deps:** Update all non-major dependencies ([aa2ed66](https://github.com/sapphiredev/plugins/commit/aa2ed66e38e2cae79bd9585149896205c009dd1b)) ([#684](https://github.com/sapphiredev/plugins/pull/684) by @renovate[bot])
|
|
25
|
+
- **deps:** Update all non-major dependencies ([a6eeff6](https://github.com/sapphiredev/plugins/commit/a6eeff668d57c995335e02466eb48fbcb699f3ea))
|
|
26
|
+
- **deps:** Update all non-major dependencies ([c74b327](https://github.com/sapphiredev/plugins/commit/c74b327f7e9beea3d5164f8f5e17fbd8e61f74d7)) ([#678](https://github.com/sapphiredev/plugins/pull/678) by @renovate[bot])
|
|
27
|
+
- **deps:** Update all non-major dependencies ([7c80885](https://github.com/sapphiredev/plugins/commit/7c80885f4798348b0c077d9b87117782f7af67d8)) ([#673](https://github.com/sapphiredev/plugins/pull/673) by @renovate[bot])
|
|
28
|
+
- **deps:** Update all non-major dependencies ([2f82767](https://github.com/sapphiredev/plugins/commit/2f8276724338631c4d6d8c7b553d268d5990cc74)) ([#672](https://github.com/sapphiredev/plugins/pull/672) by @renovate[bot])
|
|
29
|
+
- **deps:** Update dependency bullmq to v5.23.0 ([5dff388](https://github.com/sapphiredev/plugins/commit/5dff3882b287b69db71a752df1dea8036a77092f)) ([#652](https://github.com/sapphiredev/plugins/pull/652) by @renovate[bot])
|
|
30
|
+
|
|
5
31
|
# [@sapphire/plugin-scheduled-tasks@10.0.2](https://github.com/sapphiredev/plugins/compare/@sapphire/plugin-scheduled-tasks@10.0.1...@sapphire/plugin-scheduled-tasks@10.0.2) - (2024-11-02)
|
|
6
32
|
|
|
7
33
|
## 🐛 Bug Fixes
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -7,7 +7,7 @@ var ScheduledTaskEvents_cjs = require('./lib/types/ScheduledTaskEvents.cjs');
|
|
|
7
7
|
var _load_cjs = require('./listeners/_load.cjs');
|
|
8
8
|
|
|
9
9
|
// src/index.ts
|
|
10
|
-
var version = "10.0.3
|
|
10
|
+
var version = "10.0.3";
|
|
11
11
|
|
|
12
12
|
Object.defineProperty(exports, "loadListeners", {
|
|
13
13
|
enumerable: true,
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAwCO,IAAM,OAAkB,GAAA","file":"index.cjs","sourcesContent":["import type { ScheduledTaskHandler } from './lib/ScheduledTaskHandler';\nimport type { ScheduledTaskStore } from './lib/structures/ScheduledTaskStore';\nimport type { ScheduledTaskHandlerOptions } from './lib/types/ScheduledTaskTypes';\n\nexport * from './lib/ScheduledTaskHandler';\nexport * from './lib/structures/ScheduledTask';\nexport * from './lib/structures/ScheduledTaskStore';\nexport * from './lib/types/ScheduledTaskEvents';\nexport type * from './lib/types/ScheduledTaskTypes';\n\nexport { loadListeners } from './listeners/_load';\n\ndeclare module '@sapphire/pieces' {\n\tinterface Container {\n\t\ttasks: ScheduledTaskHandler;\n\t}\n\n\tinterface StoreRegistryEntries {\n\t\t'scheduled-tasks': ScheduledTaskStore;\n\t}\n}\n\ndeclare module 'discord.js' {\n\texport interface ClientOptions {\n\t\ttasks: ScheduledTaskHandlerOptions;\n\t\t/**\n\t\t * If the the pre-included scheduled task error listeners should be loaded\n\t\t * @default true\n\t\t */\n\t\tloadScheduledTaskErrorListeners?: boolean;\n\t}\n}\n\n/**\n * The [@sapphire/plugin-scheduled-tasks](https://github.com/sapphiredev/plugins/blob/main/packages/scheduled-tasks) version that you are currently using.\n * An example use of this is showing it of in a bot information command.\n *\n * Note to Sapphire developers: This needs to explicitly be `string` so it is not typed as the string that gets replaced by esbuild\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const version: string = '10.0.3
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAwCO,IAAM,OAAkB,GAAA","file":"index.cjs","sourcesContent":["import type { ScheduledTaskHandler } from './lib/ScheduledTaskHandler';\nimport type { ScheduledTaskStore } from './lib/structures/ScheduledTaskStore';\nimport type { ScheduledTaskHandlerOptions } from './lib/types/ScheduledTaskTypes';\n\nexport * from './lib/ScheduledTaskHandler';\nexport * from './lib/structures/ScheduledTask';\nexport * from './lib/structures/ScheduledTaskStore';\nexport * from './lib/types/ScheduledTaskEvents';\nexport type * from './lib/types/ScheduledTaskTypes';\n\nexport { loadListeners } from './listeners/_load';\n\ndeclare module '@sapphire/pieces' {\n\tinterface Container {\n\t\ttasks: ScheduledTaskHandler;\n\t}\n\n\tinterface StoreRegistryEntries {\n\t\t'scheduled-tasks': ScheduledTaskStore;\n\t}\n}\n\ndeclare module 'discord.js' {\n\texport interface ClientOptions {\n\t\ttasks: ScheduledTaskHandlerOptions;\n\t\t/**\n\t\t * If the the pre-included scheduled task error listeners should be loaded\n\t\t * @default true\n\t\t */\n\t\tloadScheduledTaskErrorListeners?: boolean;\n\t}\n}\n\n/**\n * The [@sapphire/plugin-scheduled-tasks](https://github.com/sapphiredev/plugins/blob/main/packages/scheduled-tasks) version that you are currently using.\n * An example use of this is showing it of in a bot information command.\n *\n * Note to Sapphire developers: This needs to explicitly be `string` so it is not typed as the string that gets replaced by esbuild\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const version: string = '10.0.3';\n"]}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -103,7 +103,7 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
103
103
|
* @param tasks - An optional array of tasks to create. If not provided, it will create tasks based on the stored repeated tasks.
|
|
104
104
|
*/
|
|
105
105
|
async createRepeated(tasks) {
|
|
106
|
-
if (tasks ===
|
|
106
|
+
if (tasks === void 0) {
|
|
107
107
|
const repeatedTasks = this.store.repeatedTasks.map((piece) => ({
|
|
108
108
|
name: piece.name,
|
|
109
109
|
options: {
|
|
@@ -158,7 +158,7 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
158
158
|
*/
|
|
159
159
|
async get(id) {
|
|
160
160
|
const job = await __privateGet(this, _client).getJob(id);
|
|
161
|
-
if (utilities.isNullish(job)) return
|
|
161
|
+
if (utilities.isNullish(job)) return void 0;
|
|
162
162
|
return job;
|
|
163
163
|
}
|
|
164
164
|
/**
|
|
@@ -173,7 +173,7 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
173
173
|
const piece = this.store.get(task.name);
|
|
174
174
|
if (!piece) {
|
|
175
175
|
framework.container.client.emit(ScheduledTaskEvents_cjs.ScheduledTaskEvents.ScheduledTaskNotFound, taskName, payload);
|
|
176
|
-
return
|
|
176
|
+
return void 0;
|
|
177
177
|
}
|
|
178
178
|
const result = await framework.Result.fromAsync(async () => {
|
|
179
179
|
framework.container.client.emit(ScheduledTaskEvents_cjs.ScheduledTaskEvents.ScheduledTaskRun, piece, payload);
|
|
@@ -193,12 +193,12 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
193
193
|
}
|
|
194
194
|
resolveTask(task) {
|
|
195
195
|
if (typeof task === "string") {
|
|
196
|
-
return { name: task, payload:
|
|
196
|
+
return { name: task, payload: void 0 };
|
|
197
197
|
}
|
|
198
198
|
if ("payload" in task) {
|
|
199
199
|
return { name: task.name, payload: task.payload };
|
|
200
200
|
}
|
|
201
|
-
return { name: task.name, payload:
|
|
201
|
+
return { name: task.name, payload: void 0 };
|
|
202
202
|
}
|
|
203
203
|
};
|
|
204
204
|
_client = new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/ScheduledTaskHandler.ts"],"names":["Queue","Worker","isNotConnectionError","container","ScheduledTaskEvents","isNullish","Result","stopwatch","Stopwatch"],"mappings":"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","file":"ScheduledTaskHandler.cjs","sourcesContent":["import { container, Result } from '@sapphire/framework';\nimport { Stopwatch } from '@sapphire/stopwatch';\nimport { Job, Queue, Worker, type JobsOptions, type QueueOptions, isNotConnectionError } from 'bullmq';\nimport type { ScheduledTaskStore } from './structures/ScheduledTaskStore';\nimport { ScheduledTaskEvents } from './types/ScheduledTaskEvents';\nimport type {\n\tBullClient,\n\tScheduledTaskCreateRepeatedTask,\n\tScheduledTaskHandlerOptions,\n\tScheduledTaskListOptions,\n\tScheduledTaskListRepeatedOptions,\n\tScheduledTaskListRepeatedReturnType,\n\tScheduledTasksResolvable,\n\tScheduledTasksKeys,\n\tScheduledTasksTaskOptions,\n\tScheduledTasksKeysNoPayload,\n\tScheduledTasksJob,\n\tScheduledTasksResolvablePayload,\n\tScheduledTasksPayload\n} from './types/ScheduledTaskTypes';\nimport { isNullish } from '@sapphire/utilities';\n\nexport class ScheduledTaskHandler {\n\t/**\n\t * The queue options for the scheduled task handler.\n\t */\n\tpublic readonly options: QueueOptions;\n\n\t/**\n\t * The name of the queue associated with the scheduled task handler.\n\t */\n\tpublic readonly queue: string;\n\n\t#client: BullClient;\n\t#worker: Worker;\n\n\tpublic constructor(options: ScheduledTaskHandlerOptions) {\n\t\tthis.queue = options.queue ?? 'scheduled-tasks';\n\t\tthis.options = options.bull;\n\n\t\tthis.#client = new Queue(this.queue, this.options);\n\t\tthis.#worker = new Worker(\n\t\t\tthis.queue, //\n\t\t\tasync (job) => this.run({ name: job.name as ScheduledTasksKeys, payload: job.data }),\n\t\t\t{ connection: this.options.connection }\n\t\t);\n\n\t\tthis.#client.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyClientError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t\tthis.#worker.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyWorkerError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic get client(): BullClient {\n\t\treturn this.#client;\n\t}\n\n\t/**\n\t * Closes the internal client and worker.\n\t */\n\tpublic async close(): Promise<void> {\n\t\tawait Promise.all([\n\t\t\tthis.#client.close(), //\n\t\t\tthis.#worker.close()\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a scheduled task.\n\t *\n\t * @param task - The task to be scheduled.\n\t * @param options - The options for the task.\n\t */\n\tpublic async create<T extends ScheduledTasksResolvable>(\n\t\ttask: T, //\n\t\toptions?: ScheduledTasksTaskOptions | number\n\t): Promise<ScheduledTasksJob<T>> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\n\t\tif (isNullish(options)) {\n\t\t\treturn this.#client.add(taskName, payload) as Promise<ScheduledTasksJob<T>>;\n\t\t}\n\n\t\tif (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\trepeated: false,\n\t\t\t\tdelay: options\n\t\t\t};\n\t\t}\n\n\t\tconst { repeated, pattern, interval, delay, customJobOptions, timezone } = options;\n\t\tlet jobOptions: JobsOptions = {\n\t\t\tdelay,\n\t\t\t...customJobOptions\n\t\t};\n\n\t\tif (repeated) {\n\t\t\tjobOptions = {\n\t\t\t\t...jobOptions,\n\t\t\t\trepeat: interval //\n\t\t\t\t\t? { every: interval }\n\t\t\t\t\t: { pattern, tz: timezone }\n\t\t\t};\n\t\t}\n\n\t\treturn this.#client.add(taskName, payload, jobOptions) as Promise<ScheduledTasksJob<T>>;\n\t}\n\n\t/**\n\t * Creates repeated tasks.\n\t *\n\t * @param tasks - An optional array of tasks to create. If not provided, it will create tasks based on the stored repeated tasks.\n\t */\n\tpublic async createRepeated(tasks?: ScheduledTaskCreateRepeatedTask[]): Promise<void> {\n\t\tif (tasks === undefined) {\n\t\t\tconst repeatedTasks: ScheduledTaskCreateRepeatedTask[] = this.store.repeatedTasks.map((piece) => ({\n\t\t\t\tname: piece.name as ScheduledTasksKeysNoPayload,\n\t\t\t\toptions: {\n\t\t\t\t\trepeated: true,\n\t\t\t\t\t...(piece.interval\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinterval: piece.interval,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tpattern: piece.pattern!,\n\t\t\t\t\t\t\t\ttimezone: piece.timezone,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\ttasks = repeatedTasks;\n\t\t}\n\n\t\tfor (const task of tasks) {\n\t\t\tawait this.create(task.name, task.options);\n\t\t}\n\t}\n\n\t/**\n\t * Deletes a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the task to delete.\n\t */\n\tpublic async delete(id: string): Promise<void> {\n\t\tconst job = (await this.get(id as ScheduledTasksKeys)) as unknown as Job<unknown> | undefined;\n\t\treturn job?.remove();\n\t}\n\n\t/**\n\t * Retrieves a list of scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of scheduled tasks.\n\t */\n\tpublic list(options: ScheduledTaskListOptions): Promise<Job<unknown>[]> {\n\t\tconst { types, start, end, asc } = options;\n\n\t\treturn this.#client.getJobs(types, start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a list of repeated scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of repeated scheduled tasks.\n\t */\n\tpublic listRepeated(options: ScheduledTaskListRepeatedOptions): Promise<ScheduledTaskListRepeatedReturnType> {\n\t\tconst { start, end, asc } = options;\n\n\t\treturn this.#client.getRepeatableJobs(start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the scheduled task to retrieve.\n\t */\n\tpublic async get<T extends ScheduledTasksKeys>(id: T): Promise<Job<ScheduledTasksPayload<T>> | undefined> {\n\t\tconst job = await this.#client.getJob(id);\n\t\tif (isNullish(job)) return undefined;\n\n\t\treturn job as Job<ScheduledTasksPayload<T>>;\n\t}\n\n\t/**\n\t * Runs a scheduled task with the given name and payload.\n\t *\n\t * @param task - The name of the scheduled task to run.\n\t *\n\t * @remarks `undefined` will be returned if the task was not found.\n\t */\n\tpublic async run(task: ScheduledTasksResolvable): Promise<number | null | undefined> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\t\tconst piece = this.store.get(task.name);\n\n\t\tif (!piece) {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskNotFound, taskName, payload);\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskRun, piece, payload);\n\n\t\t\tconst stopwatch = new Stopwatch();\n\t\t\tconst taskRunResult = await piece.run(payload);\n\t\t\tconst { duration } = stopwatch.stop();\n\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskSuccess, piece, payload, taskRunResult, duration);\n\n\t\t\treturn duration;\n\t\t});\n\n\t\tresult.inspectErr((error) => container.client.emit(ScheduledTaskEvents.ScheduledTaskError, error, piece, payload));\n\n\t\tconst value = result.unwrapOr(null);\n\n\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskFinished, piece, value, payload);\n\n\t\treturn value;\n\t}\n\n\tprivate get store(): ScheduledTaskStore {\n\t\treturn container.client.stores.get('scheduled-tasks');\n\t}\n\n\tprivate resolveTask(task: ScheduledTasksResolvable): ScheduledTasksResolvablePayload {\n\t\tif (typeof task === 'string') {\n\t\t\treturn { name: task, payload: undefined };\n\t\t}\n\n\t\tif ('payload' in task) {\n\t\t\treturn { name: task.name, payload: task.payload };\n\t\t}\n\n\t\treturn { name: task.name, payload: undefined };\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/ScheduledTaskHandler.ts"],"names":["Queue","Worker","isNotConnectionError","container","ScheduledTaskEvents","isNullish","Result","stopwatch","Stopwatch"],"mappings":"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","file":"ScheduledTaskHandler.cjs","sourcesContent":["import { container, Result } from '@sapphire/framework';\nimport { Stopwatch } from '@sapphire/stopwatch';\nimport { Job, Queue, Worker, type JobsOptions, type QueueOptions, isNotConnectionError } from 'bullmq';\nimport type { ScheduledTaskStore } from './structures/ScheduledTaskStore';\nimport { ScheduledTaskEvents } from './types/ScheduledTaskEvents';\nimport type {\n\tBullClient,\n\tScheduledTaskCreateRepeatedTask,\n\tScheduledTaskHandlerOptions,\n\tScheduledTaskListOptions,\n\tScheduledTaskListRepeatedOptions,\n\tScheduledTaskListRepeatedReturnType,\n\tScheduledTasksResolvable,\n\tScheduledTasksKeys,\n\tScheduledTasksTaskOptions,\n\tScheduledTasksKeysNoPayload,\n\tScheduledTasksJob,\n\tScheduledTasksResolvablePayload,\n\tScheduledTasksPayload\n} from './types/ScheduledTaskTypes';\nimport { isNullish } from '@sapphire/utilities';\n\nexport class ScheduledTaskHandler {\n\t/**\n\t * The queue options for the scheduled task handler.\n\t */\n\tpublic readonly options: QueueOptions;\n\n\t/**\n\t * The name of the queue associated with the scheduled task handler.\n\t */\n\tpublic readonly queue: string;\n\n\t#client: BullClient;\n\t#worker: Worker;\n\n\tpublic constructor(options: ScheduledTaskHandlerOptions) {\n\t\tthis.queue = options.queue ?? 'scheduled-tasks';\n\t\tthis.options = options.bull;\n\n\t\tthis.#client = new Queue(this.queue, this.options);\n\t\tthis.#worker = new Worker(\n\t\t\tthis.queue, //\n\t\t\tasync (job) => this.run({ name: job.name as ScheduledTasksKeys, payload: job.data }),\n\t\t\t{ connection: this.options.connection }\n\t\t);\n\n\t\tthis.#client.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyClientError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t\tthis.#worker.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyWorkerError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic get client(): BullClient {\n\t\treturn this.#client;\n\t}\n\n\t/**\n\t * Closes the internal client and worker.\n\t */\n\tpublic async close(): Promise<void> {\n\t\tawait Promise.all([\n\t\t\tthis.#client.close(), //\n\t\t\tthis.#worker.close()\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a scheduled task.\n\t *\n\t * @param task - The task to be scheduled.\n\t * @param options - The options for the task.\n\t */\n\tpublic async create<T extends ScheduledTasksResolvable>(\n\t\ttask: T, //\n\t\toptions?: ScheduledTasksTaskOptions | number\n\t): Promise<ScheduledTasksJob<T>> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\n\t\tif (isNullish(options)) {\n\t\t\treturn this.#client.add(taskName, payload) as Promise<ScheduledTasksJob<T>>;\n\t\t}\n\n\t\tif (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\trepeated: false,\n\t\t\t\tdelay: options\n\t\t\t};\n\t\t}\n\n\t\tconst { repeated, pattern, interval, delay, customJobOptions, timezone } = options;\n\t\tlet jobOptions: JobsOptions = {\n\t\t\tdelay,\n\t\t\t...customJobOptions\n\t\t};\n\n\t\tif (repeated) {\n\t\t\tjobOptions = {\n\t\t\t\t...jobOptions,\n\t\t\t\trepeat: interval //\n\t\t\t\t\t? { every: interval }\n\t\t\t\t\t: { pattern, tz: timezone }\n\t\t\t};\n\t\t}\n\n\t\treturn this.#client.add(taskName, payload, jobOptions) as Promise<ScheduledTasksJob<T>>;\n\t}\n\n\t/**\n\t * Creates repeated tasks.\n\t *\n\t * @param tasks - An optional array of tasks to create. If not provided, it will create tasks based on the stored repeated tasks.\n\t */\n\tpublic async createRepeated(tasks?: ScheduledTaskCreateRepeatedTask[]): Promise<void> {\n\t\tif (tasks === undefined) {\n\t\t\tconst repeatedTasks: ScheduledTaskCreateRepeatedTask[] = this.store.repeatedTasks.map((piece) => ({\n\t\t\t\tname: piece.name as ScheduledTasksKeysNoPayload,\n\t\t\t\toptions: {\n\t\t\t\t\trepeated: true,\n\t\t\t\t\t...(piece.interval\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinterval: piece.interval,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tpattern: piece.pattern!,\n\t\t\t\t\t\t\t\ttimezone: piece.timezone,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\ttasks = repeatedTasks;\n\t\t}\n\n\t\tfor (const task of tasks) {\n\t\t\tawait this.create(task.name, task.options);\n\t\t}\n\t}\n\n\t/**\n\t * Deletes a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the task to delete.\n\t */\n\tpublic async delete(id: string): Promise<void> {\n\t\tconst job = (await this.get(id as ScheduledTasksKeys)) as unknown as Job<unknown> | undefined;\n\t\treturn job?.remove();\n\t}\n\n\t/**\n\t * Retrieves a list of scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of scheduled tasks.\n\t */\n\tpublic list(options: ScheduledTaskListOptions): Promise<Job<unknown>[]> {\n\t\tconst { types, start, end, asc } = options;\n\n\t\treturn this.#client.getJobs(types, start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a list of repeated scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of repeated scheduled tasks.\n\t */\n\tpublic listRepeated(options: ScheduledTaskListRepeatedOptions): Promise<ScheduledTaskListRepeatedReturnType> {\n\t\tconst { start, end, asc } = options;\n\n\t\treturn this.#client.getRepeatableJobs(start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the scheduled task to retrieve.\n\t */\n\tpublic async get<T extends ScheduledTasksKeys>(id: T): Promise<Job<ScheduledTasksPayload<T>> | undefined> {\n\t\tconst job = await this.#client.getJob(id);\n\t\tif (isNullish(job)) return undefined;\n\n\t\treturn job as Job<ScheduledTasksPayload<T>>;\n\t}\n\n\t/**\n\t * Runs a scheduled task with the given name and payload.\n\t *\n\t * @param task - The name of the scheduled task to run.\n\t *\n\t * @remarks `undefined` will be returned if the task was not found.\n\t */\n\tpublic async run(task: ScheduledTasksResolvable): Promise<number | null | undefined> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\t\tconst piece = this.store.get(task.name);\n\n\t\tif (!piece) {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskNotFound, taskName, payload);\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskRun, piece, payload);\n\n\t\t\tconst stopwatch = new Stopwatch();\n\t\t\tconst taskRunResult = await piece.run(payload);\n\t\t\tconst { duration } = stopwatch.stop();\n\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskSuccess, piece, payload, taskRunResult, duration);\n\n\t\t\treturn duration;\n\t\t});\n\n\t\tresult.inspectErr((error) => container.client.emit(ScheduledTaskEvents.ScheduledTaskError, error, piece, payload));\n\n\t\tconst value = result.unwrapOr(null);\n\n\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskFinished, piece, value, payload);\n\n\t\treturn value;\n\t}\n\n\tprivate get store(): ScheduledTaskStore {\n\t\treturn container.client.stores.get('scheduled-tasks');\n\t}\n\n\tprivate resolveTask(task: ScheduledTasksResolvable): ScheduledTasksResolvablePayload {\n\t\tif (typeof task === 'string') {\n\t\t\treturn { name: task, payload: undefined };\n\t\t}\n\n\t\tif ('payload' in task) {\n\t\t\treturn { name: task.name, payload: task.payload };\n\t\t}\n\n\t\treturn { name: task.name, payload: undefined };\n\t}\n}\n"]}
|
package/dist/esm/index.d.mts
CHANGED
package/dist/esm/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ export * from './lib/structures/ScheduledTaskStore.mjs';
|
|
|
5
5
|
export * from './lib/types/ScheduledTaskEvents.mjs';
|
|
6
6
|
export { loadListeners } from './listeners/_load.mjs';
|
|
7
7
|
|
|
8
|
-
var version = "10.0.3
|
|
8
|
+
var version = "10.0.3";
|
|
9
9
|
|
|
10
10
|
export { version };
|
|
11
11
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;AAwCO,IAAM,OAAkB,GAAA","file":"index.mjs","sourcesContent":["import type { ScheduledTaskHandler } from './lib/ScheduledTaskHandler';\nimport type { ScheduledTaskStore } from './lib/structures/ScheduledTaskStore';\nimport type { ScheduledTaskHandlerOptions } from './lib/types/ScheduledTaskTypes';\n\nexport * from './lib/ScheduledTaskHandler';\nexport * from './lib/structures/ScheduledTask';\nexport * from './lib/structures/ScheduledTaskStore';\nexport * from './lib/types/ScheduledTaskEvents';\nexport type * from './lib/types/ScheduledTaskTypes';\n\nexport { loadListeners } from './listeners/_load';\n\ndeclare module '@sapphire/pieces' {\n\tinterface Container {\n\t\ttasks: ScheduledTaskHandler;\n\t}\n\n\tinterface StoreRegistryEntries {\n\t\t'scheduled-tasks': ScheduledTaskStore;\n\t}\n}\n\ndeclare module 'discord.js' {\n\texport interface ClientOptions {\n\t\ttasks: ScheduledTaskHandlerOptions;\n\t\t/**\n\t\t * If the the pre-included scheduled task error listeners should be loaded\n\t\t * @default true\n\t\t */\n\t\tloadScheduledTaskErrorListeners?: boolean;\n\t}\n}\n\n/**\n * The [@sapphire/plugin-scheduled-tasks](https://github.com/sapphiredev/plugins/blob/main/packages/scheduled-tasks) version that you are currently using.\n * An example use of this is showing it of in a bot information command.\n *\n * Note to Sapphire developers: This needs to explicitly be `string` so it is not typed as the string that gets replaced by esbuild\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const version: string = '10.0.3
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;AAwCO,IAAM,OAAkB,GAAA","file":"index.mjs","sourcesContent":["import type { ScheduledTaskHandler } from './lib/ScheduledTaskHandler';\nimport type { ScheduledTaskStore } from './lib/structures/ScheduledTaskStore';\nimport type { ScheduledTaskHandlerOptions } from './lib/types/ScheduledTaskTypes';\n\nexport * from './lib/ScheduledTaskHandler';\nexport * from './lib/structures/ScheduledTask';\nexport * from './lib/structures/ScheduledTaskStore';\nexport * from './lib/types/ScheduledTaskEvents';\nexport type * from './lib/types/ScheduledTaskTypes';\n\nexport { loadListeners } from './listeners/_load';\n\ndeclare module '@sapphire/pieces' {\n\tinterface Container {\n\t\ttasks: ScheduledTaskHandler;\n\t}\n\n\tinterface StoreRegistryEntries {\n\t\t'scheduled-tasks': ScheduledTaskStore;\n\t}\n}\n\ndeclare module 'discord.js' {\n\texport interface ClientOptions {\n\t\ttasks: ScheduledTaskHandlerOptions;\n\t\t/**\n\t\t * If the the pre-included scheduled task error listeners should be loaded\n\t\t * @default true\n\t\t */\n\t\tloadScheduledTaskErrorListeners?: boolean;\n\t}\n}\n\n/**\n * The [@sapphire/plugin-scheduled-tasks](https://github.com/sapphiredev/plugins/blob/main/packages/scheduled-tasks) version that you are currently using.\n * An example use of this is showing it of in a bot information command.\n *\n * Note to Sapphire developers: This needs to explicitly be `string` so it is not typed as the string that gets replaced by esbuild\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const version: string = '10.0.3';\n"]}
|
|
@@ -91,7 +91,7 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
91
91
|
* @param tasks - An optional array of tasks to create. If not provided, it will create tasks based on the stored repeated tasks.
|
|
92
92
|
*/
|
|
93
93
|
async createRepeated(tasks) {
|
|
94
|
-
if (tasks ===
|
|
94
|
+
if (tasks === void 0) {
|
|
95
95
|
const repeatedTasks = this.store.repeatedTasks.map((piece) => ({
|
|
96
96
|
name: piece.name,
|
|
97
97
|
options: {
|
|
@@ -146,7 +146,7 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
146
146
|
*/
|
|
147
147
|
async get(id) {
|
|
148
148
|
const job = await __privateGet(this, _client).getJob(id);
|
|
149
|
-
if (isNullish(job)) return
|
|
149
|
+
if (isNullish(job)) return void 0;
|
|
150
150
|
return job;
|
|
151
151
|
}
|
|
152
152
|
/**
|
|
@@ -161,7 +161,7 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
161
161
|
const piece = this.store.get(task.name);
|
|
162
162
|
if (!piece) {
|
|
163
163
|
container.client.emit(ScheduledTaskEvents.ScheduledTaskNotFound, taskName, payload);
|
|
164
|
-
return
|
|
164
|
+
return void 0;
|
|
165
165
|
}
|
|
166
166
|
const result = await Result.fromAsync(async () => {
|
|
167
167
|
container.client.emit(ScheduledTaskEvents.ScheduledTaskRun, piece, payload);
|
|
@@ -181,12 +181,12 @@ var _ScheduledTaskHandler = class _ScheduledTaskHandler {
|
|
|
181
181
|
}
|
|
182
182
|
resolveTask(task) {
|
|
183
183
|
if (typeof task === "string") {
|
|
184
|
-
return { name: task, payload:
|
|
184
|
+
return { name: task, payload: void 0 };
|
|
185
185
|
}
|
|
186
186
|
if ("payload" in task) {
|
|
187
187
|
return { name: task.name, payload: task.payload };
|
|
188
188
|
}
|
|
189
|
-
return { name: task.name, payload:
|
|
189
|
+
return { name: task.name, payload: void 0 };
|
|
190
190
|
}
|
|
191
191
|
};
|
|
192
192
|
_client = new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/ScheduledTaskHandler.ts"],"names":[],"mappings":"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","file":"ScheduledTaskHandler.mjs","sourcesContent":["import { container, Result } from '@sapphire/framework';\nimport { Stopwatch } from '@sapphire/stopwatch';\nimport { Job, Queue, Worker, type JobsOptions, type QueueOptions, isNotConnectionError } from 'bullmq';\nimport type { ScheduledTaskStore } from './structures/ScheduledTaskStore';\nimport { ScheduledTaskEvents } from './types/ScheduledTaskEvents';\nimport type {\n\tBullClient,\n\tScheduledTaskCreateRepeatedTask,\n\tScheduledTaskHandlerOptions,\n\tScheduledTaskListOptions,\n\tScheduledTaskListRepeatedOptions,\n\tScheduledTaskListRepeatedReturnType,\n\tScheduledTasksResolvable,\n\tScheduledTasksKeys,\n\tScheduledTasksTaskOptions,\n\tScheduledTasksKeysNoPayload,\n\tScheduledTasksJob,\n\tScheduledTasksResolvablePayload,\n\tScheduledTasksPayload\n} from './types/ScheduledTaskTypes';\nimport { isNullish } from '@sapphire/utilities';\n\nexport class ScheduledTaskHandler {\n\t/**\n\t * The queue options for the scheduled task handler.\n\t */\n\tpublic readonly options: QueueOptions;\n\n\t/**\n\t * The name of the queue associated with the scheduled task handler.\n\t */\n\tpublic readonly queue: string;\n\n\t#client: BullClient;\n\t#worker: Worker;\n\n\tpublic constructor(options: ScheduledTaskHandlerOptions) {\n\t\tthis.queue = options.queue ?? 'scheduled-tasks';\n\t\tthis.options = options.bull;\n\n\t\tthis.#client = new Queue(this.queue, this.options);\n\t\tthis.#worker = new Worker(\n\t\t\tthis.queue, //\n\t\t\tasync (job) => this.run({ name: job.name as ScheduledTasksKeys, payload: job.data }),\n\t\t\t{ connection: this.options.connection }\n\t\t);\n\n\t\tthis.#client.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyClientError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t\tthis.#worker.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyWorkerError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic get client(): BullClient {\n\t\treturn this.#client;\n\t}\n\n\t/**\n\t * Closes the internal client and worker.\n\t */\n\tpublic async close(): Promise<void> {\n\t\tawait Promise.all([\n\t\t\tthis.#client.close(), //\n\t\t\tthis.#worker.close()\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a scheduled task.\n\t *\n\t * @param task - The task to be scheduled.\n\t * @param options - The options for the task.\n\t */\n\tpublic async create<T extends ScheduledTasksResolvable>(\n\t\ttask: T, //\n\t\toptions?: ScheduledTasksTaskOptions | number\n\t): Promise<ScheduledTasksJob<T>> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\n\t\tif (isNullish(options)) {\n\t\t\treturn this.#client.add(taskName, payload) as Promise<ScheduledTasksJob<T>>;\n\t\t}\n\n\t\tif (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\trepeated: false,\n\t\t\t\tdelay: options\n\t\t\t};\n\t\t}\n\n\t\tconst { repeated, pattern, interval, delay, customJobOptions, timezone } = options;\n\t\tlet jobOptions: JobsOptions = {\n\t\t\tdelay,\n\t\t\t...customJobOptions\n\t\t};\n\n\t\tif (repeated) {\n\t\t\tjobOptions = {\n\t\t\t\t...jobOptions,\n\t\t\t\trepeat: interval //\n\t\t\t\t\t? { every: interval }\n\t\t\t\t\t: { pattern, tz: timezone }\n\t\t\t};\n\t\t}\n\n\t\treturn this.#client.add(taskName, payload, jobOptions) as Promise<ScheduledTasksJob<T>>;\n\t}\n\n\t/**\n\t * Creates repeated tasks.\n\t *\n\t * @param tasks - An optional array of tasks to create. If not provided, it will create tasks based on the stored repeated tasks.\n\t */\n\tpublic async createRepeated(tasks?: ScheduledTaskCreateRepeatedTask[]): Promise<void> {\n\t\tif (tasks === undefined) {\n\t\t\tconst repeatedTasks: ScheduledTaskCreateRepeatedTask[] = this.store.repeatedTasks.map((piece) => ({\n\t\t\t\tname: piece.name as ScheduledTasksKeysNoPayload,\n\t\t\t\toptions: {\n\t\t\t\t\trepeated: true,\n\t\t\t\t\t...(piece.interval\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinterval: piece.interval,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tpattern: piece.pattern!,\n\t\t\t\t\t\t\t\ttimezone: piece.timezone,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\ttasks = repeatedTasks;\n\t\t}\n\n\t\tfor (const task of tasks) {\n\t\t\tawait this.create(task.name, task.options);\n\t\t}\n\t}\n\n\t/**\n\t * Deletes a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the task to delete.\n\t */\n\tpublic async delete(id: string): Promise<void> {\n\t\tconst job = (await this.get(id as ScheduledTasksKeys)) as unknown as Job<unknown> | undefined;\n\t\treturn job?.remove();\n\t}\n\n\t/**\n\t * Retrieves a list of scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of scheduled tasks.\n\t */\n\tpublic list(options: ScheduledTaskListOptions): Promise<Job<unknown>[]> {\n\t\tconst { types, start, end, asc } = options;\n\n\t\treturn this.#client.getJobs(types, start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a list of repeated scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of repeated scheduled tasks.\n\t */\n\tpublic listRepeated(options: ScheduledTaskListRepeatedOptions): Promise<ScheduledTaskListRepeatedReturnType> {\n\t\tconst { start, end, asc } = options;\n\n\t\treturn this.#client.getRepeatableJobs(start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the scheduled task to retrieve.\n\t */\n\tpublic async get<T extends ScheduledTasksKeys>(id: T): Promise<Job<ScheduledTasksPayload<T>> | undefined> {\n\t\tconst job = await this.#client.getJob(id);\n\t\tif (isNullish(job)) return undefined;\n\n\t\treturn job as Job<ScheduledTasksPayload<T>>;\n\t}\n\n\t/**\n\t * Runs a scheduled task with the given name and payload.\n\t *\n\t * @param task - The name of the scheduled task to run.\n\t *\n\t * @remarks `undefined` will be returned if the task was not found.\n\t */\n\tpublic async run(task: ScheduledTasksResolvable): Promise<number | null | undefined> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\t\tconst piece = this.store.get(task.name);\n\n\t\tif (!piece) {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskNotFound, taskName, payload);\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskRun, piece, payload);\n\n\t\t\tconst stopwatch = new Stopwatch();\n\t\t\tconst taskRunResult = await piece.run(payload);\n\t\t\tconst { duration } = stopwatch.stop();\n\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskSuccess, piece, payload, taskRunResult, duration);\n\n\t\t\treturn duration;\n\t\t});\n\n\t\tresult.inspectErr((error) => container.client.emit(ScheduledTaskEvents.ScheduledTaskError, error, piece, payload));\n\n\t\tconst value = result.unwrapOr(null);\n\n\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskFinished, piece, value, payload);\n\n\t\treturn value;\n\t}\n\n\tprivate get store(): ScheduledTaskStore {\n\t\treturn container.client.stores.get('scheduled-tasks');\n\t}\n\n\tprivate resolveTask(task: ScheduledTasksResolvable): ScheduledTasksResolvablePayload {\n\t\tif (typeof task === 'string') {\n\t\t\treturn { name: task, payload: undefined };\n\t\t}\n\n\t\tif ('payload' in task) {\n\t\t\treturn { name: task.name, payload: task.payload };\n\t\t}\n\n\t\treturn { name: task.name, payload: undefined };\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/ScheduledTaskHandler.ts"],"names":[],"mappings":"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","file":"ScheduledTaskHandler.mjs","sourcesContent":["import { container, Result } from '@sapphire/framework';\nimport { Stopwatch } from '@sapphire/stopwatch';\nimport { Job, Queue, Worker, type JobsOptions, type QueueOptions, isNotConnectionError } from 'bullmq';\nimport type { ScheduledTaskStore } from './structures/ScheduledTaskStore';\nimport { ScheduledTaskEvents } from './types/ScheduledTaskEvents';\nimport type {\n\tBullClient,\n\tScheduledTaskCreateRepeatedTask,\n\tScheduledTaskHandlerOptions,\n\tScheduledTaskListOptions,\n\tScheduledTaskListRepeatedOptions,\n\tScheduledTaskListRepeatedReturnType,\n\tScheduledTasksResolvable,\n\tScheduledTasksKeys,\n\tScheduledTasksTaskOptions,\n\tScheduledTasksKeysNoPayload,\n\tScheduledTasksJob,\n\tScheduledTasksResolvablePayload,\n\tScheduledTasksPayload\n} from './types/ScheduledTaskTypes';\nimport { isNullish } from '@sapphire/utilities';\n\nexport class ScheduledTaskHandler {\n\t/**\n\t * The queue options for the scheduled task handler.\n\t */\n\tpublic readonly options: QueueOptions;\n\n\t/**\n\t * The name of the queue associated with the scheduled task handler.\n\t */\n\tpublic readonly queue: string;\n\n\t#client: BullClient;\n\t#worker: Worker;\n\n\tpublic constructor(options: ScheduledTaskHandlerOptions) {\n\t\tthis.queue = options.queue ?? 'scheduled-tasks';\n\t\tthis.options = options.bull;\n\n\t\tthis.#client = new Queue(this.queue, this.options);\n\t\tthis.#worker = new Worker(\n\t\t\tthis.queue, //\n\t\t\tasync (job) => this.run({ name: job.name as ScheduledTasksKeys, payload: job.data }),\n\t\t\t{ connection: this.options.connection }\n\t\t);\n\n\t\tthis.#client.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyClientError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t\tthis.#worker.on('error', (error) => {\n\t\t\tif (isNotConnectionError(error)) {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyWorkerError, error);\n\t\t\t} else {\n\t\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskStrategyConnectError, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic get client(): BullClient {\n\t\treturn this.#client;\n\t}\n\n\t/**\n\t * Closes the internal client and worker.\n\t */\n\tpublic async close(): Promise<void> {\n\t\tawait Promise.all([\n\t\t\tthis.#client.close(), //\n\t\t\tthis.#worker.close()\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a scheduled task.\n\t *\n\t * @param task - The task to be scheduled.\n\t * @param options - The options for the task.\n\t */\n\tpublic async create<T extends ScheduledTasksResolvable>(\n\t\ttask: T, //\n\t\toptions?: ScheduledTasksTaskOptions | number\n\t): Promise<ScheduledTasksJob<T>> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\n\t\tif (isNullish(options)) {\n\t\t\treturn this.#client.add(taskName, payload) as Promise<ScheduledTasksJob<T>>;\n\t\t}\n\n\t\tif (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\trepeated: false,\n\t\t\t\tdelay: options\n\t\t\t};\n\t\t}\n\n\t\tconst { repeated, pattern, interval, delay, customJobOptions, timezone } = options;\n\t\tlet jobOptions: JobsOptions = {\n\t\t\tdelay,\n\t\t\t...customJobOptions\n\t\t};\n\n\t\tif (repeated) {\n\t\t\tjobOptions = {\n\t\t\t\t...jobOptions,\n\t\t\t\trepeat: interval //\n\t\t\t\t\t? { every: interval }\n\t\t\t\t\t: { pattern, tz: timezone }\n\t\t\t};\n\t\t}\n\n\t\treturn this.#client.add(taskName, payload, jobOptions) as Promise<ScheduledTasksJob<T>>;\n\t}\n\n\t/**\n\t * Creates repeated tasks.\n\t *\n\t * @param tasks - An optional array of tasks to create. If not provided, it will create tasks based on the stored repeated tasks.\n\t */\n\tpublic async createRepeated(tasks?: ScheduledTaskCreateRepeatedTask[]): Promise<void> {\n\t\tif (tasks === undefined) {\n\t\t\tconst repeatedTasks: ScheduledTaskCreateRepeatedTask[] = this.store.repeatedTasks.map((piece) => ({\n\t\t\t\tname: piece.name as ScheduledTasksKeysNoPayload,\n\t\t\t\toptions: {\n\t\t\t\t\trepeated: true,\n\t\t\t\t\t...(piece.interval\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinterval: piece.interval,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tpattern: piece.pattern!,\n\t\t\t\t\t\t\t\ttimezone: piece.timezone,\n\t\t\t\t\t\t\t\tcustomJobOptions: piece.customJobOptions\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\ttasks = repeatedTasks;\n\t\t}\n\n\t\tfor (const task of tasks) {\n\t\t\tawait this.create(task.name, task.options);\n\t\t}\n\t}\n\n\t/**\n\t * Deletes a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the task to delete.\n\t */\n\tpublic async delete(id: string): Promise<void> {\n\t\tconst job = (await this.get(id as ScheduledTasksKeys)) as unknown as Job<unknown> | undefined;\n\t\treturn job?.remove();\n\t}\n\n\t/**\n\t * Retrieves a list of scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of scheduled tasks.\n\t */\n\tpublic list(options: ScheduledTaskListOptions): Promise<Job<unknown>[]> {\n\t\tconst { types, start, end, asc } = options;\n\n\t\treturn this.#client.getJobs(types, start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a list of repeated scheduled tasks based on the provided options.\n\t *\n\t * @param options - The options for filtering the list of repeated scheduled tasks.\n\t */\n\tpublic listRepeated(options: ScheduledTaskListRepeatedOptions): Promise<ScheduledTaskListRepeatedReturnType> {\n\t\tconst { start, end, asc } = options;\n\n\t\treturn this.#client.getRepeatableJobs(start, end, asc);\n\t}\n\n\t/**\n\t * Retrieves a scheduled task by its ID.\n\t *\n\t * @param id - The ID of the scheduled task to retrieve.\n\t */\n\tpublic async get<T extends ScheduledTasksKeys>(id: T): Promise<Job<ScheduledTasksPayload<T>> | undefined> {\n\t\tconst job = await this.#client.getJob(id);\n\t\tif (isNullish(job)) return undefined;\n\n\t\treturn job as Job<ScheduledTasksPayload<T>>;\n\t}\n\n\t/**\n\t * Runs a scheduled task with the given name and payload.\n\t *\n\t * @param task - The name of the scheduled task to run.\n\t *\n\t * @remarks `undefined` will be returned if the task was not found.\n\t */\n\tpublic async run(task: ScheduledTasksResolvable): Promise<number | null | undefined> {\n\t\tconst { name: taskName, payload } = this.resolveTask(task);\n\t\tconst piece = this.store.get(task.name);\n\n\t\tif (!piece) {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskNotFound, taskName, payload);\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskRun, piece, payload);\n\n\t\t\tconst stopwatch = new Stopwatch();\n\t\t\tconst taskRunResult = await piece.run(payload);\n\t\t\tconst { duration } = stopwatch.stop();\n\n\t\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskSuccess, piece, payload, taskRunResult, duration);\n\n\t\t\treturn duration;\n\t\t});\n\n\t\tresult.inspectErr((error) => container.client.emit(ScheduledTaskEvents.ScheduledTaskError, error, piece, payload));\n\n\t\tconst value = result.unwrapOr(null);\n\n\t\tcontainer.client.emit(ScheduledTaskEvents.ScheduledTaskFinished, piece, value, payload);\n\n\t\treturn value;\n\t}\n\n\tprivate get store(): ScheduledTaskStore {\n\t\treturn container.client.stores.get('scheduled-tasks');\n\t}\n\n\tprivate resolveTask(task: ScheduledTasksResolvable): ScheduledTasksResolvablePayload {\n\t\tif (typeof task === 'string') {\n\t\t\treturn { name: task, payload: undefined };\n\t\t}\n\n\t\tif ('payload' in task) {\n\t\t\treturn { name: task.name, payload: task.payload };\n\t\t}\n\n\t\treturn { name: task.name, payload: undefined };\n\t}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapphire/plugin-scheduled-tasks",
|
|
3
|
-
"version": "10.0.3
|
|
3
|
+
"version": "10.0.3",
|
|
4
4
|
"description": "Plugin for @sapphire/framework to have scheduled tasks",
|
|
5
5
|
"author": "@sapphire",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,14 +51,14 @@
|
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@sapphire/stopwatch": "^1.5.4",
|
|
53
53
|
"@sapphire/utilities": "^3.18.2",
|
|
54
|
-
"bullmq": "5.
|
|
54
|
+
"bullmq": "5.52.2"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@favware/cliff-jumper": "^6.0.0",
|
|
58
58
|
"@favware/rollup-type-bundler": "^4.0.0",
|
|
59
59
|
"concurrently": "^9.1.2",
|
|
60
|
-
"tsup": "^8.
|
|
61
|
-
"tsx": "^4.19.
|
|
60
|
+
"tsup": "^8.4.0",
|
|
61
|
+
"tsx": "^4.19.4",
|
|
62
62
|
"typedoc": "^0.26.11",
|
|
63
63
|
"typedoc-json-parser": "^10.2.0",
|
|
64
64
|
"typescript": "~5.4.5"
|