@kyo-services/schedulewise 2.2.0 → 2.2.2

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/dist/Task.js CHANGED
@@ -33,7 +33,7 @@ export class Task {
33
33
  this.scheduler = scheduler;
34
34
  this.executionCount = 0;
35
35
  this.isEnabled = true;
36
- this.lastExecutionTime = new Date(0);
36
+ this.lastExecutionTime = executeImmediately ? new Date(0) : new Date();
37
37
  }
38
38
  /**
39
39
  * Executes the task callback
package/dist/Task.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Task.js","sourceRoot":"","sources":["../src/Task.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,IAAI;IAkBO;IACA;IACR;IACA;IACA;IACA;IAtBJ,SAAS,CAAgB;IAC1B,iBAAiB,CAAO;IACxB,cAAc,CAAS;IACvB,SAAS,CAAU;IAE1B;;;;;;;;;OASG;IACH,YACI,SAAwB,EACR,IAAwB,EACxB,EAAU,EAClB,QAAsB,EACtB,QAAgB,EAChB,kBAA2B,EAC3B,SAAkB;QALV,SAAI,GAAJ,IAAI,CAAoB;QACxB,OAAE,GAAF,EAAE,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAc;QACtB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,uBAAkB,GAAlB,kBAAkB,CAAS;QAC3B,cAAS,GAAT,SAAS,CAAS;QAE1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,WAAiB;QAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;QACrC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,MAAM;QACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,OAAkD,EAAE,WAA0B;QACxF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QACrD,IAAI,WAAW;YAAE,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,WAAmB;QACpC,OAAO,WAAW,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ"}
1
+ {"version":3,"file":"Task.js","sourceRoot":"","sources":["../src/Task.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,IAAI;IAkBO;IACA;IACR;IACA;IACA;IACA;IAtBJ,SAAS,CAAgB;IAC1B,iBAAiB,CAAO;IACxB,cAAc,CAAS;IACvB,SAAS,CAAU;IAE1B;;;;;;;;;OASG;IACH,YACI,SAAwB,EACR,IAAwB,EACxB,EAAU,EAClB,QAAsB,EACtB,QAAgB,EAChB,kBAA2B,EAC3B,SAAkB;QALV,SAAI,GAAJ,IAAI,CAAoB;QACxB,OAAE,GAAF,EAAE,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAc;QACtB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,uBAAkB,GAAlB,kBAAkB,CAAS;QAC3B,cAAS,GAAT,SAAS,CAAS;QAE1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,WAAiB;QAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;QACrC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,MAAM;QACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,OAAkD,EAAE,WAA0B;QACxF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QACrD,IAAI,WAAW;YAAE,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,WAAmB;QACpC,OAAO,WAAW,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ"}
@@ -68,6 +68,11 @@ export declare class TaskScheduler {
68
68
  * @internal For testing purposes
69
69
  */
70
70
  processTasksNow(): void;
71
+ /**
72
+ * Advances time and processes tasks (for testing)
73
+ * @param {number} timeAdvanceMs - Time to advance in milliseconds
74
+ */
75
+ advanceTimeAndProcess(timeAdvanceMs: number): void;
71
76
  /**
72
77
  * Changes the processor interval
73
78
  * @param {number} newInterval - The new interval in milliseconds
@@ -45,7 +45,7 @@ export class TaskScheduler {
45
45
  */
46
46
  scheduleTask(callback, options) {
47
47
  const taskId = Math.floor(Math.random() * 1000000);
48
- const task = new Task(this, options.name, taskId, callback, options.interval, false, options.once || false);
48
+ const task = new Task(this, options.name, taskId, callback, options.interval, options.immediate || false, options.once || false);
49
49
  this.scheduledTasks.set(taskId, task);
50
50
  if (options.name)
51
51
  this.scheduledTasks.set(options.name, task);
@@ -116,12 +116,28 @@ export class TaskScheduler {
116
116
  * @internal For testing purposes
117
117
  */
118
118
  processTasksNow() {
119
- const previousTimestamp = this.currentTimestamp;
120
119
  this.currentTimestamp = new Date();
121
120
  for (const task of this.scheduledTasks.values()) {
122
- const elapsedTime = task.getInterval();
123
- const shouldRun = task.shouldExecute(elapsedTime) &&
124
- task.lastExecutionTime.getTime() <= previousTimestamp.getTime();
121
+ const elapsedTime = this.currentTimestamp.getTime() - task.lastExecutionTime.getTime();
122
+ const shouldRun = task.shouldExecute(elapsedTime);
123
+ if (!shouldRun)
124
+ continue;
125
+ task.execute(this.currentTimestamp);
126
+ if (task.shouldRemove()) {
127
+ this.removeTask(task.id);
128
+ }
129
+ }
130
+ }
131
+ /**
132
+ * Advances time and processes tasks (for testing)
133
+ * @param {number} timeAdvanceMs - Time to advance in milliseconds
134
+ */
135
+ advanceTimeAndProcess(timeAdvanceMs) {
136
+ const newTime = new Date(this.currentTimestamp.getTime() + timeAdvanceMs);
137
+ this.currentTimestamp = newTime;
138
+ for (const task of this.scheduledTasks.values()) {
139
+ const elapsedTime = this.currentTimestamp.getTime() - task.lastExecutionTime.getTime();
140
+ const shouldRun = task.shouldExecute(elapsedTime);
125
141
  if (!shouldRun)
126
142
  continue;
127
143
  task.execute(this.currentTimestamp);
@@ -1 +1 @@
1
- {"version":3,"file":"TaskScheduler.js","sourceRoot":"","sources":["../src/TaskScheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskScheduler.js","sourceRoot":"","sources":["../src/TaskScheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kyo-services/schedulewise",
3
- "version": "2.2.0",
3
+ "version": "2.2.2",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=18.0.0"
@@ -79,7 +79,7 @@
79
79
  "bugs": {
80
80
  "url": "https://github.com/kyo-services/schedulewise/issues"
81
81
  },
82
- "homepage": "https://kyo.services/docs/schedulewise",
82
+ "homepage": "https://kyo.services/schedulewise",
83
83
  "lint-staged": {
84
84
  "*.ts": [
85
85
  "eslint --fix",
package/src/Task.ts CHANGED
@@ -33,7 +33,7 @@ export class Task {
33
33
  this.scheduler = scheduler;
34
34
  this.executionCount = 0;
35
35
  this.isEnabled = true;
36
- this.lastExecutionTime = new Date(0);
36
+ this.lastExecutionTime = executeImmediately ? new Date(0) : new Date();
37
37
  }
38
38
 
39
39
  /**
@@ -58,7 +58,7 @@ export class TaskScheduler {
58
58
  taskId,
59
59
  callback,
60
60
  options.interval,
61
- false,
61
+ options.immediate || false,
62
62
  options.once || false
63
63
  );
64
64
 
@@ -139,14 +139,32 @@ export class TaskScheduler {
139
139
  * @internal For testing purposes
140
140
  */
141
141
  public processTasksNow(): void {
142
- const previousTimestamp = this.currentTimestamp;
143
142
  this.currentTimestamp = new Date();
144
143
 
145
144
  for (const task of this.scheduledTasks.values()) {
146
- const elapsedTime = task.getInterval();
147
- const shouldRun =
148
- task.shouldExecute(elapsedTime) &&
149
- task.lastExecutionTime.getTime() <= previousTimestamp.getTime();
145
+ const elapsedTime = this.currentTimestamp.getTime() - task.lastExecutionTime.getTime();
146
+ const shouldRun = task.shouldExecute(elapsedTime);
147
+
148
+ if (!shouldRun) continue;
149
+
150
+ task.execute(this.currentTimestamp);
151
+ if (task.shouldRemove()) {
152
+ this.removeTask(task.id);
153
+ }
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Advances time and processes tasks (for testing)
159
+ * @param {number} timeAdvanceMs - Time to advance in milliseconds
160
+ */
161
+ public advanceTimeAndProcess(timeAdvanceMs: number): void {
162
+ const newTime = new Date(this.currentTimestamp.getTime() + timeAdvanceMs);
163
+ this.currentTimestamp = newTime;
164
+
165
+ for (const task of this.scheduledTasks.values()) {
166
+ const elapsedTime = this.currentTimestamp.getTime() - task.lastExecutionTime.getTime();
167
+ const shouldRun = task.shouldExecute(elapsedTime);
150
168
 
151
169
  if (!shouldRun) continue;
152
170
 
@@ -14,18 +14,15 @@ describe("Task Execution", () => {
14
14
 
15
15
  it("should execute task at regular intervals", () => {
16
16
  const callback = jest.fn();
17
- scheduler.scheduleTask(callback, { interval: 1000 });
17
+ scheduler.scheduleTask(callback, { interval: 1000, immediate: true });
18
18
 
19
- // İlk çalıştırma
20
19
  scheduler.processTasksNow();
21
20
  expect(callback).toHaveBeenCalledTimes(1);
22
21
 
23
- // İkinci çalıştırma
24
- scheduler.processTasksNow();
22
+ scheduler.advanceTimeAndProcess(1000);
25
23
  expect(callback).toHaveBeenCalledTimes(2);
26
24
 
27
- // Üçüncü çalıştırma
28
- scheduler.processTasksNow();
25
+ scheduler.advanceTimeAndProcess(1000);
29
26
  expect(callback).toHaveBeenCalledTimes(3);
30
27
  });
31
28
 
@@ -34,18 +31,16 @@ describe("Task Execution", () => {
34
31
  scheduler.scheduleTask(callback, {
35
32
  interval: 1000,
36
33
  once: true,
34
+ immediate: true,
37
35
  });
38
36
 
39
- // İlk çalıştırma
40
37
  scheduler.processTasksNow();
41
38
  expect(callback).toHaveBeenCalledTimes(1);
42
39
 
43
- // İkinci çalıştırma - çağrılmamalı
44
- scheduler.processTasksNow();
40
+ scheduler.advanceTimeAndProcess(1000);
45
41
  expect(callback).toHaveBeenCalledTimes(1);
46
42
 
47
- // Üçüncü çalıştırma - çağrılmamalı
48
- scheduler.processTasksNow();
43
+ scheduler.advanceTimeAndProcess(1000);
49
44
  expect(callback).toHaveBeenCalledTimes(1);
50
45
  });
51
46
 
@@ -54,16 +49,35 @@ describe("Task Execution", () => {
54
49
  const task = scheduler.scheduleTask(callback, { interval: 1000 });
55
50
  task.disable();
56
51
 
57
- // İlk çalıştırma
58
52
  scheduler.processTasksNow();
59
53
  expect(callback).toHaveBeenCalledTimes(0);
60
54
 
61
- // İkinci çalıştırma
62
55
  scheduler.processTasksNow();
63
56
  expect(callback).toHaveBeenCalledTimes(0);
64
57
 
65
- // Üçüncü çalıştırma
66
58
  scheduler.processTasksNow();
67
59
  expect(callback).toHaveBeenCalledTimes(0);
68
60
  });
61
+
62
+ it("should not execute tasks immediately when immediate is false", () => {
63
+ const callback = jest.fn();
64
+ scheduler.scheduleTask(callback, { interval: 1000 });
65
+
66
+ scheduler.processTasksNow();
67
+ expect(callback).toHaveBeenCalledTimes(0);
68
+
69
+ scheduler.processTasksNow();
70
+ expect(callback).toHaveBeenCalledTimes(0);
71
+
72
+ scheduler.advanceTimeAndProcess(1000);
73
+ expect(callback).toHaveBeenCalledTimes(1);
74
+ });
75
+
76
+ it("should execute tasks immediately when immediate is true", () => {
77
+ const callback = jest.fn();
78
+ scheduler.scheduleTask(callback, { interval: 1000, immediate: true });
79
+
80
+ scheduler.processTasksNow();
81
+ expect(callback).toHaveBeenCalledTimes(1);
82
+ });
69
83
  });
@@ -14,18 +14,17 @@ describe("Task Management", () => {
14
14
 
15
15
  it("should enable and disable tasks", () => {
16
16
  const callback = jest.fn();
17
- const task = scheduler.scheduleTask(callback, { interval: 1000 });
17
+ const task = scheduler.scheduleTask(callback, { interval: 1000, immediate: true });
18
18
 
19
- // İlk çalıştırma - aktif
20
19
  scheduler.processTasksNow();
21
20
  expect(callback).toHaveBeenCalledTimes(1);
22
21
 
23
22
  task.disable();
24
- scheduler.processTasksNow();
23
+ scheduler.advanceTimeAndProcess(1000);
25
24
  expect(callback).toHaveBeenCalledTimes(1);
26
25
 
27
26
  task.enable();
28
- scheduler.processTasksNow();
27
+ scheduler.advanceTimeAndProcess(1000);
29
28
  expect(callback).toHaveBeenCalledTimes(2);
30
29
  });
31
30
 
@@ -34,9 +33,9 @@ describe("Task Management", () => {
34
33
  const task = scheduler.scheduleTask(callback, {
35
34
  interval: 1000,
36
35
  name: "testTask",
36
+ immediate: true,
37
37
  });
38
38
 
39
- // İlk çalıştırma
40
39
  scheduler.processTasksNow();
41
40
  expect(callback).toHaveBeenCalledTimes(1);
42
41
 
@@ -45,11 +44,10 @@ describe("Task Management", () => {
45
44
  expect(scheduler.findTask(task.id)).toBeUndefined();
46
45
  expect(scheduler.findTask("testTask")).toBeUndefined();
47
46
 
48
- // Task silindiği için çağrılmamalı
49
- scheduler.processTasksNow();
47
+ scheduler.advanceTimeAndProcess(1000);
50
48
  expect(callback).toHaveBeenCalledTimes(1);
51
49
 
52
- scheduler.processTasksNow();
50
+ scheduler.advanceTimeAndProcess(1000);
53
51
  expect(callback).toHaveBeenCalledTimes(1);
54
52
  });
55
53
 
@@ -62,14 +60,12 @@ describe("Task Management", () => {
62
60
 
63
61
  scheduler.clearAllTasks();
64
62
 
65
- // Tüm tasklar silindiği için çağrılmamalı
66
63
  scheduler.processTasksNow();
67
64
  expect(callback1).not.toHaveBeenCalled();
68
65
 
69
66
  scheduler.processTasksNow();
70
67
  expect(callback2).not.toHaveBeenCalled();
71
68
 
72
- // Task listesi boş olmalı
73
69
  expect(scheduler.getAllTasks()).toHaveLength(0);
74
70
  });
75
71
  });