@kingsworld/plugin-cron 1.3.0 → 1.4.0

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/README.md CHANGED
@@ -23,7 +23,7 @@ new SapphireClient({
23
23
  ...otherClientOptions,
24
24
  cron: {
25
25
  // the cron object is optional
26
- defaultTimezone: "Europe/London", // the cron pacakge defaults to UTC
26
+ defaultTimezone: "Europe/London", // the cron package defaults to UTC
27
27
  },
28
28
  });
29
29
  ```
@@ -6,7 +6,7 @@ var CronTaskStore_cjs = require('./lib/structures/CronTaskStore.cjs');
6
6
  var CronTaskTypes_cjs = require('./lib/types/CronTaskTypes.cjs');
7
7
 
8
8
  // src/index.ts
9
- var version = "1.3.0";
9
+ var version = "1.4.0";
10
10
 
11
11
  exports.version = version;
12
12
  Object.keys(CronTaskHandler_cjs).forEach(function (k) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";AAIA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAwBP,IAAM,UAAkB","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.3.0';\n"]}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";AAIA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAwBP,IAAM,UAAkB","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.4.0\";\n"]}
@@ -1,9 +1,23 @@
1
1
  import { Piece, Store } from '@sapphire/pieces';
2
2
  import { CronJobParams, CronJob } from 'cron';
3
3
  import { Awaitable } from '@sapphire/framework';
4
+ import Sentry from '@sentry/node';
4
5
 
5
6
  interface CronTaskHandlerOptions {
7
+ /**
8
+ * The default timezone to use for all cron tasks.
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"
12
+ */
6
13
  defaultTimezone?: string;
14
+ /**
15
+ * The Sentry instance to use for instrumenting cron jobs.
16
+ * If you don't use Sentry, you can ignore this option.
17
+ * @see https://docs.sentry.io/product/crons/
18
+ * @default undefined
19
+ */
20
+ sentry?: typeof Sentry;
7
21
  }
8
22
  type CronJobOptions = Omit<CronJobParams<null, CronTask>, "onTick" | "onComplete" | "start" | "context" | "utcOffset">;
9
23
 
@@ -35,6 +49,7 @@ declare class CronTaskStore extends Store<CronTask, "cron-tasks"> {
35
49
 
36
50
  declare class CronTaskHandler {
37
51
  defaultTimezone?: CronTaskHandlerOptions["defaultTimezone"];
52
+ sentry?: CronTaskHandlerOptions["sentry"];
38
53
  constructor(options?: CronTaskHandlerOptions);
39
54
  startAll(): void;
40
55
  stopAll(): void;
@@ -12,7 +12,9 @@ var __publicField = (obj, key, value) => {
12
12
  var _CronTaskHandler = class _CronTaskHandler {
13
13
  constructor(options) {
14
14
  __publicField(this, "defaultTimezone");
15
+ __publicField(this, "sentry");
15
16
  this.defaultTimezone = options?.defaultTimezone;
17
+ this.sentry = options?.sentry;
16
18
  }
17
19
  startAll() {
18
20
  this.store.startAll();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,SAAS,iBAAiB;AAGnB,IAAM,mBAAN,MAAM,iBAAgB;AAAA,EAGzB,YAAY,SAAkC;AAF9C;AAGI,SAAK,kBAAkB,SAAS;AAAA,EACpC;AAAA,EAEA,WAAW;AACP,SAAK,MAAM,SAAS;AAAA,EACxB;AAAA,EAEA,UAAU;AACN,SAAK,MAAM,QAAQ;AAAA,EACvB;AAAA,EAEA,IAAY,QAAQ;AAChB,WAAO,UAAU,OAAO,IAAI,YAAY;AAAA,EAC5C;AACJ;AAlB6B;AAAtB,IAAM,kBAAN","sourcesContent":["import { container } from \"@sapphire/framework\";\nimport type { CronTaskHandlerOptions } from \"./types/CronTaskTypes\";\n\nexport class CronTaskHandler {\n defaultTimezone?: CronTaskHandlerOptions[\"defaultTimezone\"];\n\n constructor(options?: CronTaskHandlerOptions) {\n this.defaultTimezone = options?.defaultTimezone;\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":";;;;;;;;;AAAA,SAAS,iBAAiB;AAGnB,IAAM,mBAAN,MAAM,iBAAgB;AAAA,EAIzB,YAAY,SAAkC;AAH9C;AACA;AAGI,SAAK,kBAAkB,SAAS;AAChC,SAAK,SAAS,SAAS;AAAA,EAC3B;AAAA,EAEA,WAAW;AACP,SAAK,MAAM,SAAS;AAAA,EACxB;AAAA,EAEA,UAAU;AACN,SAAK,MAAM,QAAQ;AAAA,EACvB;AAAA,EAEA,IAAY,QAAQ;AAChB,WAAO,UAAU,OAAO,IAAI,YAAY;AAAA,EAC5C;AACJ;AApB6B;AAAtB,IAAM,kBAAN","sourcesContent":["import { container } from \"@sapphire/framework\";\nimport type { CronTaskHandlerOptions } from \"./types/CronTaskTypes\";\n\nexport class CronTaskHandler {\n defaultTimezone?: CronTaskHandlerOptions[\"defaultTimezone\"];\n sentry?: CronTaskHandlerOptions[\"sentry\"];\n\n constructor(options?: CronTaskHandlerOptions) {\n this.defaultTimezone = options?.defaultTimezone;\n this.sentry = options?.sentry;\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"]}
@@ -34,13 +34,15 @@ var _CronTaskStore = class _CronTaskStore extends pieces.Store {
34
34
  }
35
35
  set(key, value) {
36
36
  const options = value.options;
37
+ const { sentry, defaultTimezone } = this.container.cron;
38
+ const cronJob = sentry ? sentry.cron.instrumentCron(cron.CronJob, key) : cron.CronJob;
37
39
  try {
38
- value.job = cron.CronJob.from({
40
+ value.job = cronJob.from({
39
41
  ...options,
40
42
  onTick: () => void value.run.bind(value)(),
41
43
  start: false,
42
44
  context: value,
43
- timeZone: options.timeZone ?? this.container.cron.defaultTimezone
45
+ timeZone: options.timeZone ?? defaultTimezone
44
46
  });
45
47
  } catch (error) {
46
48
  value.error(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/structures/CronTaskStore.ts"],"names":[],"mappings":";;;;AAAA,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AAEjB,IAAM,iBAAN,MAAM,uBAAsB,MAA8B;AAAA,EAC7D,cAAc;AACV,UAAM,UAAU,EAAE,MAAM,aAAa,CAAC;AAAA,EAC1C;AAAA,EAEA,WAAW;AACP,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK;AAAS;AACnB,WAAK,IAAI,MAAM;AAAA,IACnB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU;AACN,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK,IAAI;AAAS;AACvB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAES,IAAI,KAAa,OAAuB;AAC7C,UAAM,UAAU,MAAM;AAEtB,QAAI;AACA,YAAM,MAAM,QAAQ,KAAK;AAAA,QACrB,GAAG;AAAA,QACH,QAAQ,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE;AAAA,QACzC,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UACI,QAAQ,YAAY,KAAK,UAAU,KAAK;AAAA,MAChD,CAAC;AAAA,IACL,SAAS,OAAO;AACZ,YAAM;AAAA,QACF;AAAA,QACA;AAAA,MACJ;AACA,YAAM,OAAO;AAAA,IACjB;AAEA,WAAO,MAAM,IAAI,KAAK,KAAK;AAAA,EAC/B;AAAA,EAES,OAAO,KAAa;AACzB,UAAM,OAAO,KAAK,IAAI,GAAG;AACzB,QAAI,MAAM,IAAI,SAAS;AACnB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,WAAO,MAAM,OAAO,GAAG;AAAA,EAC3B;AAAA,EAES,QAAQ;AACb,SAAK,QAAQ;AACb,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;AAjEiE;AAA1D,IAAM,gBAAN","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 try {\n value.job = CronJob.from({\n ...options,\n onTick: () => void value.run.bind(value)(),\n start: false,\n context: value,\n timeZone:\n options.timeZone ?? this.container.cron.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":";;;;AAAA,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AAEjB,IAAM,iBAAN,MAAM,uBAAsB,MAA8B;AAAA,EAC7D,cAAc;AACV,UAAM,UAAU,EAAE,MAAM,aAAa,CAAC;AAAA,EAC1C;AAAA,EAEA,WAAW;AACP,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK;AAAS;AACnB,WAAK,IAAI,MAAM;AAAA,IACnB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU;AACN,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK,IAAI;AAAS;AACvB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAES,IAAI,KAAa,OAAuB;AAC7C,UAAM,UAAU,MAAM;AAEtB,UAAM,EAAE,QAAQ,gBAAgB,IAAI,KAAK,UAAU;AACnD,UAAM,UAAU,SACV,OAAO,KAAK,eAAe,SAAS,GAAG,IACvC;AAEN,QAAI;AACA,YAAM,MAAM,QAAQ,KAAK;AAAA,QACrB,GAAG;AAAA,QACH,QAAQ,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE;AAAA,QACzC,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UAAU,QAAQ,YAAY;AAAA,MAClC,CAAC;AAAA,IACL,SAAS,OAAO;AACZ,YAAM;AAAA,QACF;AAAA,QACA;AAAA,MACJ;AACA,YAAM,OAAO;AAAA,IACjB;AAEA,WAAO,MAAM,IAAI,KAAK,KAAK;AAAA,EAC/B;AAAA,EAES,OAAO,KAAa;AACzB,UAAM,OAAO,KAAK,IAAI,GAAG;AACzB,QAAI,MAAM,IAAI,SAAS;AACnB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,WAAO,MAAM,OAAO,GAAG;AAAA,EAC3B;AAAA,EAES,QAAQ;AACb,SAAK,QAAQ;AACb,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;AArEiE;AAA1D,IAAM,gBAAN","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,9 +1,23 @@
1
1
  import { Piece, Store } from '@sapphire/pieces';
2
2
  import { CronJobParams, CronJob } from 'cron';
3
3
  import { Awaitable } from '@sapphire/framework';
4
+ import Sentry from '@sentry/node';
4
5
 
5
6
  interface CronTaskHandlerOptions {
7
+ /**
8
+ * The default timezone to use for all cron tasks.
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"
12
+ */
6
13
  defaultTimezone?: string;
14
+ /**
15
+ * The Sentry instance to use for instrumenting cron jobs.
16
+ * If you don't use Sentry, you can ignore this option.
17
+ * @see https://docs.sentry.io/product/crons/
18
+ * @default undefined
19
+ */
20
+ sentry?: typeof Sentry;
7
21
  }
8
22
  type CronJobOptions = Omit<CronJobParams<null, CronTask>, "onTick" | "onComplete" | "start" | "context" | "utcOffset">;
9
23
 
@@ -35,6 +49,7 @@ declare class CronTaskStore extends Store<CronTask, "cron-tasks"> {
35
49
 
36
50
  declare class CronTaskHandler {
37
51
  defaultTimezone?: CronTaskHandlerOptions["defaultTimezone"];
52
+ sentry?: CronTaskHandlerOptions["sentry"];
38
53
  constructor(options?: CronTaskHandlerOptions);
39
54
  startAll(): void;
40
55
  stopAll(): void;
@@ -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.3.0";
7
+ var version = "1.4.0";
8
8
 
9
9
  export { version };
10
10
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;AAIA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAwBP,IAAM,UAAkB","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.3.0';\n"]}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;AAIA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAwBP,IAAM,UAAkB","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.4.0\";\n"]}
@@ -4,7 +4,9 @@ import { container } from '@sapphire/framework';
4
4
  var _CronTaskHandler = class _CronTaskHandler {
5
5
  constructor(options) {
6
6
  __publicField(this, "defaultTimezone");
7
+ __publicField(this, "sentry");
7
8
  this.defaultTimezone = options?.defaultTimezone;
9
+ this.sentry = options?.sentry;
8
10
  }
9
11
  startAll() {
10
12
  this.store.startAll();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;;;;AAAA,SAAS,iBAAiB;AAGnB,IAAM,mBAAN,MAAM,iBAAgB;AAAA,EAGzB,YAAY,SAAkC;AAF9C;AAGI,SAAK,kBAAkB,SAAS;AAAA,EACpC;AAAA,EAEA,WAAW;AACP,SAAK,MAAM,SAAS;AAAA,EACxB;AAAA,EAEA,UAAU;AACN,SAAK,MAAM,QAAQ;AAAA,EACvB;AAAA,EAEA,IAAY,QAAQ;AAChB,WAAO,UAAU,OAAO,IAAI,YAAY;AAAA,EAC5C;AACJ;AAlB6B;AAAtB,IAAM,kBAAN","sourcesContent":["import { container } from \"@sapphire/framework\";\nimport type { CronTaskHandlerOptions } from \"./types/CronTaskTypes\";\n\nexport class CronTaskHandler {\n defaultTimezone?: CronTaskHandlerOptions[\"defaultTimezone\"];\n\n constructor(options?: CronTaskHandlerOptions) {\n this.defaultTimezone = options?.defaultTimezone;\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":";;;;;;AAAA,SAAS,iBAAiB;AAGnB,IAAM,mBAAN,MAAM,iBAAgB;AAAA,EAIzB,YAAY,SAAkC;AAH9C;AACA;AAGI,SAAK,kBAAkB,SAAS;AAChC,SAAK,SAAS,SAAS;AAAA,EAC3B;AAAA,EAEA,WAAW;AACP,SAAK,MAAM,SAAS;AAAA,EACxB;AAAA,EAEA,UAAU;AACN,SAAK,MAAM,QAAQ;AAAA,EACvB;AAAA,EAEA,IAAY,QAAQ;AAChB,WAAO,UAAU,OAAO,IAAI,YAAY;AAAA,EAC5C;AACJ;AApB6B;AAAtB,IAAM,kBAAN","sourcesContent":["import { container } from \"@sapphire/framework\";\nimport type { CronTaskHandlerOptions } from \"./types/CronTaskTypes\";\n\nexport class CronTaskHandler {\n defaultTimezone?: CronTaskHandlerOptions[\"defaultTimezone\"];\n sentry?: CronTaskHandlerOptions[\"sentry\"];\n\n constructor(options?: CronTaskHandlerOptions) {\n this.defaultTimezone = options?.defaultTimezone;\n this.sentry = options?.sentry;\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"]}
@@ -31,13 +31,15 @@ var _CronTaskStore = class _CronTaskStore extends Store {
31
31
  }
32
32
  set(key, value) {
33
33
  const options = value.options;
34
+ const { sentry, defaultTimezone } = this.container.cron;
35
+ const cronJob = sentry ? sentry.cron.instrumentCron(CronJob, key) : CronJob;
34
36
  try {
35
- value.job = CronJob.from({
37
+ value.job = cronJob.from({
36
38
  ...options,
37
39
  onTick: () => void value.run.bind(value)(),
38
40
  start: false,
39
41
  context: value,
40
- timeZone: options.timeZone ?? this.container.cron.defaultTimezone
42
+ timeZone: options.timeZone ?? defaultTimezone
41
43
  });
42
44
  } catch (error) {
43
45
  value.error(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/structures/CronTaskStore.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AAEjB,IAAM,iBAAN,MAAM,uBAAsB,MAA8B;AAAA,EAC7D,cAAc;AACV,UAAM,UAAU,EAAE,MAAM,aAAa,CAAC;AAAA,EAC1C;AAAA,EAEA,WAAW;AACP,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK;AAAS;AACnB,WAAK,IAAI,MAAM;AAAA,IACnB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU;AACN,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK,IAAI;AAAS;AACvB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAES,IAAI,KAAa,OAAuB;AAC7C,UAAM,UAAU,MAAM;AAEtB,QAAI;AACA,YAAM,MAAM,QAAQ,KAAK;AAAA,QACrB,GAAG;AAAA,QACH,QAAQ,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE;AAAA,QACzC,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UACI,QAAQ,YAAY,KAAK,UAAU,KAAK;AAAA,MAChD,CAAC;AAAA,IACL,SAAS,OAAO;AACZ,YAAM;AAAA,QACF;AAAA,QACA;AAAA,MACJ;AACA,YAAM,OAAO;AAAA,IACjB;AAEA,WAAO,MAAM,IAAI,KAAK,KAAK;AAAA,EAC/B;AAAA,EAES,OAAO,KAAa;AACzB,UAAM,OAAO,KAAK,IAAI,GAAG;AACzB,QAAI,MAAM,IAAI,SAAS;AACnB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,WAAO,MAAM,OAAO,GAAG;AAAA,EAC3B;AAAA,EAES,QAAQ;AACb,SAAK,QAAQ;AACb,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;AAjEiE;AAA1D,IAAM,gBAAN","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 try {\n value.job = CronJob.from({\n ...options,\n onTick: () => void value.run.bind(value)(),\n start: false,\n context: value,\n timeZone:\n options.timeZone ?? this.container.cron.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":";;;;;AAAA,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AAEjB,IAAM,iBAAN,MAAM,uBAAsB,MAA8B;AAAA,EAC7D,cAAc;AACV,UAAM,UAAU,EAAE,MAAM,aAAa,CAAC;AAAA,EAC1C;AAAA,EAEA,WAAW;AACP,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK;AAAS;AACnB,WAAK,IAAI,MAAM;AAAA,IACnB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU;AACN,eAAW,QAAQ,KAAK,OAAO,GAAG;AAC9B,UAAI,CAAC,KAAK,IAAI;AAAS;AACvB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,UAAM;AAAA,MACF,aAAa,KAAK,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAES,IAAI,KAAa,OAAuB;AAC7C,UAAM,UAAU,MAAM;AAEtB,UAAM,EAAE,QAAQ,gBAAgB,IAAI,KAAK,UAAU;AACnD,UAAM,UAAU,SACV,OAAO,KAAK,eAAe,SAAS,GAAG,IACvC;AAEN,QAAI;AACA,YAAM,MAAM,QAAQ,KAAK;AAAA,QACrB,GAAG;AAAA,QACH,QAAQ,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE;AAAA,QACzC,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UAAU,QAAQ,YAAY;AAAA,MAClC,CAAC;AAAA,IACL,SAAS,OAAO;AACZ,YAAM;AAAA,QACF;AAAA,QACA;AAAA,MACJ;AACA,YAAM,OAAO;AAAA,IACjB;AAEA,WAAO,MAAM,IAAI,KAAK,KAAK;AAAA,EAC/B;AAAA,EAES,OAAO,KAAa;AACzB,UAAM,OAAO,KAAK,IAAI,GAAG;AACzB,QAAI,MAAM,IAAI,SAAS;AACnB,WAAK,IAAI,KAAK;AAAA,IAClB;AAEA,WAAO,MAAM,OAAO,GAAG;AAAA,EAC3B;AAAA,EAES,QAAQ;AACb,SAAK,QAAQ;AACb,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;AArEiE;AAA1D,IAAM,gBAAN","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"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@kingsworld/plugin-cron",
3
3
  "description": "A simple @sapphire/framework plugin that aims to make use of the cron package and allow users to make cron jobs within their Sapphire discord bot.",
4
- "version": "1.3.0",
4
+ "version": "1.4.0",
5
5
  "author": "Seren_Modz 21 <seren@kings-world.net>",
6
6
  "license": "MIT",
7
7
  "main": "dist/cjs/index.cjs",
8
8
  "module": "dist/esm/index.mjs",
9
- "types": "dist/cjs/index.d.ts",
9
+ "types": "dist/cjs/index.d.cts",
10
10
  "exports": {
11
11
  ".": {
12
12
  "import": {
@@ -14,7 +14,7 @@
14
14
  "default": "./dist/esm/index.mjs"
15
15
  },
16
16
  "require": {
17
- "types": "./dist/cjs/index.d.ts",
17
+ "types": "./dist/cjs/index.d.cts",
18
18
  "default": "./dist/cjs/index.cjs"
19
19
  }
20
20
  },
@@ -24,7 +24,7 @@
24
24
  "default": "./dist/esm/register.mjs"
25
25
  },
26
26
  "require": {
27
- "types": "./dist/cjs/register.d.ts",
27
+ "types": "./dist/cjs/register.d.cts",
28
28
  "default": "./dist/cjs/register.cjs"
29
29
  }
30
30
  }
@@ -34,22 +34,26 @@
34
34
  "./dist/esm/register.mjs"
35
35
  ],
36
36
  "scripts": {
37
- "build": "tsup && yarn build:types",
37
+ "build": "tsup && yarn build:types && yarn build:rename-cjs-register",
38
38
  "build:types": "concurrently \"yarn:build:types:*\"",
39
- "build:types:cjs": "rollup-type-bundler -d dist/cjs",
39
+ "build:types:cjs": "rollup-type-bundler -d dist/cjs -ot .cts",
40
40
  "build:types:esm": "rollup-type-bundler -d dist/esm -t .mts",
41
41
  "build:types:cleanup": "tsx ../../scripts/clean-register-imports.mts",
42
+ "build:rename-cjs-register": "tsx ../../scripts/rename-cjs-register.mts",
42
43
  "typecheck": "tsc -b src"
43
44
  },
44
45
  "dependencies": {
45
46
  "cron": "^3.1.6"
46
47
  },
48
+ "optionalDependencies": {
49
+ "@sentry/node": "^7.98.0"
50
+ },
47
51
  "devDependencies": {
48
- "@favware/rollup-type-bundler": "^3.2.1",
49
- "@types/node": "^20.10.4",
52
+ "@favware/rollup-type-bundler": "^3.3.0",
53
+ "@types/node": "^20.11.6",
50
54
  "concurrently": "^8.2.2",
51
55
  "tsup": "^8.0.1",
52
- "tsx": "^4.6.2",
56
+ "tsx": "^4.7.0",
53
57
  "typescript": "^5.3.3"
54
58
  },
55
59
  "homepage": "https://github.com/Kings-World/sapphire-plugins",
File without changes