@kingsworld/plugin-cron 1.5.1 → 2.0.0-next.023f779

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.
@@ -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.options;
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
- "Encountered an error while creating the cron job",
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,EAC7D,WAAc,GAAA;AACV,IAAA,KAAA,CAAMC,qBAAU,EAAA,EAAE,IAAM,EAAA,YAAA,EAAc,CAAA,CAAA;AAAA,GAC1C;AAAA,EAEA,QAAW,GAAA;AACP,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AAC9B,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA,SAAA;AACnB,MAAA,IAAA,CAAK,IAAI,KAAM,EAAA,CAAA;AAAA,KACnB;AAEA,IAAMD,YAAA,CAAA,MAAA;AAAA,MACF,CAAA,UAAA,EAAa,KAAK,IAAI,CAAA,oCAAA,CAAA;AAAA,KAC1B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAEA,OAAU,GAAA;AACN,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AAC9B,MAAI,IAAA,CAAC,IAAK,CAAA,GAAA,CAAI,OAAS,EAAA,SAAA;AACvB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KAClB;AAEA,IAAMA,YAAA,CAAA,MAAA;AAAA,MACF,CAAA,UAAA,EAAa,KAAK,IAAI,CAAA,mCAAA,CAAA;AAAA,KAC1B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAES,GAAA,CAAI,KAAa,KAAuB,EAAA;AAC7C,IAAA,MAAM,UAAU,KAAM,CAAA,OAAA,CAAA;AAEtB,IAAA,MAAM,EAAE,MAAA,EAAQ,eAAgB,EAAA,GAAI,KAAK,SAAU,CAAA,IAAA,CAAA;AACnD,IAAA,MAAM,UAAU,MACV,GAAA,MAAA,CAAO,KAAK,cAAe,CAAAE,YAAA,EAAS,GAAG,CACvC,GAAAA,YAAA,CAAA;AAEN,IAAI,IAAA;AACA,MAAM,KAAA,CAAA,GAAA,GAAM,QAAQ,IAAK,CAAA;AAAA,QACrB,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,OACjC,CAAA,CAAA;AAAA,aACI,KAAO,EAAA;AACZ,MAAM,KAAA,CAAA,KAAA;AAAA,QACF,kDAAA;AAAA,QACA,KAAA;AAAA,OACJ,CAAA;AACA,MAAA,KAAA,CAAM,MAAO,EAAA,CAAA;AAAA,KACjB;AAEA,IAAO,OAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,GAC/B;AAAA,EAES,OAAO,GAAa,EAAA;AACzB,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACzB,IAAI,IAAA,IAAA,EAAM,IAAI,OAAS,EAAA;AACnB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KAClB;AAEA,IAAO,OAAA,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAAA,GAC3B;AAAA,EAES,KAAQ,GAAA;AACb,IAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AACb,IAAA,OAAO,MAAM,KAAM,EAAA,CAAA;AAAA,GACvB;AACJ,CAAA,CAAA;AArEiE,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAA1D,IAAM,aAAN,GAAA","file":"CronTaskStore.cjs","sourcesContent":["import { Store } from \"@sapphire/pieces\";\nimport { CronTask } from \"./CronTask\";\nimport { CronJob } from \"cron\";\n\nexport class CronTaskStore extends Store<CronTask, \"cron-tasks\"> {\n constructor() {\n super(CronTask, { name: \"cron-tasks\" });\n }\n\n startAll() {\n for (const task of this.values()) {\n if (!task.enabled) continue;\n task.job.start();\n }\n\n Store.logger?.(\n `[STORE => ${this.name}] [START] Started all cronjob tasks.`,\n );\n return this;\n }\n\n stopAll() {\n for (const task of this.values()) {\n if (!task.job.running) continue;\n task.job.stop();\n }\n\n Store.logger?.(\n `[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`,\n );\n return this;\n }\n\n override set(key: string, value: CronTask): this {\n const options = value.options;\n\n const { sentry, defaultTimezone } = this.container.cron;\n const cronJob = sentry\n ? sentry.cron.instrumentCron(CronJob, key)\n : CronJob;\n\n try {\n value.job = cronJob.from({\n ...options,\n onTick: () => void value.run.bind(value)(),\n start: false,\n context: value,\n timeZone: options.timeZone ?? defaultTimezone,\n });\n } catch (error) {\n value.error(\n \"Encountered an error while creating the cron job\",\n error,\n );\n value.unload();\n }\n\n return super.set(key, value);\n }\n\n override delete(key: string) {\n const task = this.get(key);\n if (task?.job.running) {\n task.job.stop();\n }\n\n return super.delete(key);\n }\n\n override clear() {\n this.stopAll();\n return super.clear();\n }\n}\n"]}
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"]}
@@ -14,9 +14,7 @@ var _CronTaskPlugin = class _CronTaskPlugin extends framework.Plugin {
14
14
  }
15
15
  static async [framework.preLogin]() {
16
16
  if (framework.container.cron.disableSentry) return;
17
- framework.container.cron.sentry = await import('@sentry/node').catch(
18
- () => void 0
19
- );
17
+ framework.container.cron.sentry = await import('@sentry/node').then((mod) => mod.default).catch(() => void 0);
20
18
  }
21
19
  static [framework.postLogin]() {
22
20
  framework.container.cron.startAll();
@@ -24,18 +22,10 @@ var _CronTaskPlugin = class _CronTaskPlugin extends framework.Plugin {
24
22
  };
25
23
  __name(_CronTaskPlugin, "CronTaskPlugin");
26
24
  var CronTaskPlugin = _CronTaskPlugin;
27
- framework.SapphireClient.plugins.registerPreGenericsInitializationHook(
28
- CronTaskPlugin[framework.preGenericsInitialization],
29
- "Cron-Task-PreGenericsInitialization"
30
- );
31
- framework.SapphireClient.plugins.registerPostInitializationHook(
32
- CronTaskPlugin[framework.postInitialization],
33
- "Cron-Task-PostInitialization"
34
- );
35
- framework.SapphireClient.plugins.registerPostLoginHook(
36
- CronTaskPlugin[framework.postLogin],
37
- "Cron-Task-PostLogin"
38
- );
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");
39
29
 
40
30
  exports.CronTaskPlugin = CronTaskPlugin;
41
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":";;;;;;;AAcO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuBA,gBAAO,CAAA;AAAA,EACvC,QAAQC,mCAAyB,CAAA,CAE7B,OACF,EAAA;AACE,IAAAC,mBAAA,CAAU,IAAO,GAAA,IAAIC,yBAAgB,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,GACrD;AAAA,EAEA,QAAQC,4BAAkB,CAAwB,GAAA;AAC9C,IAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,IAAIC,uBAAA,EAAe,CAAA,CAAA;AAAA,GAC5C;AAAA,EAEA,cAAcC,kBAAQ,CAAwB,GAAA;AAC1C,IAAI,IAAAJ,mBAAA,CAAU,KAAK,aAAe,EAAA,OAAA;AAClC,IAAAA,mBAAA,CAAU,IAAK,CAAA,MAAA,GAAS,MAAM,OAAO,cAAc,CAAE,CAAA,KAAA;AAAA,MACjD,MAAM,KAAA,CAAA;AAAA,KACV,CAAA;AAAA,GACJ;AAAA,EAEA,QAAQK,mBAAS,CAAwB,GAAA;AACrC,IAAAL,mBAAA,CAAU,KAAK,QAAS,EAAA,CAAA;AAAA,GAC5B;AACJ,CAAA,CAAA;AAtB2C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,CAAA;AAApC,IAAM,cAAN,GAAA,gBAAA;AAwBPM,wBAAA,CAAe,OAAQ,CAAA,qCAAA;AAAA,EACnB,eAAeP,mCAAyB,CAAA;AAAA,EACxC,qCAAA;AACJ,CAAA,CAAA;AAEAO,wBAAA,CAAe,OAAQ,CAAA,8BAAA;AAAA,EACnB,eAAeJ,4BAAkB,CAAA;AAAA,EACjC,8BAAA;AACJ,CAAA,CAAA;AAEAI,wBAAA,CAAe,OAAQ,CAAA,qBAAA;AAAA,EACnB,eAAeD,mBAAS,CAAA;AAAA,EACxB,qBAAA;AACJ,CAAA","file":"register.cjs","sourcesContent":["import \"./index\";\n\nimport {\n container,\n Plugin,\n postInitialization,\n postLogin,\n preGenericsInitialization,\n preLogin,\n SapphireClient,\n} from \"@sapphire/framework\";\nimport type { ClientOptions } from \"discord.js\";\nimport { CronTaskHandler, CronTaskStore } from \"./index\";\n\nexport class CronTaskPlugin extends Plugin {\n static [preGenericsInitialization](\n this: SapphireClient,\n options: ClientOptions,\n ) {\n container.cron = new CronTaskHandler(options.cron);\n }\n\n static [postInitialization](this: SapphireClient) {\n this.stores.register(new CronTaskStore());\n }\n\n static async [preLogin](this: SapphireClient) {\n if (container.cron.disableSentry) return;\n container.cron.sentry = await import(\"@sentry/node\").catch(\n () => undefined,\n );\n }\n\n static [postLogin](this: SapphireClient) {\n container.cron.startAll();\n }\n}\n\nSapphireClient.plugins.registerPreGenericsInitializationHook(\n CronTaskPlugin[preGenericsInitialization],\n \"Cron-Task-PreGenericsInitialization\",\n);\n\nSapphireClient.plugins.registerPostInitializationHook(\n CronTaskPlugin[postInitialization],\n \"Cron-Task-PostInitialization\",\n);\n\nSapphireClient.plugins.registerPostLoginHook(\n CronTaskPlugin[postLogin],\n \"Cron-Task-PostLogin\",\n);\n"]}
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"]}
@@ -1,71 +1,167 @@
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://en.wikipedia.org/wiki/List_of_tz_database_time_zones
11
- * @default "UTC"
10
+ * @see https://github.com/moment/luxon/blob/master/docs/zones.md#specifying-a-zone
11
+ * @default 'system'
12
12
  */
13
- defaultTimezone?: string;
13
+ defaultTimezone: string;
14
14
  /**
15
15
  * The ability to opt-out of instrumenting cron jobs with Sentry.
16
16
  * If you don't use Sentry, you can ignore this option.
17
17
  * @see https://docs.sentry.io/product/crons/
18
- * @default undefined // technically false
18
+ * @default false
19
19
  */
20
- disableSentry?: boolean;
20
+ disableSentry: boolean;
21
21
  }
22
- type CronJobOptions = Omit<CronJobParams<null, CronTask>, "onTick" | "onComplete" | "start" | "context" | "utcOffset">;
22
+ type CronJobOptions = Omit<CronJobParams<null, CronTask>, 'onTick' | 'onComplete' | 'start' | 'context' | 'utcOffset'>;
23
23
 
24
- declare abstract class CronTask<Options extends CronTask.Options = CronTask.Options> extends Piece<Options, "cron-tasks"> {
24
+ /**
25
+ * @example
26
+ *
27
+ * ```typescript
28
+ * // ping.ts
29
+ * import { CronTask } from '@kingsworld/plugin-cron';
30
+ *
31
+ * export class PingPong extends CronTask {
32
+ * public constructor(context: CronTask.LoaderContext, options: CronTask.Options) {
33
+ * super(context, {
34
+ * ...options,
35
+ * cronTime: '* * * * *'
36
+ * });
37
+ * }
38
+ *
39
+ * public run() {
40
+ * this.info('Ping Pong! 🏓'); // CronTask[ping] Ping Pong! 🏓
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ declare abstract class CronTask<Options extends CronTask.Options = CronTask.Options> extends Piece<Options, 'cron-tasks'> {
25
46
  job: CronJob<null, CronTask>;
26
47
  constructor(context: CronTask.LoaderContext, options: Options);
27
48
  abstract run(): Awaitable<unknown>;
49
+ /**
50
+ * A helper function to log messages with the `CronTask[${name}]` prefix.
51
+ * @param message The message to include after the prefix
52
+ * @param other Extra parameters to pass to the logger
53
+ * @example
54
+ * this.info('Hello world!'); // CronTask[my-task] Hello world!
55
+ */
28
56
  info(message: string, ...other: unknown[]): void;
57
+ /**
58
+ * A helper function to log messages with the `CronTask[${name}]` prefix.
59
+ * @param message The message to include after the prefix
60
+ * @param other Extra parameters to pass to the logger
61
+ * @example
62
+ * this.error('Something went wrong!'); // CronTask[my-task] Something went wrong!
63
+ */
29
64
  error(message: string, ...other: unknown[]): void;
65
+ /**
66
+ * A helper function to log messages with the `CronTask[${name}]` prefix.
67
+ * @param message The message to include after the prefix
68
+ * @param other Extra parameters to pass to the logger
69
+ * @example
70
+ * this.warn('Something is not right!'); // CronTask[my-task] Something is not right!
71
+ */
30
72
  warn(message: string, ...other: unknown[]): void;
73
+ /**
74
+ * A helper function to log messages with the `CronTask[${name}]` prefix.
75
+ * @param message The message to include after the prefix
76
+ * @param other Extra parameters to pass to the logger
77
+ * @example
78
+ * this.debug('Something is happening!'); // CronTask[my-task] Something is happening!
79
+ */
31
80
  debug(message: string, ...other: unknown[]): void;
81
+ /**
82
+ * A helper function to log messages with the `CronTask[${name}]` prefix.
83
+ * @param message The message to include after the prefix
84
+ * @param other Extra parameters to pass to the logger
85
+ * @example
86
+ * this.trace('Loaded the file.'); // CronTask[my-task] Loaded the file.
87
+ */
32
88
  trace(message: string, ...other: unknown[]): void;
33
89
  }
34
90
  declare namespace CronTask {
35
91
  type Options = Piece.Options & CronJobOptions;
36
92
  /** @deprecated Use {@linkcode LoaderContext} instead. */
37
93
  type Context = LoaderContext;
38
- type LoaderContext = Piece.LoaderContext<"cron-tasks">;
94
+ type LoaderContext = Piece.LoaderContext<'cron-tasks'>;
39
95
  }
40
96
 
41
- declare class CronTaskStore extends Store<CronTask, "cron-tasks"> {
97
+ declare class CronTaskStore extends Store<CronTask, 'cron-tasks'> {
42
98
  constructor();
99
+ /**
100
+ * Loops over all tasks and starts those that are enabled.
101
+ * This gets called automatically when the Client is ready.
102
+ * @returns CronTaskStore
103
+ */
43
104
  startAll(): this;
105
+ /**
106
+ * Loops over all tasks and stops those that are running.
107
+ * @returns CronTaskStore
108
+ */
44
109
  stopAll(): this;
45
110
  set(key: string, value: CronTask): this;
46
111
  delete(key: string): boolean;
112
+ /**
113
+ * Stops all running cron jobs and clears the store.
114
+ * @returns void
115
+ */
47
116
  clear(): void;
48
117
  }
49
118
 
50
119
  declare class CronTaskHandler {
51
- defaultTimezone?: CronTaskHandlerOptions["defaultTimezone"];
52
- disableSentry?: boolean;
120
+ /**
121
+ * The default timezone to use for all cron tasks.
122
+ * You can override this per task, using the timeZone option.
123
+ * @see https://github.com/moment/luxon/blob/master/docs/zones.md#specifying-a-zone
124
+ * @default 'system'
125
+ */
126
+ defaultTimezone: CronTaskHandlerOptions['defaultTimezone'];
127
+ /**
128
+ * The ability to opt-out of instrumenting cron jobs with Sentry.
129
+ * If you don't use Sentry, you can ignore this option.
130
+ * @see https://docs.sentry.io/product/crons/
131
+ * @default false
132
+ */
133
+ disableSentry: boolean;
134
+ /**
135
+ * The Sentry instance to use for instrumenting cron jobs.
136
+ * This is only available when [`@sentry/node`](https://www.npmjs.com/package/@sentry/node)
137
+ * is installed and the {@linkcode disableSentry} option is set to false.
138
+ */
53
139
  sentry?: typeof Sentry;
54
140
  constructor(options?: CronTaskHandlerOptions);
141
+ /**
142
+ * Start all enabled cron jobs.
143
+ * This gets called automatically when the Client is ready.
144
+ */
55
145
  startAll(): void;
146
+ /**
147
+ * Stop all running cron jobs.
148
+ */
56
149
  stopAll(): void;
150
+ /**
151
+ * Get the cron task store.
152
+ */
57
153
  private get store();
58
154
  }
59
155
 
60
- declare module "@sapphire/pieces" {
156
+ declare module '@sapphire/pieces' {
61
157
  interface Container {
62
158
  cron: CronTaskHandler;
63
159
  }
64
160
  interface StoreRegistryEntries {
65
- "cron-tasks": CronTaskStore;
161
+ 'cron-tasks': CronTaskStore;
66
162
  }
67
163
  }
68
- declare module "discord.js" {
164
+ declare module 'discord.js' {
69
165
  interface ClientOptions {
70
166
  cron?: CronTaskHandlerOptions;
71
167
  }
@@ -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 = "1.5.0";
7
+ var version = "2.0.0-next.023f779";
8
8
 
9
9
  export { version };
10
10
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
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 interface Container {\n cron: CronTaskHandler;\n }\n\n interface StoreRegistryEntries {\n \"cron-tasks\": CronTaskStore;\n }\n}\n\ndeclare module \"discord.js\" {\n export interface ClientOptions {\n cron?: CronTaskHandlerOptions;\n }\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 = \"1.5.0\";\n"]}
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.023f779';\n"]}
@@ -3,18 +3,45 @@ 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
+ * @default 'system'
11
+ */
6
12
  __publicField(this, "defaultTimezone");
13
+ /**
14
+ * The ability to opt-out of instrumenting cron jobs with Sentry.
15
+ * If you don't use Sentry, you can ignore this option.
16
+ * @see https://docs.sentry.io/product/crons/
17
+ * @default false
18
+ */
7
19
  __publicField(this, "disableSentry");
20
+ /**
21
+ * The Sentry instance to use for instrumenting cron jobs.
22
+ * This is only available when [`@sentry/node`](https://www.npmjs.com/package/@sentry/node)
23
+ * is installed and the {@linkcode disableSentry} option is set to false.
24
+ */
8
25
  __publicField(this, "sentry");
9
- this.defaultTimezone = options?.defaultTimezone;
10
- this.disableSentry = options?.disableSentry;
26
+ this.defaultTimezone = options?.defaultTimezone ?? "system";
27
+ this.disableSentry = options?.disableSentry ?? false;
11
28
  }
29
+ /**
30
+ * Start all enabled cron jobs.
31
+ * This gets called automatically when the Client is ready.
32
+ */
12
33
  startAll() {
13
34
  this.store.startAll();
14
35
  }
36
+ /**
37
+ * Stop all running cron jobs.
38
+ */
15
39
  stopAll() {
16
40
  this.store.stopAll();
17
41
  }
42
+ /**
43
+ * Get the cron task store.
44
+ */
18
45
  get store() {
19
46
  return container.stores.get("cron-tasks");
20
47
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;AAIO,IAAM,gBAAA,GAAN,MAAM,gBAAgB,CAAA;AAAA,EAKzB,YAAY,OAAkC,EAAA;AAJ9C,IAAA,aAAA,CAAA,IAAA,EAAA,iBAAA,CAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAGI,IAAA,IAAA,CAAK,kBAAkB,OAAS,EAAA,eAAA,CAAA;AAChC,IAAA,IAAA,CAAK,gBAAgB,OAAS,EAAA,aAAA,CAAA;AAAA,GAClC;AAAA,EAEA,QAAW,GAAA;AACP,IAAA,IAAA,CAAK,MAAM,QAAS,EAAA,CAAA;AAAA,GACxB;AAAA,EAEA,OAAU,GAAA;AACN,IAAA,IAAA,CAAK,MAAM,OAAQ,EAAA,CAAA;AAAA,GACvB;AAAA,EAEA,IAAY,KAAQ,GAAA;AAChB,IAAO,OAAA,SAAA,CAAU,MAAO,CAAA,GAAA,CAAI,YAAY,CAAA,CAAA;AAAA,GAC5C;AACJ,CAAA,CAAA;AArB6B,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,CAAA;AAAtB,IAAM,eAAN,GAAA","file":"CronTaskHandler.mjs","sourcesContent":["import { container } from \"@sapphire/framework\";\nimport type { CronTaskHandlerOptions } from \"./types/CronTaskTypes\";\nimport type Sentry from \"@sentry/node\";\n\nexport class CronTaskHandler {\n defaultTimezone?: CronTaskHandlerOptions[\"defaultTimezone\"];\n disableSentry?: boolean;\n sentry?: typeof Sentry;\n\n constructor(options?: CronTaskHandlerOptions) {\n this.defaultTimezone = options?.defaultTimezone;\n this.disableSentry = options?.disableSentry;\n }\n\n startAll() {\n this.store.startAll();\n }\n\n stopAll() {\n this.store.stopAll();\n }\n\n private get store() {\n return container.stores.get(\"cron-tasks\");\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;AAIO,IAAM,gBAAA,GAAN,MAAM,gBAAgB,CAAA;AAAA,EAwBrB,YAAY,OAAkC,EAAA;AAjBrD;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,QAAA,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;AAlD6B,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 * @default 'system'\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 ?? 'system';\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":";;;AAKO,IAAe,SAAA,GAAf,MAAe,SAAA,SAEZ,KAA6B,CAAA;AAAA,EAGnC,WAAA,CAAY,SAAiC,OAAkB,EAAA;AAC3D,IAAA,KAAA,CAAM,SAAS,OAAO,CAAA,CAAA;AAAA,GAC1B;AAAA,EAIA,IAAA,CAAK,YAAoB,KAAkB,EAAA;AACvC,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,IAAA;AAAA,MAClB,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACjC,GAAG,KAAA;AAAA,KACP,CAAA;AAAA,GACJ;AAAA,EAEA,KAAA,CAAM,YAAoB,KAAkB,EAAA;AACxC,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,KAAA;AAAA,MAClB,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACjC,GAAG,KAAA;AAAA,KACP,CAAA;AAAA,GACJ;AAAA,EAEA,IAAA,CAAK,YAAoB,KAAkB,EAAA;AACvC,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,IAAA;AAAA,MAClB,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACjC,GAAG,KAAA;AAAA,KACP,CAAA;AAAA,GACJ;AAAA,EAEA,KAAA,CAAM,YAAoB,KAAkB,EAAA;AACxC,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,KAAA;AAAA,MAClB,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACjC,GAAG,KAAA;AAAA,KACP,CAAA;AAAA,GACJ;AAAA,EAEA,KAAA,CAAM,YAAoB,KAAkB,EAAA;AACxC,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,KAAA;AAAA,MAClB,CAAY,SAAA,EAAA,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACjC,GAAG,KAAA;AAAA,KACP,CAAA;AAAA,GACJ;AACJ,CAAA,CAAA;AA3CuC,MAAA,CAAA,SAAA,EAAA,UAAA,CAAA,CAAA;AAFhC,IAAe,QAAf,GAAA","file":"CronTask.mjs","sourcesContent":["import { Piece } from \"@sapphire/pieces\";\nimport type { CronJob } from \"cron\";\nimport type { CronJobOptions } from \"../types/CronTaskTypes\";\nimport type { Awaitable } from \"@sapphire/framework\";\n\nexport abstract class CronTask<\n Options extends CronTask.Options = CronTask.Options,\n> extends Piece<Options, \"cron-tasks\"> {\n declare job: CronJob<null, CronTask>;\n\n constructor(context: CronTask.LoaderContext, options: Options) {\n super(context, options);\n }\n\n abstract run(): Awaitable<unknown>;\n\n info(message: string, ...other: unknown[]) {\n this.container.logger.info(\n `CronTask[${this.name}] ${message}`,\n ...other,\n );\n }\n\n error(message: string, ...other: unknown[]) {\n this.container.logger.error(\n `CronTask[${this.name}] ${message}`,\n ...other,\n );\n }\n\n warn(message: string, ...other: unknown[]) {\n this.container.logger.warn(\n `CronTask[${this.name}] ${message}`,\n ...other,\n );\n }\n\n debug(message: string, ...other: unknown[]) {\n this.container.logger.debug(\n `CronTask[${this.name}] ${message}`,\n ...other,\n );\n }\n\n trace(message: string, ...other: unknown[]) {\n this.container.logger.trace(\n `CronTask[${this.name}] ${message}`,\n ...other,\n );\n }\n}\n\nexport namespace CronTask {\n export type Options = Piece.Options & CronJobOptions;\n /** @deprecated Use {@linkcode LoaderContext} instead. */\n export type Context = LoaderContext;\n export type LoaderContext = Piece.LoaderContext<\"cron-tasks\">;\n}\n"]}
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.options;
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
- "Encountered an error while creating the cron job",
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,EAC7D,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,QAAU,EAAA,EAAE,IAAM,EAAA,YAAA,EAAc,CAAA,CAAA;AAAA,GAC1C;AAAA,EAEA,QAAW,GAAA;AACP,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AAC9B,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA,SAAA;AACnB,MAAA,IAAA,CAAK,IAAI,KAAM,EAAA,CAAA;AAAA,KACnB;AAEA,IAAM,KAAA,CAAA,MAAA;AAAA,MACF,CAAA,UAAA,EAAa,KAAK,IAAI,CAAA,oCAAA,CAAA;AAAA,KAC1B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAEA,OAAU,GAAA;AACN,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AAC9B,MAAI,IAAA,CAAC,IAAK,CAAA,GAAA,CAAI,OAAS,EAAA,SAAA;AACvB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KAClB;AAEA,IAAM,KAAA,CAAA,MAAA;AAAA,MACF,CAAA,UAAA,EAAa,KAAK,IAAI,CAAA,mCAAA,CAAA;AAAA,KAC1B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAES,GAAA,CAAI,KAAa,KAAuB,EAAA;AAC7C,IAAA,MAAM,UAAU,KAAM,CAAA,OAAA,CAAA;AAEtB,IAAA,MAAM,EAAE,MAAA,EAAQ,eAAgB,EAAA,GAAI,KAAK,SAAU,CAAA,IAAA,CAAA;AACnD,IAAA,MAAM,UAAU,MACV,GAAA,MAAA,CAAO,KAAK,cAAe,CAAA,OAAA,EAAS,GAAG,CACvC,GAAA,OAAA,CAAA;AAEN,IAAI,IAAA;AACA,MAAM,KAAA,CAAA,GAAA,GAAM,QAAQ,IAAK,CAAA;AAAA,QACrB,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,OACjC,CAAA,CAAA;AAAA,aACI,KAAO,EAAA;AACZ,MAAM,KAAA,CAAA,KAAA;AAAA,QACF,kDAAA;AAAA,QACA,KAAA;AAAA,OACJ,CAAA;AACA,MAAA,KAAA,CAAM,MAAO,EAAA,CAAA;AAAA,KACjB;AAEA,IAAO,OAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,GAC/B;AAAA,EAES,OAAO,GAAa,EAAA;AACzB,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACzB,IAAI,IAAA,IAAA,EAAM,IAAI,OAAS,EAAA;AACnB,MAAA,IAAA,CAAK,IAAI,IAAK,EAAA,CAAA;AAAA,KAClB;AAEA,IAAO,OAAA,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAAA,GAC3B;AAAA,EAES,KAAQ,GAAA;AACb,IAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AACb,IAAA,OAAO,MAAM,KAAM,EAAA,CAAA;AAAA,GACvB;AACJ,CAAA,CAAA;AArEiE,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAA1D,IAAM,aAAN,GAAA","file":"CronTaskStore.mjs","sourcesContent":["import { Store } from \"@sapphire/pieces\";\nimport { CronTask } from \"./CronTask\";\nimport { CronJob } from \"cron\";\n\nexport class CronTaskStore extends Store<CronTask, \"cron-tasks\"> {\n constructor() {\n super(CronTask, { name: \"cron-tasks\" });\n }\n\n startAll() {\n for (const task of this.values()) {\n if (!task.enabled) continue;\n task.job.start();\n }\n\n Store.logger?.(\n `[STORE => ${this.name}] [START] Started all cronjob tasks.`,\n );\n return this;\n }\n\n stopAll() {\n for (const task of this.values()) {\n if (!task.job.running) continue;\n task.job.stop();\n }\n\n Store.logger?.(\n `[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`,\n );\n return this;\n }\n\n override set(key: string, value: CronTask): this {\n const options = value.options;\n\n const { sentry, defaultTimezone } = this.container.cron;\n const cronJob = sentry\n ? sentry.cron.instrumentCron(CronJob, key)\n : CronJob;\n\n try {\n value.job = cronJob.from({\n ...options,\n onTick: () => void value.run.bind(value)(),\n start: false,\n context: value,\n timeZone: options.timeZone ?? defaultTimezone,\n });\n } catch (error) {\n value.error(\n \"Encountered an error while creating the cron job\",\n error,\n );\n value.unload();\n }\n\n return super.set(key, value);\n }\n\n override delete(key: string) {\n const task = this.get(key);\n if (task?.job.running) {\n task.job.stop();\n }\n\n return super.delete(key);\n }\n\n override clear() {\n this.stopAll();\n return super.clear();\n }\n}\n"]}
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"]}