eternal-timer 2.1.0 → 2.2.1

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.
Files changed (50) hide show
  1. package/README.md +58 -25
  2. package/dist/cjs/JSONLTimersManager.cjs +198 -0
  3. package/dist/cjs/JSONLTimersManager.d.ts +63 -0
  4. package/dist/cjs/JSONLTimersManager.d.ts.map +1 -0
  5. package/dist/cjs/JSONLTimersManager.js.map +1 -0
  6. package/dist/cjs/Log.cjs +82 -0
  7. package/dist/cjs/Log.d.ts +8 -0
  8. package/dist/cjs/Log.d.ts.map +1 -0
  9. package/dist/cjs/Log.js.map +1 -0
  10. package/dist/cjs/PlainTextTimersManager.cjs +200 -0
  11. package/dist/cjs/PlainTextTimersManager.d.ts +60 -0
  12. package/dist/cjs/PlainTextTimersManager.d.ts.map +1 -0
  13. package/dist/cjs/PlainTextTimersManager.js.map +1 -0
  14. package/dist/cjs/TimersManager.cjs +39 -0
  15. package/dist/cjs/TimersManager.d.ts +75 -0
  16. package/dist/cjs/TimersManager.d.ts.map +1 -0
  17. package/dist/cjs/TimersManager.js.map +1 -0
  18. package/dist/cjs/index.cjs +5 -279
  19. package/dist/cjs/index.d.ts +3 -72
  20. package/dist/cjs/index.d.ts.map +1 -1
  21. package/dist/cjs/index.js.map +1 -1
  22. package/dist/cjs/types.cjs +3 -0
  23. package/dist/cjs/types.d.ts +8 -0
  24. package/dist/cjs/types.d.ts.map +1 -0
  25. package/dist/cjs/types.js.map +1 -0
  26. package/dist/esm/JSONLTimersManager.d.ts +63 -0
  27. package/dist/esm/JSONLTimersManager.d.ts.map +1 -0
  28. package/dist/esm/JSONLTimersManager.js +191 -0
  29. package/dist/esm/JSONLTimersManager.js.map +1 -0
  30. package/dist/esm/Log.d.ts +8 -0
  31. package/dist/esm/Log.d.ts.map +1 -0
  32. package/dist/esm/Log.js +45 -0
  33. package/dist/esm/Log.js.map +1 -0
  34. package/dist/esm/PlainTextTimersManager.d.ts +60 -0
  35. package/dist/esm/PlainTextTimersManager.d.ts.map +1 -0
  36. package/dist/esm/PlainTextTimersManager.js +193 -0
  37. package/dist/esm/PlainTextTimersManager.js.map +1 -0
  38. package/dist/esm/TimersManager.d.ts +75 -0
  39. package/dist/esm/TimersManager.d.ts.map +1 -0
  40. package/dist/esm/TimersManager.js +32 -0
  41. package/dist/esm/TimersManager.js.map +1 -0
  42. package/dist/esm/index.d.ts +3 -72
  43. package/dist/esm/index.d.ts.map +1 -1
  44. package/dist/esm/index.js +2 -274
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/types.d.ts +8 -0
  47. package/dist/esm/types.d.ts.map +1 -0
  48. package/dist/esm/types.js +2 -0
  49. package/dist/esm/types.js.map +1 -0
  50. package/package.json +12 -4
@@ -1,73 +1,4 @@
1
- export type Timer = {
2
- id: string;
3
- start: number;
4
- stop: number;
5
- title?: string;
6
- description?: string;
7
- };
8
- /**
9
- * TimersManager
10
- * @description
11
- * Manages timers stored in a file.
12
- * Each timer is stored as: `id start stop`.
13
- *
14
- * - Timers are persisted in a file
15
- * - Expired timers are detected by polling
16
- */
17
- export declare class TimersManager {
18
- private readonly timerfiledir;
19
- private readonly isJSONLines;
20
- private checkLock;
21
- /**
22
- * constructor
23
- * @param timerfiledir(string, optional)
24
- * If omitted, `.timers.jsonl` under the project root is used.
25
- */
26
- constructor(timerfiledir?: string);
27
- /**
28
- * createTimer
29
- * @description Creates a new timer.
30
- * @param length Timer duration in milliseconds
31
- * @returns Promise that resolves to the timer ID (UUID)
32
- * @throws If length is invalid(e.g. length < 0) or file operation fails
33
- * @example
34
- * const manager = new TimersManager();
35
- * const newTimer = await manager.createTimer(5000);
36
- * // newTimer will be id of the timer
37
- */
38
- createTimer(length: number, title?: string, description?: string): Promise<string>;
39
- /**
40
- * removeTimer
41
- * @description Removes a timer by ID.
42
- * @param id ID of the timer to remove
43
- * @returns void
44
- * @throws If file operation fails
45
- * @example
46
- * await manager.removeTimer(id);
47
- */
48
- removeTimer(id: string): Promise<void>;
49
- /**
50
- * @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
51
- * The callback is awaited before continuing.
52
- * @param callback Function invoked when an expired timer is detected (called asynchronously)
53
- * @param interval (number, optional): Check interval in milliseconds (default: 50ms)
54
- * @throws If file operation fails
55
- * @returns (NodeJS.Timeout) intervalId interval id of checkTimers
56
- * @example
57
- * const interval = manager.checkTimers((timer) => {
58
- * console.log(`A timer was stopped: ${timer.id}`);
59
- * });
60
- */
61
- checkTimers(callback: (timer: Timer) => Promise<void>, interval?: number): NodeJS.Timeout;
62
- /**
63
- * showTimers
64
- * @description Retrieves all active timers.
65
- * @returns Array of `Timer` objects
66
- * @throws If file operation fails
67
- * @example
68
- * const timers = await manager.showTimers();
69
- * console.log(JSON.stringify(timers))
70
- */
71
- showTimers(): Promise<Timer[]>;
72
- }
1
+ export type { Timer } from "./types.cjs";
2
+ export { JSONLTimersManager } from "./JSONLTimersManager.cjs";
3
+ export { PlainTextTimersManager } from "./PlainTextTimersManager.cjs";
73
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,KAAK,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AA+BD;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;;OAIM;gBAEL,YAAY,CAAC,EAAE,MAAM;IActB;;;;;;;;;;OAUM;IACO,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuC/F;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDnD;;;;;;;;;;;OAWM;IACC,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,CAAC,OAAO;IA+CpG;;;;;;;;OAQM;IACO,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CA6B3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,8 @@
1
+ export type Timer = {
2
+ id: string;
3
+ start: number;
4
+ stop: number;
5
+ title?: string;
6
+ description?: string;
7
+ };
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import type { Timer } from "./types.js";
2
+ import { TimersManager } from "./TimersManager.js";
3
+ /**
4
+ * JSONLTimersManager
5
+ * @description
6
+ * Manages timers stored in a JSONL file.
7
+ * (This is a abstract class)
8
+ *
9
+ * - Timers are persisted in a file
10
+ * - Expired timers are detected by polling
11
+ */
12
+ export declare class JSONLTimersManager extends TimersManager {
13
+ protected getDefaultFilename(): string;
14
+ protected checkTimerfileSyntax(fileData: string): Promise<void>;
15
+ /**
16
+ * createTimer
17
+ * @description Creates a new timer.
18
+ * @param length Timer duration in milliseconds
19
+ * @param title(string, optional) Title of the timer(only for JSONLTimersManager)
20
+ * @param description(string, optional) Description of the timer(only for JSONLTimersManager)
21
+ * @returns Promise that resolves to the timer ID (UUID)
22
+ * @throws If length is invalid(e.g. length < 0) or file operation fails
23
+ * @example
24
+ * const manager = new JSONLTimersManager();
25
+ * const newTimer = await manager.createTimer(5000);
26
+ * // newTimer will be id of the timer
27
+ */
28
+ createTimer(length: number, title?: string, description?: string): Promise<string>;
29
+ /**
30
+ * removeTimer
31
+ * @description Removes a timer by ID.
32
+ * @param id ID of the timer to remove
33
+ * @returns void
34
+ * @throws If file operation fails
35
+ * @example
36
+ * await manager.removeTimer(id);
37
+ */
38
+ removeTimer(id: string): Promise<void>;
39
+ /**
40
+ * @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
41
+ * The callback is awaited before continuing.
42
+ * @param callback Function invoked when an expired timer is detected (called asynchronously)
43
+ * @param interval (number, optional): Check interval in milliseconds (default: 200ms)
44
+ * @throws If file operation fails
45
+ * @returns (NodeJS.Timeout) intervalId interval id of checkTimers
46
+ * @example
47
+ * const interval = manager.checkTimers((timer) => {
48
+ * console.log(`A timer was stopped: ${timer.id}`);
49
+ * });
50
+ */
51
+ checkTimers(callback: (timer: Timer) => Promise<void>, interval?: number): NodeJS.Timeout;
52
+ /**
53
+ * showTimers
54
+ * @description Retrieves all active timers.
55
+ * @returns Array of `Timer` objects
56
+ * @throws If file operation fails
57
+ * @example
58
+ * const timers = await manager.showTimers();
59
+ * console.log(JSON.stringify(timers))
60
+ */
61
+ showTimers(): Promise<Timer[]>;
62
+ }
63
+ //# sourceMappingURL=JSONLTimersManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACpD,SAAS,CAAC,kBAAkB,IAAI,MAAM;cAItB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrE;;;;;;;;;;;;OAYM;IACO,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B/F;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnD;;;;;;;;;;;OAWM;IACC,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CAAC,OAAO;IAoCrG;;;;;;;;OAQM;IACO,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAa3C"}
@@ -0,0 +1,191 @@
1
+ import fs from "fs";
2
+ import { v4 as uuidv4 } from "uuid";
3
+ import readline from "readline";
4
+ import { TimersManager } from "./TimersManager.js";
5
+ import { Log } from "./Log.js";
6
+ /**
7
+ * JSONLTimersManager
8
+ * @description
9
+ * Manages timers stored in a JSONL file.
10
+ * (This is a abstract class)
11
+ *
12
+ * - Timers are persisted in a file
13
+ * - Expired timers are detected by polling
14
+ */
15
+ export class JSONLTimersManager extends TimersManager {
16
+ getDefaultFilename() {
17
+ return ".timers.jsonl";
18
+ }
19
+ async checkTimerfileSyntax(fileData) {
20
+ const throwing = () => {
21
+ throw new Error(`Timer file's syntax is wrong`);
22
+ };
23
+ const timersData = fileData
24
+ .split('\n')
25
+ .map(l => l.trim())
26
+ .filter(l => l !== "");
27
+ for (const timerData of timersData) {
28
+ const parsed = JSON.parse(timerData);
29
+ if (!parsed.id || typeof parsed.id !== "string" || parsed.id.length !== 36)
30
+ throwing();
31
+ if (!parsed.start || typeof parsed.start !== "number" || parsed.start.toString().trim() === "")
32
+ throwing();
33
+ if (!parsed.stop || typeof parsed.stop !== "number" || parsed.stop.toString().trim() === "")
34
+ throwing();
35
+ if (parsed.title && typeof parsed.title !== "string")
36
+ throwing();
37
+ if (parsed.description && typeof parsed.description !== "string")
38
+ throwing();
39
+ }
40
+ return;
41
+ }
42
+ /**
43
+ * createTimer
44
+ * @description Creates a new timer.
45
+ * @param length Timer duration in milliseconds
46
+ * @param title(string, optional) Title of the timer(only for JSONLTimersManager)
47
+ * @param description(string, optional) Description of the timer(only for JSONLTimersManager)
48
+ * @returns Promise that resolves to the timer ID (UUID)
49
+ * @throws If length is invalid(e.g. length < 0) or file operation fails
50
+ * @example
51
+ * const manager = new JSONLTimersManager();
52
+ * const newTimer = await manager.createTimer(5000);
53
+ * // newTimer will be id of the timer
54
+ */
55
+ async createTimer(length, title, description) {
56
+ try {
57
+ if (length < 0) {
58
+ throw new Error(`Invailed length: ${length}`);
59
+ }
60
+ const timersRaw = await fs.promises.readFile(this.timerfiledir, "utf-8");
61
+ await this.checkTimerfileSyntax(timersRaw);
62
+ length = Math.trunc(length);
63
+ // uuid, start, end
64
+ const id = uuidv4();
65
+ const now = Date.now();
66
+ const newTimerData = JSON.stringify({
67
+ id,
68
+ start: now,
69
+ stop: (now + length),
70
+ ...(title !== undefined && { title }),
71
+ ...(description !== undefined && { description }),
72
+ });
73
+ await fs.promises.appendFile(this.timerfiledir, newTimerData + "\n");
74
+ return id;
75
+ }
76
+ catch (e) {
77
+ throw new Error(`Error when creating timer: ${e}`);
78
+ }
79
+ }
80
+ /**
81
+ * removeTimer
82
+ * @description Removes a timer by ID.
83
+ * @param id ID of the timer to remove
84
+ * @returns void
85
+ * @throws If file operation fails
86
+ * @example
87
+ * await manager.removeTimer(id);
88
+ */
89
+ async removeTimer(id) {
90
+ try {
91
+ const timersRaw = await fs.promises.readFile(this.timerfiledir, "utf-8");
92
+ await this.checkTimerfileSyntax(timersRaw);
93
+ const rl = readline.createInterface({
94
+ input: fs.createReadStream(this.timerfiledir),
95
+ crlfDelay: Infinity,
96
+ });
97
+ let newTimersData = "";
98
+ let found = false;
99
+ for await (const line of rl) {
100
+ if (!line.trim())
101
+ continue;
102
+ const timerData = JSON.parse(line);
103
+ if (timerData.id === id) {
104
+ found = true;
105
+ continue;
106
+ }
107
+ newTimersData += `${JSON.stringify(timerData, null, 0)}\n`;
108
+ }
109
+ if (!found) {
110
+ throw new Error(`Timer with id ${id} not found`);
111
+ }
112
+ await fs.promises.writeFile(this.timerfiledir, newTimersData, "utf-8");
113
+ return;
114
+ }
115
+ catch (e) {
116
+ throw new Error(`Error when removing timer: ${e}`);
117
+ }
118
+ }
119
+ /**
120
+ * @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
121
+ * The callback is awaited before continuing.
122
+ * @param callback Function invoked when an expired timer is detected (called asynchronously)
123
+ * @param interval (number, optional): Check interval in milliseconds (default: 200ms)
124
+ * @throws If file operation fails
125
+ * @returns (NodeJS.Timeout) intervalId interval id of checkTimers
126
+ * @example
127
+ * const interval = manager.checkTimers((timer) => {
128
+ * console.log(`A timer was stopped: ${timer.id}`);
129
+ * });
130
+ */
131
+ checkTimers(callback, interval = 200) {
132
+ return setInterval(async () => {
133
+ if (this.checkLock)
134
+ return;
135
+ this.checkLock = true;
136
+ try {
137
+ const rl = readline.createInterface({
138
+ input: fs.createReadStream(this.timerfiledir),
139
+ crlfDelay: Infinity,
140
+ });
141
+ for await (const line of rl) {
142
+ if (!line.trim())
143
+ continue;
144
+ const timerData = JSON.parse(line);
145
+ const now = Date.now();
146
+ if (Number(timerData.stop) <= now) {
147
+ await this.removeTimer(timerData.id);
148
+ callback(timerData).catch(async (e) => {
149
+ await Log.ensureLogger();
150
+ if (Log.loggerInstance) {
151
+ Log.loggerInstance.error(`Error in callback of checkTimers: ${e}`);
152
+ }
153
+ });
154
+ }
155
+ }
156
+ }
157
+ catch (e) {
158
+ await Log.ensureLogger();
159
+ if (Log.loggerInstance) {
160
+ Log.loggerInstance.error(`Error when checking alarm: ${e}`);
161
+ }
162
+ }
163
+ finally {
164
+ this.checkLock = false;
165
+ }
166
+ }, interval);
167
+ }
168
+ /**
169
+ * showTimers
170
+ * @description Retrieves all active timers.
171
+ * @returns Array of `Timer` objects
172
+ * @throws If file operation fails
173
+ * @example
174
+ * const timers = await manager.showTimers();
175
+ * console.log(JSON.stringify(timers))
176
+ */
177
+ async showTimers() {
178
+ try {
179
+ const timersRaw = await fs.promises.readFile(this.timerfiledir, "utf-8");
180
+ const timersData = timersRaw
181
+ .split(/\r?\n/)
182
+ .filter(t => t.trim())
183
+ .map(line => JSON.parse(line));
184
+ return timersData;
185
+ }
186
+ catch (e) {
187
+ throw new Error(`Error when showing timers: ${e}`);
188
+ }
189
+ }
190
+ }
191
+ //# sourceMappingURL=JSONLTimersManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../src/JSONLTimersManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Logger } from "@logtape/logtape";
2
+ export declare class Log {
3
+ private static logger;
4
+ private static initPromise;
5
+ static ensureLogger(): Promise<void>;
6
+ static get loggerInstance(): Logger | null;
7
+ }
8
+ //# sourceMappingURL=Log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Log.d.ts","sourceRoot":"","sources":["../../src/Log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,GAAG;IACf,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAC,WAAW,CAA8B;WAEpC,YAAY;IAiBhC,WAAkB,cAAc,IAAI,MAAM,GAAG,IAAI,CAEhD;CACD"}
@@ -0,0 +1,45 @@
1
+ export class Log {
2
+ static logger = null;
3
+ static initPromise = null;
4
+ static async ensureLogger() {
5
+ if (Log.logger)
6
+ return;
7
+ if (!Log.initPromise) {
8
+ Log.initPromise = (async () => {
9
+ try {
10
+ const logtape = await import("@logtape/logtape");
11
+ Log.logger = logtape.getLogger(["eternal-timer"]);
12
+ }
13
+ catch {
14
+ console.info("Tip: Install the optional package '@logtape/logtape' to customize logging behavior.");
15
+ }
16
+ })();
17
+ }
18
+ await Log.initPromise;
19
+ }
20
+ static get loggerInstance() {
21
+ return Log.logger;
22
+ }
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
+ //# sourceMappingURL=Log.js.map
@@ -0,0 +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;;AAGF;;;;;;;;;;;;;;;;;;;;EAoBE"}
@@ -0,0 +1,60 @@
1
+ import type { Timer } from "./types.js";
2
+ import { TimersManager } from "./TimersManager.js";
3
+ export declare class PlainTextTimersManager extends TimersManager {
4
+ protected getDefaultFilename(): string;
5
+ /**
6
+ * checkTimerfileSyntax
7
+ * @description Checks the syntax of the timer file.
8
+ * @param fileData
9
+ * @returns void
10
+ * @throws If syntax is invalid
11
+ */
12
+ protected checkTimerfileSyntax(fileData: string): Promise<void>;
13
+ /**
14
+ * createTimer
15
+ * @description Creates a new timer.
16
+ * @param length
17
+ * @returns Promise that resolves to the timer ID (UUID)
18
+ * @throws If length is invalid(e.g. length < 0) or file operation fails
19
+ * @example
20
+ * const manager = new PlainTextTimersManager();
21
+ * const newTimer = await manager.createTimer(5000);
22
+ * // newTimer will be id of the timer
23
+ */
24
+ createTimer(length: number): Promise<string>;
25
+ /**
26
+ * removeTimer
27
+ * @description Removes a timer by ID.
28
+ * @param id ID of the timer to remove
29
+ * @returns void
30
+ * @throws If file operation fails
31
+ * @example
32
+ * await manager.removeTimer(id);
33
+ */
34
+ removeTimer(id: string): Promise<void>;
35
+ /**
36
+ * checkTimers
37
+ * @description Starts monitoring expired timers asynchronously and returns immediately. The callback is invoked asynchronously when a timer expires.
38
+ * The callback is awaited before continuing.
39
+ * @param callback Function invoked when an expired timer is detected (called asynchronously)
40
+ * @param interval (number, optional): Check interval in milliseconds (default: 200ms)
41
+ * @throws If file operation fails
42
+ * @returns (NodeJS.Timeout) intervalId interval id of checkTimers
43
+ * @example
44
+ * const interval = manager.checkTimers((timer) => {
45
+ * console.log(`A timer was stopped: ${timer.id}`);
46
+ * });
47
+ */
48
+ checkTimers(callback: (timer: Timer) => Promise<void>, interval?: number): NodeJS.Timeout;
49
+ /**
50
+ * showTimers
51
+ * @description Retrieves all active timers.
52
+ * @returns Array of `Timer` objects
53
+ * @throws If file operation fails
54
+ * @example
55
+ * const timers = await manager.showTimers();
56
+ * console.log(JSON.stringify(timers))
57
+ */
58
+ showTimers(): Promise<Timer[]>;
59
+ }
60
+ //# sourceMappingURL=PlainTextTimersManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlainTextTimersManager.d.ts","sourceRoot":"","sources":["../../src/PlainTextTimersManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,qBAAa,sBAAuB,SAAQ,aAAa;IACxD,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAItC;;;;;;OAMG;cACa,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrE;;;;;;;;;;OAUG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBzD;;;;;;;;OAQG;IACU,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnD;;;;;;;;;;;;OAYG;IACI,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CAAC,OAAO;IAyCrG;;;;;;;;OAQG;IACU,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAoB3C"}