eternal-timer 4.0.0 → 4.2.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 +19 -5
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/JSONLTimersManager.js +3 -2
- package/dist/cjs/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.d.ts +26 -3
- package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.js +59 -27
- package/dist/cjs/TimersManager/TimersManager.js.map +1 -1
- package/dist/cjs/TimersStore/JSONLTimersStore.d.ts.map +1 -1
- package/dist/cjs/TimersStore/JSONLTimersStore.js +2 -1
- package/dist/cjs/TimersStore/JSONLTimersStore.js.map +1 -1
- package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts.map +1 -1
- package/dist/cjs/TimersStore/PlainTextTimersStore.js +2 -1
- package/dist/cjs/TimersStore/PlainTextTimersStore.js.map +1 -1
- package/dist/cjs/TimersStore/TimersStore.d.ts.map +1 -1
- package/dist/cjs/TimersStore/TimersStore.js +4 -3
- package/dist/cjs/TimersStore/TimersStore.js.map +1 -1
- package/dist/cjs/throwMessage.d.ts +12 -0
- package/dist/cjs/throwMessage.d.ts.map +1 -0
- package/dist/cjs/throwMessage.js +15 -0
- package/dist/cjs/throwMessage.js.map +1 -0
- package/dist/cjs/types.d.ts +4 -2
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.js +3 -2
- package/dist/esm/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/TimersManager.d.ts +26 -3
- package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/TimersManager.js +59 -27
- package/dist/esm/TimersManager/TimersManager.js.map +1 -1
- package/dist/esm/TimersStore/JSONLTimersStore.d.ts.map +1 -1
- package/dist/esm/TimersStore/JSONLTimersStore.js +2 -1
- package/dist/esm/TimersStore/JSONLTimersStore.js.map +1 -1
- package/dist/esm/TimersStore/PlainTextTimersStore.d.ts.map +1 -1
- package/dist/esm/TimersStore/PlainTextTimersStore.js +2 -1
- package/dist/esm/TimersStore/PlainTextTimersStore.js.map +1 -1
- package/dist/esm/TimersStore/TimersStore.d.ts.map +1 -1
- package/dist/esm/TimersStore/TimersStore.js +4 -3
- package/dist/esm/TimersStore/TimersStore.js.map +1 -1
- package/dist/esm/throwMessage.d.ts +12 -0
- package/dist/esm/throwMessage.d.ts.map +1 -0
- package/dist/esm/throwMessage.js +12 -0
- package/dist/esm/throwMessage.js.map +1 -0
- package/dist/esm/types.d.ts +4 -2
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ A simple and persistent timer library for Node.js. Timers are saved to a file an
|
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
|
-
- **Monitor Timers (event-driven)**: Start monitoring expired timers and react to events like `expired`, `
|
|
11
|
+
- **Monitor Timers (event-driven)**: Start monitoring expired timers and react to events like `expired`, `created`, `removed`, and `updated` through an event system.
|
|
12
12
|
- **Persistence**: Save timer data to a file that persists across process restarts
|
|
13
13
|
- **Choice of Format**: Choose between JSON Lines for rich data or plain text for lightweight storage.
|
|
14
14
|
|
|
@@ -227,7 +227,7 @@ Removes a timer by its ID.
|
|
|
227
227
|
|
|
228
228
|
### `checkStart(interval?: number): Promise<NodeJS.Timeout>`
|
|
229
229
|
|
|
230
|
-
Starts the timer checking loop. This method should be called once after creating an instance of a `TimersManager` to begin detecting expired timers. Events like `expired`, `errored`, `
|
|
230
|
+
Starts the timer checking loop. This method should be called once after creating an instance of a `TimersManager` to begin detecting expired timers. Events like `expired`, `errored`, `created`, `removed`, and `updated` are emitted, which can be listened to using the `on` method.
|
|
231
231
|
|
|
232
232
|
- **`interval`** (optional, number): Polling interval in milliseconds (default: 200ms)
|
|
233
233
|
|
|
@@ -239,7 +239,7 @@ Starts the timer checking loop. This method should be called once after creating
|
|
|
239
239
|
|
|
240
240
|
Registers an event listener for a specific timer event.
|
|
241
241
|
|
|
242
|
-
- **`event`**: The name of the event to listen for (e.g., `'expired'`, `'
|
|
242
|
+
- **`event`**: The name of the event to listen for (e.g., `'expired'`, `'created'`, `'removed'`, `'updated'`, `'errored'`).
|
|
243
243
|
- **`listener`**: The callback function to execute when the event is emitted. It receives the event payload as an argument.
|
|
244
244
|
|
|
245
245
|
**Returns:** `void`
|
|
@@ -307,6 +307,20 @@ await manager.adjustRemainingTime(timerId, 60000); // Add 1 minute to the timer
|
|
|
307
307
|
await manager.adjustRemainingTime(timerId, -30000); // Subtract 30 seconds from the timer
|
|
308
308
|
```
|
|
309
309
|
|
|
310
|
+
### `checkStop(): Promise<void>`
|
|
311
|
+
|
|
312
|
+
Asynchronously checks for any running `checkStart` intervals and clears them if found. This effectively stops the timer monitoring process.
|
|
313
|
+
|
|
314
|
+
**Returns:** A `Promise<void>` that resolves when all intervals have been cleared.
|
|
315
|
+
|
|
316
|
+
**Throws:** An error if any underlying file operation fails during the process of checking and stopping.
|
|
317
|
+
|
|
318
|
+
### `isBusy: boolean`
|
|
319
|
+
|
|
320
|
+
A getter that returns `true` if the manager is currently monitoring for expired timers (i.e., `checkStart` has been called and `checkStop` has not yet been called), and `false` otherwise.
|
|
321
|
+
|
|
322
|
+
**Returns:** `boolean` - `true` if monitoring, `false` otherwise.
|
|
323
|
+
|
|
310
324
|
## Type Definition
|
|
311
325
|
|
|
312
326
|
The `StorageType` has the following structure:
|
|
@@ -351,8 +365,8 @@ type TimerEvents<T extends StorageType, Extra extends object> = {
|
|
|
351
365
|
expired: Timer<T, Extra>
|
|
352
366
|
errored: Error
|
|
353
367
|
interval: void
|
|
354
|
-
|
|
355
|
-
|
|
368
|
+
created: Timer<T, Extra>
|
|
369
|
+
removed: Timer<T, Extra>
|
|
356
370
|
updated: { old: Timer<T, Extra>, new: Timer<T, Extra> }
|
|
357
371
|
}
|
|
358
372
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE;;;;;;;;GAQG;AACH,qBAAa,kBAAkB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;IACnG,UAAmB,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAQ;cAEnD,kBAAkB,IAAI,MAAM;cAItB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAI9E,UAAmB,IAAI,EAAE,OAAO,CAAoB;IAEpD;;;;;;;;;;;OAWG;IACU,WAAW,CACvB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,KAAK,GACb,OAAO,CAAC,IAAI,CAAC;CAqBhB"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.JSONLTimersManager = void 0;
|
|
4
4
|
const TimersManager_js_1 = require("./TimersManager.js");
|
|
5
5
|
const JSONLTimersStore_js_1 = require("../TimersStore/JSONLTimersStore.js");
|
|
6
|
+
const throwMessage_js_1 = require("../throwMessage.js");
|
|
6
7
|
/**
|
|
7
8
|
* JSONLTimersManager
|
|
8
9
|
* @description
|
|
@@ -40,7 +41,7 @@ class JSONLTimersManager extends TimersManager_js_1.TimersManager {
|
|
|
40
41
|
const timers = await this.TimersStore.loadTimers();
|
|
41
42
|
const index = timers?.findIndex(t => t.id === id);
|
|
42
43
|
if (index === -1 || timers[index] === undefined) {
|
|
43
|
-
throw new Error(
|
|
44
|
+
throw new Error(throwMessage_js_1.throwMessage.NotFound(id));
|
|
44
45
|
}
|
|
45
46
|
const old = { ...timers[index] };
|
|
46
47
|
timers[index].extra = newExtra;
|
|
@@ -48,7 +49,7 @@ class JSONLTimersManager extends TimersManager_js_1.TimersManager {
|
|
|
48
49
|
await this.emit("updated", { old, new: timers[index] });
|
|
49
50
|
}
|
|
50
51
|
catch (e) {
|
|
51
|
-
throw new Error(
|
|
52
|
+
throw new Error(throwMessage_js_1.throwMessage.ChangeExtra, { cause: e });
|
|
52
53
|
}
|
|
53
54
|
});
|
|
54
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,4EAAsE;
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,4EAAsE;AACtE,wDAAkD;AAElD;;;;;;;;GAQG;AACH,MAAa,kBAAkD,SAAQ,gCAA6B;IAChF,WAAW,GAAmC,IAAI,CAAC;IAEnD,kBAAkB;QACpC,OAAO,eAAe,CAAC;IACxB,CAAC;IAEkB,KAAK,CAAC,iBAAiB;QACzC,OAAO,IAAI,sCAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAEkB,IAAI,GAAY,OAAgB,CAAC;IAEpD;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,WAAW,CACvB,EAAU,EACV,QAAe;QAEf,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACpD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAEnD,MAAM,KAAK,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;oBACjD,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAEjC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAjDD,gDAiDC"}
|
|
@@ -13,6 +13,8 @@ import { EventEmitter } from "../EventEmitter.js";
|
|
|
13
13
|
export declare abstract class TimersManager<T extends StorageType, Extra extends object> extends EventEmitter<T, Extra> {
|
|
14
14
|
protected readonly timerfiledir: string;
|
|
15
15
|
protected checkLock: boolean;
|
|
16
|
+
protected interval: NodeJS.Timeout | undefined;
|
|
17
|
+
protected running: boolean;
|
|
16
18
|
protected TimersStore: TimersStore<T, Extra> | null;
|
|
17
19
|
private queue;
|
|
18
20
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
@@ -59,13 +61,34 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
59
61
|
* checkStart
|
|
60
62
|
* @description Starts the timer checking loop. This method should be called once after creating an instance of TimersManager to detect expired timers.
|
|
61
63
|
* @param {number} [interval=200] Polling interval in milliseconds (default: 200ms)
|
|
62
|
-
* @returns
|
|
64
|
+
* @returns Promise<void> that resolves when the loop has been started
|
|
63
65
|
* @throws If file operation fails during checking
|
|
64
66
|
* @example
|
|
65
67
|
* const manager = new TimersManager();
|
|
66
|
-
* manager.checkStart(1000); // Check for expired timers every 1 second
|
|
68
|
+
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
67
69
|
*/
|
|
68
|
-
checkStart(interval?: number): Promise<
|
|
70
|
+
checkStart(interval?: number): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* checkStop
|
|
73
|
+
* @description Stops the timer checking loop.
|
|
74
|
+
* @returns Promise resolving when the loop has been stopped
|
|
75
|
+
* @example
|
|
76
|
+
* const manager = new TimersManager();
|
|
77
|
+
* await manager.checkStart(1000);
|
|
78
|
+
* // ... later, to stop checking:
|
|
79
|
+
* await manager.checkStop();
|
|
80
|
+
*/
|
|
81
|
+
checkStop(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* isBusy
|
|
84
|
+
* @description Indicates whether the TimersManager is currently performing a file operation (e.g. loading or saving timers). This can be used to avoid starting multiple operations simultaneously.
|
|
85
|
+
* @returns `true` if a file operation is in progress, otherwise `false`
|
|
86
|
+
* @example
|
|
87
|
+
* if (!manager.isBusy) {
|
|
88
|
+
* await manager.createTimer(5000);
|
|
89
|
+
* }
|
|
90
|
+
*/
|
|
91
|
+
get isBusy(): boolean;
|
|
69
92
|
/**
|
|
70
93
|
* showTimers
|
|
71
94
|
* @description Retrieves all active timers.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,CAAE,SAAQ,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;IAC9G,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAQ;IAE3D,OAAO,CAAC,KAAK,CAAoC;IACjD,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAM9C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;;;;QAQO;gBAEN,SAAS,CAAC,EAAE,MAAM;IAenB;;;;;;;;;;;;;;OAcM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgChF;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;;;;;;;;OASG;IACU,UAAU,CACtB,QAAQ,GAAE,MAAY,GACpB,OAAO,CAAC,IAAI,CAAC;IAkDhB;;;;;;;;;OASG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;;;;;;;OAQG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;UAQG;IACU,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAQrD;;;;;;;QAOO;IACM,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB1E"}
|
|
@@ -9,6 +9,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
10
|
const searchRoot_js_1 = __importDefault(require("../searchRoot.js"));
|
|
11
11
|
const EventEmitter_js_1 = require("../EventEmitter.js");
|
|
12
|
+
const throwMessage_js_1 = require("../throwMessage.js");
|
|
12
13
|
/**
|
|
13
14
|
* TimersManager
|
|
14
15
|
* @description
|
|
@@ -21,6 +22,8 @@ const EventEmitter_js_1 = require("../EventEmitter.js");
|
|
|
21
22
|
class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
22
23
|
timerfiledir;
|
|
23
24
|
checkLock = false;
|
|
25
|
+
interval;
|
|
26
|
+
running = false;
|
|
24
27
|
TimersStore = null;
|
|
25
28
|
queue = Promise.resolve();
|
|
26
29
|
runExclusive(fn) {
|
|
@@ -42,7 +45,7 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
42
45
|
const rootDir = (0, searchRoot_js_1.default)();
|
|
43
46
|
this.timerfiledir = path_1.default.resolve(rootDir, timerfile ?? this.getDefaultFilename());
|
|
44
47
|
if (!this.timerfiledir.startsWith(rootDir)) {
|
|
45
|
-
throw new Error(
|
|
48
|
+
throw new Error(throwMessage_js_1.throwMessage.FilePathinvalid);
|
|
46
49
|
}
|
|
47
50
|
try {
|
|
48
51
|
fs_1.default.accessSync(this.timerfiledir);
|
|
@@ -70,11 +73,11 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
70
73
|
return this.runExclusive(async () => {
|
|
71
74
|
this.TimersStore ??= await this.createTimersStore();
|
|
72
75
|
if (this.type === "JSONL" && typeof options === "number") {
|
|
73
|
-
throw new Error(
|
|
76
|
+
throw new Error(throwMessage_js_1.throwMessage.NoExtra);
|
|
74
77
|
}
|
|
75
78
|
let length = typeof options === "object" ? options.length : options;
|
|
76
79
|
if (length < 0)
|
|
77
|
-
throw new Error(
|
|
80
|
+
throw new Error(throwMessage_js_1.throwMessage.InvalidLength(length));
|
|
78
81
|
length = Math.trunc(length);
|
|
79
82
|
const id = (0, uuid_1.v4)();
|
|
80
83
|
const now = Date.now();
|
|
@@ -88,7 +91,7 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
88
91
|
: {}),
|
|
89
92
|
};
|
|
90
93
|
await this.TimersStore.appendTimer(newTimerData);
|
|
91
|
-
await this.emit("
|
|
94
|
+
await this.emit("created", newTimerData);
|
|
92
95
|
return id;
|
|
93
96
|
});
|
|
94
97
|
}
|
|
@@ -107,11 +110,11 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
107
110
|
const timers = await this.TimersStore.loadTimers();
|
|
108
111
|
const index = timers.findIndex(t => t.id === id);
|
|
109
112
|
if (index === -1 || timers[index] === undefined) {
|
|
110
|
-
throw new Error(
|
|
113
|
+
throw new Error(throwMessage_js_1.throwMessage.NotFound(id));
|
|
111
114
|
}
|
|
112
115
|
timers.splice(index, 1);
|
|
113
116
|
await this.TimersStore.saveTimers(timers);
|
|
114
|
-
await this.emit("
|
|
117
|
+
await this.emit("removed", timers[index]);
|
|
115
118
|
return;
|
|
116
119
|
});
|
|
117
120
|
}
|
|
@@ -119,56 +122,85 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
119
122
|
* checkStart
|
|
120
123
|
* @description Starts the timer checking loop. This method should be called once after creating an instance of TimersManager to detect expired timers.
|
|
121
124
|
* @param {number} [interval=200] Polling interval in milliseconds (default: 200ms)
|
|
122
|
-
* @returns
|
|
125
|
+
* @returns Promise<void> that resolves when the loop has been started
|
|
123
126
|
* @throws If file operation fails during checking
|
|
124
127
|
* @example
|
|
125
128
|
* const manager = new TimersManager();
|
|
126
|
-
* manager.checkStart(1000); // Check for expired timers every 1 second
|
|
129
|
+
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
127
130
|
*/
|
|
128
131
|
async checkStart(interval = 200) {
|
|
132
|
+
if (this.running)
|
|
133
|
+
return;
|
|
134
|
+
this.running = true;
|
|
129
135
|
this.TimersStore ??= await this.createTimersStore();
|
|
130
136
|
const loop = async () => {
|
|
137
|
+
if (!this.running)
|
|
138
|
+
return;
|
|
131
139
|
if (this.checkLock)
|
|
132
140
|
return;
|
|
133
141
|
this.checkLock = true;
|
|
134
|
-
let expiredTimers = [];
|
|
135
142
|
try {
|
|
136
|
-
expiredTimers = await this.runExclusive(async () => {
|
|
143
|
+
const expiredTimers = await this.runExclusive(async () => {
|
|
137
144
|
await this.emit("interval", void 0);
|
|
138
145
|
const allTimers = await this.TimersStore.loadTimers();
|
|
139
146
|
const now = Date.now();
|
|
140
147
|
const expired = [];
|
|
141
148
|
const active = [];
|
|
142
149
|
for (const timer of allTimers) {
|
|
143
|
-
if (timer.stop <= now)
|
|
150
|
+
if (timer.stop <= now)
|
|
144
151
|
expired.push(timer);
|
|
145
|
-
|
|
146
|
-
else {
|
|
152
|
+
else
|
|
147
153
|
active.push(timer);
|
|
148
|
-
}
|
|
149
154
|
}
|
|
150
155
|
if (expired.length > 0) {
|
|
151
156
|
await this.TimersStore.saveTimers(active);
|
|
152
157
|
}
|
|
153
158
|
return expired;
|
|
154
159
|
});
|
|
160
|
+
for (const timer of expiredTimers) {
|
|
161
|
+
await this.emit("expired", timer);
|
|
162
|
+
}
|
|
155
163
|
}
|
|
156
164
|
catch (e) {
|
|
157
|
-
this.emit("errored", e instanceof Error ? e : new Error(String(e)))
|
|
158
|
-
this.
|
|
159
|
-
return;
|
|
165
|
+
await this.emit("errored", e instanceof Error ? e : new Error(String(e)));
|
|
166
|
+
this.running = false;
|
|
160
167
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
await this.emit("expired", timer);
|
|
164
|
-
}
|
|
165
|
-
catch (e) {
|
|
166
|
-
await this.emit("errored", e instanceof Error ? e : new Error(String(e)));
|
|
167
|
-
}
|
|
168
|
+
finally {
|
|
169
|
+
this.checkLock = false;
|
|
168
170
|
}
|
|
169
|
-
this.checkLock = false;
|
|
170
171
|
};
|
|
171
|
-
|
|
172
|
+
this.emit("started", void 0);
|
|
173
|
+
this.interval = setInterval(loop, interval);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* checkStop
|
|
177
|
+
* @description Stops the timer checking loop.
|
|
178
|
+
* @returns Promise resolving when the loop has been stopped
|
|
179
|
+
* @example
|
|
180
|
+
* const manager = new TimersManager();
|
|
181
|
+
* await manager.checkStart(1000);
|
|
182
|
+
* // ... later, to stop checking:
|
|
183
|
+
* await manager.checkStop();
|
|
184
|
+
*/
|
|
185
|
+
async checkStop() {
|
|
186
|
+
this.running = false;
|
|
187
|
+
if (this.interval) {
|
|
188
|
+
clearInterval(this.interval);
|
|
189
|
+
this.interval = undefined;
|
|
190
|
+
}
|
|
191
|
+
this.emit("stopped", void 0);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* isBusy
|
|
195
|
+
* @description Indicates whether the TimersManager is currently performing a file operation (e.g. loading or saving timers). This can be used to avoid starting multiple operations simultaneously.
|
|
196
|
+
* @returns `true` if a file operation is in progress, otherwise `false`
|
|
197
|
+
* @example
|
|
198
|
+
* if (!manager.isBusy) {
|
|
199
|
+
* await manager.createTimer(5000);
|
|
200
|
+
* }
|
|
201
|
+
*/
|
|
202
|
+
get isBusy() {
|
|
203
|
+
return this.checkLock;
|
|
172
204
|
}
|
|
173
205
|
/**
|
|
174
206
|
* showTimers
|
|
@@ -200,7 +232,7 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
200
232
|
const timers = await this.TimersStore.loadTimers();
|
|
201
233
|
const index = timers.findIndex(t => t.id === id);
|
|
202
234
|
if (index === -1 || timers[index] === undefined) {
|
|
203
|
-
throw new Error(
|
|
235
|
+
throw new Error(throwMessage_js_1.throwMessage.NotFound(id));
|
|
204
236
|
}
|
|
205
237
|
const old = { ...timers[index] };
|
|
206
238
|
const now = Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AACpB,+BAAoC;AAEpC,qEAA0C;AAG1C,wDAAkD;AAElD;;;;;;;;GAQG;AACH,MAAsB,aAA2D,SAAQ,8BAAsB;IAC3F,YAAY,CAAS;IAC9B,SAAS,GAAY,KAAK,CAAC;IAE3B,WAAW,GAAiC,IAAI,CAAC;IAEnD,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACvC,YAAY,CAAI,EAAoB;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACV,CAAC;IAMD;;;;;;;;QAQO;IACP,YACC,SAAkB;QAElB,KAAK,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,IAAA,uBAAU,GAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,gBAAgB,CAAC,KAAK,SAAS,MAAM,CAAE,SAAQ,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;gBAGrF,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMG;cACsB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7E,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAO1D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;CAMlE"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.JSONLTimersStore = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const TimersStore_js_1 = require("./TimersStore.js");
|
|
6
|
+
const throwMessage_js_1 = require("../throwMessage.js");
|
|
6
7
|
class JSONLTimersStore extends TimersStore_js_1.TimersStore {
|
|
7
8
|
constructor(timerfile) {
|
|
8
9
|
super(timerfile);
|
|
@@ -16,7 +17,7 @@ class JSONLTimersStore extends TimersStore_js_1.TimersStore {
|
|
|
16
17
|
*/
|
|
17
18
|
async checkTimerfileSyntax(timers) {
|
|
18
19
|
const throwing = () => {
|
|
19
|
-
throw new Error(
|
|
20
|
+
throw new Error(throwMessage_js_1.throwMessage.InvalidSyntax);
|
|
20
21
|
};
|
|
21
22
|
for (const timer of timers) {
|
|
22
23
|
if (Object.keys(timer).length !== 4)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;
|
|
1
|
+
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;AAC/C,wDAAkD;AAElD,MAAa,gBAAuC,SAAQ,4BAA2B;IAEtF,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACgB,KAAK,CAAC,oBAAoB,CAAC,MAA+B;QAC5E,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;gBAAE,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAEe,iBAAiB,CAAC,MAA+B;QAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC,CAAC;IAC5D,CAAC;CACD;AA3CD,4CA2CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGxE,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMM;cACmB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAclF,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM;IAO/D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;CAavE"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PlainTextTimersStore = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const TimersStore_js_1 = require("./TimersStore.js");
|
|
6
|
+
const throwMessage_js_1 = require("../throwMessage.js");
|
|
6
7
|
class PlainTextTimersStore extends TimersStore_js_1.TimersStore {
|
|
7
8
|
constructor(timerfile) {
|
|
8
9
|
super(timerfile);
|
|
@@ -16,7 +17,7 @@ class PlainTextTimersStore extends TimersStore_js_1.TimersStore {
|
|
|
16
17
|
*/
|
|
17
18
|
async checkTimerfileSyntax(timers) {
|
|
18
19
|
const throwing = () => {
|
|
19
|
-
throw new Error(
|
|
20
|
+
throw new Error(throwMessage_js_1.throwMessage.InvalidSyntax);
|
|
20
21
|
};
|
|
21
22
|
for (const timer of timers) {
|
|
22
23
|
if (Object.keys(timer).length !== 3)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;AAC/C,wDAAkD;AAElD,MAAa,oBAAqB,SAAQ,4BAAgC;IAEzE,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMM;IACa,KAAK,CAAC,oBAAoB,CAAC,MAAoC;QACjF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,QAAQ,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO;IACR,CAAC;IAEe,iBAAiB,CAAC,MAAoC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,EAAG;gBACP,KAAK,EAAE,MAAM,CAAC,QAAS,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,OAAQ,CAAC;aACQ,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACD;AAjDD,oDAiDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGtD,8BAAsB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM;IAC5E,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAErC,SAAS,aACR,SAAS,EAAE,MAAM;IAKL,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAWxC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aACjE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;aACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;CAC5D"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TimersStore = void 0;
|
|
7
7
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const throwMessage_js_1 = require("../throwMessage.js");
|
|
8
9
|
class TimersStore {
|
|
9
10
|
timerfile;
|
|
10
11
|
constructor(timerfile) {
|
|
@@ -18,7 +19,7 @@ class TimersStore {
|
|
|
18
19
|
return timersData;
|
|
19
20
|
}
|
|
20
21
|
catch (e) {
|
|
21
|
-
throw new Error(
|
|
22
|
+
throw new Error(throwMessage_js_1.throwMessage.LoadTimerData, { cause: e });
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
async saveTimers(timers) {
|
|
@@ -27,7 +28,7 @@ class TimersStore {
|
|
|
27
28
|
await promises_1.default.writeFile(this.timerfile, data, "utf-8");
|
|
28
29
|
}
|
|
29
30
|
catch (e) {
|
|
30
|
-
throw new Error(
|
|
31
|
+
throw new Error(throwMessage_js_1.throwMessage.SaveTimerData, { cause: e });
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
async appendTimer(timer) {
|
|
@@ -36,7 +37,7 @@ class TimersStore {
|
|
|
36
37
|
return;
|
|
37
38
|
}
|
|
38
39
|
catch (e) {
|
|
39
|
-
throw new Error(
|
|
40
|
+
throw new Error(throwMessage_js_1.throwMessage.AppendTimerData, { cause: e });
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;
|
|
1
|
+
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAG7B,wDAAkD;AAElD,MAAsB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,GAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAyB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAsB;QAC9C,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;CAKD;AA1CD,kCA0CC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const throwMessage: {
|
|
2
|
+
NotFound: (id: string) => string;
|
|
3
|
+
ChangeExtra: string;
|
|
4
|
+
FilePathinvalid: string;
|
|
5
|
+
NoExtra: string;
|
|
6
|
+
InvalidLength: (length: number) => string;
|
|
7
|
+
InvalidSyntax: string;
|
|
8
|
+
LoadTimerData: string;
|
|
9
|
+
SaveTimerData: string;
|
|
10
|
+
AppendTimerData: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=throwMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throwMessage.d.ts","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;mBACT,MAAM;;;;4BAIG,MAAM;;;;;CAK9B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.throwMessage = void 0;
|
|
4
|
+
exports.throwMessage = {
|
|
5
|
+
NotFound: (id) => `Timer with id ${id} not found`,
|
|
6
|
+
ChangeExtra: "Error when changing extra",
|
|
7
|
+
FilePathinvalid: "Timer file path must be within the project directory",
|
|
8
|
+
NoExtra: "Cannot create timer without extra fields in JSONL",
|
|
9
|
+
InvalidLength: (length) => `Invalid length: ${length}`,
|
|
10
|
+
InvalidSyntax: "Timer file's syntax is wrong",
|
|
11
|
+
LoadTimerData: "Error when loading timer data",
|
|
12
|
+
SaveTimerData: "Error when saving timer data",
|
|
13
|
+
AppendTimerData: "Error when appending timer data",
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=throwMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throwMessage.js","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG;IAC3B,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY;IACzD,WAAW,EAAE,2BAA2B;IACxC,eAAe,EAAE,sDAAsD;IACvE,OAAO,EAAE,mDAAmD;IAC5D,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,mBAAmB,MAAM,EAAE;IAC9D,aAAa,EAAE,8BAA8B;IAC7C,aAAa,EAAE,+BAA+B;IAC9C,aAAa,EAAE,8BAA8B;IAC7C,eAAe,EAAE,iCAAiC;CAClD,CAAC"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -14,11 +14,13 @@ export type CreateTimerOptions<T extends StorageType, Extra extends object> = T
|
|
|
14
14
|
extra: Extra;
|
|
15
15
|
} : T extends "PlainText" ? number : never;
|
|
16
16
|
export type TimerEvents<T extends StorageType, Extra extends object> = {
|
|
17
|
+
started: void;
|
|
18
|
+
stopped: void;
|
|
17
19
|
expired: Timer<T, Extra>;
|
|
18
20
|
errored: Error;
|
|
19
21
|
interval: void;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
created: Timer<T, Extra>;
|
|
23
|
+
removed: Timer<T, Extra>;
|
|
22
24
|
updated: {
|
|
23
25
|
old: Timer<T, Extra>;
|
|
24
26
|
new: Timer<T, Extra>;
|
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,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IACzD,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAA;CACf,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,SAAS,OAAO,GACzF;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAA;CACf,GACD,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC;AAEd,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;IACrE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE;QAAE,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAAE,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;KACpE,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CACpC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;CAC7B,CAAA"}
|
|
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,EAAE,KAAK,SAAS,MAAM,IACzD,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAA;CACf,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,SAAS,OAAO,GACzF;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAA;CACf,GACD,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC;AAEd,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;IACrE,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE;QAAE,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAAE,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;KACpE,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CACpC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;CAC7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE;;;;;;;;GAQG;AACH,qBAAa,kBAAkB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;IACnG,UAAmB,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAQ;cAEnD,kBAAkB,IAAI,MAAM;cAItB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAI9E,UAAmB,IAAI,EAAE,OAAO,CAAoB;IAEpD;;;;;;;;;;;OAWG;IACU,WAAW,CACvB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,KAAK,GACb,OAAO,CAAC,IAAI,CAAC;CAqBhB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TimersManager } from "./TimersManager.js";
|
|
2
2
|
import { JSONLTimersStore } from "../TimersStore/JSONLTimersStore.js";
|
|
3
|
+
import { throwMessage } from "../throwMessage.js";
|
|
3
4
|
/**
|
|
4
5
|
* JSONLTimersManager
|
|
5
6
|
* @description
|
|
@@ -37,7 +38,7 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
37
38
|
const timers = await this.TimersStore.loadTimers();
|
|
38
39
|
const index = timers?.findIndex(t => t.id === id);
|
|
39
40
|
if (index === -1 || timers[index] === undefined) {
|
|
40
|
-
throw new Error(
|
|
41
|
+
throw new Error(throwMessage.NotFound(id));
|
|
41
42
|
}
|
|
42
43
|
const old = { ...timers[index] };
|
|
43
44
|
timers[index].extra = newExtra;
|
|
@@ -45,7 +46,7 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
45
46
|
await this.emit("updated", { old, new: timers[index] });
|
|
46
47
|
}
|
|
47
48
|
catch (e) {
|
|
48
|
-
throw new Error(
|
|
49
|
+
throw new Error(throwMessage.ChangeExtra, { cause: e });
|
|
49
50
|
}
|
|
50
51
|
});
|
|
51
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkD,SAAQ,aAA6B;IAChF,WAAW,GAAmC,IAAI,CAAC;IAEnD,kBAAkB;QACpC,OAAO,eAAe,CAAC;IACxB,CAAC;IAEkB,KAAK,CAAC,iBAAiB;QACzC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAEkB,IAAI,GAAY,OAAgB,CAAC;IAEpD;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,WAAW,CACvB,EAAU,EACV,QAAe;QAEf,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACpD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAEnD,MAAM,KAAK,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;oBACjD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAEjC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
|
@@ -13,6 +13,8 @@ import { EventEmitter } from "../EventEmitter.js";
|
|
|
13
13
|
export declare abstract class TimersManager<T extends StorageType, Extra extends object> extends EventEmitter<T, Extra> {
|
|
14
14
|
protected readonly timerfiledir: string;
|
|
15
15
|
protected checkLock: boolean;
|
|
16
|
+
protected interval: NodeJS.Timeout | undefined;
|
|
17
|
+
protected running: boolean;
|
|
16
18
|
protected TimersStore: TimersStore<T, Extra> | null;
|
|
17
19
|
private queue;
|
|
18
20
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
@@ -59,13 +61,34 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
59
61
|
* checkStart
|
|
60
62
|
* @description Starts the timer checking loop. This method should be called once after creating an instance of TimersManager to detect expired timers.
|
|
61
63
|
* @param {number} [interval=200] Polling interval in milliseconds (default: 200ms)
|
|
62
|
-
* @returns
|
|
64
|
+
* @returns Promise<void> that resolves when the loop has been started
|
|
63
65
|
* @throws If file operation fails during checking
|
|
64
66
|
* @example
|
|
65
67
|
* const manager = new TimersManager();
|
|
66
|
-
* manager.checkStart(1000); // Check for expired timers every 1 second
|
|
68
|
+
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
67
69
|
*/
|
|
68
|
-
checkStart(interval?: number): Promise<
|
|
70
|
+
checkStart(interval?: number): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* checkStop
|
|
73
|
+
* @description Stops the timer checking loop.
|
|
74
|
+
* @returns Promise resolving when the loop has been stopped
|
|
75
|
+
* @example
|
|
76
|
+
* const manager = new TimersManager();
|
|
77
|
+
* await manager.checkStart(1000);
|
|
78
|
+
* // ... later, to stop checking:
|
|
79
|
+
* await manager.checkStop();
|
|
80
|
+
*/
|
|
81
|
+
checkStop(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* isBusy
|
|
84
|
+
* @description Indicates whether the TimersManager is currently performing a file operation (e.g. loading or saving timers). This can be used to avoid starting multiple operations simultaneously.
|
|
85
|
+
* @returns `true` if a file operation is in progress, otherwise `false`
|
|
86
|
+
* @example
|
|
87
|
+
* if (!manager.isBusy) {
|
|
88
|
+
* await manager.createTimer(5000);
|
|
89
|
+
* }
|
|
90
|
+
*/
|
|
91
|
+
get isBusy(): boolean;
|
|
69
92
|
/**
|
|
70
93
|
* showTimers
|
|
71
94
|
* @description Retrieves all active timers.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,CAAE,SAAQ,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;IAC9G,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAQ;IAE3D,OAAO,CAAC,KAAK,CAAoC;IACjD,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAM9C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;;;;QAQO;gBAEN,SAAS,CAAC,EAAE,MAAM;IAenB;;;;;;;;;;;;;;OAcM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgChF;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;;;;;;;;OASG;IACU,UAAU,CACtB,QAAQ,GAAE,MAAY,GACpB,OAAO,CAAC,IAAI,CAAC;IAkDhB;;;;;;;;;OASG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;;;;;;;OAQG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;UAQG;IACU,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAQrD;;;;;;;QAOO;IACM,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB1E"}
|
|
@@ -4,6 +4,7 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
4
4
|
import searchRoot from "../searchRoot.js";
|
|
5
5
|
import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
6
6
|
import { EventEmitter } from "../EventEmitter.js";
|
|
7
|
+
import { throwMessage } from "../throwMessage.js";
|
|
7
8
|
/**
|
|
8
9
|
* TimersManager
|
|
9
10
|
* @description
|
|
@@ -16,6 +17,8 @@ import { EventEmitter } from "../EventEmitter.js";
|
|
|
16
17
|
export class TimersManager extends EventEmitter {
|
|
17
18
|
timerfiledir;
|
|
18
19
|
checkLock = false;
|
|
20
|
+
interval;
|
|
21
|
+
running = false;
|
|
19
22
|
TimersStore = null;
|
|
20
23
|
queue = Promise.resolve();
|
|
21
24
|
runExclusive(fn) {
|
|
@@ -37,7 +40,7 @@ export class TimersManager extends EventEmitter {
|
|
|
37
40
|
const rootDir = searchRoot();
|
|
38
41
|
this.timerfiledir = path.resolve(rootDir, timerfile ?? this.getDefaultFilename());
|
|
39
42
|
if (!this.timerfiledir.startsWith(rootDir)) {
|
|
40
|
-
throw new Error(
|
|
43
|
+
throw new Error(throwMessage.FilePathinvalid);
|
|
41
44
|
}
|
|
42
45
|
try {
|
|
43
46
|
fs.accessSync(this.timerfiledir);
|
|
@@ -65,11 +68,11 @@ export class TimersManager extends EventEmitter {
|
|
|
65
68
|
return this.runExclusive(async () => {
|
|
66
69
|
this.TimersStore ??= await this.createTimersStore();
|
|
67
70
|
if (this.type === "JSONL" && typeof options === "number") {
|
|
68
|
-
throw new Error(
|
|
71
|
+
throw new Error(throwMessage.NoExtra);
|
|
69
72
|
}
|
|
70
73
|
let length = typeof options === "object" ? options.length : options;
|
|
71
74
|
if (length < 0)
|
|
72
|
-
throw new Error(
|
|
75
|
+
throw new Error(throwMessage.InvalidLength(length));
|
|
73
76
|
length = Math.trunc(length);
|
|
74
77
|
const id = uuidv4();
|
|
75
78
|
const now = Date.now();
|
|
@@ -83,7 +86,7 @@ export class TimersManager extends EventEmitter {
|
|
|
83
86
|
: {}),
|
|
84
87
|
};
|
|
85
88
|
await this.TimersStore.appendTimer(newTimerData);
|
|
86
|
-
await this.emit("
|
|
89
|
+
await this.emit("created", newTimerData);
|
|
87
90
|
return id;
|
|
88
91
|
});
|
|
89
92
|
}
|
|
@@ -102,11 +105,11 @@ export class TimersManager extends EventEmitter {
|
|
|
102
105
|
const timers = await this.TimersStore.loadTimers();
|
|
103
106
|
const index = timers.findIndex(t => t.id === id);
|
|
104
107
|
if (index === -1 || timers[index] === undefined) {
|
|
105
|
-
throw new Error(
|
|
108
|
+
throw new Error(throwMessage.NotFound(id));
|
|
106
109
|
}
|
|
107
110
|
timers.splice(index, 1);
|
|
108
111
|
await this.TimersStore.saveTimers(timers);
|
|
109
|
-
await this.emit("
|
|
112
|
+
await this.emit("removed", timers[index]);
|
|
110
113
|
return;
|
|
111
114
|
});
|
|
112
115
|
}
|
|
@@ -114,56 +117,85 @@ export class TimersManager extends EventEmitter {
|
|
|
114
117
|
* checkStart
|
|
115
118
|
* @description Starts the timer checking loop. This method should be called once after creating an instance of TimersManager to detect expired timers.
|
|
116
119
|
* @param {number} [interval=200] Polling interval in milliseconds (default: 200ms)
|
|
117
|
-
* @returns
|
|
120
|
+
* @returns Promise<void> that resolves when the loop has been started
|
|
118
121
|
* @throws If file operation fails during checking
|
|
119
122
|
* @example
|
|
120
123
|
* const manager = new TimersManager();
|
|
121
|
-
* manager.checkStart(1000); // Check for expired timers every 1 second
|
|
124
|
+
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
122
125
|
*/
|
|
123
126
|
async checkStart(interval = 200) {
|
|
127
|
+
if (this.running)
|
|
128
|
+
return;
|
|
129
|
+
this.running = true;
|
|
124
130
|
this.TimersStore ??= await this.createTimersStore();
|
|
125
131
|
const loop = async () => {
|
|
132
|
+
if (!this.running)
|
|
133
|
+
return;
|
|
126
134
|
if (this.checkLock)
|
|
127
135
|
return;
|
|
128
136
|
this.checkLock = true;
|
|
129
|
-
let expiredTimers = [];
|
|
130
137
|
try {
|
|
131
|
-
expiredTimers = await this.runExclusive(async () => {
|
|
138
|
+
const expiredTimers = await this.runExclusive(async () => {
|
|
132
139
|
await this.emit("interval", void 0);
|
|
133
140
|
const allTimers = await this.TimersStore.loadTimers();
|
|
134
141
|
const now = Date.now();
|
|
135
142
|
const expired = [];
|
|
136
143
|
const active = [];
|
|
137
144
|
for (const timer of allTimers) {
|
|
138
|
-
if (timer.stop <= now)
|
|
145
|
+
if (timer.stop <= now)
|
|
139
146
|
expired.push(timer);
|
|
140
|
-
|
|
141
|
-
else {
|
|
147
|
+
else
|
|
142
148
|
active.push(timer);
|
|
143
|
-
}
|
|
144
149
|
}
|
|
145
150
|
if (expired.length > 0) {
|
|
146
151
|
await this.TimersStore.saveTimers(active);
|
|
147
152
|
}
|
|
148
153
|
return expired;
|
|
149
154
|
});
|
|
155
|
+
for (const timer of expiredTimers) {
|
|
156
|
+
await this.emit("expired", timer);
|
|
157
|
+
}
|
|
150
158
|
}
|
|
151
159
|
catch (e) {
|
|
152
|
-
this.emit("errored", e instanceof Error ? e : new Error(String(e)))
|
|
153
|
-
this.
|
|
154
|
-
return;
|
|
160
|
+
await this.emit("errored", e instanceof Error ? e : new Error(String(e)));
|
|
161
|
+
this.running = false;
|
|
155
162
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
await this.emit("expired", timer);
|
|
159
|
-
}
|
|
160
|
-
catch (e) {
|
|
161
|
-
await this.emit("errored", e instanceof Error ? e : new Error(String(e)));
|
|
162
|
-
}
|
|
163
|
+
finally {
|
|
164
|
+
this.checkLock = false;
|
|
163
165
|
}
|
|
164
|
-
this.checkLock = false;
|
|
165
166
|
};
|
|
166
|
-
|
|
167
|
+
this.emit("started", void 0);
|
|
168
|
+
this.interval = setInterval(loop, interval);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* checkStop
|
|
172
|
+
* @description Stops the timer checking loop.
|
|
173
|
+
* @returns Promise resolving when the loop has been stopped
|
|
174
|
+
* @example
|
|
175
|
+
* const manager = new TimersManager();
|
|
176
|
+
* await manager.checkStart(1000);
|
|
177
|
+
* // ... later, to stop checking:
|
|
178
|
+
* await manager.checkStop();
|
|
179
|
+
*/
|
|
180
|
+
async checkStop() {
|
|
181
|
+
this.running = false;
|
|
182
|
+
if (this.interval) {
|
|
183
|
+
clearInterval(this.interval);
|
|
184
|
+
this.interval = undefined;
|
|
185
|
+
}
|
|
186
|
+
this.emit("stopped", void 0);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* isBusy
|
|
190
|
+
* @description Indicates whether the TimersManager is currently performing a file operation (e.g. loading or saving timers). This can be used to avoid starting multiple operations simultaneously.
|
|
191
|
+
* @returns `true` if a file operation is in progress, otherwise `false`
|
|
192
|
+
* @example
|
|
193
|
+
* if (!manager.isBusy) {
|
|
194
|
+
* await manager.createTimer(5000);
|
|
195
|
+
* }
|
|
196
|
+
*/
|
|
197
|
+
get isBusy() {
|
|
198
|
+
return this.checkLock;
|
|
167
199
|
}
|
|
168
200
|
/**
|
|
169
201
|
* showTimers
|
|
@@ -195,7 +227,7 @@ export class TimersManager extends EventEmitter {
|
|
|
195
227
|
const timers = await this.TimersStore.loadTimers();
|
|
196
228
|
const index = timers.findIndex(t => t.id === id);
|
|
197
229
|
if (index === -1 || timers[index] === undefined) {
|
|
198
|
-
throw new Error(
|
|
230
|
+
throw new Error(throwMessage.NotFound(id));
|
|
199
231
|
}
|
|
200
232
|
const old = { ...timers[index] };
|
|
201
233
|
const now = Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,OAAgB,aAA2D,SAAQ,YAAsB;IAC3F,YAAY,CAAS;IAC9B,SAAS,GAAY,KAAK,CAAC;IAE3B,WAAW,GAAiC,IAAI,CAAC;IAEnD,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACvC,YAAY,CAAI,EAAoB;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACV,CAAC;IAMD;;;;;;;;QAQO;IACP,YACC,SAAkB;QAElB,KAAK,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,gBAAgB,CAAC,KAAK,SAAS,MAAM,CAAE,SAAQ,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;gBAGrF,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMG;cACsB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7E,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAO1D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;CAMlE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { validate } from "uuid";
|
|
2
2
|
import { TimersStore } from "./TimersStore.js";
|
|
3
|
+
import { throwMessage } from "../throwMessage.js";
|
|
3
4
|
export class JSONLTimersStore extends TimersStore {
|
|
4
5
|
constructor(timerfile) {
|
|
5
6
|
super(timerfile);
|
|
@@ -13,7 +14,7 @@ export class JSONLTimersStore extends TimersStore {
|
|
|
13
14
|
*/
|
|
14
15
|
async checkTimerfileSyntax(timers) {
|
|
15
16
|
const throwing = () => {
|
|
16
|
-
throw new Error(
|
|
17
|
+
throw new Error(throwMessage.InvalidSyntax);
|
|
17
18
|
};
|
|
18
19
|
for (const timer of timers) {
|
|
19
20
|
if (Object.keys(timer).length !== 4)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,gBAAuC,SAAQ,WAA2B;IAEtF,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACgB,KAAK,CAAC,oBAAoB,CAAC,MAA+B;QAC5E,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;gBAAE,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAEe,iBAAiB,CAAC,MAA+B;QAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC,CAAC;IAC5D,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGxE,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMM;cACmB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAclF,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM;IAO/D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;CAavE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { validate } from "uuid";
|
|
2
2
|
import { TimersStore } from "./TimersStore.js";
|
|
3
|
+
import { throwMessage } from "../throwMessage.js";
|
|
3
4
|
export class PlainTextTimersStore extends TimersStore {
|
|
4
5
|
constructor(timerfile) {
|
|
5
6
|
super(timerfile);
|
|
@@ -13,7 +14,7 @@ export class PlainTextTimersStore extends TimersStore {
|
|
|
13
14
|
*/
|
|
14
15
|
async checkTimerfileSyntax(timers) {
|
|
15
16
|
const throwing = () => {
|
|
16
|
-
throw new Error(
|
|
17
|
+
throw new Error(throwMessage.InvalidSyntax);
|
|
17
18
|
};
|
|
18
19
|
for (const timer of timers) {
|
|
19
20
|
if (Object.keys(timer).length !== 3)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,oBAAqB,SAAQ,WAAgC;IAEzE,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMM;IACa,KAAK,CAAC,oBAAoB,CAAC,MAAoC;QACjF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,QAAQ,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO;IACR,CAAC;IAEe,iBAAiB,CAAC,MAAoC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,EAAG;gBACP,KAAK,EAAE,MAAM,CAAC,QAAS,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,OAAQ,CAAC;aACQ,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGtD,8BAAsB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM;IAC5E,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAErC,SAAS,aACR,SAAS,EAAE,MAAM;IAKL,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAWxC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aACjE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;aACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;CAC5D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from "fs/promises";
|
|
2
|
+
import { throwMessage } from "../throwMessage.js";
|
|
2
3
|
export class TimersStore {
|
|
3
4
|
timerfile;
|
|
4
5
|
constructor(timerfile) {
|
|
@@ -12,7 +13,7 @@ export class TimersStore {
|
|
|
12
13
|
return timersData;
|
|
13
14
|
}
|
|
14
15
|
catch (e) {
|
|
15
|
-
throw new Error(
|
|
16
|
+
throw new Error(throwMessage.LoadTimerData, { cause: e });
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
async saveTimers(timers) {
|
|
@@ -21,7 +22,7 @@ export class TimersStore {
|
|
|
21
22
|
await fs.writeFile(this.timerfile, data, "utf-8");
|
|
22
23
|
}
|
|
23
24
|
catch (e) {
|
|
24
|
-
throw new Error(
|
|
25
|
+
throw new Error(throwMessage.SaveTimerData, { cause: e });
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
async appendTimer(timer) {
|
|
@@ -30,7 +31,7 @@ export class TimersStore {
|
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
33
|
catch (e) {
|
|
33
|
-
throw new Error(
|
|
34
|
+
throw new Error(throwMessage.AppendTimerData, { cause: e });
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAgB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,GAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAyB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAsB;QAC9C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;CAKD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const throwMessage: {
|
|
2
|
+
NotFound: (id: string) => string;
|
|
3
|
+
ChangeExtra: string;
|
|
4
|
+
FilePathinvalid: string;
|
|
5
|
+
NoExtra: string;
|
|
6
|
+
InvalidLength: (length: number) => string;
|
|
7
|
+
InvalidSyntax: string;
|
|
8
|
+
LoadTimerData: string;
|
|
9
|
+
SaveTimerData: string;
|
|
10
|
+
AppendTimerData: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=throwMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throwMessage.d.ts","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;mBACT,MAAM;;;;4BAIG,MAAM;;;;;CAK9B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const throwMessage = {
|
|
2
|
+
NotFound: (id) => `Timer with id ${id} not found`,
|
|
3
|
+
ChangeExtra: "Error when changing extra",
|
|
4
|
+
FilePathinvalid: "Timer file path must be within the project directory",
|
|
5
|
+
NoExtra: "Cannot create timer without extra fields in JSONL",
|
|
6
|
+
InvalidLength: (length) => `Invalid length: ${length}`,
|
|
7
|
+
InvalidSyntax: "Timer file's syntax is wrong",
|
|
8
|
+
LoadTimerData: "Error when loading timer data",
|
|
9
|
+
SaveTimerData: "Error when saving timer data",
|
|
10
|
+
AppendTimerData: "Error when appending timer data",
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=throwMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throwMessage.js","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY;IACzD,WAAW,EAAE,2BAA2B;IACxC,eAAe,EAAE,sDAAsD;IACvE,OAAO,EAAE,mDAAmD;IAC5D,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,mBAAmB,MAAM,EAAE;IAC9D,aAAa,EAAE,8BAA8B;IAC7C,aAAa,EAAE,+BAA+B;IAC9C,aAAa,EAAE,8BAA8B;IAC7C,eAAe,EAAE,iCAAiC;CAClD,CAAC"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -14,11 +14,13 @@ export type CreateTimerOptions<T extends StorageType, Extra extends object> = T
|
|
|
14
14
|
extra: Extra;
|
|
15
15
|
} : T extends "PlainText" ? number : never;
|
|
16
16
|
export type TimerEvents<T extends StorageType, Extra extends object> = {
|
|
17
|
+
started: void;
|
|
18
|
+
stopped: void;
|
|
17
19
|
expired: Timer<T, Extra>;
|
|
18
20
|
errored: Error;
|
|
19
21
|
interval: void;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
created: Timer<T, Extra>;
|
|
23
|
+
removed: Timer<T, Extra>;
|
|
22
24
|
updated: {
|
|
23
25
|
old: Timer<T, Extra>;
|
|
24
26
|
new: Timer<T, Extra>;
|
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,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IACzD,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAA;CACf,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,SAAS,OAAO,GACzF;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAA;CACf,GACD,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC;AAEd,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;IACrE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE;QAAE,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAAE,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;KACpE,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CACpC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;CAC7B,CAAA"}
|
|
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,EAAE,KAAK,SAAS,MAAM,IACzD,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAA;CACf,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,SAAS,OAAO,GACzF;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAA;CACf,GACD,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC;AAEd,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;IACrE,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,OAAO,EAAE;QAAE,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAAE,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI;KACpE,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CACpC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;CAC7B,CAAA"}
|