@stonyx/cron 0.2.1-beta.33 → 0.2.1-beta.35

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.
@@ -127,12 +127,13 @@ export function nextOccurrence(expr, afterMs, tz) {
127
127
  for (const { type, value } of formatter.formatToParts(date)) {
128
128
  parts[type] = value;
129
129
  }
130
+ const hourStr = parts.hour ?? '0';
130
131
  return {
131
- year: Number(parts.year),
132
- month: Number(parts.month),
133
- day: Number(parts.day),
134
- hour: Number(parts.hour === '24' ? 0 : parts.hour),
135
- minute: Number(parts.minute),
132
+ year: Number(parts.year ?? '0'),
133
+ month: Number(parts.month ?? '0'),
134
+ day: Number(parts.day ?? '0'),
135
+ hour: Number(hourStr === '24' ? '0' : hourStr),
136
+ minute: Number(parts.minute ?? '0'),
136
137
  weekday: dayMap[parts.weekday] ?? 0,
137
138
  };
138
139
  }
package/dist/main.js CHANGED
@@ -34,13 +34,18 @@ export default class Cron {
34
34
  if (heap.isEmpty())
35
35
  return;
36
36
  const nextJob = heap.peek();
37
+ if (!nextJob)
38
+ return;
37
39
  const delay = Math.max(0, nextJob.nextTrigger - getTimestamp()) * 1000;
38
40
  this.timer = setTimeout(() => this.runDueJobs(), delay);
39
41
  }
40
42
  async runDueJobs() {
41
43
  const now = getTimestamp();
42
44
  const { heap } = this;
43
- while (!heap.isEmpty() && heap.peek().nextTrigger <= now) {
45
+ while (!heap.isEmpty()) {
46
+ const next = heap.peek();
47
+ if (!next || next.nextTrigger > now)
48
+ break;
44
49
  const job = heap.pop();
45
50
  if (config.debug)
46
51
  this.log('job has been triggered', job.key);
package/dist/min-heap.js CHANGED
@@ -5,10 +5,13 @@ export default class MinHeap {
5
5
  this.bubbleUp();
6
6
  }
7
7
  pop() {
8
- if (this.items.length === 1)
8
+ if (this.items.length <= 1)
9
9
  return this.items.pop();
10
10
  const top = this.items[0];
11
- this.items[0] = this.items.pop();
11
+ const last = this.items.pop();
12
+ if (last === undefined)
13
+ return top;
14
+ this.items[0] = last;
12
15
  this.bubbleDown();
13
16
  return top;
14
17
  }
@@ -50,6 +53,8 @@ export default class MinHeap {
50
53
  if (idx === -1)
51
54
  return;
52
55
  const end = this.items.pop();
56
+ if (end === undefined)
57
+ return;
53
58
  if (idx < this.items.length) {
54
59
  this.items[idx] = end;
55
60
  this.bubbleUp();
package/dist/run-log.js CHANGED
@@ -28,6 +28,8 @@ export default class RunLog {
28
28
  this.entries.set(entry.jobId, []);
29
29
  }
30
30
  const logs = this.entries.get(entry.jobId);
31
+ if (!logs)
32
+ return;
31
33
  logs.push(log);
32
34
  // Auto-prune
33
35
  if (logs.length > this.maxEntries) {
package/dist/service.js CHANGED
@@ -192,7 +192,7 @@ export default class CronService {
192
192
  const due = [];
193
193
  while (!this.heap.isEmpty()) {
194
194
  const peek = this.heap.peek();
195
- if (peek.nextTrigger > nowMs)
195
+ if (!peek || peek.nextTrigger > nowMs)
196
196
  break;
197
197
  this.heap.pop();
198
198
  const job = this.jobs.get(peek.key);
@@ -219,11 +219,12 @@ export default class CronService {
219
219
  }
220
220
  catch (err) {
221
221
  status = 'error';
222
- error = err?.message || String(err);
222
+ error = err instanceof Error ? err.message : String(err);
223
223
  this.log(`Job "${job.name}" (${job.id}) failed: ${error}`);
224
224
  }
225
225
  const durationMs = Date.now() - startMs;
226
- applyResult(job, status, error, durationMs);
226
+ const validStatus = (status === 'ok' || status === 'error' || status === 'skipped') ? status : 'error';
227
+ applyResult(job, validStatus, error, durationMs);
227
228
  // Log the run
228
229
  this.runLog.record({
229
230
  jobId: job.id,
@@ -253,6 +254,8 @@ export default class CronService {
253
254
  const remaining = [];
254
255
  while (!this.heap.isEmpty()) {
255
256
  const item = this.heap.pop();
257
+ if (!item)
258
+ break;
256
259
  if (item.key !== id)
257
260
  remaining.push(item);
258
261
  }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "keywords": [
4
4
  "stonyx-module"
5
5
  ],
6
- "version": "0.2.1-beta.33",
6
+ "version": "0.2.1-beta.35",
7
7
  "description": "Cron/job scheduler for Stonyx framework",
8
8
  "main": "dist/main.js",
9
9
  "types": "dist/main.d.ts",