@kingsworld/plugin-cron 1.5.2 → 2.0.0-next.179a2eb
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 +0 -0
- package/README.md +106 -76
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +112 -14
- package/dist/cjs/lib/CronTaskHandler.cjs +30 -2
- package/dist/cjs/lib/CronTaskHandler.cjs.map +1 -1
- package/dist/cjs/lib/structures/CronTask.cjs +40 -20
- package/dist/cjs/lib/structures/CronTask.cjs.map +1 -1
- package/dist/cjs/lib/structures/CronTaskStore.cjs +19 -13
- package/dist/cjs/lib/structures/CronTaskStore.cjs.map +1 -1
- package/dist/cjs/register.cjs +4 -16
- package/dist/cjs/register.cjs.map +1 -1
- package/dist/esm/index.d.mts +112 -14
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/lib/CronTaskHandler.mjs +30 -2
- package/dist/esm/lib/CronTaskHandler.mjs.map +1 -1
- package/dist/esm/lib/structures/CronTask.mjs +40 -20
- package/dist/esm/lib/structures/CronTask.mjs.map +1 -1
- package/dist/esm/lib/structures/CronTaskStore.mjs +19 -13
- package/dist/esm/lib/structures/CronTaskStore.mjs.map +1 -1
- package/dist/esm/register.mjs +4 -16
- package/dist/esm/register.mjs.map +1 -1
- package/package.json +7 -3
@@ -1,8 +1,8 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
3
|
var pieces = require('@sapphire/pieces');
|
4
|
-
var CronTask_cjs = require('./CronTask.cjs');
|
5
4
|
var cron = require('cron');
|
5
|
+
var CronTask_cjs = require('./CronTask.cjs');
|
6
6
|
|
7
7
|
var __defProp = Object.defineProperty;
|
8
8
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
@@ -10,28 +10,33 @@ var _CronTaskStore = class _CronTaskStore extends pieces.Store {
|
|
10
10
|
constructor() {
|
11
11
|
super(CronTask_cjs.CronTask, { name: "cron-tasks" });
|
12
12
|
}
|
13
|
+
/**
|
14
|
+
* Loops over all tasks and starts those that are enabled.
|
15
|
+
* This gets called automatically when the Client is ready.
|
16
|
+
* @returns CronTaskStore
|
17
|
+
*/
|
13
18
|
startAll() {
|
14
19
|
for (const task of this.values()) {
|
15
20
|
if (!task.enabled) continue;
|
16
21
|
task.job.start();
|
17
22
|
}
|
18
|
-
pieces.Store.logger?.(
|
19
|
-
`[STORE => ${this.name}] [START] Started all cronjob tasks.`
|
20
|
-
);
|
23
|
+
pieces.Store.logger?.(`[STORE => ${this.name}] [START] Started all cronjob tasks.`);
|
21
24
|
return this;
|
22
25
|
}
|
26
|
+
/**
|
27
|
+
* Loops over all tasks and stops those that are running.
|
28
|
+
* @returns CronTaskStore
|
29
|
+
*/
|
23
30
|
stopAll() {
|
24
31
|
for (const task of this.values()) {
|
25
32
|
if (!task.job.running) continue;
|
26
33
|
task.job.stop();
|
27
34
|
}
|
28
|
-
pieces.Store.logger?.(
|
29
|
-
`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`
|
30
|
-
);
|
35
|
+
pieces.Store.logger?.(`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`);
|
31
36
|
return this;
|
32
37
|
}
|
33
38
|
set(key, value) {
|
34
|
-
const options = value
|
39
|
+
const { options } = value;
|
35
40
|
const { sentry, defaultTimezone } = this.container.cron;
|
36
41
|
const cronJob = sentry ? sentry.cron.instrumentCron(cron.CronJob, key) : cron.CronJob;
|
37
42
|
try {
|
@@ -43,11 +48,8 @@ var _CronTaskStore = class _CronTaskStore extends pieces.Store {
|
|
43
48
|
timeZone: options.timeZone ?? defaultTimezone
|
44
49
|
});
|
45
50
|
} catch (error) {
|
46
|
-
value.error(
|
47
|
-
|
48
|
-
error
|
49
|
-
);
|
50
|
-
value.unload();
|
51
|
+
value.error("Encountered an error while creating the cron job", error);
|
52
|
+
void value.unload();
|
51
53
|
}
|
52
54
|
return super.set(key, value);
|
53
55
|
}
|
@@ -58,6 +60,10 @@ var _CronTaskStore = class _CronTaskStore extends pieces.Store {
|
|
58
60
|
}
|
59
61
|
return super.delete(key);
|
60
62
|
}
|
63
|
+
/**
|
64
|
+
* Stops all running cron jobs and clears the store.
|
65
|
+
* @returns void
|
66
|
+
*/
|
61
67
|
clear() {
|
62
68
|
this.stopAll();
|
63
69
|
return super.clear();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/structures/CronTaskStore.ts"],"names":["Store","CronTask","CronJob"],"mappings":";;;;;;;;AAIO,IAAM,cAAA,GAAN,MAAM,cAAA,SAAsBA,YAA8B,CAAA;AAAA,
|
1
|
+
{"version":3,"sources":["../../../../src/lib/structures/CronTaskStore.ts"],"names":["Store","CronTask","CronJob"],"mappings":";;;;;;;;AAIO,IAAM,cAAA,GAAN,MAAM,cAAA,SAAsBA,YAA8B,CAAA;AAAA,EACzD,WAAc,GAAA;AACpB,IAAA,KAAA,CAAMC,qBAAU,EAAA,EAAE,IAAM,EAAA,YAAA,EAAc,CAAA,CAAA;AAAA,GACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAW,GAAA;AACjB,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AACjC,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA,SAAA;AACnB,MAAA,IAAA,CAAK,IAAI,KAAM,EAAA,CAAA;AAAA,KAChB;AAEA,IAAAD,YAAA,CAAM,MAAS,GAAA,CAAA,UAAA,EAAa,IAAK,CAAA,IAAI,CAAsC,oCAAA,CAAA,CAAA,CAAA;AAC3E,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAU,GAAA;AAChB,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AACjC,MAAI,IAAA,CAAC,IAAK,CAAA,GAAA,CAAI,OAAS,EAAA,SAAA;AACvB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KACf;AAEA,IAAAA,YAAA,CAAM,MAAS,GAAA,CAAA,UAAA,EAAa,IAAK,CAAA,IAAI,CAAqC,mCAAA,CAAA,CAAA,CAAA;AAC1E,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA,EAEgB,GAAA,CAAI,KAAa,KAAuB,EAAA;AACvD,IAAM,MAAA,EAAE,SAAY,GAAA,KAAA,CAAA;AAEpB,IAAA,MAAM,EAAE,MAAA,EAAQ,eAAgB,EAAA,GAAI,KAAK,SAAU,CAAA,IAAA,CAAA;AACnD,IAAA,MAAM,UAAU,MAAS,GAAA,MAAA,CAAO,KAAK,cAAe,CAAAE,YAAA,EAAS,GAAG,CAAI,GAAAA,YAAA,CAAA;AAEpE,IAAI,IAAA;AACH,MAAM,KAAA,CAAA,GAAA,GAAM,QAAQ,IAAK,CAAA;AAAA,QACxB,GAAG,OAAA;AAAA,QACH,MAAA,+BAAc,KAAK,KAAA,CAAM,IAAI,IAAK,CAAA,KAAK,GAA/B,EAAA,QAAA,CAAA;AAAA,QACR,KAAO,EAAA,KAAA;AAAA,QACP,OAAS,EAAA,KAAA;AAAA,QACT,QAAA,EAAU,QAAQ,QAAY,IAAA,eAAA;AAAA,OAC9B,CAAA,CAAA;AAAA,aACO,KAAO,EAAA;AACf,MAAM,KAAA,CAAA,KAAA,CAAM,oDAAoD,KAAK,CAAA,CAAA;AACrE,MAAA,KAAK,MAAM,MAAO,EAAA,CAAA;AAAA,KACnB;AAEA,IAAO,OAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,GAC5B;AAAA,EAEgB,OAAO,GAAa,EAAA;AACnC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACzB,IAAI,IAAA,IAAA,EAAM,IAAI,OAAS,EAAA;AACtB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KACf;AAEA,IAAO,OAAA,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAAA,GACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMgB,KAAQ,GAAA;AACvB,IAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AACb,IAAA,OAAO,MAAM,KAAM,EAAA,CAAA;AAAA,GACpB;AACD,CAAA,CAAA;AAzEiE,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAA1D,IAAM,aAAN,GAAA","file":"CronTaskStore.cjs","sourcesContent":["import { Store } from '@sapphire/pieces';\nimport { CronJob } from 'cron';\nimport { CronTask } from './CronTask';\n\nexport class CronTaskStore extends Store<CronTask, 'cron-tasks'> {\n\tpublic constructor() {\n\t\tsuper(CronTask, { name: 'cron-tasks' });\n\t}\n\n\t/**\n\t * Loops over all tasks and starts those that are enabled.\n\t * This gets called automatically when the Client is ready.\n\t * @returns CronTaskStore\n\t */\n\tpublic startAll() {\n\t\tfor (const task of this.values()) {\n\t\t\tif (!task.enabled) continue;\n\t\t\ttask.job.start();\n\t\t}\n\n\t\tStore.logger?.(`[STORE => ${this.name}] [START] Started all cronjob tasks.`);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Loops over all tasks and stops those that are running.\n\t * @returns CronTaskStore\n\t */\n\tpublic stopAll() {\n\t\tfor (const task of this.values()) {\n\t\t\tif (!task.job.running) continue;\n\t\t\ttask.job.stop();\n\t\t}\n\n\t\tStore.logger?.(`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`);\n\t\treturn this;\n\t}\n\n\tpublic override set(key: string, value: CronTask): this {\n\t\tconst { options } = value;\n\n\t\tconst { sentry, defaultTimezone } = this.container.cron;\n\t\tconst cronJob = sentry ? sentry.cron.instrumentCron(CronJob, key) : CronJob;\n\n\t\ttry {\n\t\t\tvalue.job = cronJob.from({\n\t\t\t\t...options,\n\t\t\t\tonTick: () => void value.run.bind(value)(),\n\t\t\t\tstart: false,\n\t\t\t\tcontext: value,\n\t\t\t\ttimeZone: options.timeZone ?? defaultTimezone\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tvalue.error('Encountered an error while creating the cron job', error);\n\t\t\tvoid value.unload();\n\t\t}\n\n\t\treturn super.set(key, value);\n\t}\n\n\tpublic override delete(key: string) {\n\t\tconst task = this.get(key);\n\t\tif (task?.job.running) {\n\t\t\ttask.job.stop();\n\t\t}\n\n\t\treturn super.delete(key);\n\t}\n\n\t/**\n\t * Stops all running cron jobs and clears the store.\n\t * @returns void\n\t */\n\tpublic override clear() {\n\t\tthis.stopAll();\n\t\treturn super.clear();\n\t}\n}\n"]}
|
package/dist/cjs/register.cjs
CHANGED
@@ -22,22 +22,10 @@ var _CronTaskPlugin = class _CronTaskPlugin extends framework.Plugin {
|
|
22
22
|
};
|
23
23
|
__name(_CronTaskPlugin, "CronTaskPlugin");
|
24
24
|
var CronTaskPlugin = _CronTaskPlugin;
|
25
|
-
framework.SapphireClient.plugins.registerPreGenericsInitializationHook(
|
26
|
-
|
27
|
-
|
28
|
-
);
|
29
|
-
framework.SapphireClient.plugins.registerPostInitializationHook(
|
30
|
-
CronTaskPlugin[framework.postInitialization],
|
31
|
-
"Cron-Task-PostInitialization"
|
32
|
-
);
|
33
|
-
framework.SapphireClient.plugins.registerPreLoginHook(
|
34
|
-
CronTaskPlugin[framework.preLogin],
|
35
|
-
"Cron-Task-PreLogin"
|
36
|
-
);
|
37
|
-
framework.SapphireClient.plugins.registerPostLoginHook(
|
38
|
-
CronTaskPlugin[framework.postLogin],
|
39
|
-
"Cron-Task-PostLogin"
|
40
|
-
);
|
25
|
+
framework.SapphireClient.plugins.registerPreGenericsInitializationHook(CronTaskPlugin[framework.preGenericsInitialization], "Cron-Task-PreGenericsInitialization");
|
26
|
+
framework.SapphireClient.plugins.registerPostInitializationHook(CronTaskPlugin[framework.postInitialization], "Cron-Task-PostInitialization");
|
27
|
+
framework.SapphireClient.plugins.registerPreLoginHook(CronTaskPlugin[framework.preLogin], "Cron-Task-PreLogin");
|
28
|
+
framework.SapphireClient.plugins.registerPostLoginHook(CronTaskPlugin[framework.postLogin], "Cron-Task-PostLogin");
|
41
29
|
|
42
30
|
exports.CronTaskPlugin = CronTaskPlugin;
|
43
31
|
//# sourceMappingURL=register.cjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/register.ts"],"names":["Plugin","preGenericsInitialization","container","CronTaskHandler","postInitialization","CronTaskStore","preLogin","postLogin","SapphireClient"],"mappings":";;;;;;;
|
1
|
+
{"version":3,"sources":["../../src/register.ts"],"names":["Plugin","preGenericsInitialization","container","CronTaskHandler","postInitialization","CronTaskStore","preLogin","postLogin","SapphireClient"],"mappings":";;;;;;;AAMO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuBA,gBAAO,CAAA;AAAA,EAC1C,QAAeC,mCAAyB,CAAA,CAAwB,OAAwB,EAAA;AACvF,IAAAC,mBAAA,CAAU,IAAO,GAAA,IAAIC,yBAAgB,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,GAClD;AAAA,EAEA,QAAeC,4BAAkB,CAAwB,GAAA;AACxD,IAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,IAAIC,uBAAA,EAAe,CAAA,CAAA;AAAA,GACzC;AAAA,EAEA,cAAqBC,kBAAQ,CAAwB,GAAA;AACpD,IAAI,IAAAJ,mBAAA,CAAU,KAAK,aAAe,EAAA,OAAA;AAClC,IAAAA,mBAAA,CAAU,IAAK,CAAA,MAAA,GAAS,MAAM,OAAO,cAAc,CAAE,CAAA,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAI,CAAA,OAAO,CAAE,CAAA,KAAA,CAAM,MAAM,KAAS,CAAA,CAAA,CAAA;AAAA,GACtG;AAAA,EAEA,QAAeK,mBAAS,CAAwB,GAAA;AAC/C,IAAAL,mBAAA,CAAU,KAAK,QAAS,EAAA,CAAA;AAAA,GACzB;AACD,CAAA,CAAA;AAjB2C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,CAAA;AAApC,IAAM,cAAN,GAAA,gBAAA;AAmBPM,wBAAA,CAAe,OAAQ,CAAA,qCAAA,CAAsC,cAAe,CAAAP,mCAAyB,GAAG,qCAAqC,CAAA,CAAA;AAE7IO,wBAAA,CAAe,OAAQ,CAAA,8BAAA,CAA+B,cAAe,CAAAJ,4BAAkB,GAAG,8BAA8B,CAAA,CAAA;AAExHI,wBAAA,CAAe,OAAQ,CAAA,oBAAA,CAAqB,cAAe,CAAAF,kBAAQ,GAAG,oBAAoB,CAAA,CAAA;AAE1FE,wBAAA,CAAe,OAAQ,CAAA,qBAAA,CAAsB,cAAe,CAAAD,mBAAS,GAAG,qBAAqB,CAAA","file":"register.cjs","sourcesContent":["import './index';\n\nimport { container, Plugin, postInitialization, postLogin, preGenericsInitialization, preLogin, SapphireClient } from '@sapphire/framework';\nimport type { ClientOptions } from 'discord.js';\nimport { CronTaskHandler, CronTaskStore } from './index';\n\nexport class CronTaskPlugin extends Plugin {\n\tpublic static [preGenericsInitialization](this: SapphireClient, options: ClientOptions) {\n\t\tcontainer.cron = new CronTaskHandler(options.cron);\n\t}\n\n\tpublic static [postInitialization](this: SapphireClient) {\n\t\tthis.stores.register(new CronTaskStore());\n\t}\n\n\tpublic static async [preLogin](this: SapphireClient) {\n\t\tif (container.cron.disableSentry) return;\n\t\tcontainer.cron.sentry = await import('@sentry/node').then((mod) => mod.default).catch(() => undefined);\n\t}\n\n\tpublic static [postLogin](this: SapphireClient) {\n\t\tcontainer.cron.startAll();\n\t}\n}\n\nSapphireClient.plugins.registerPreGenericsInitializationHook(CronTaskPlugin[preGenericsInitialization], 'Cron-Task-PreGenericsInitialization');\n\nSapphireClient.plugins.registerPostInitializationHook(CronTaskPlugin[postInitialization], 'Cron-Task-PostInitialization');\n\nSapphireClient.plugins.registerPreLoginHook(CronTaskPlugin[preLogin], 'Cron-Task-PreLogin');\n\nSapphireClient.plugins.registerPostLoginHook(CronTaskPlugin[postLogin], 'Cron-Task-PostLogin');\n"]}
|
package/dist/esm/index.d.mts
CHANGED
@@ -1,71 +1,169 @@
|
|
1
1
|
import { Piece, Store } from '@sapphire/pieces';
|
2
|
-
import { CronJobParams, CronJob } from 'cron';
|
3
2
|
import { Awaitable } from '@sapphire/framework';
|
3
|
+
import { CronJobParams, CronJob } from 'cron';
|
4
4
|
import Sentry from '@sentry/node';
|
5
5
|
|
6
6
|
interface CronTaskHandlerOptions {
|
7
7
|
/**
|
8
8
|
* The default timezone to use for all cron tasks.
|
9
9
|
* You can override this per task, using the timeZone option.
|
10
|
+
* @see https://github.com/moment/luxon/blob/master/docs/zones.md#specifying-a-zone
|
10
11
|
* @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
11
|
-
* @default
|
12
|
+
* @default 'UTC'
|
12
13
|
*/
|
13
|
-
defaultTimezone
|
14
|
+
defaultTimezone: string;
|
14
15
|
/**
|
15
16
|
* The ability to opt-out of instrumenting cron jobs with Sentry.
|
16
17
|
* If you don't use Sentry, you can ignore this option.
|
17
18
|
* @see https://docs.sentry.io/product/crons/
|
18
|
-
* @default
|
19
|
+
* @default false
|
19
20
|
*/
|
20
|
-
disableSentry
|
21
|
+
disableSentry: boolean;
|
21
22
|
}
|
22
|
-
type CronJobOptions = Omit<CronJobParams<null, CronTask>,
|
23
|
+
type CronJobOptions = Omit<CronJobParams<null, CronTask>, 'onTick' | 'onComplete' | 'start' | 'context' | 'utcOffset'>;
|
23
24
|
|
24
|
-
|
25
|
+
/**
|
26
|
+
* @example
|
27
|
+
*
|
28
|
+
* ```typescript
|
29
|
+
* // ping.ts
|
30
|
+
* import { CronTask } from '@kingsworld/plugin-cron';
|
31
|
+
*
|
32
|
+
* export class PingPong extends CronTask {
|
33
|
+
* public constructor(context: CronTask.LoaderContext, options: CronTask.Options) {
|
34
|
+
* super(context, {
|
35
|
+
* ...options,
|
36
|
+
* cronTime: '* * * * *'
|
37
|
+
* });
|
38
|
+
* }
|
39
|
+
*
|
40
|
+
* public run() {
|
41
|
+
* this.info('Ping Pong! 🏓'); // CronTask[ping] Ping Pong! 🏓
|
42
|
+
* }
|
43
|
+
* }
|
44
|
+
* ```
|
45
|
+
*/
|
46
|
+
declare abstract class CronTask<Options extends CronTask.Options = CronTask.Options> extends Piece<Options, 'cron-tasks'> {
|
25
47
|
job: CronJob<null, CronTask>;
|
26
48
|
constructor(context: CronTask.LoaderContext, options: Options);
|
27
49
|
abstract run(): Awaitable<unknown>;
|
50
|
+
/**
|
51
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
52
|
+
* @param message The message to include after the prefix
|
53
|
+
* @param other Extra parameters to pass to the logger
|
54
|
+
* @example
|
55
|
+
* this.info('Hello world!'); // CronTask[my-task] Hello world!
|
56
|
+
*/
|
28
57
|
info(message: string, ...other: unknown[]): void;
|
58
|
+
/**
|
59
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
60
|
+
* @param message The message to include after the prefix
|
61
|
+
* @param other Extra parameters to pass to the logger
|
62
|
+
* @example
|
63
|
+
* this.error('Something went wrong!'); // CronTask[my-task] Something went wrong!
|
64
|
+
*/
|
29
65
|
error(message: string, ...other: unknown[]): void;
|
66
|
+
/**
|
67
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
68
|
+
* @param message The message to include after the prefix
|
69
|
+
* @param other Extra parameters to pass to the logger
|
70
|
+
* @example
|
71
|
+
* this.warn('Something is not right!'); // CronTask[my-task] Something is not right!
|
72
|
+
*/
|
30
73
|
warn(message: string, ...other: unknown[]): void;
|
74
|
+
/**
|
75
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
76
|
+
* @param message The message to include after the prefix
|
77
|
+
* @param other Extra parameters to pass to the logger
|
78
|
+
* @example
|
79
|
+
* this.debug('Something is happening!'); // CronTask[my-task] Something is happening!
|
80
|
+
*/
|
31
81
|
debug(message: string, ...other: unknown[]): void;
|
82
|
+
/**
|
83
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
84
|
+
* @param message The message to include after the prefix
|
85
|
+
* @param other Extra parameters to pass to the logger
|
86
|
+
* @example
|
87
|
+
* this.trace('Loaded the file.'); // CronTask[my-task] Loaded the file.
|
88
|
+
*/
|
32
89
|
trace(message: string, ...other: unknown[]): void;
|
33
90
|
}
|
34
91
|
declare namespace CronTask {
|
35
92
|
type Options = Piece.Options & CronJobOptions;
|
36
93
|
/** @deprecated Use {@linkcode LoaderContext} instead. */
|
37
94
|
type Context = LoaderContext;
|
38
|
-
type LoaderContext = Piece.LoaderContext<
|
95
|
+
type LoaderContext = Piece.LoaderContext<'cron-tasks'>;
|
39
96
|
}
|
40
97
|
|
41
|
-
declare class CronTaskStore extends Store<CronTask,
|
98
|
+
declare class CronTaskStore extends Store<CronTask, 'cron-tasks'> {
|
42
99
|
constructor();
|
100
|
+
/**
|
101
|
+
* Loops over all tasks and starts those that are enabled.
|
102
|
+
* This gets called automatically when the Client is ready.
|
103
|
+
* @returns CronTaskStore
|
104
|
+
*/
|
43
105
|
startAll(): this;
|
106
|
+
/**
|
107
|
+
* Loops over all tasks and stops those that are running.
|
108
|
+
* @returns CronTaskStore
|
109
|
+
*/
|
44
110
|
stopAll(): this;
|
45
111
|
set(key: string, value: CronTask): this;
|
46
112
|
delete(key: string): boolean;
|
113
|
+
/**
|
114
|
+
* Stops all running cron jobs and clears the store.
|
115
|
+
* @returns void
|
116
|
+
*/
|
47
117
|
clear(): void;
|
48
118
|
}
|
49
119
|
|
50
120
|
declare class CronTaskHandler {
|
51
|
-
|
52
|
-
|
121
|
+
/**
|
122
|
+
* The default timezone to use for all cron tasks.
|
123
|
+
* You can override this per task, using the timeZone option.
|
124
|
+
* @see https://github.com/moment/luxon/blob/master/docs/zones.md#specifying-a-zone
|
125
|
+
* @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
126
|
+
* @default 'UTC'
|
127
|
+
*/
|
128
|
+
defaultTimezone: CronTaskHandlerOptions['defaultTimezone'];
|
129
|
+
/**
|
130
|
+
* The ability to opt-out of instrumenting cron jobs with Sentry.
|
131
|
+
* If you don't use Sentry, you can ignore this option.
|
132
|
+
* @see https://docs.sentry.io/product/crons/
|
133
|
+
* @default false
|
134
|
+
*/
|
135
|
+
disableSentry: boolean;
|
136
|
+
/**
|
137
|
+
* The Sentry instance to use for instrumenting cron jobs.
|
138
|
+
* This is only available when [`@sentry/node`](https://www.npmjs.com/package/@sentry/node)
|
139
|
+
* is installed and the {@linkcode disableSentry} option is set to false.
|
140
|
+
*/
|
53
141
|
sentry?: typeof Sentry;
|
54
142
|
constructor(options?: CronTaskHandlerOptions);
|
143
|
+
/**
|
144
|
+
* Start all enabled cron jobs.
|
145
|
+
* This gets called automatically when the Client is ready.
|
146
|
+
*/
|
55
147
|
startAll(): void;
|
148
|
+
/**
|
149
|
+
* Stop all running cron jobs.
|
150
|
+
*/
|
56
151
|
stopAll(): void;
|
152
|
+
/**
|
153
|
+
* Get the cron task store.
|
154
|
+
*/
|
57
155
|
private get store();
|
58
156
|
}
|
59
157
|
|
60
|
-
declare module
|
158
|
+
declare module '@sapphire/pieces' {
|
61
159
|
interface Container {
|
62
160
|
cron: CronTaskHandler;
|
63
161
|
}
|
64
162
|
interface StoreRegistryEntries {
|
65
|
-
|
163
|
+
'cron-tasks': CronTaskStore;
|
66
164
|
}
|
67
165
|
}
|
68
|
-
declare module
|
166
|
+
declare module 'discord.js' {
|
69
167
|
interface ClientOptions {
|
70
168
|
cron?: CronTaskHandlerOptions;
|
71
169
|
}
|
package/dist/esm/index.mjs
CHANGED
@@ -4,7 +4,7 @@ export * from './lib/structures/CronTask.mjs';
|
|
4
4
|
export * from './lib/structures/CronTaskStore.mjs';
|
5
5
|
export * from './lib/types/CronTaskTypes.mjs';
|
6
6
|
|
7
|
-
var version = "
|
7
|
+
var version = "2.0.0-next.179a2eb";
|
8
8
|
|
9
9
|
export { version };
|
10
10
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AA+BO,IAAM,OAAkB,GAAA","file":"index.mjs","sourcesContent":["import type { CronTaskStore } from
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AA+BO,IAAM,OAAkB,GAAA","file":"index.mjs","sourcesContent":["import type { CronTaskStore } from './lib/structures/CronTaskStore';\nimport type { CronTaskHandler } from './lib/CronTaskHandler';\nimport type { CronTaskHandlerOptions } from './lib/types/CronTaskTypes';\n\nexport * from './lib/CronTaskHandler';\nexport * from './lib/structures/CronTask';\nexport * from './lib/structures/CronTaskStore';\nexport * from './lib/types/CronTaskTypes';\n\ndeclare module '@sapphire/pieces' {\n\tinterface Container {\n\t\tcron: CronTaskHandler;\n\t}\n\n\tinterface StoreRegistryEntries {\n\t\t'cron-tasks': CronTaskStore;\n\t}\n}\n\ndeclare module 'discord.js' {\n\texport interface ClientOptions {\n\t\tcron?: CronTaskHandlerOptions;\n\t}\n}\n\n/**\n * The [@kingsworld/plugin-cron](https://github.com/Kings-World/sapphire-plugins/tree/main/packages/cron) 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 */\nexport const version: string = '2.0.0-next.179a2eb';\n"]}
|
@@ -3,18 +3,46 @@ import { container } from '@sapphire/framework';
|
|
3
3
|
|
4
4
|
var _CronTaskHandler = class _CronTaskHandler {
|
5
5
|
constructor(options) {
|
6
|
+
/**
|
7
|
+
* The default timezone to use for all cron tasks.
|
8
|
+
* You can override this per task, using the timeZone option.
|
9
|
+
* @see https://github.com/moment/luxon/blob/master/docs/zones.md#specifying-a-zone
|
10
|
+
* @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
11
|
+
* @default 'UTC'
|
12
|
+
*/
|
6
13
|
__publicField(this, "defaultTimezone");
|
14
|
+
/**
|
15
|
+
* The ability to opt-out of instrumenting cron jobs with Sentry.
|
16
|
+
* If you don't use Sentry, you can ignore this option.
|
17
|
+
* @see https://docs.sentry.io/product/crons/
|
18
|
+
* @default false
|
19
|
+
*/
|
7
20
|
__publicField(this, "disableSentry");
|
21
|
+
/**
|
22
|
+
* The Sentry instance to use for instrumenting cron jobs.
|
23
|
+
* This is only available when [`@sentry/node`](https://www.npmjs.com/package/@sentry/node)
|
24
|
+
* is installed and the {@linkcode disableSentry} option is set to false.
|
25
|
+
*/
|
8
26
|
__publicField(this, "sentry");
|
9
|
-
this.defaultTimezone = options?.defaultTimezone;
|
10
|
-
this.disableSentry = options?.disableSentry;
|
27
|
+
this.defaultTimezone = options?.defaultTimezone ?? "UTC";
|
28
|
+
this.disableSentry = options?.disableSentry ?? false;
|
11
29
|
}
|
30
|
+
/**
|
31
|
+
* Start all enabled cron jobs.
|
32
|
+
* This gets called automatically when the Client is ready.
|
33
|
+
*/
|
12
34
|
startAll() {
|
13
35
|
this.store.startAll();
|
14
36
|
}
|
37
|
+
/**
|
38
|
+
* Stop all running cron jobs.
|
39
|
+
*/
|
15
40
|
stopAll() {
|
16
41
|
this.store.stopAll();
|
17
42
|
}
|
43
|
+
/**
|
44
|
+
* Get the cron task store.
|
45
|
+
*/
|
18
46
|
get store() {
|
19
47
|
return container.stores.get("cron-tasks");
|
20
48
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;AAIO,IAAM,gBAAA,GAAN,MAAM,gBAAgB,CAAA;AAAA,
|
1
|
+
{"version":3,"sources":["../../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;AAIO,IAAM,gBAAA,GAAN,MAAM,gBAAgB,CAAA;AAAA,EAyBrB,YAAY,OAAkC,EAAA;AAjBrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAO,aAAA,CAAA,IAAA,EAAA,iBAAA,CAAA,CAAA;AAQP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAO,aAAA,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AAOP;AAAA;AAAA;AAAA;AAAA;AAAA,IAAO,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAGN,IAAK,IAAA,CAAA,eAAA,GAAkB,SAAS,eAAmB,IAAA,KAAA,CAAA;AACnD,IAAK,IAAA,CAAA,aAAA,GAAgB,SAAS,aAAiB,IAAA,KAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAW,GAAA;AACjB,IAAA,IAAA,CAAK,MAAM,QAAS,EAAA,CAAA;AAAA,GACrB;AAAA;AAAA;AAAA;AAAA,EAKO,OAAU,GAAA;AAChB,IAAA,IAAA,CAAK,MAAM,OAAQ,EAAA,CAAA;AAAA,GACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAY,KAAQ,GAAA;AACnB,IAAO,OAAA,SAAA,CAAU,MAAO,CAAA,GAAA,CAAI,YAAY,CAAA,CAAA;AAAA,GACzC;AACD,CAAA,CAAA;AAnD6B,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,CAAA;AAAtB,IAAM,eAAN,GAAA","file":"CronTaskHandler.mjs","sourcesContent":["import { container } from '@sapphire/framework';\nimport type Sentry from '@sentry/node';\nimport type { CronTaskHandlerOptions } from './types/CronTaskTypes';\n\nexport class CronTaskHandler {\n\t/**\n\t * The default timezone to use for all cron tasks.\n\t * You can override this per task, using the timeZone option.\n\t * @see https://github.com/moment/luxon/blob/master/docs/zones.md#specifying-a-zone\n\t * @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n\t * @default 'UTC'\n\t */\n\tpublic defaultTimezone: CronTaskHandlerOptions['defaultTimezone'];\n\n\t/**\n\t * The ability to opt-out of instrumenting cron jobs with Sentry.\n\t * If you don't use Sentry, you can ignore this option.\n\t * @see https://docs.sentry.io/product/crons/\n\t * @default false\n\t */\n\tpublic disableSentry: boolean;\n\n\t/**\n\t * The Sentry instance to use for instrumenting cron jobs.\n\t * This is only available when [`@sentry/node`](https://www.npmjs.com/package/@sentry/node)\n\t * is installed and the {@linkcode disableSentry} option is set to false.\n\t */\n\tpublic sentry?: typeof Sentry;\n\n\tpublic constructor(options?: CronTaskHandlerOptions) {\n\t\tthis.defaultTimezone = options?.defaultTimezone ?? 'UTC';\n\t\tthis.disableSentry = options?.disableSentry ?? false;\n\t}\n\n\t/**\n\t * Start all enabled cron jobs.\n\t * This gets called automatically when the Client is ready.\n\t */\n\tpublic startAll() {\n\t\tthis.store.startAll();\n\t}\n\n\t/**\n\t * Stop all running cron jobs.\n\t */\n\tpublic stopAll() {\n\t\tthis.store.stopAll();\n\t}\n\n\t/**\n\t * Get the cron task store.\n\t */\n\tprivate get store() {\n\t\treturn container.stores.get('cron-tasks');\n\t}\n}\n"]}
|
@@ -5,35 +5,55 @@ var _CronTask = class _CronTask extends Piece {
|
|
5
5
|
constructor(context, options) {
|
6
6
|
super(context, options);
|
7
7
|
}
|
8
|
+
/**
|
9
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
10
|
+
* @param message The message to include after the prefix
|
11
|
+
* @param other Extra parameters to pass to the logger
|
12
|
+
* @example
|
13
|
+
* this.info('Hello world!'); // CronTask[my-task] Hello world!
|
14
|
+
*/
|
8
15
|
info(message, ...other) {
|
9
|
-
this.container.logger.info(
|
10
|
-
`CronTask[${this.name}] ${message}`,
|
11
|
-
...other
|
12
|
-
);
|
16
|
+
this.container.logger.info(`CronTask[${this.name}] ${message}`, ...other);
|
13
17
|
}
|
18
|
+
/**
|
19
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
20
|
+
* @param message The message to include after the prefix
|
21
|
+
* @param other Extra parameters to pass to the logger
|
22
|
+
* @example
|
23
|
+
* this.error('Something went wrong!'); // CronTask[my-task] Something went wrong!
|
24
|
+
*/
|
14
25
|
error(message, ...other) {
|
15
|
-
this.container.logger.error(
|
16
|
-
`CronTask[${this.name}] ${message}`,
|
17
|
-
...other
|
18
|
-
);
|
26
|
+
this.container.logger.error(`CronTask[${this.name}] ${message}`, ...other);
|
19
27
|
}
|
28
|
+
/**
|
29
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
30
|
+
* @param message The message to include after the prefix
|
31
|
+
* @param other Extra parameters to pass to the logger
|
32
|
+
* @example
|
33
|
+
* this.warn('Something is not right!'); // CronTask[my-task] Something is not right!
|
34
|
+
*/
|
20
35
|
warn(message, ...other) {
|
21
|
-
this.container.logger.warn(
|
22
|
-
`CronTask[${this.name}] ${message}`,
|
23
|
-
...other
|
24
|
-
);
|
36
|
+
this.container.logger.warn(`CronTask[${this.name}] ${message}`, ...other);
|
25
37
|
}
|
38
|
+
/**
|
39
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
40
|
+
* @param message The message to include after the prefix
|
41
|
+
* @param other Extra parameters to pass to the logger
|
42
|
+
* @example
|
43
|
+
* this.debug('Something is happening!'); // CronTask[my-task] Something is happening!
|
44
|
+
*/
|
26
45
|
debug(message, ...other) {
|
27
|
-
this.container.logger.debug(
|
28
|
-
`CronTask[${this.name}] ${message}`,
|
29
|
-
...other
|
30
|
-
);
|
46
|
+
this.container.logger.debug(`CronTask[${this.name}] ${message}`, ...other);
|
31
47
|
}
|
48
|
+
/**
|
49
|
+
* A helper function to log messages with the `CronTask[${name}]` prefix.
|
50
|
+
* @param message The message to include after the prefix
|
51
|
+
* @param other Extra parameters to pass to the logger
|
52
|
+
* @example
|
53
|
+
* this.trace('Loaded the file.'); // CronTask[my-task] Loaded the file.
|
54
|
+
*/
|
32
55
|
trace(message, ...other) {
|
33
|
-
this.container.logger.trace(
|
34
|
-
`CronTask[${this.name}] ${message}`,
|
35
|
-
...other
|
36
|
-
);
|
56
|
+
this.container.logger.trace(`CronTask[${this.name}] ${message}`, ...other);
|
37
57
|
}
|
38
58
|
};
|
39
59
|
__name(_CronTask, "CronTask");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/structures/CronTask.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"sources":["../../../../src/lib/structures/CronTask.ts"],"names":[],"mappings":";;;AA0BO,IAAe,SAAA,GAAf,MAAe,SAAA,SAAsE,KAA6B,CAAA;AAAA,EAGjH,WAAA,CAAY,SAAiC,OAAkB,EAAA;AACrE,IAAA,KAAA,CAAM,SAAS,OAAO,CAAA,CAAA;AAAA,GACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,IAAA,CAAK,YAAoB,KAAkB,EAAA;AACjD,IAAK,IAAA,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAK,EAAA,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,KAAK,CAAA,CAAA;AAAA,GACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,KAAA,CAAM,YAAoB,KAAkB,EAAA;AAClD,IAAK,IAAA,CAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAK,EAAA,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,KAAK,CAAA,CAAA;AAAA,GAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,IAAA,CAAK,YAAoB,KAAkB,EAAA;AACjD,IAAK,IAAA,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAK,EAAA,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,KAAK,CAAA,CAAA;AAAA,GACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,KAAA,CAAM,YAAoB,KAAkB,EAAA;AAClD,IAAK,IAAA,CAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAK,EAAA,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,KAAK,CAAA,CAAA;AAAA,GAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,KAAA,CAAM,YAAoB,KAAkB,EAAA;AAClD,IAAK,IAAA,CAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAK,EAAA,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,KAAK,CAAA,CAAA;AAAA,GAC1E;AACD,CAAA,CAAA;AA/DyH,MAAA,CAAA,SAAA,EAAA,UAAA,CAAA,CAAA;AAAlH,IAAe,QAAf,GAAA","file":"CronTask.mjs","sourcesContent":["import type { Awaitable } from '@sapphire/framework';\nimport { Piece } from '@sapphire/pieces';\nimport type { CronJob } from 'cron';\nimport type { CronJobOptions } from '../types/CronTaskTypes';\n\n/**\n * @example\n *\n * ```typescript\n * // ping.ts\n * import { CronTask } from '@kingsworld/plugin-cron';\n *\n * export class PingPong extends CronTask {\n * \tpublic constructor(context: CronTask.LoaderContext, options: CronTask.Options) {\n * \t\tsuper(context, {\n * \t\t\t...options,\n * \t\t\tcronTime: '* * * * *'\n * \t\t});\n * \t}\n *\n * \tpublic run() {\n * \t\tthis.info('Ping Pong! 🏓'); // CronTask[ping] Ping Pong! 🏓\n * \t}\n * }\n * ```\n */\nexport abstract class CronTask<Options extends CronTask.Options = CronTask.Options> extends Piece<Options, 'cron-tasks'> {\n\tpublic declare job: CronJob<null, CronTask>;\n\n\tpublic constructor(context: CronTask.LoaderContext, options: Options) {\n\t\tsuper(context, options);\n\t}\n\n\tpublic abstract run(): Awaitable<unknown>;\n\n\t/**\n\t * A helper function to log messages with the `CronTask[${name}]` prefix.\n\t * @param message The message to include after the prefix\n\t * @param other Extra parameters to pass to the logger\n\t * @example\n\t * this.info('Hello world!'); // CronTask[my-task] Hello world!\n\t */\n\tpublic info(message: string, ...other: unknown[]) {\n\t\tthis.container.logger.info(`CronTask[${this.name}] ${message}`, ...other);\n\t}\n\n\t/**\n\t * A helper function to log messages with the `CronTask[${name}]` prefix.\n\t * @param message The message to include after the prefix\n\t * @param other Extra parameters to pass to the logger\n\t * @example\n\t * this.error('Something went wrong!'); // CronTask[my-task] Something went wrong!\n\t */\n\tpublic error(message: string, ...other: unknown[]) {\n\t\tthis.container.logger.error(`CronTask[${this.name}] ${message}`, ...other);\n\t}\n\n\t/**\n\t * A helper function to log messages with the `CronTask[${name}]` prefix.\n\t * @param message The message to include after the prefix\n\t * @param other Extra parameters to pass to the logger\n\t * @example\n\t * this.warn('Something is not right!'); // CronTask[my-task] Something is not right!\n\t */\n\tpublic warn(message: string, ...other: unknown[]) {\n\t\tthis.container.logger.warn(`CronTask[${this.name}] ${message}`, ...other);\n\t}\n\n\t/**\n\t * A helper function to log messages with the `CronTask[${name}]` prefix.\n\t * @param message The message to include after the prefix\n\t * @param other Extra parameters to pass to the logger\n\t * @example\n\t * this.debug('Something is happening!'); // CronTask[my-task] Something is happening!\n\t */\n\tpublic debug(message: string, ...other: unknown[]) {\n\t\tthis.container.logger.debug(`CronTask[${this.name}] ${message}`, ...other);\n\t}\n\n\t/**\n\t * A helper function to log messages with the `CronTask[${name}]` prefix.\n\t * @param message The message to include after the prefix\n\t * @param other Extra parameters to pass to the logger\n\t * @example\n\t * this.trace('Loaded the file.'); // CronTask[my-task] Loaded the file.\n\t */\n\tpublic trace(message: string, ...other: unknown[]) {\n\t\tthis.container.logger.trace(`CronTask[${this.name}] ${message}`, ...other);\n\t}\n}\n\nexport namespace CronTask {\n\texport type Options = Piece.Options & CronJobOptions;\n\t/** @deprecated Use {@linkcode LoaderContext} instead. */\n\texport type Context = LoaderContext;\n\texport type LoaderContext = Piece.LoaderContext<'cron-tasks'>;\n}\n"]}
|
@@ -1,34 +1,39 @@
|
|
1
1
|
import { __name } from '../../chunk-2JTKI4GS.mjs';
|
2
2
|
import { Store } from '@sapphire/pieces';
|
3
|
-
import { CronTask } from './CronTask.mjs';
|
4
3
|
import { CronJob } from 'cron';
|
4
|
+
import { CronTask } from './CronTask.mjs';
|
5
5
|
|
6
6
|
var _CronTaskStore = class _CronTaskStore extends Store {
|
7
7
|
constructor() {
|
8
8
|
super(CronTask, { name: "cron-tasks" });
|
9
9
|
}
|
10
|
+
/**
|
11
|
+
* Loops over all tasks and starts those that are enabled.
|
12
|
+
* This gets called automatically when the Client is ready.
|
13
|
+
* @returns CronTaskStore
|
14
|
+
*/
|
10
15
|
startAll() {
|
11
16
|
for (const task of this.values()) {
|
12
17
|
if (!task.enabled) continue;
|
13
18
|
task.job.start();
|
14
19
|
}
|
15
|
-
Store.logger?.(
|
16
|
-
`[STORE => ${this.name}] [START] Started all cronjob tasks.`
|
17
|
-
);
|
20
|
+
Store.logger?.(`[STORE => ${this.name}] [START] Started all cronjob tasks.`);
|
18
21
|
return this;
|
19
22
|
}
|
23
|
+
/**
|
24
|
+
* Loops over all tasks and stops those that are running.
|
25
|
+
* @returns CronTaskStore
|
26
|
+
*/
|
20
27
|
stopAll() {
|
21
28
|
for (const task of this.values()) {
|
22
29
|
if (!task.job.running) continue;
|
23
30
|
task.job.stop();
|
24
31
|
}
|
25
|
-
Store.logger?.(
|
26
|
-
`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`
|
27
|
-
);
|
32
|
+
Store.logger?.(`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`);
|
28
33
|
return this;
|
29
34
|
}
|
30
35
|
set(key, value) {
|
31
|
-
const options = value
|
36
|
+
const { options } = value;
|
32
37
|
const { sentry, defaultTimezone } = this.container.cron;
|
33
38
|
const cronJob = sentry ? sentry.cron.instrumentCron(CronJob, key) : CronJob;
|
34
39
|
try {
|
@@ -40,11 +45,8 @@ var _CronTaskStore = class _CronTaskStore extends Store {
|
|
40
45
|
timeZone: options.timeZone ?? defaultTimezone
|
41
46
|
});
|
42
47
|
} catch (error) {
|
43
|
-
value.error(
|
44
|
-
|
45
|
-
error
|
46
|
-
);
|
47
|
-
value.unload();
|
48
|
+
value.error("Encountered an error while creating the cron job", error);
|
49
|
+
void value.unload();
|
48
50
|
}
|
49
51
|
return super.set(key, value);
|
50
52
|
}
|
@@ -55,6 +57,10 @@ var _CronTaskStore = class _CronTaskStore extends Store {
|
|
55
57
|
}
|
56
58
|
return super.delete(key);
|
57
59
|
}
|
60
|
+
/**
|
61
|
+
* Stops all running cron jobs and clears the store.
|
62
|
+
* @returns void
|
63
|
+
*/
|
58
64
|
clear() {
|
59
65
|
this.stopAll();
|
60
66
|
return super.clear();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/structures/CronTaskStore.ts"],"names":[],"mappings":";;;;;AAIO,IAAM,cAAA,GAAN,MAAM,cAAA,SAAsB,KAA8B,CAAA;AAAA,
|
1
|
+
{"version":3,"sources":["../../../../src/lib/structures/CronTaskStore.ts"],"names":[],"mappings":";;;;;AAIO,IAAM,cAAA,GAAN,MAAM,cAAA,SAAsB,KAA8B,CAAA;AAAA,EACzD,WAAc,GAAA;AACpB,IAAA,KAAA,CAAM,QAAU,EAAA,EAAE,IAAM,EAAA,YAAA,EAAc,CAAA,CAAA;AAAA,GACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAW,GAAA;AACjB,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AACjC,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA,SAAA;AACnB,MAAA,IAAA,CAAK,IAAI,KAAM,EAAA,CAAA;AAAA,KAChB;AAEA,IAAA,KAAA,CAAM,MAAS,GAAA,CAAA,UAAA,EAAa,IAAK,CAAA,IAAI,CAAsC,oCAAA,CAAA,CAAA,CAAA;AAC3E,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAU,GAAA;AAChB,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AACjC,MAAI,IAAA,CAAC,IAAK,CAAA,GAAA,CAAI,OAAS,EAAA,SAAA;AACvB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KACf;AAEA,IAAA,KAAA,CAAM,MAAS,GAAA,CAAA,UAAA,EAAa,IAAK,CAAA,IAAI,CAAqC,mCAAA,CAAA,CAAA,CAAA;AAC1E,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA,EAEgB,GAAA,CAAI,KAAa,KAAuB,EAAA;AACvD,IAAM,MAAA,EAAE,SAAY,GAAA,KAAA,CAAA;AAEpB,IAAA,MAAM,EAAE,MAAA,EAAQ,eAAgB,EAAA,GAAI,KAAK,SAAU,CAAA,IAAA,CAAA;AACnD,IAAA,MAAM,UAAU,MAAS,GAAA,MAAA,CAAO,KAAK,cAAe,CAAA,OAAA,EAAS,GAAG,CAAI,GAAA,OAAA,CAAA;AAEpE,IAAI,IAAA;AACH,MAAM,KAAA,CAAA,GAAA,GAAM,QAAQ,IAAK,CAAA;AAAA,QACxB,GAAG,OAAA;AAAA,QACH,MAAA,+BAAc,KAAK,KAAA,CAAM,IAAI,IAAK,CAAA,KAAK,GAA/B,EAAA,QAAA,CAAA;AAAA,QACR,KAAO,EAAA,KAAA;AAAA,QACP,OAAS,EAAA,KAAA;AAAA,QACT,QAAA,EAAU,QAAQ,QAAY,IAAA,eAAA;AAAA,OAC9B,CAAA,CAAA;AAAA,aACO,KAAO,EAAA;AACf,MAAM,KAAA,CAAA,KAAA,CAAM,oDAAoD,KAAK,CAAA,CAAA;AACrE,MAAA,KAAK,MAAM,MAAO,EAAA,CAAA;AAAA,KACnB;AAEA,IAAO,OAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,GAC5B;AAAA,EAEgB,OAAO,GAAa,EAAA;AACnC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACzB,IAAI,IAAA,IAAA,EAAM,IAAI,OAAS,EAAA;AACtB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KACf;AAEA,IAAO,OAAA,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAAA,GACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMgB,KAAQ,GAAA;AACvB,IAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AACb,IAAA,OAAO,MAAM,KAAM,EAAA,CAAA;AAAA,GACpB;AACD,CAAA,CAAA;AAzEiE,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAA1D,IAAM,aAAN,GAAA","file":"CronTaskStore.mjs","sourcesContent":["import { Store } from '@sapphire/pieces';\nimport { CronJob } from 'cron';\nimport { CronTask } from './CronTask';\n\nexport class CronTaskStore extends Store<CronTask, 'cron-tasks'> {\n\tpublic constructor() {\n\t\tsuper(CronTask, { name: 'cron-tasks' });\n\t}\n\n\t/**\n\t * Loops over all tasks and starts those that are enabled.\n\t * This gets called automatically when the Client is ready.\n\t * @returns CronTaskStore\n\t */\n\tpublic startAll() {\n\t\tfor (const task of this.values()) {\n\t\t\tif (!task.enabled) continue;\n\t\t\ttask.job.start();\n\t\t}\n\n\t\tStore.logger?.(`[STORE => ${this.name}] [START] Started all cronjob tasks.`);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Loops over all tasks and stops those that are running.\n\t * @returns CronTaskStore\n\t */\n\tpublic stopAll() {\n\t\tfor (const task of this.values()) {\n\t\t\tif (!task.job.running) continue;\n\t\t\ttask.job.stop();\n\t\t}\n\n\t\tStore.logger?.(`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`);\n\t\treturn this;\n\t}\n\n\tpublic override set(key: string, value: CronTask): this {\n\t\tconst { options } = value;\n\n\t\tconst { sentry, defaultTimezone } = this.container.cron;\n\t\tconst cronJob = sentry ? sentry.cron.instrumentCron(CronJob, key) : CronJob;\n\n\t\ttry {\n\t\t\tvalue.job = cronJob.from({\n\t\t\t\t...options,\n\t\t\t\tonTick: () => void value.run.bind(value)(),\n\t\t\t\tstart: false,\n\t\t\t\tcontext: value,\n\t\t\t\ttimeZone: options.timeZone ?? defaultTimezone\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tvalue.error('Encountered an error while creating the cron job', error);\n\t\t\tvoid value.unload();\n\t\t}\n\n\t\treturn super.set(key, value);\n\t}\n\n\tpublic override delete(key: string) {\n\t\tconst task = this.get(key);\n\t\tif (task?.job.running) {\n\t\t\ttask.job.stop();\n\t\t}\n\n\t\treturn super.delete(key);\n\t}\n\n\t/**\n\t * Stops all running cron jobs and clears the store.\n\t * @returns void\n\t */\n\tpublic override clear() {\n\t\tthis.stopAll();\n\t\treturn super.clear();\n\t}\n}\n"]}
|