eternal-timer 2.2.0 → 2.3.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 +75 -44
- package/dist/cjs/JSONLTimersManager.cjs +31 -25
- package/dist/cjs/JSONLTimersManager.cjs.map +1 -0
- package/dist/cjs/JSONLTimersManager.d.ts +7 -7
- package/dist/cjs/JSONLTimersManager.d.ts.map +1 -1
- package/dist/cjs/Log.cjs +0 -21
- package/dist/cjs/{Log.js.map → Log.cjs.map} +1 -1
- package/dist/cjs/PlainTextTimersManager.cjs +33 -25
- package/dist/cjs/PlainTextTimersManager.cjs.map +1 -0
- package/dist/cjs/PlainTextTimersManager.d.ts +7 -7
- package/dist/cjs/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager.d.ts +6 -6
- package/dist/cjs/TimersManager.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/types.d.ts +9 -2
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/JSONLTimersManager.d.ts +6 -6
- package/dist/esm/JSONLTimersManager.d.ts.map +1 -1
- package/dist/esm/JSONLTimersManager.js +31 -25
- package/dist/esm/JSONLTimersManager.js.map +1 -1
- package/dist/esm/Log.js +0 -21
- package/dist/esm/Log.js.map +1 -1
- package/dist/esm/PlainTextTimersManager.d.ts +6 -6
- package/dist/esm/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/esm/PlainTextTimersManager.js +33 -25
- package/dist/esm/PlainTextTimersManager.js.map +1 -1
- package/dist/esm/TimersManager.d.ts +6 -6
- package/dist/esm/TimersManager.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/types.d.ts +9 -2
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +7 -4
- package/dist/cjs/JSONLTimersManager.js.map +0 -1
- package/dist/cjs/PlainTextTimersManager.js.map +0 -1
- /package/dist/cjs/{TimersManager.js.map → TimersManager.cjs.map} +0 -0
- /package/dist/cjs/{index.js.map → index.cjs.map} +0 -0
- /package/dist/cjs/{searchRoot.js.map → searchRoot.cjs.map} +0 -0
- /package/dist/cjs/{types.js.map → types.cjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../src/TimersManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../src/TimersManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW;IACxD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAE/C;;;;OAIM;gBAEL,YAAY,CAAC,EAAE,MAAM;IAYtB;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAExE;;;;;;;;;;OAUM;aACc,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhF;;;;;;;;OAQM;aACU,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD;;;;;;;;;;;OAWM;aACc,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO;IAEhH;;;;;;;;OAQM;aACU,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;CACjD"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { Timer } from "./types.
|
|
2
|
-
export { JSONLTimersManager } from "./JSONLTimersManager.
|
|
3
|
-
export { PlainTextTimersManager } from "./PlainTextTimersManager.
|
|
1
|
+
export type { Timer, CreateTimerOptions, StorageType } from "./types.js";
|
|
2
|
+
export { JSONLTimersManager } from "./JSONLTimersManager.js";
|
|
3
|
+
export { PlainTextTimersManager } from "./PlainTextTimersManager.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type StorageType = "JSONL" | "PlainText";
|
|
2
|
+
export type Timer<T extends StorageType> = {
|
|
2
3
|
id: string;
|
|
3
4
|
start: number;
|
|
4
5
|
stop: number;
|
|
6
|
+
} & (T extends "JSONL" ? {
|
|
5
7
|
title?: string;
|
|
6
8
|
description?: string;
|
|
7
|
-
};
|
|
9
|
+
} : object);
|
|
10
|
+
export type CreateTimerOptions<T extends StorageType> = T extends "JSONL" ? {
|
|
11
|
+
length: number;
|
|
12
|
+
title?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
} | number : T extends "PlainText" ? number : never;
|
|
8
15
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/cjs/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,IAAI;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,CAAC,CAAC,SAAS,OAAO,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,CAAC;AAE5E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GACnE;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,GACV,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Timer } from "./types.js";
|
|
1
|
+
import type { Timer, CreateTimerOptions } from "./types.js";
|
|
2
2
|
import { TimersManager } from "./TimersManager.js";
|
|
3
3
|
/**
|
|
4
4
|
* JSONLTimersManager
|
|
@@ -9,7 +9,7 @@ import { TimersManager } from "./TimersManager.js";
|
|
|
9
9
|
* - Timers are persisted in a file
|
|
10
10
|
* - Expired timers are detected by polling
|
|
11
11
|
*/
|
|
12
|
-
export declare class JSONLTimersManager extends TimersManager {
|
|
12
|
+
export declare class JSONLTimersManager extends TimersManager<"JSONL"> {
|
|
13
13
|
protected getDefaultFilename(): string;
|
|
14
14
|
protected checkTimerfileSyntax(fileData: string): Promise<void>;
|
|
15
15
|
/**
|
|
@@ -25,7 +25,7 @@ export declare class JSONLTimersManager extends TimersManager {
|
|
|
25
25
|
* const newTimer = await manager.createTimer(5000);
|
|
26
26
|
* // newTimer will be id of the timer
|
|
27
27
|
*/
|
|
28
|
-
createTimer(
|
|
28
|
+
createTimer(options: CreateTimerOptions<"JSONL">): Promise<string>;
|
|
29
29
|
/**
|
|
30
30
|
* removeTimer
|
|
31
31
|
* @description Removes a timer by ID.
|
|
@@ -40,7 +40,7 @@ export declare class JSONLTimersManager extends TimersManager {
|
|
|
40
40
|
* @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
|
|
41
41
|
* The callback is awaited before continuing.
|
|
42
42
|
* @param callback Function invoked when an expired timer is detected (called asynchronously)
|
|
43
|
-
* @param interval (number, optional): Check interval in milliseconds (default:
|
|
43
|
+
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
44
44
|
* @throws If file operation fails
|
|
45
45
|
* @returns (NodeJS.Timeout) intervalId interval id of checkTimers
|
|
46
46
|
* @example
|
|
@@ -48,7 +48,7 @@ export declare class JSONLTimersManager extends TimersManager {
|
|
|
48
48
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
49
49
|
* });
|
|
50
50
|
*/
|
|
51
|
-
checkTimers(callback: (timer: Timer) => Promise<void>, interval?: number): NodeJS.Timeout;
|
|
51
|
+
checkTimers(callback: (timer: Timer<"JSONL">) => Promise<void>, interval?: number): NodeJS.Timeout;
|
|
52
52
|
/**
|
|
53
53
|
* showTimers
|
|
54
54
|
* @description Retrieves all active timers.
|
|
@@ -58,6 +58,6 @@ export declare class JSONLTimersManager extends TimersManager {
|
|
|
58
58
|
* const timers = await manager.showTimers();
|
|
59
59
|
* console.log(JSON.stringify(timers))
|
|
60
60
|
*/
|
|
61
|
-
showTimers(): Promise<Timer[]>;
|
|
61
|
+
showTimers(): Promise<Timer<"JSONL">[]>;
|
|
62
62
|
}
|
|
63
63
|
//# sourceMappingURL=JSONLTimersManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,OAAO,CAAC;cAC1C,kBAAkB,IAAI,MAAM;cAI/B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrE;;;;;;;;;;;;OAYM;IACgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BxF;;;;;;;;OAQM;IACgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC5D;;;;;;;;;;;OAWM;IACU,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CAAC,OAAO;IAoCvH;;;;;;;;OAQM;IACgB,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;CAa7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import { v4 as uuidv4 } from "uuid";
|
|
3
|
+
import readline from "readline";
|
|
3
4
|
import { TimersManager } from "./TimersManager.js";
|
|
4
5
|
import { Log } from "./Log.js";
|
|
5
6
|
/**
|
|
@@ -51,8 +52,9 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
51
52
|
* const newTimer = await manager.createTimer(5000);
|
|
52
53
|
* // newTimer will be id of the timer
|
|
53
54
|
*/
|
|
54
|
-
async createTimer(
|
|
55
|
+
async createTimer(options) {
|
|
55
56
|
try {
|
|
57
|
+
let length = typeof options === "object" ? options.length : options;
|
|
56
58
|
if (length < 0) {
|
|
57
59
|
throw new Error(`Invailed length: ${length}`);
|
|
58
60
|
}
|
|
@@ -66,8 +68,8 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
66
68
|
id,
|
|
67
69
|
start: now,
|
|
68
70
|
stop: (now + length),
|
|
69
|
-
...(title !== undefined && { title }),
|
|
70
|
-
...(description !== undefined && { description }),
|
|
71
|
+
...(typeof options === "object" && options.title !== undefined && { title: options.title }),
|
|
72
|
+
...(typeof options === "object" && options.description !== undefined && { description: options.description }),
|
|
71
73
|
});
|
|
72
74
|
await fs.promises.appendFile(this.timerfiledir, newTimerData + "\n");
|
|
73
75
|
return id;
|
|
@@ -89,15 +91,16 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
89
91
|
try {
|
|
90
92
|
const timersRaw = await fs.promises.readFile(this.timerfiledir, "utf-8");
|
|
91
93
|
await this.checkTimerfileSyntax(timersRaw);
|
|
94
|
+
const rl = readline.createInterface({
|
|
95
|
+
input: fs.createReadStream(this.timerfiledir),
|
|
96
|
+
crlfDelay: Infinity,
|
|
97
|
+
});
|
|
92
98
|
let newTimersData = "";
|
|
93
|
-
const timersData = timersRaw
|
|
94
|
-
.split(/\r?\n/)
|
|
95
|
-
.filter(t => t.trim())
|
|
96
|
-
.map(line => JSON.parse(line));
|
|
97
99
|
let found = false;
|
|
98
|
-
for (const
|
|
99
|
-
if (!
|
|
100
|
+
for await (const line of rl) {
|
|
101
|
+
if (!line.trim())
|
|
100
102
|
continue;
|
|
103
|
+
const timerData = JSON.parse(line);
|
|
101
104
|
if (timerData.id === id) {
|
|
102
105
|
found = true;
|
|
103
106
|
continue;
|
|
@@ -118,7 +121,7 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
118
121
|
* @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
|
|
119
122
|
* The callback is awaited before continuing.
|
|
120
123
|
* @param callback Function invoked when an expired timer is detected (called asynchronously)
|
|
121
|
-
* @param interval (number, optional): Check interval in milliseconds (default:
|
|
124
|
+
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
122
125
|
* @throws If file operation fails
|
|
123
126
|
* @returns (NodeJS.Timeout) intervalId interval id of checkTimers
|
|
124
127
|
* @example
|
|
@@ -126,26 +129,29 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
126
129
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
127
130
|
* });
|
|
128
131
|
*/
|
|
129
|
-
checkTimers(callback, interval =
|
|
132
|
+
checkTimers(callback, interval = 200) {
|
|
130
133
|
return setInterval(async () => {
|
|
131
134
|
if (this.checkLock)
|
|
132
135
|
return;
|
|
133
136
|
this.checkLock = true;
|
|
134
137
|
try {
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
138
|
+
const rl = readline.createInterface({
|
|
139
|
+
input: fs.createReadStream(this.timerfiledir),
|
|
140
|
+
crlfDelay: Infinity,
|
|
141
|
+
});
|
|
142
|
+
for await (const line of rl) {
|
|
143
|
+
if (!line.trim())
|
|
144
|
+
continue;
|
|
145
|
+
const timerData = JSON.parse(line);
|
|
146
|
+
const now = Date.now();
|
|
147
|
+
if (Number(timerData.stop) <= now) {
|
|
148
|
+
await this.removeTimer(timerData.id);
|
|
149
|
+
callback(timerData).catch(async (e) => {
|
|
150
|
+
await Log.ensureLogger();
|
|
151
|
+
if (Log.loggerInstance) {
|
|
152
|
+
Log.loggerInstance.error(`Error in callback of checkTimers: ${e}`);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
149
155
|
}
|
|
150
156
|
}
|
|
151
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/Log.js
CHANGED
|
@@ -21,25 +21,4 @@ export class Log {
|
|
|
21
21
|
return Log.logger;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
/*
|
|
25
|
-
let logger: Logger | null = null;
|
|
26
|
-
let initPromise: Promise<void> | null = null;
|
|
27
|
-
|
|
28
|
-
export async function ensureLogger() {
|
|
29
|
-
if (logger) return;
|
|
30
|
-
if (!initPromise) {
|
|
31
|
-
initPromise = (async () => {
|
|
32
|
-
try {
|
|
33
|
-
const logtape = await import("@logtape/logtape");
|
|
34
|
-
logger = logtape.getLogger(["eternal-timer"]);
|
|
35
|
-
} catch {
|
|
36
|
-
console.info(
|
|
37
|
-
"Tip: Install the optional package '@logtape/logtape' to customize logging behavior.",
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
})();
|
|
41
|
-
}
|
|
42
|
-
await initPromise;
|
|
43
|
-
}
|
|
44
|
-
*/
|
|
45
24
|
//# sourceMappingURL=Log.js.map
|
package/dist/esm/Log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Log.js","sourceRoot":"","sources":["../../src/Log.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG;IACP,MAAM,CAAC,MAAM,GAAkB,IAAI,CAAC;IACpC,MAAM,CAAC,WAAW,GAAyB,IAAI,CAAC;IAEjD,MAAM,CAAC,KAAK,CAAC,YAAY;QAC/B,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO;QACvB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACtB,GAAG,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC7B,IAAI,CAAC;oBACJ,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACjD,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO,CAAC,IAAI,CACX,qFAAqF,CACrF,CAAC;gBACH,CAAC;YACF,CAAC,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,GAAG,CAAC,WAAW,CAAC;IACvB,CAAC;IAEM,MAAM,KAAK,cAAc;QAC/B,OAAO,GAAG,CAAC,MAAM,CAAC;IACnB,CAAC
|
|
1
|
+
{"version":3,"file":"Log.js","sourceRoot":"","sources":["../../src/Log.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG;IACP,MAAM,CAAC,MAAM,GAAkB,IAAI,CAAC;IACpC,MAAM,CAAC,WAAW,GAAyB,IAAI,CAAC;IAEjD,MAAM,CAAC,KAAK,CAAC,YAAY;QAC/B,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO;QACvB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACtB,GAAG,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC7B,IAAI,CAAC;oBACJ,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACjD,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO,CAAC,IAAI,CACX,qFAAqF,CACrF,CAAC;gBACH,CAAC;YACF,CAAC,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,GAAG,CAAC,WAAW,CAAC;IACvB,CAAC;IAEM,MAAM,KAAK,cAAc;QAC/B,OAAO,GAAG,CAAC,MAAM,CAAC;IACnB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Timer } from "./types.js";
|
|
1
|
+
import type { Timer, CreateTimerOptions } from "./types.js";
|
|
2
2
|
import { TimersManager } from "./TimersManager.js";
|
|
3
|
-
export declare class PlainTextTimersManager extends TimersManager {
|
|
3
|
+
export declare class PlainTextTimersManager extends TimersManager<"PlainText"> {
|
|
4
4
|
protected getDefaultFilename(): string;
|
|
5
5
|
/**
|
|
6
6
|
* checkTimerfileSyntax
|
|
@@ -21,7 +21,7 @@ export declare class PlainTextTimersManager extends TimersManager {
|
|
|
21
21
|
* const newTimer = await manager.createTimer(5000);
|
|
22
22
|
* // newTimer will be id of the timer
|
|
23
23
|
*/
|
|
24
|
-
createTimer(
|
|
24
|
+
createTimer(options: CreateTimerOptions<"PlainText">): Promise<string>;
|
|
25
25
|
/**
|
|
26
26
|
* removeTimer
|
|
27
27
|
* @description Removes a timer by ID.
|
|
@@ -37,7 +37,7 @@ export declare class PlainTextTimersManager extends TimersManager {
|
|
|
37
37
|
* @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
|
|
38
38
|
* The callback is awaited before continuing.
|
|
39
39
|
* @param callback Function invoked when an expired timer is detected (called asynchronously)
|
|
40
|
-
* @param interval (number, optional): Check interval in milliseconds (default:
|
|
40
|
+
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
41
41
|
* @throws If file operation fails
|
|
42
42
|
* @returns (NodeJS.Timeout) intervalId interval id of checkTimers
|
|
43
43
|
* @example
|
|
@@ -45,7 +45,7 @@ export declare class PlainTextTimersManager extends TimersManager {
|
|
|
45
45
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
46
46
|
* });
|
|
47
47
|
*/
|
|
48
|
-
checkTimers(callback: (timer: Timer) => Promise<void>, interval?: number): NodeJS.Timeout;
|
|
48
|
+
checkTimers(callback: (timer: Timer<"PlainText">) => Promise<void>, interval?: number): NodeJS.Timeout;
|
|
49
49
|
/**
|
|
50
50
|
* showTimers
|
|
51
51
|
* @description Retrieves all active timers.
|
|
@@ -55,6 +55,6 @@ export declare class PlainTextTimersManager extends TimersManager {
|
|
|
55
55
|
* const timers = await manager.showTimers();
|
|
56
56
|
* console.log(JSON.stringify(timers))
|
|
57
57
|
*/
|
|
58
|
-
showTimers(): Promise<Timer[]>;
|
|
58
|
+
showTimers(): Promise<Timer<"PlainText">[]>;
|
|
59
59
|
}
|
|
60
60
|
//# sourceMappingURL=PlainTextTimersManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersManager.d.ts","sourceRoot":"","sources":["../../src/PlainTextTimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlainTextTimersManager.d.ts","sourceRoot":"","sources":["../../src/PlainTextTimersManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,WAAW,CAAC;IACrE,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAItC;;;;;;OAMG;cACsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9E;;;;;;;;;;OAUG;IACmB,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB5F;;;;;;;;OAQG;IACmB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B5D;;;;;;;;;;;;OAYG;IACa,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CAAC,OAAO;IAyC3H;;;;;;;;OAQG;IACmB,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;CAoBjE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import { v4 as uuidv4 } from "uuid";
|
|
3
|
+
import readline from "readline";
|
|
3
4
|
import { TimersManager } from "./TimersManager.js";
|
|
4
5
|
import { Log } from "./Log.js";
|
|
5
6
|
export class PlainTextTimersManager extends TimersManager {
|
|
@@ -45,14 +46,14 @@ export class PlainTextTimersManager extends TimersManager {
|
|
|
45
46
|
* const newTimer = await manager.createTimer(5000);
|
|
46
47
|
* // newTimer will be id of the timer
|
|
47
48
|
*/
|
|
48
|
-
async createTimer(
|
|
49
|
+
async createTimer(options) {
|
|
49
50
|
try {
|
|
50
|
-
if (
|
|
51
|
-
throw new Error(`Invailed length: ${
|
|
51
|
+
if (options < 0) {
|
|
52
|
+
throw new Error(`Invailed length: ${options}`);
|
|
52
53
|
}
|
|
53
54
|
const timersRaw = await fs.promises.readFile(this.timerfiledir, "utf-8");
|
|
54
55
|
await this.checkTimerfileSyntax(timersRaw);
|
|
55
|
-
length = Math.trunc(
|
|
56
|
+
const length = Math.trunc(options);
|
|
56
57
|
// uuid, start, end
|
|
57
58
|
const id = uuidv4();
|
|
58
59
|
const now = Date.now();
|
|
@@ -77,23 +78,26 @@ export class PlainTextTimersManager extends TimersManager {
|
|
|
77
78
|
try {
|
|
78
79
|
const timersRaw = await fs.promises.readFile(this.timerfiledir, "utf-8");
|
|
79
80
|
await this.checkTimerfileSyntax(timersRaw);
|
|
80
|
-
const
|
|
81
|
-
|
|
81
|
+
const rl = readline.createInterface({
|
|
82
|
+
input: fs.createReadStream(this.timerfiledir),
|
|
83
|
+
crlfDelay: Infinity,
|
|
84
|
+
});
|
|
85
|
+
const newTimersDataLines = [];
|
|
82
86
|
let found = false;
|
|
83
|
-
for (const
|
|
84
|
-
if (!
|
|
87
|
+
for await (const line of rl) {
|
|
88
|
+
if (!line.trim())
|
|
85
89
|
continue;
|
|
86
|
-
const [timerId] =
|
|
90
|
+
const [timerId] = line.split(" ");
|
|
87
91
|
if (timerId === id) {
|
|
88
92
|
found = true;
|
|
89
93
|
continue;
|
|
90
94
|
}
|
|
91
|
-
|
|
95
|
+
newTimersDataLines.push(line);
|
|
92
96
|
}
|
|
93
97
|
if (!found) {
|
|
94
98
|
throw new Error(`Timer with id ${id} not found`);
|
|
95
99
|
}
|
|
96
|
-
await fs.promises.writeFile(this.timerfiledir,
|
|
100
|
+
await fs.promises.writeFile(this.timerfiledir, newTimersDataLines.join("\n"), "utf-8");
|
|
97
101
|
return;
|
|
98
102
|
}
|
|
99
103
|
catch (e) {
|
|
@@ -105,7 +109,7 @@ export class PlainTextTimersManager extends TimersManager {
|
|
|
105
109
|
* @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
|
|
106
110
|
* The callback is awaited before continuing.
|
|
107
111
|
* @param callback Function invoked when an expired timer is detected (called asynchronously)
|
|
108
|
-
* @param interval (number, optional): Check interval in milliseconds (default:
|
|
112
|
+
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
109
113
|
* @throws If file operation fails
|
|
110
114
|
* @returns (NodeJS.Timeout) intervalId interval id of checkTimers
|
|
111
115
|
* @example
|
|
@@ -113,30 +117,34 @@ export class PlainTextTimersManager extends TimersManager {
|
|
|
113
117
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
114
118
|
* });
|
|
115
119
|
*/
|
|
116
|
-
checkTimers(callback, interval =
|
|
120
|
+
checkTimers(callback, interval = 200) {
|
|
117
121
|
return setInterval(async () => {
|
|
118
122
|
if (this.checkLock)
|
|
119
123
|
return;
|
|
120
124
|
this.checkLock = true;
|
|
121
125
|
try {
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
const rl = readline.createInterface({
|
|
127
|
+
input: fs.createReadStream(this.timerfiledir),
|
|
128
|
+
crlfDelay: Infinity,
|
|
129
|
+
});
|
|
130
|
+
for await (const line of rl) {
|
|
131
|
+
if (!line.trim())
|
|
127
132
|
continue;
|
|
128
|
-
const [id, startStr, stopStr] =
|
|
129
|
-
|
|
133
|
+
const [id, startStr, stopStr] = line.split(" ");
|
|
134
|
+
const timer = {
|
|
130
135
|
id: id,
|
|
131
136
|
start: Number(startStr),
|
|
132
137
|
stop: Number(stopStr),
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const now = Date.now();
|
|
136
|
-
for (const timer of timersMap.values()) {
|
|
138
|
+
};
|
|
139
|
+
const now = Date.now();
|
|
137
140
|
if (Number(timer.stop) <= now) {
|
|
138
141
|
await this.removeTimer(timer.id);
|
|
139
|
-
|
|
142
|
+
callback(timer).catch(async (e) => {
|
|
143
|
+
await Log.ensureLogger();
|
|
144
|
+
if (Log.loggerInstance) {
|
|
145
|
+
Log.loggerInstance.error(`Error in timer callback: ${e}`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
140
148
|
}
|
|
141
149
|
}
|
|
142
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersManager.js","sourceRoot":"","sources":["../../src/PlainTextTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersManager.js","sourceRoot":"","sources":["../../src/PlainTextTimersManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Timer } from "./types.js";
|
|
1
|
+
import type { CreateTimerOptions, StorageType, Timer } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* TimersManager
|
|
4
4
|
* @description
|
|
@@ -8,7 +8,7 @@ import type { Timer } from "./types.js";
|
|
|
8
8
|
* - Timers are persisted in a file
|
|
9
9
|
* - Expired timers are detected by polling
|
|
10
10
|
*/
|
|
11
|
-
export declare abstract class TimersManager {
|
|
11
|
+
export declare abstract class TimersManager<T extends StorageType> {
|
|
12
12
|
protected readonly timerfiledir: string;
|
|
13
13
|
protected checkLock: boolean;
|
|
14
14
|
protected abstract getDefaultFilename(): string;
|
|
@@ -37,7 +37,7 @@ export declare abstract class TimersManager {
|
|
|
37
37
|
* const newTimer = await manager.createTimer(5000);
|
|
38
38
|
* // newTimer will be id of the timer
|
|
39
39
|
*/
|
|
40
|
-
abstract createTimer(
|
|
40
|
+
abstract createTimer(options: CreateTimerOptions<T>): Promise<string>;
|
|
41
41
|
/**
|
|
42
42
|
* removeTimer
|
|
43
43
|
* @description Removes a timer by ID.
|
|
@@ -52,7 +52,7 @@ export declare abstract class TimersManager {
|
|
|
52
52
|
* @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
|
|
53
53
|
* The callback is awaited before continuing.
|
|
54
54
|
* @param callback Function invoked when an expired timer is detected (called asynchronously)
|
|
55
|
-
* @param interval (number, optional): Check interval in milliseconds (default:
|
|
55
|
+
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
56
56
|
* @throws If file operation fails
|
|
57
57
|
* @returns (NodeJS.Timeout) intervalId interval id of checkTimers
|
|
58
58
|
* @example
|
|
@@ -60,7 +60,7 @@ export declare abstract class TimersManager {
|
|
|
60
60
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
61
61
|
* });
|
|
62
62
|
*/
|
|
63
|
-
abstract checkTimers(callback: (timer: Timer) => Promise<void>, interval?: number): NodeJS.Timeout;
|
|
63
|
+
abstract checkTimers(callback: (timer: Timer<T>) => Promise<void>, interval?: number): NodeJS.Timeout;
|
|
64
64
|
/**
|
|
65
65
|
* showTimers
|
|
66
66
|
* @description Retrieves all active timers.
|
|
@@ -70,6 +70,6 @@ export declare abstract class TimersManager {
|
|
|
70
70
|
* const timers = await manager.showTimers();
|
|
71
71
|
* console.log(JSON.stringify(timers))
|
|
72
72
|
*/
|
|
73
|
-
abstract showTimers(): Promise<Timer[]>;
|
|
73
|
+
abstract showTimers(): Promise<Timer<T>[]>;
|
|
74
74
|
}
|
|
75
75
|
//# sourceMappingURL=TimersManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../src/TimersManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../src/TimersManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW;IACxD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAE/C;;;;OAIM;gBAEL,YAAY,CAAC,EAAE,MAAM;IAYtB;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAExE;;;;;;;;;;OAUM;aACc,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhF;;;;;;;;OAQM;aACU,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD;;;;;;;;;;;OAWM;aACc,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO;IAEhH;;;;;;;;OAQM;aACU,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;CACjD"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { Timer } from "./types.js";
|
|
1
|
+
export type { Timer, CreateTimerOptions, StorageType } from "./types.js";
|
|
2
2
|
export { JSONLTimersManager } from "./JSONLTimersManager.js";
|
|
3
3
|
export { PlainTextTimersManager } from "./PlainTextTimersManager.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type StorageType = "JSONL" | "PlainText";
|
|
2
|
+
export type Timer<T extends StorageType> = {
|
|
2
3
|
id: string;
|
|
3
4
|
start: number;
|
|
4
5
|
stop: number;
|
|
6
|
+
} & (T extends "JSONL" ? {
|
|
5
7
|
title?: string;
|
|
6
8
|
description?: string;
|
|
7
|
-
};
|
|
9
|
+
} : object);
|
|
10
|
+
export type CreateTimerOptions<T extends StorageType> = T extends "JSONL" ? {
|
|
11
|
+
length: number;
|
|
12
|
+
title?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
} | number : T extends "PlainText" ? number : never;
|
|
8
15
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,IAAI;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,CAAC,CAAC,SAAS,OAAO,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,CAAC;AAE5E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GACnE;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,GACV,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eternal-timer",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "timer for node.js package",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "nodemon --watch src --exec ts-node src/index.ts",
|
|
7
7
|
"build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/rename-cjs.js",
|
|
8
8
|
"start": "npm run build && node dist/esm/index.js",
|
|
9
9
|
"lint": "npx eslint --fix --config ./eslint/eslint.config.ts",
|
|
10
|
-
"test": "node test/index.js"
|
|
10
|
+
"test": "npm run build && node test/index.js"
|
|
11
11
|
},
|
|
12
12
|
"repository": {
|
|
13
13
|
"type": "git",
|
|
@@ -40,10 +40,13 @@
|
|
|
40
40
|
".": {
|
|
41
41
|
"import": "./dist/esm/index.js",
|
|
42
42
|
"require": "./dist/cjs/index.cjs",
|
|
43
|
-
"types":
|
|
43
|
+
"types": {
|
|
44
|
+
"import": "./dist/esm/index.d.ts",
|
|
45
|
+
"require": "./dist/cjs/index.d.ts"
|
|
46
|
+
}
|
|
44
47
|
}
|
|
45
48
|
},
|
|
46
|
-
"types": "dist/
|
|
49
|
+
"types": "dist/cjs/index.d.ts",
|
|
47
50
|
"dependencies": {
|
|
48
51
|
"uuid": "^13.0.0"
|
|
49
52
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"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"}
|