eternal-timer 4.3.1 → 5.0.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 +26 -22
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts +22 -7
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/JSONLTimersManager.js +44 -9
- package/dist/cjs/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts +19 -4
- package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.js +43 -6
- package/dist/cjs/TimersManager/PlainTextTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.d.ts +24 -25
- package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.js +27 -44
- package/dist/cjs/TimersManager/TimersManager.js.map +1 -1
- package/dist/cjs/searchRoot.d.ts +1 -1
- package/dist/cjs/searchRoot.d.ts.map +1 -1
- package/dist/cjs/searchRoot.js +13 -7
- package/dist/cjs/searchRoot.js.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts +22 -7
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.js +41 -9
- package/dist/esm/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.d.ts +19 -4
- package/dist/esm/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.js +40 -6
- package/dist/esm/TimersManager/PlainTextTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/TimersManager.d.ts +24 -25
- package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/TimersManager.js +27 -41
- package/dist/esm/TimersManager/TimersManager.js.map +1 -1
- package/dist/esm/searchRoot.d.ts +1 -1
- package/dist/esm/searchRoot.d.ts.map +1 -1
- package/dist/esm/searchRoot.js +13 -7
- package/dist/esm/searchRoot.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.TimersManager = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
4
|
const uuid_1 = require("uuid");
|
|
10
|
-
const searchRoot_js_1 = __importDefault(require("../searchRoot.js"));
|
|
11
5
|
const EventEmitter_js_1 = require("../EventEmitter.js");
|
|
12
6
|
const throwMessage_js_1 = require("../throwMessage.js");
|
|
13
7
|
/**
|
|
@@ -21,10 +15,13 @@ const throwMessage_js_1 = require("../throwMessage.js");
|
|
|
21
15
|
*/
|
|
22
16
|
class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
23
17
|
timerfiledir;
|
|
18
|
+
// lock if the check loop is running, or not. This is used to prevent multiple check loops from running simultaneously and to indicate whether a file operation is in progress (e.g. loading or saving timers).
|
|
24
19
|
checkLock = false;
|
|
20
|
+
// Interval id of the check loop. If the loop is not running, this is undefined.
|
|
25
21
|
interval;
|
|
22
|
+
// Indicates whether the check loop is running. This is used to control the loop and to prevent starting multiple loops simultaneously.
|
|
26
23
|
running = false;
|
|
27
|
-
|
|
24
|
+
// A simple promise queue to ensure that file operations are performed sequentially, preventing race conditions
|
|
28
25
|
queue = Promise.resolve();
|
|
29
26
|
runExclusive(fn) {
|
|
30
27
|
const p = this.queue.then(fn);
|
|
@@ -32,27 +29,16 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
32
29
|
return p;
|
|
33
30
|
}
|
|
34
31
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*/
|
|
32
|
+
* constructor
|
|
33
|
+
* @param {string} timerfile timer file path.
|
|
34
|
+
* @description Initializes the TimersManager instance.
|
|
35
|
+
* @deprecated This constructor is deprecated. Please use the static `create` method instead, which performs necessary asynchronous initialization. The constructor will be made private in a future release.
|
|
36
|
+
* @example
|
|
37
|
+
* const manager = new TimersManager("/path/to/timers"); // Uses specified timer file path
|
|
38
|
+
*/
|
|
43
39
|
constructor(timerfile) {
|
|
44
40
|
super();
|
|
45
|
-
|
|
46
|
-
this.timerfiledir = path_1.default.resolve(rootDir, timerfile ?? this.getDefaultFilename());
|
|
47
|
-
if (!this.timerfiledir.startsWith(rootDir)) {
|
|
48
|
-
throw new Error(throwMessage_js_1.throwMessage.FilePathinvalid);
|
|
49
|
-
}
|
|
50
|
-
try {
|
|
51
|
-
fs_1.default.accessSync(this.timerfiledir);
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
fs_1.default.writeFileSync(this.timerfiledir, "");
|
|
55
|
-
}
|
|
41
|
+
this.timerfiledir = timerfile;
|
|
56
42
|
}
|
|
57
43
|
/**
|
|
58
44
|
* createTimer
|
|
@@ -62,16 +48,15 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
62
48
|
* @throws If length is invalid (e.g. length < 0) or file operation fails
|
|
63
49
|
* @example
|
|
64
50
|
* // For PlainTextTimersManager
|
|
65
|
-
* const manager =
|
|
51
|
+
* const manager = await PlainTextTimersManager.create();
|
|
66
52
|
* const newTimerId = await manager.createTimer(5000); // Create a 5-second timer
|
|
67
53
|
*
|
|
68
54
|
* // For JSONLTimersManager
|
|
69
|
-
* const jsonlManager =
|
|
55
|
+
* const jsonlManager = await JSONLTimersManager.create<{ title: string }>();
|
|
70
56
|
* const jsonlTimerId = await jsonlManager.createTimer({ length: 10000, extra: { title: "My JSONL Timer" } }); // Create a 10-second timer with extra data
|
|
71
57
|
*/
|
|
72
58
|
async createTimer(options) {
|
|
73
59
|
return this.runExclusive(async () => {
|
|
74
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
75
60
|
if (this.type === "JSONL" && typeof options === "number") {
|
|
76
61
|
throw new Error(throwMessage_js_1.throwMessage.NoExtra);
|
|
77
62
|
}
|
|
@@ -105,7 +90,6 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
105
90
|
*/
|
|
106
91
|
async removeTimer(id) {
|
|
107
92
|
return this.runExclusive(async () => {
|
|
108
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
109
93
|
const timers = await this.TimersStore.loadTimers();
|
|
110
94
|
const index = timers.findIndex(t => t.id === id);
|
|
111
95
|
if (index === -1 || timers[index] === undefined) {
|
|
@@ -123,14 +107,12 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
123
107
|
* @returns Promise<void> that resolves when the loop has been started
|
|
124
108
|
* @throws If file operation fails during checking
|
|
125
109
|
* @example
|
|
126
|
-
* const manager = new TimersManager();
|
|
127
110
|
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
128
111
|
*/
|
|
129
112
|
async checkStart(interval = 200) {
|
|
130
113
|
if (this.running)
|
|
131
114
|
return;
|
|
132
115
|
this.running = true;
|
|
133
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
134
116
|
const loop = async () => {
|
|
135
117
|
if (!this.running)
|
|
136
118
|
return;
|
|
@@ -182,7 +164,6 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
182
164
|
* @description Stops the timer checking loop.
|
|
183
165
|
* @returns Promise resolving when the loop has been stopped
|
|
184
166
|
* @example
|
|
185
|
-
* const manager = new TimersManager();
|
|
186
167
|
* await manager.checkStart(1000);
|
|
187
168
|
* // ... later, to stop checking:
|
|
188
169
|
* await manager.checkStop();
|
|
@@ -208,35 +189,37 @@ class TimersManager extends EventEmitter_js_1.EventEmitter {
|
|
|
208
189
|
return this.checkLock;
|
|
209
190
|
}
|
|
210
191
|
/**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
192
|
+
* showTimers
|
|
193
|
+
* @description Retrieves all active timers.
|
|
194
|
+
* @returns Array of `Timer` objects
|
|
195
|
+
* @throws If file operation fails
|
|
196
|
+
* @example
|
|
197
|
+
* const timers = await manager.showTimers();
|
|
198
|
+
* console.log(JSON.stringify(timers));
|
|
199
|
+
*/
|
|
219
200
|
async showTimers() {
|
|
220
201
|
return this.runExclusive(async () => {
|
|
221
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
222
202
|
const timersData = await this.TimersStore.loadTimers();
|
|
223
203
|
return timersData;
|
|
224
204
|
});
|
|
225
205
|
}
|
|
226
206
|
/**
|
|
227
|
-
|
|
207
|
+
* adjustRemainingTime
|
|
228
208
|
* @description Adjusts the remaining time of a timer.
|
|
229
209
|
* @param {string} id ID of the timer to modify
|
|
230
210
|
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
231
211
|
* @returns Promise resolving when the operation is complete
|
|
232
212
|
* @throws If file operation fails
|
|
213
|
+
* @example
|
|
214
|
+
* const timer = await manager.createTimer(10000); // Create a 10-second timer
|
|
215
|
+
* await manager.adjustRemainingTime(timer, -2000); // Subtract 2 seconds from the remaining time (now 8 seconds left)
|
|
216
|
+
* await manager.adjustRemainingTime(timer, 3000); // Add 3 seconds to the remaining time (now 11 seconds left)
|
|
233
217
|
*/
|
|
234
218
|
async adjustRemainingTime(id, delay) {
|
|
235
219
|
return this.runExclusive(async () => {
|
|
236
220
|
if (typeof delay !== "number" || !Number.isFinite(delay)) {
|
|
237
221
|
throw new Error(throwMessage_js_1.throwMessage.InvalidAdjustment(delay));
|
|
238
222
|
}
|
|
239
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
240
223
|
const timers = await this.TimersStore.loadTimers();
|
|
241
224
|
const index = timers.findIndex(t => t.id === id);
|
|
242
225
|
if (index === -1 || timers[index] === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAIpC,wDAAkD;AAClD,wDAAkD;AAElD;;;;;;;;GAQG;AACH,MAAsB,aAA2D,SAAQ,8BAAsB;IAC3F,YAAY,CAAS;IAExC,+MAA+M;IACrM,SAAS,GAAY,KAAK,CAAC;IAErC,gFAAgF;IACtE,QAAQ,CAA6B;IAC/C,uIAAuI;IAC7H,OAAO,GAAY,KAAK,CAAC;IAInC,+GAA+G;IACvG,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;IAID;;;;;;;OAOG;IACH,YAAsB,SAAiB;QACtC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;OAcM;IACC,KAAK,CAAC,WAAW,CAAC,OAAqC;QAC7D,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,MAAM,GAAW,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5E,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAEhG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5B,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAE3C,MAAM,YAAY,GAAoB;gBACrC,EAAE;gBACF,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;oBACxE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;oBAC1B,CAAC,CAAC,EAAE,CAAC;aACa,CAAC;YAErB,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQM;IACC,KAAK,CAAC,WAAW,CAAC,EAAU;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAEnD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO;QACR,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,UAAU,CACtB,WAAmB,GAAG;QAGtB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAE3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,IAAI,CAAC;gBACJ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;oBACxD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAY,CAAC,UAAU,EAAE,CAAC;oBACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAEvB,MAAM,OAAO,GAAsB,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAsB,EAAE,CAAC;oBAErC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;wBAC/B,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG;4BAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;4BACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;oBAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,MAAM,IAAI,CAAC,WAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC5C,CAAC;oBAED,OAAO,OAAO,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACJ,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBACnC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3E,CAAC;gBACF,CAAC;YAEF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACtB,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC5C,CAAC;YACF,CAAC;QACF,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;;;;OAQG;IACH,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,UAAU;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YACvD,OAAO,UAAU,CAAC;QACnB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;QAWO;IACA,KAAK,CAAC,mBAAmB,CAAC,EAAU,EAAE,KAAa;QACzD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAEnD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,8BAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;YAEpD,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC;YAChC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO;QACR,CAAC,CAAC,CAAC;IACH,CAAC;CACF;AA5PD,sCA4PC"}
|
package/dist/cjs/searchRoot.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchRoot.d.ts","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"searchRoot.d.ts","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAA8B,UAAU,oBAavC"}
|
package/dist/cjs/searchRoot.js
CHANGED
|
@@ -4,20 +4,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.default = searchRoot;
|
|
7
|
-
const
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
/**
|
|
10
10
|
* searchRoot
|
|
11
11
|
* @description searching root directly of the project
|
|
12
12
|
* @returns directly of the project(string)
|
|
13
13
|
*/
|
|
14
|
-
function searchRoot() {
|
|
14
|
+
async function searchRoot() {
|
|
15
15
|
let dir = process.cwd();
|
|
16
|
-
while (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
while (true) {
|
|
17
|
+
try {
|
|
18
|
+
await promises_1.default.access(path_1.default.join(dir, "package.json"));
|
|
19
|
+
return dir;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
const parent = path_1.default.dirname(dir);
|
|
23
|
+
if (parent === dir)
|
|
24
|
+
break;
|
|
25
|
+
dir = parent;
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
return dir;
|
|
23
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchRoot.js","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"searchRoot.js","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":";;;;;AAQA,6BAaC;AArBD,2DAA6B;AAC7B,gDAAwB;AAExB;;;;GAIG;AACY,KAAK,UAAU,UAAU;IACvC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,OAAO,IAAI,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -3,16 +3,31 @@ import { JSONLTimersStore } from "../TimersStore/JSONLTimersStore.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* JSONLTimersManager
|
|
5
5
|
* @description
|
|
6
|
-
* Manages timers stored in a
|
|
7
|
-
* (This is a abstract class)
|
|
6
|
+
* Manages timers stored in a JSONL file.
|
|
8
7
|
*
|
|
9
8
|
* - Timers are persisted in a file
|
|
10
9
|
* - Expired timers are detected by polling
|
|
11
10
|
*/
|
|
12
|
-
export declare class JSONLTimersManager<Extra extends object
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
export declare class JSONLTimersManager<Extra extends object> extends TimersManager<"JSONL", Extra> {
|
|
12
|
+
static readonly defaultFilename = ".timers.jsonl";
|
|
13
|
+
/**
|
|
14
|
+
* create
|
|
15
|
+
* @param {string | undefined} timerfile optional timer file path. If not provided, the default path will be used.
|
|
16
|
+
* @description Creates an instance of JSONLTimersManager. If the timer file does not exist, an empty file is created.
|
|
17
|
+
* @throws If file access or creation fails
|
|
18
|
+
* @example
|
|
19
|
+
* const manager = await JSONLTimersManager.create(); // Uses default timer file path
|
|
20
|
+
* const manager = await JSONLTimersManager.create("/path/to/timers.jsonl"); // Uses specified timer file path
|
|
21
|
+
* @returns Promise resolving to an instance of JSONLTimersManager
|
|
22
|
+
*/
|
|
23
|
+
static create<Extra extends object = object>(timerfile?: string): Promise<JSONLTimersManager<Extra>>;
|
|
24
|
+
/**
|
|
25
|
+
* constructor
|
|
26
|
+
* @param {string} timerfiledir resolved timer file path.
|
|
27
|
+
* @description Initializes the JSONLTimersManager instance.
|
|
28
|
+
*/
|
|
29
|
+
protected constructor(timerfiledir: string);
|
|
30
|
+
protected TimersStore: JSONLTimersStore<Extra>;
|
|
16
31
|
protected type: "JSONL";
|
|
17
32
|
/**
|
|
18
33
|
* changeExtra
|
|
@@ -23,7 +38,7 @@ export declare class JSONLTimersManager<Extra extends object = object> extends T
|
|
|
23
38
|
* @throws If timer with id not found or file operation fails
|
|
24
39
|
* @example
|
|
25
40
|
* const timer = await manager.createTimer({ length: 1000, extra: {author: "someone"} });
|
|
26
|
-
* await changeExtra(timer, {author: "SUKEsann2000"});
|
|
41
|
+
* await manager.changeExtra(timer, {author: "SUKEsann2000"});
|
|
27
42
|
* // extra is changed and author will be "SUKEsann2000" instead of "someone"
|
|
28
43
|
*/
|
|
29
44
|
changeExtra(id: string, newExtra: Extra): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE;;;;;;;GAOG;AACH,qBAAa,kBAAkB,CAAC,KAAK,SAAS,MAAM,CAAE,SAAQ,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;IAC1F,gBAAuB,eAAe,mBAAmB;IAEzD;;;;;;;;;OASG;WACiB,MAAM,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAkBjH;;;;OAIG;IACH,SAAS,aAAa,YAAY,EAAE,MAAM;IAK1C,UAAmB,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAExD,UAAmB,IAAI,EAAE,OAAO,CAAoB;IAEpD;;;;;;;;;;;OAWG;IACU,WAAW,CACvB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,KAAK,GACb,OAAO,CAAC,IAAI,CAAC;CAiBhB"}
|
|
@@ -1,23 +1,56 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
import searchRoot from "../searchRoot.js";
|
|
1
4
|
import { TimersManager } from "./TimersManager.js";
|
|
2
5
|
import { JSONLTimersStore } from "../TimersStore/JSONLTimersStore.js";
|
|
3
6
|
import { throwMessage } from "../throwMessage.js";
|
|
4
7
|
/**
|
|
5
8
|
* JSONLTimersManager
|
|
6
9
|
* @description
|
|
7
|
-
* Manages timers stored in a
|
|
8
|
-
* (This is a abstract class)
|
|
10
|
+
* Manages timers stored in a JSONL file.
|
|
9
11
|
*
|
|
10
12
|
* - Timers are persisted in a file
|
|
11
13
|
* - Expired timers are detected by polling
|
|
12
14
|
*/
|
|
13
15
|
export class JSONLTimersManager extends TimersManager {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
static defaultFilename = ".timers.jsonl";
|
|
17
|
+
/**
|
|
18
|
+
* create
|
|
19
|
+
* @param {string | undefined} timerfile optional timer file path. If not provided, the default path will be used.
|
|
20
|
+
* @description Creates an instance of JSONLTimersManager. If the timer file does not exist, an empty file is created.
|
|
21
|
+
* @throws If file access or creation fails
|
|
22
|
+
* @example
|
|
23
|
+
* const manager = await JSONLTimersManager.create(); // Uses default timer file path
|
|
24
|
+
* const manager = await JSONLTimersManager.create("/path/to/timers.jsonl"); // Uses specified timer file path
|
|
25
|
+
* @returns Promise resolving to an instance of JSONLTimersManager
|
|
26
|
+
*/
|
|
27
|
+
static async create(timerfile) {
|
|
28
|
+
const rootDir = await searchRoot();
|
|
29
|
+
const filename = timerfile ?? this.defaultFilename;
|
|
30
|
+
const timerfiledir = path.isAbsolute(filename)
|
|
31
|
+
? filename
|
|
32
|
+
: path.resolve(rootDir, filename);
|
|
33
|
+
if (!timerfiledir.startsWith(rootDir)) {
|
|
34
|
+
throw new Error(throwMessage.FilePathinvalid);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await fs.access(timerfiledir);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
await fs.writeFile(timerfiledir, "");
|
|
41
|
+
}
|
|
42
|
+
return new this(timerfiledir);
|
|
17
43
|
}
|
|
18
|
-
|
|
19
|
-
|
|
44
|
+
/**
|
|
45
|
+
* constructor
|
|
46
|
+
* @param {string} timerfiledir resolved timer file path.
|
|
47
|
+
* @description Initializes the JSONLTimersManager instance.
|
|
48
|
+
*/
|
|
49
|
+
constructor(timerfiledir) {
|
|
50
|
+
super(timerfiledir);
|
|
51
|
+
this.TimersStore = new JSONLTimersStore(this.timerfiledir);
|
|
20
52
|
}
|
|
53
|
+
TimersStore;
|
|
21
54
|
type = "JSONL";
|
|
22
55
|
/**
|
|
23
56
|
* changeExtra
|
|
@@ -28,12 +61,11 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
28
61
|
* @throws If timer with id not found or file operation fails
|
|
29
62
|
* @example
|
|
30
63
|
* const timer = await manager.createTimer({ length: 1000, extra: {author: "someone"} });
|
|
31
|
-
* await changeExtra(timer, {author: "SUKEsann2000"});
|
|
64
|
+
* await manager.changeExtra(timer, {author: "SUKEsann2000"});
|
|
32
65
|
* // extra is changed and author will be "SUKEsann2000" instead of "someone"
|
|
33
66
|
*/
|
|
34
67
|
async changeExtra(id, newExtra) {
|
|
35
68
|
return this.runExclusive(async () => {
|
|
36
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
37
69
|
try {
|
|
38
70
|
const timers = await this.TimersStore.loadTimers();
|
|
39
71
|
const index = timers?.findIndex(t => t.id === id);
|
|
@@ -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;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAyC,SAAQ,aAA6B;IACnF,MAAM,CAAU,eAAe,GAAG,eAAe,CAAC;IAEzD;;;;;;;;;OASG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAgC,SAAkB;QAC3E,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC7C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEnC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,IAAI,CAAQ,YAAY,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,YAAsB,YAAoB;QACzC,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC;IAEkB,WAAW,CAA0B;IAErC,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;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,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3C,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"}
|
|
@@ -4,15 +4,30 @@ import { PlainTextTimersStore } from "../TimersStore/PlainTextTimersStore.js";
|
|
|
4
4
|
* PlainTextTimersManager
|
|
5
5
|
* @description
|
|
6
6
|
* Manages timers stored in a PlainText file.
|
|
7
|
-
* (This is a abstract class)
|
|
8
7
|
*
|
|
9
8
|
* - Timers are persisted in a file
|
|
10
9
|
* - Expired timers are detected by polling
|
|
11
10
|
*/
|
|
12
11
|
export declare class PlainTextTimersManager extends TimersManager<"PlainText", object> {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
static readonly defaultFilename = ".timers";
|
|
13
|
+
/**
|
|
14
|
+
* create
|
|
15
|
+
* @param {string | undefined} timerfile optional timer file path. If not provided, the default path will be used.
|
|
16
|
+
* @description Creates an instance of PlainTextTimersManager. If the timer file does not exist, an empty file is created.
|
|
17
|
+
* @throws If file access or creation fails
|
|
18
|
+
* @example
|
|
19
|
+
* const manager = await PlainTextTimersManager.create(); // Uses default timer file path
|
|
20
|
+
* const manager = await PlainTextTimersManager.create("/path/to/.timers"); // Uses specified timer file path
|
|
21
|
+
* @returns Promise resolving to an instance of PlainTextTimersManager
|
|
22
|
+
*/
|
|
23
|
+
static create(timerfile?: string): Promise<PlainTextTimersManager>;
|
|
24
|
+
/**
|
|
25
|
+
* constructor
|
|
26
|
+
* @param {string} timerfiledir resolved timer file path.
|
|
27
|
+
* @description Initializes the PlainTextTimersManager instance.
|
|
28
|
+
*/
|
|
29
|
+
protected constructor(timerfiledir: string);
|
|
30
|
+
protected TimersStore: PlainTextTimersStore;
|
|
16
31
|
protected type: "PlainText";
|
|
17
32
|
}
|
|
18
33
|
//# sourceMappingURL=PlainTextTimersManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/PlainTextTimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlainTextTimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/PlainTextTimersManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7E,gBAAuB,eAAe,aAAa;IAEnD;;;;;;;;;OASG;WACiB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkB/E;;;;OAIG;IACH,SAAS,aAAa,YAAY,EAAE,MAAM;IAK1C,UAAmB,WAAW,EAAE,oBAAoB,CAAC;IAErD,UAAmB,IAAI,EAAE,WAAW,CAAwB;CAC5D"}
|
|
@@ -1,22 +1,56 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
import searchRoot from "../searchRoot.js";
|
|
4
|
+
import { throwMessage } from "../throwMessage.js";
|
|
1
5
|
import { TimersManager } from "./TimersManager.js";
|
|
2
6
|
import { PlainTextTimersStore } from "../TimersStore/PlainTextTimersStore.js";
|
|
3
7
|
/**
|
|
4
8
|
* PlainTextTimersManager
|
|
5
9
|
* @description
|
|
6
10
|
* Manages timers stored in a PlainText file.
|
|
7
|
-
* (This is a abstract class)
|
|
8
11
|
*
|
|
9
12
|
* - Timers are persisted in a file
|
|
10
13
|
* - Expired timers are detected by polling
|
|
11
14
|
*/
|
|
12
15
|
export class PlainTextTimersManager extends TimersManager {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
static defaultFilename = ".timers";
|
|
17
|
+
/**
|
|
18
|
+
* create
|
|
19
|
+
* @param {string | undefined} timerfile optional timer file path. If not provided, the default path will be used.
|
|
20
|
+
* @description Creates an instance of PlainTextTimersManager. If the timer file does not exist, an empty file is created.
|
|
21
|
+
* @throws If file access or creation fails
|
|
22
|
+
* @example
|
|
23
|
+
* const manager = await PlainTextTimersManager.create(); // Uses default timer file path
|
|
24
|
+
* const manager = await PlainTextTimersManager.create("/path/to/.timers"); // Uses specified timer file path
|
|
25
|
+
* @returns Promise resolving to an instance of PlainTextTimersManager
|
|
26
|
+
*/
|
|
27
|
+
static async create(timerfile) {
|
|
28
|
+
const rootDir = await searchRoot();
|
|
29
|
+
const filename = timerfile ?? this.defaultFilename;
|
|
30
|
+
const timerfiledir = path.isAbsolute(filename)
|
|
31
|
+
? filename
|
|
32
|
+
: path.resolve(rootDir, filename);
|
|
33
|
+
if (!timerfiledir.startsWith(rootDir)) {
|
|
34
|
+
throw new Error(throwMessage.FilePathinvalid);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await fs.access(timerfiledir);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
await fs.writeFile(timerfiledir, "");
|
|
41
|
+
}
|
|
42
|
+
return new this(timerfiledir);
|
|
16
43
|
}
|
|
17
|
-
|
|
18
|
-
|
|
44
|
+
/**
|
|
45
|
+
* constructor
|
|
46
|
+
* @param {string} timerfiledir resolved timer file path.
|
|
47
|
+
* @description Initializes the PlainTextTimersManager instance.
|
|
48
|
+
*/
|
|
49
|
+
constructor(timerfiledir) {
|
|
50
|
+
super(timerfiledir);
|
|
51
|
+
this.TimersStore = new PlainTextTimersStore(this.timerfiledir);
|
|
19
52
|
}
|
|
53
|
+
TimersStore;
|
|
20
54
|
type = "PlainText";
|
|
21
55
|
}
|
|
22
56
|
//# sourceMappingURL=PlainTextTimersManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/PlainTextTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E
|
|
1
|
+
{"version":3,"file":"PlainTextTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/PlainTextTimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAkC;IACtE,MAAM,CAAU,eAAe,GAAG,SAAS,CAAC;IAEnD;;;;;;;;;OASG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAkB;QAC5C,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC7C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEnC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,YAAsB,YAAoB;QACzC,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAEkB,WAAW,CAAuB;IAElC,IAAI,GAAgB,WAAoB,CAAC"}
|
|
@@ -15,22 +15,19 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
15
15
|
protected checkLock: boolean;
|
|
16
16
|
protected interval: NodeJS.Timeout | undefined;
|
|
17
17
|
protected running: boolean;
|
|
18
|
-
protected TimersStore: TimersStore<T, Extra
|
|
18
|
+
protected abstract TimersStore: TimersStore<T, Extra>;
|
|
19
19
|
private queue;
|
|
20
20
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
21
|
-
protected abstract getDefaultFilename(): string;
|
|
22
|
-
protected abstract createTimersStore(): Promise<TimersStore<T, Extra>>;
|
|
23
21
|
protected abstract type: T;
|
|
24
22
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
constructor(timerfile?: string);
|
|
23
|
+
* constructor
|
|
24
|
+
* @param {string} timerfile timer file path.
|
|
25
|
+
* @description Initializes the TimersManager instance.
|
|
26
|
+
* @deprecated This constructor is deprecated. Please use the static `create` method instead, which performs necessary asynchronous initialization. The constructor will be made private in a future release.
|
|
27
|
+
* @example
|
|
28
|
+
* const manager = new TimersManager("/path/to/timers"); // Uses specified timer file path
|
|
29
|
+
*/
|
|
30
|
+
protected constructor(timerfile: string);
|
|
34
31
|
/**
|
|
35
32
|
* createTimer
|
|
36
33
|
* @description Creates a new timer.
|
|
@@ -39,11 +36,11 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
39
36
|
* @throws If length is invalid (e.g. length < 0) or file operation fails
|
|
40
37
|
* @example
|
|
41
38
|
* // For PlainTextTimersManager
|
|
42
|
-
* const manager =
|
|
39
|
+
* const manager = await PlainTextTimersManager.create();
|
|
43
40
|
* const newTimerId = await manager.createTimer(5000); // Create a 5-second timer
|
|
44
41
|
*
|
|
45
42
|
* // For JSONLTimersManager
|
|
46
|
-
* const jsonlManager =
|
|
43
|
+
* const jsonlManager = await JSONLTimersManager.create<{ title: string }>();
|
|
47
44
|
* const jsonlTimerId = await jsonlManager.createTimer({ length: 10000, extra: { title: "My JSONL Timer" } }); // Create a 10-second timer with extra data
|
|
48
45
|
*/
|
|
49
46
|
createTimer(options: CreateTimerOptions<T, Extra>): Promise<string>;
|
|
@@ -64,7 +61,6 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
64
61
|
* @returns Promise<void> that resolves when the loop has been started
|
|
65
62
|
* @throws If file operation fails during checking
|
|
66
63
|
* @example
|
|
67
|
-
* const manager = new TimersManager();
|
|
68
64
|
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
69
65
|
*/
|
|
70
66
|
checkStart(interval?: number): Promise<void>;
|
|
@@ -73,7 +69,6 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
73
69
|
* @description Stops the timer checking loop.
|
|
74
70
|
* @returns Promise resolving when the loop has been stopped
|
|
75
71
|
* @example
|
|
76
|
-
* const manager = new TimersManager();
|
|
77
72
|
* await manager.checkStart(1000);
|
|
78
73
|
* // ... later, to stop checking:
|
|
79
74
|
* await manager.checkStop();
|
|
@@ -90,22 +85,26 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
90
85
|
*/
|
|
91
86
|
get isBusy(): boolean;
|
|
92
87
|
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
* showTimers
|
|
89
|
+
* @description Retrieves all active timers.
|
|
90
|
+
* @returns Array of `Timer` objects
|
|
91
|
+
* @throws If file operation fails
|
|
92
|
+
* @example
|
|
93
|
+
* const timers = await manager.showTimers();
|
|
94
|
+
* console.log(JSON.stringify(timers));
|
|
95
|
+
*/
|
|
101
96
|
showTimers(): Promise<Timer<T, Extra>[]>;
|
|
102
97
|
/**
|
|
103
|
-
|
|
98
|
+
* adjustRemainingTime
|
|
104
99
|
* @description Adjusts the remaining time of a timer.
|
|
105
100
|
* @param {string} id ID of the timer to modify
|
|
106
101
|
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
107
102
|
* @returns Promise resolving when the operation is complete
|
|
108
103
|
* @throws If file operation fails
|
|
104
|
+
* @example
|
|
105
|
+
* const timer = await manager.createTimer(10000); // Create a 10-second timer
|
|
106
|
+
* await manager.adjustRemainingTime(timer, -2000); // Subtract 2 seconds from the remaining time (now 8 seconds left)
|
|
107
|
+
* await manager.adjustRemainingTime(timer, 3000); // Add 3 seconds to the remaining time (now 11 seconds left)
|
|
109
108
|
*/
|
|
110
109
|
adjustRemainingTime(id: string, delay: number): Promise<void>;
|
|
111
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAEA,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;IAGxC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAGrC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAE/C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAGtD,OAAO,CAAC,KAAK,CAAoC;IACjD,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAM9C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;;;OAOG;IACH,SAAS,aAAa,SAAS,EAAE,MAAM;IAKvC;;;;;;;;;;;;;;OAcM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BhF;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD;;;;;;;;OAQG;IACU,UAAU,CACtB,QAAQ,GAAE,MAAY,GACpB,OAAO,CAAC,IAAI,CAAC;IAsDhB;;;;;;;;OAQG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;;;;;;;OAQG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;OAQG;IACU,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAOrD;;;;;;;;;;;QAWO;IACM,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB1E"}
|