@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 +1 -1
- package/dist/Task.js.map +1 -1
- package/dist/TaskScheduler.d.ts +5 -0
- package/dist/TaskScheduler.js +21 -5
- package/dist/TaskScheduler.js.map +1 -1
- package/package.json +2 -2
- package/src/Task.ts +1 -1
- package/src/TaskScheduler.ts +24 -6
- package/src/__tests__/TaskExecution.test.ts +28 -14
- package/src/__tests__/TaskManagement.test.ts +6 -10
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;
|
|
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"}
|
package/dist/TaskScheduler.d.ts
CHANGED
|
@@ -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
|
package/dist/TaskScheduler.js
CHANGED
|
@@ -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.
|
|
123
|
-
const shouldRun = task.shouldExecute(elapsedTime)
|
|
124
|
-
|
|
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;GAGG;AACH,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,QAAQ,CAAgB;IAC/B,gBAAgB,CAAO;IACvB,cAAc,GAA+B,IAAI,GAAG,EAAE,CAAC;IACvD,iBAAiB,GAA0C,IAAI,CAAC;IAChE,iBAAiB,GAAW,GAAG,CAAC;IAExC;QACC,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,aAAa,CAAC,QAAQ;YAC1B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9C,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,UAA2B;QAC1C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,WAAW;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,QAAsB,EAAE,OAAoB;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CACpB,IAAI,EACJ,OAAO,CAAC,IAAI,EACZ,MAAM,EACN,QAAQ,EACR,OAAO,CAAC,QAAQ,EAChB,KAAK,
|
|
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.
|
|
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/
|
|
82
|
+
"homepage": "https://kyo.services/schedulewise",
|
|
83
83
|
"lint-staged": {
|
|
84
84
|
"*.ts": [
|
|
85
85
|
"eslint --fix",
|
package/src/Task.ts
CHANGED
package/src/TaskScheduler.ts
CHANGED
|
@@ -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.
|
|
147
|
-
const shouldRun =
|
|
148
|
-
|
|
149
|
-
|
|
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
|
-
|
|
24
|
-
scheduler.processTasksNow();
|
|
22
|
+
scheduler.advanceTimeAndProcess(1000);
|
|
25
23
|
expect(callback).toHaveBeenCalledTimes(2);
|
|
26
24
|
|
|
27
|
-
|
|
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
|
-
|
|
44
|
-
scheduler.processTasksNow();
|
|
40
|
+
scheduler.advanceTimeAndProcess(1000);
|
|
45
41
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
46
42
|
|
|
47
|
-
|
|
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.
|
|
23
|
+
scheduler.advanceTimeAndProcess(1000);
|
|
25
24
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
26
25
|
|
|
27
26
|
task.enable();
|
|
28
|
-
scheduler.
|
|
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
|
-
|
|
49
|
-
scheduler.processTasksNow();
|
|
47
|
+
scheduler.advanceTimeAndProcess(1000);
|
|
50
48
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
51
49
|
|
|
52
|
-
scheduler.
|
|
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
|
});
|