eternal-timer 2.5.1 → 4.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 +189 -50
- package/dist/cjs/EventEmitter.d.ts +12 -0
- package/dist/cjs/EventEmitter.d.ts.map +1 -0
- package/dist/cjs/EventEmitter.js +50 -0
- package/dist/cjs/EventEmitter.js.map +1 -0
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts +17 -5
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/JSONLTimersManager.js +19 -21
- package/dist/cjs/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts +2 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.js +1 -0
- package/dist/cjs/TimersManager/PlainTextTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.d.ts +39 -37
- package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.js +62 -55
- package/dist/cjs/TimersManager/TimersManager.js.map +1 -1
- package/dist/cjs/TimersStore/JSONLTimersStore.d.ts +4 -4
- package/dist/cjs/TimersStore/JSONLTimersStore.d.ts.map +1 -1
- package/dist/cjs/TimersStore/JSONLTimersStore.js +5 -3
- package/dist/cjs/TimersStore/JSONLTimersStore.js.map +1 -1
- package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts +4 -4
- package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts.map +1 -1
- package/dist/cjs/TimersStore/PlainTextTimersStore.js.map +1 -1
- package/dist/cjs/TimersStore/TimersStore.d.ts +7 -7
- package/dist/cjs/TimersStore/TimersStore.d.ts.map +1 -1
- package/dist/cjs/TimersStore/TimersStore.js.map +1 -1
- package/dist/cjs/types.d.ts +19 -7
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/EventEmitter.d.ts +12 -0
- package/dist/esm/EventEmitter.d.ts.map +1 -0
- package/dist/esm/EventEmitter.js +46 -0
- package/dist/esm/EventEmitter.js.map +1 -0
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts +17 -5
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.js +19 -21
- package/dist/esm/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.d.ts +2 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.js +1 -0
- package/dist/esm/TimersManager/PlainTextTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/TimersManager.d.ts +39 -37
- package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/TimersManager.js +62 -55
- package/dist/esm/TimersManager/TimersManager.js.map +1 -1
- package/dist/esm/TimersStore/JSONLTimersStore.d.ts +4 -4
- package/dist/esm/TimersStore/JSONLTimersStore.d.ts.map +1 -1
- package/dist/esm/TimersStore/JSONLTimersStore.js +5 -3
- package/dist/esm/TimersStore/JSONLTimersStore.js.map +1 -1
- package/dist/esm/TimersStore/PlainTextTimersStore.d.ts +4 -4
- package/dist/esm/TimersStore/PlainTextTimersStore.d.ts.map +1 -1
- package/dist/esm/TimersStore/PlainTextTimersStore.js.map +1 -1
- package/dist/esm/TimersStore/TimersStore.d.ts +7 -7
- package/dist/esm/TimersStore/TimersStore.d.ts.map +1 -1
- package/dist/esm/TimersStore/TimersStore.js.map +1 -1
- package/dist/esm/types.d.ts +19 -7
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +2 -5
- package/dist/cjs/Log.d.ts +0 -8
- package/dist/cjs/Log.d.ts.map +0 -1
- package/dist/cjs/Log.js +0 -61
- package/dist/cjs/Log.js.map +0 -1
- package/dist/esm/Log.d.ts +0 -8
- package/dist/esm/Log.d.ts.map +0 -1
- package/dist/esm/Log.js +0 -24
- package/dist/esm/Log.js.map +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class EventEmitter {
|
|
2
|
+
listeners = {};
|
|
3
|
+
on(event, listener) {
|
|
4
|
+
if (!this.listeners[event]) {
|
|
5
|
+
this.listeners[event] = [];
|
|
6
|
+
}
|
|
7
|
+
this.listeners[event].push(listener);
|
|
8
|
+
}
|
|
9
|
+
once(event, listener) {
|
|
10
|
+
const wrapper = (payload) => {
|
|
11
|
+
this.off(event, wrapper);
|
|
12
|
+
return listener(payload);
|
|
13
|
+
};
|
|
14
|
+
this.on(event, wrapper);
|
|
15
|
+
}
|
|
16
|
+
off(event, listener) {
|
|
17
|
+
const listeners = this.listeners[event];
|
|
18
|
+
if (!listeners)
|
|
19
|
+
return;
|
|
20
|
+
const index = listeners.indexOf(listener);
|
|
21
|
+
if (index !== -1) {
|
|
22
|
+
listeners.splice(index, 1);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
offAll(event) {
|
|
26
|
+
this.listeners[event] = [];
|
|
27
|
+
}
|
|
28
|
+
async emit(event, payload) {
|
|
29
|
+
const listeners = this.listeners[event];
|
|
30
|
+
if (!listeners?.length)
|
|
31
|
+
return;
|
|
32
|
+
const errors = [];
|
|
33
|
+
await Promise.all(listeners.map(async (l) => {
|
|
34
|
+
try {
|
|
35
|
+
await l(payload);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
errors.push(e);
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
if (errors.length > 0) {
|
|
42
|
+
throw new AggregateError(errors, `Errors in event "${event}"`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=EventEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../../src/EventEmitter.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IACd,SAAS,GAIZ,EAAE,CAAC;IAEH,EAAE,CACR,KAAQ,EACR,QAAqE;QAErE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QACK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEM,IAAI,CACV,KAAQ,EACR,QAAqE;QAErE,MAAM,OAAO,GAAG,CAAC,OAAiC,EAAE,EAAE;YACrD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACzB,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAEM,GAAG,CACT,KAAQ,EACR,QAAqE;QAErE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAEM,MAAM,CACZ,KAAQ;QAER,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IAES,KAAK,CAAC,IAAI,CACnB,KAAQ,EACR,OAAiC;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,MAAM;YAAE,OAAO;QAE/B,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,MAAM,OAAO,CAAC,GAAG,CAChB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;YACvB,IAAI,CAAC;gBACJ,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACF,CAAC,CAAC,CACF,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,oBAAoB,KAAK,GAAG,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;CACD"}
|
|
@@ -9,11 +9,23 @@ import { JSONLTimersStore } from "../TimersStore/JSONLTimersStore.js";
|
|
|
9
9
|
* - Timers are persisted in a file
|
|
10
10
|
* - Expired timers are detected by polling
|
|
11
11
|
*/
|
|
12
|
-
export declare class JSONLTimersManager extends TimersManager<"JSONL"> {
|
|
13
|
-
protected TimersStore: JSONLTimersStore | null;
|
|
12
|
+
export declare class JSONLTimersManager<Extra extends object = object> extends TimersManager<"JSONL", Extra> {
|
|
13
|
+
protected TimersStore: JSONLTimersStore<Extra> | null;
|
|
14
14
|
protected getDefaultFilename(): string;
|
|
15
|
-
protected createTimersStore(): Promise<JSONLTimersStore
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
protected createTimersStore(): Promise<JSONLTimersStore<Extra>>;
|
|
16
|
+
protected type: "JSONL";
|
|
17
|
+
/**
|
|
18
|
+
* changeExtra
|
|
19
|
+
* @description Change extra field
|
|
20
|
+
* @param {string} id
|
|
21
|
+
* @param {Extra} newExtra
|
|
22
|
+
* @returns Promise resolving when the operation is complete
|
|
23
|
+
* @throws If timer with id not found or file operation fails
|
|
24
|
+
* @example
|
|
25
|
+
* const timer = await manager.createTimer({ length: 1000, extra: {author: "someone"} });
|
|
26
|
+
* await changeExtra(timer, {author: "SUKEsann2000"});
|
|
27
|
+
* // extra is changed and author will be "SUKEsann2000" instead of "someone"
|
|
28
|
+
*/
|
|
29
|
+
changeExtra(id: string, newExtra: Extra): Promise<void>;
|
|
18
30
|
}
|
|
19
31
|
//# sourceMappingURL=JSONLTimersManager.d.ts.map
|
|
@@ -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;AAEtE;;;;;;;;GAQG;AACH,qBAAa,
|
|
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;AAEtE;;;;;;;;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"}
|
|
@@ -17,37 +17,35 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
17
17
|
async createTimersStore() {
|
|
18
18
|
return new JSONLTimersStore(this.timerfiledir);
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
type = "JSONL";
|
|
21
|
+
/**
|
|
22
|
+
* changeExtra
|
|
23
|
+
* @description Change extra field
|
|
24
|
+
* @param {string} id
|
|
25
|
+
* @param {Extra} newExtra
|
|
26
|
+
* @returns Promise resolving when the operation is complete
|
|
27
|
+
* @throws If timer with id not found or file operation fails
|
|
28
|
+
* @example
|
|
29
|
+
* const timer = await manager.createTimer({ length: 1000, extra: {author: "someone"} });
|
|
30
|
+
* await changeExtra(timer, {author: "SUKEsann2000"});
|
|
31
|
+
* // extra is changed and author will be "SUKEsann2000" instead of "someone"
|
|
32
|
+
*/
|
|
33
|
+
async changeExtra(id, newExtra) {
|
|
21
34
|
return this.runExclusive(async () => {
|
|
22
35
|
this.TimersStore ??= await this.createTimersStore();
|
|
23
36
|
try {
|
|
24
37
|
const timers = await this.TimersStore.loadTimers();
|
|
25
38
|
const index = timers?.findIndex(t => t.id === id);
|
|
26
|
-
if (index === -1) {
|
|
39
|
+
if (index === -1 || timers[index] === undefined) {
|
|
27
40
|
throw new Error(`Timer with id ${id} not found`);
|
|
28
41
|
}
|
|
29
|
-
timers[index]
|
|
42
|
+
const old = { ...timers[index] };
|
|
43
|
+
timers[index].extra = newExtra;
|
|
30
44
|
await this.TimersStore.saveTimers(timers);
|
|
45
|
+
await this.emit("updated", { old, new: timers[index] });
|
|
31
46
|
}
|
|
32
47
|
catch (e) {
|
|
33
|
-
throw new Error(`Error when changing
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
async changeDescription(id, newDescription) {
|
|
38
|
-
return this.runExclusive(async () => {
|
|
39
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
40
|
-
try {
|
|
41
|
-
const timers = await this.TimersStore.loadTimers();
|
|
42
|
-
const index = timers?.findIndex(t => t.id === id);
|
|
43
|
-
if (index === -1) {
|
|
44
|
-
throw new Error(`Timer with id ${id} not found`);
|
|
45
|
-
}
|
|
46
|
-
timers[index].description = newDescription;
|
|
47
|
-
await this.TimersStore.saveTimers(timers);
|
|
48
|
-
}
|
|
49
|
-
catch (e) {
|
|
50
|
-
throw new Error(`Error when changing description`, { cause: e });
|
|
48
|
+
throw new Error(`Error when changing extra`, { cause: e });
|
|
51
49
|
}
|
|
52
50
|
});
|
|
53
51
|
}
|
|
@@ -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;AAEtE;;;;;;;;GAQG;AACH,MAAM,OAAO,
|
|
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;AAEtE;;;;;;;;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,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAClD,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,2BAA2B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
|
@@ -9,9 +9,10 @@ import { PlainTextTimersStore } from "../TimersStore/PlainTextTimersStore.js";
|
|
|
9
9
|
* - Timers are persisted in a file
|
|
10
10
|
* - Expired timers are detected by polling
|
|
11
11
|
*/
|
|
12
|
-
export declare class PlainTextTimersManager extends TimersManager<"PlainText"> {
|
|
12
|
+
export declare class PlainTextTimersManager extends TimersManager<"PlainText", object> {
|
|
13
13
|
protected TimersStore: PlainTextTimersStore | null;
|
|
14
14
|
protected getDefaultFilename(): string;
|
|
15
15
|
protected createTimersStore(): Promise<PlainTextTimersStore>;
|
|
16
|
+
protected type: "PlainText";
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=PlainTextTimersManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersManager.d.ts","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;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersManager.d.ts","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;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7E,UAAmB,WAAW,EAAE,oBAAoB,GAAG,IAAI,CAAQ;cAEhD,kBAAkB,IAAI,MAAM;cAI/B,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAIlE,UAAmB,IAAI,EAAE,WAAW,CAAwB;CAC5D"}
|
|
@@ -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;;;;;;;;GAQG;AACH,MAAM,OAAO,sBAAuB,SAAQ,
|
|
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;;;;;;;;GAQG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAkC;IAC1D,WAAW,GAAgC,IAAI,CAAC;IAEhD,kBAAkB;QACpC,OAAO,SAAS,CAAC;IAClB,CAAC;IAES,KAAK,CAAC,iBAAiB;QAChC,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAEkB,IAAI,GAAgB,WAAoB,CAAC;CAC5D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CreateTimerOptions, StorageType, Timer } from "../types.js";
|
|
2
2
|
import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
3
|
+
import { EventEmitter } from "../EventEmitter.js";
|
|
3
4
|
/**
|
|
4
5
|
* TimersManager
|
|
5
6
|
* @description
|
|
@@ -9,76 +10,77 @@ import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
|
9
10
|
* - Timers are persisted in a file
|
|
10
11
|
* - Expired timers are detected by polling
|
|
11
12
|
*/
|
|
12
|
-
export declare abstract class TimersManager<T extends StorageType> {
|
|
13
|
+
export declare abstract class TimersManager<T extends StorageType, Extra extends object> extends EventEmitter<T, Extra> {
|
|
13
14
|
protected readonly timerfiledir: string;
|
|
14
|
-
|
|
15
|
-
protected TimersStore: TimersStore<T> | null;
|
|
15
|
+
protected checkLock: boolean;
|
|
16
|
+
protected TimersStore: TimersStore<T, Extra> | null;
|
|
16
17
|
private queue;
|
|
17
18
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
18
19
|
protected abstract getDefaultFilename(): string;
|
|
19
|
-
protected abstract createTimersStore(): Promise<TimersStore<T>>;
|
|
20
|
+
protected abstract createTimersStore(): Promise<TimersStore<T, Extra>>;
|
|
21
|
+
protected abstract type: T;
|
|
20
22
|
/**
|
|
21
23
|
* constructor
|
|
22
24
|
* @description Initializes the TimersManager instance. If the timer file does not exist, an empty file is created.
|
|
23
|
-
* @param
|
|
25
|
+
* @param {string} [timerfile] (string, optional) Configuration timer file path and it is treated as the timer file path.
|
|
24
26
|
* @throws If file access or creation fails
|
|
25
27
|
* @example
|
|
26
28
|
* const manager = new TimersManager(); // Uses default timer file path
|
|
27
29
|
* const manager = new TimersManager("/path/to/timers.txt"); // Uses specified timer file path
|
|
28
30
|
*/
|
|
29
|
-
constructor(
|
|
31
|
+
constructor(timerfile?: string);
|
|
30
32
|
/**
|
|
31
33
|
* createTimer
|
|
32
34
|
* @description Creates a new timer.
|
|
33
|
-
* @param
|
|
35
|
+
* @param {CreateTimerOptions<T, Extra>} options Timer duration in milliseconds for PlainText or an object with length and extra for JSONL.
|
|
34
36
|
* @returns Promise that resolves to the timer ID (UUID)
|
|
35
|
-
* @throws If length is invalid(e.g. length < 0) or file operation fails
|
|
37
|
+
* @throws If length is invalid (e.g. length < 0) or file operation fails
|
|
36
38
|
* @example
|
|
37
|
-
*
|
|
38
|
-
* const
|
|
39
|
-
*
|
|
39
|
+
* // For PlainTextTimersManager
|
|
40
|
+
* const manager = new PlainTextTimersManager();
|
|
41
|
+
* const newTimerId = await manager.createTimer(5000); // Create a 5-second timer
|
|
42
|
+
*
|
|
43
|
+
* // For JSONLTimersManager
|
|
44
|
+
* const jsonlManager = new JSONLTimersManager<{ title: string }>();
|
|
45
|
+
* const jsonlTimerId = await jsonlManager.createTimer({ length: 10000, extra: { title: "My JSONL Timer" } }); // Create a 10-second timer with extra data
|
|
40
46
|
*/
|
|
41
|
-
createTimer(options: CreateTimerOptions<T>): Promise<string>;
|
|
47
|
+
createTimer(options: CreateTimerOptions<T, Extra>): Promise<string>;
|
|
42
48
|
/**
|
|
43
49
|
* removeTimer
|
|
44
50
|
* @description Removes a timer by ID.
|
|
45
|
-
* @param id ID of the timer to remove
|
|
46
|
-
* @returns
|
|
51
|
+
* @param {string} id ID of the timer to remove
|
|
52
|
+
* @returns Promise resolving when the operation is complete
|
|
47
53
|
* @throws If file operation fails
|
|
48
54
|
* @example
|
|
49
55
|
* await manager.removeTimer(id);
|
|
50
56
|
*/
|
|
51
57
|
removeTimer(id: string): Promise<void>;
|
|
52
58
|
/**
|
|
53
|
-
*
|
|
54
|
-
* @description Starts
|
|
55
|
-
*
|
|
56
|
-
* The
|
|
57
|
-
* @
|
|
58
|
-
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
59
|
-
* @throws If file operation fails
|
|
60
|
-
* @returns (Promise<NodeJS.Timeout>) intervalId interval id of checkTimers
|
|
59
|
+
* checkStart
|
|
60
|
+
* @description Starts the timer checking loop. This method should be called once after creating an instance of TimersManager to detect expired timers.
|
|
61
|
+
* @param {number} [interval=200] Polling interval in milliseconds (default: 200ms)
|
|
62
|
+
* @returns The interval ID which can be used to stop the loop with clearInterval
|
|
63
|
+
* @throws If file operation fails during checking
|
|
61
64
|
* @example
|
|
62
|
-
* const
|
|
63
|
-
*
|
|
64
|
-
* });
|
|
65
|
+
* const manager = new TimersManager();
|
|
66
|
+
* manager.checkStart(1000); // Check for expired timers every 1 second
|
|
65
67
|
*/
|
|
66
|
-
|
|
68
|
+
checkStart(interval?: number): Promise<NodeJS.Timeout>;
|
|
67
69
|
/**
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
showTimers(): Promise<Timer<T>[]>;
|
|
70
|
+
* showTimers
|
|
71
|
+
* @description Retrieves all active timers.
|
|
72
|
+
* @returns Array of `Timer` objects
|
|
73
|
+
* @throws If file operation fails
|
|
74
|
+
* @example
|
|
75
|
+
* const timers = await manager.showTimers();
|
|
76
|
+
* console.log(JSON.stringify(timers))
|
|
77
|
+
*/
|
|
78
|
+
showTimers(): Promise<Timer<T, Extra>[]>;
|
|
77
79
|
/**
|
|
78
80
|
* adjustRemainingTime
|
|
79
81
|
* @description Adjusts the remaining time of a timer.
|
|
80
|
-
* @param id ID of the timer to modify
|
|
81
|
-
* @param delay Delay in milliseconds to add/subtract from the remaining time
|
|
82
|
+
* @param {string} id ID of the timer to modify
|
|
83
|
+
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
82
84
|
* @returns Promise resolving when the operation is complete
|
|
83
85
|
* @throws If file operation fails
|
|
84
86
|
*/
|
|
@@ -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;
|
|
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;AAElD;;;;;;;;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,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,MAAM,CAAC,OAAO,CAAC;IAqD1B;;;;;;;;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"}
|
|
@@ -3,7 +3,7 @@ import fs from "fs";
|
|
|
3
3
|
import { v4 as uuidv4 } from "uuid";
|
|
4
4
|
import searchRoot from "../searchRoot.js";
|
|
5
5
|
import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
6
|
-
import {
|
|
6
|
+
import { EventEmitter } from "../EventEmitter.js";
|
|
7
7
|
/**
|
|
8
8
|
* TimersManager
|
|
9
9
|
* @description
|
|
@@ -13,7 +13,7 @@ import { Log } from "../Log.js";
|
|
|
13
13
|
* - Timers are persisted in a file
|
|
14
14
|
* - Expired timers are detected by polling
|
|
15
15
|
*/
|
|
16
|
-
export class TimersManager {
|
|
16
|
+
export class TimersManager extends EventEmitter {
|
|
17
17
|
timerfiledir;
|
|
18
18
|
checkLock = false;
|
|
19
19
|
TimersStore = null;
|
|
@@ -26,15 +26,16 @@ export class TimersManager {
|
|
|
26
26
|
/**
|
|
27
27
|
* constructor
|
|
28
28
|
* @description Initializes the TimersManager instance. If the timer file does not exist, an empty file is created.
|
|
29
|
-
* @param
|
|
29
|
+
* @param {string} [timerfile] (string, optional) Configuration timer file path and it is treated as the timer file path.
|
|
30
30
|
* @throws If file access or creation fails
|
|
31
31
|
* @example
|
|
32
32
|
* const manager = new TimersManager(); // Uses default timer file path
|
|
33
33
|
* const manager = new TimersManager("/path/to/timers.txt"); // Uses specified timer file path
|
|
34
34
|
*/
|
|
35
|
-
constructor(
|
|
35
|
+
constructor(timerfile) {
|
|
36
|
+
super();
|
|
36
37
|
const rootDir = searchRoot();
|
|
37
|
-
this.timerfiledir = path.resolve(rootDir,
|
|
38
|
+
this.timerfiledir = path.resolve(rootDir, timerfile ?? this.getDefaultFilename());
|
|
38
39
|
if (!this.timerfiledir.startsWith(rootDir)) {
|
|
39
40
|
throw new Error(`Timer file path must be within the project directory`);
|
|
40
41
|
}
|
|
@@ -48,17 +49,24 @@ export class TimersManager {
|
|
|
48
49
|
/**
|
|
49
50
|
* createTimer
|
|
50
51
|
* @description Creates a new timer.
|
|
51
|
-
* @param
|
|
52
|
+
* @param {CreateTimerOptions<T, Extra>} options Timer duration in milliseconds for PlainText or an object with length and extra for JSONL.
|
|
52
53
|
* @returns Promise that resolves to the timer ID (UUID)
|
|
53
|
-
* @throws If length is invalid(e.g. length < 0) or file operation fails
|
|
54
|
+
* @throws If length is invalid (e.g. length < 0) or file operation fails
|
|
54
55
|
* @example
|
|
55
|
-
*
|
|
56
|
-
* const
|
|
57
|
-
*
|
|
56
|
+
* // For PlainTextTimersManager
|
|
57
|
+
* const manager = new PlainTextTimersManager();
|
|
58
|
+
* const newTimerId = await manager.createTimer(5000); // Create a 5-second timer
|
|
59
|
+
*
|
|
60
|
+
* // For JSONLTimersManager
|
|
61
|
+
* const jsonlManager = new JSONLTimersManager<{ title: string }>();
|
|
62
|
+
* const jsonlTimerId = await jsonlManager.createTimer({ length: 10000, extra: { title: "My JSONL Timer" } }); // Create a 10-second timer with extra data
|
|
58
63
|
*/
|
|
59
64
|
async createTimer(options) {
|
|
60
65
|
return this.runExclusive(async () => {
|
|
61
66
|
this.TimersStore ??= await this.createTimersStore();
|
|
67
|
+
if (this.type === "JSONL" && typeof options === "number") {
|
|
68
|
+
throw new Error(`Cannot create timer without extra fields in JSONL`);
|
|
69
|
+
}
|
|
62
70
|
let length = typeof options === "object" ? options.length : options;
|
|
63
71
|
if (length < 0)
|
|
64
72
|
throw new Error(`Invalid length: ${length}`);
|
|
@@ -70,18 +78,20 @@ export class TimersManager {
|
|
|
70
78
|
id,
|
|
71
79
|
start: now,
|
|
72
80
|
stop: stopTime,
|
|
73
|
-
...(typeof options === "object" && options.
|
|
74
|
-
|
|
81
|
+
...(options && typeof options === "object" && options.extra !== undefined
|
|
82
|
+
? { extra: options.extra }
|
|
83
|
+
: {}),
|
|
75
84
|
};
|
|
76
85
|
await this.TimersStore.appendTimer(newTimerData);
|
|
86
|
+
await this.emit("started", newTimerData);
|
|
77
87
|
return id;
|
|
78
88
|
});
|
|
79
89
|
}
|
|
80
90
|
/**
|
|
81
91
|
* removeTimer
|
|
82
92
|
* @description Removes a timer by ID.
|
|
83
|
-
* @param id ID of the timer to remove
|
|
84
|
-
* @returns
|
|
93
|
+
* @param {string} id ID of the timer to remove
|
|
94
|
+
* @returns Promise resolving when the operation is complete
|
|
85
95
|
* @throws If file operation fails
|
|
86
96
|
* @example
|
|
87
97
|
* await manager.removeTimer(id);
|
|
@@ -91,37 +101,35 @@ export class TimersManager {
|
|
|
91
101
|
this.TimersStore ??= await this.createTimersStore();
|
|
92
102
|
const timers = await this.TimersStore.loadTimers();
|
|
93
103
|
const index = timers.findIndex(t => t.id === id);
|
|
94
|
-
if (index === -1) {
|
|
104
|
+
if (index === -1 || timers[index] === undefined) {
|
|
95
105
|
throw new Error(`Timer with id ${id} not found`);
|
|
96
106
|
}
|
|
97
107
|
timers.splice(index, 1);
|
|
98
108
|
await this.TimersStore.saveTimers(timers);
|
|
109
|
+
await this.emit("stopped", timers[index]);
|
|
99
110
|
return;
|
|
100
111
|
});
|
|
101
112
|
}
|
|
102
113
|
/**
|
|
103
|
-
*
|
|
104
|
-
* @description Starts
|
|
105
|
-
*
|
|
106
|
-
* The
|
|
107
|
-
* @
|
|
108
|
-
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
109
|
-
* @throws If file operation fails
|
|
110
|
-
* @returns (Promise<NodeJS.Timeout>) intervalId interval id of checkTimers
|
|
114
|
+
* checkStart
|
|
115
|
+
* @description Starts the timer checking loop. This method should be called once after creating an instance of TimersManager to detect expired timers.
|
|
116
|
+
* @param {number} [interval=200] Polling interval in milliseconds (default: 200ms)
|
|
117
|
+
* @returns The interval ID which can be used to stop the loop with clearInterval
|
|
118
|
+
* @throws If file operation fails during checking
|
|
111
119
|
* @example
|
|
112
|
-
* const
|
|
113
|
-
*
|
|
114
|
-
* });
|
|
120
|
+
* const manager = new TimersManager();
|
|
121
|
+
* manager.checkStart(1000); // Check for expired timers every 1 second
|
|
115
122
|
*/
|
|
116
|
-
async
|
|
123
|
+
async checkStart(interval = 200) {
|
|
117
124
|
this.TimersStore ??= await this.createTimersStore();
|
|
118
125
|
const loop = async () => {
|
|
119
|
-
if (this.checkLock)
|
|
126
|
+
if (this.checkLock)
|
|
120
127
|
return;
|
|
121
|
-
}
|
|
122
128
|
this.checkLock = true;
|
|
129
|
+
let expiredTimers = [];
|
|
123
130
|
try {
|
|
124
|
-
|
|
131
|
+
expiredTimers = await this.runExclusive(async () => {
|
|
132
|
+
await this.emit("interval", void 0);
|
|
125
133
|
const allTimers = await this.TimersStore.loadTimers();
|
|
126
134
|
const now = Date.now();
|
|
127
135
|
const expired = [];
|
|
@@ -139,35 +147,33 @@ export class TimersManager {
|
|
|
139
147
|
}
|
|
140
148
|
return expired;
|
|
141
149
|
});
|
|
142
|
-
for (const timerData of expiredTimers) {
|
|
143
|
-
try {
|
|
144
|
-
await callback(timerData);
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
await Log.ensureLogger();
|
|
148
|
-
Log.loggerInstance?.error(`Error in callback of checkTimers: ${e}`);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
150
|
}
|
|
152
151
|
catch (e) {
|
|
153
|
-
|
|
154
|
-
Log.loggerInstance?.error(`Error when checking timer: ${e}`);
|
|
155
|
-
}
|
|
156
|
-
finally {
|
|
152
|
+
this.emit("errored", e instanceof Error ? e : new Error(String(e))).catch(() => { });
|
|
157
153
|
this.checkLock = false;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
for (const timer of expiredTimers) {
|
|
157
|
+
try {
|
|
158
|
+
await this.emit("expired", timer);
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
await this.emit("errored", e instanceof Error ? e : new Error(String(e)));
|
|
162
|
+
}
|
|
158
163
|
}
|
|
164
|
+
this.checkLock = false;
|
|
159
165
|
};
|
|
160
166
|
return setInterval(loop, interval);
|
|
161
167
|
}
|
|
162
168
|
/**
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
* showTimers
|
|
170
|
+
* @description Retrieves all active timers.
|
|
171
|
+
* @returns Array of `Timer` objects
|
|
172
|
+
* @throws If file operation fails
|
|
173
|
+
* @example
|
|
174
|
+
* const timers = await manager.showTimers();
|
|
175
|
+
* console.log(JSON.stringify(timers))
|
|
176
|
+
*/
|
|
171
177
|
async showTimers() {
|
|
172
178
|
return this.runExclusive(async () => {
|
|
173
179
|
this.TimersStore ??= await this.createTimersStore();
|
|
@@ -178,8 +184,8 @@ export class TimersManager {
|
|
|
178
184
|
/**
|
|
179
185
|
* adjustRemainingTime
|
|
180
186
|
* @description Adjusts the remaining time of a timer.
|
|
181
|
-
* @param id ID of the timer to modify
|
|
182
|
-
* @param delay Delay in milliseconds to add/subtract from the remaining time
|
|
187
|
+
* @param {string} id ID of the timer to modify
|
|
188
|
+
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
183
189
|
* @returns Promise resolving when the operation is complete
|
|
184
190
|
* @throws If file operation fails
|
|
185
191
|
*/
|
|
@@ -188,16 +194,17 @@ export class TimersManager {
|
|
|
188
194
|
this.TimersStore ??= await this.createTimersStore();
|
|
189
195
|
const timers = await this.TimersStore.loadTimers();
|
|
190
196
|
const index = timers.findIndex(t => t.id === id);
|
|
191
|
-
if (index === -1) {
|
|
197
|
+
if (index === -1 || timers[index] === undefined) {
|
|
192
198
|
throw new Error(`Timer with id ${id} not found`);
|
|
193
199
|
}
|
|
200
|
+
const old = { ...timers[index] };
|
|
194
201
|
const now = Date.now();
|
|
195
202
|
const timer = timers[index];
|
|
196
203
|
const remaining = Math.max(0, timer.stop - now);
|
|
197
204
|
const newRemaining = Math.max(0, remaining + delay);
|
|
198
205
|
timer.stop = now + newRemaining;
|
|
199
|
-
timers[index] = timer;
|
|
200
206
|
await this.TimersStore.saveTimers(timers);
|
|
207
|
+
await this.emit("updated", { old, new: timer });
|
|
201
208
|
return;
|
|
202
209
|
});
|
|
203
210
|
}
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Timer } from "../types.js";
|
|
2
2
|
import { TimersStore } from "./TimersStore.js";
|
|
3
|
-
export declare class JSONLTimersStore extends TimersStore<"JSONL"> {
|
|
3
|
+
export declare class JSONLTimersStore<Extra extends object> extends TimersStore<"JSONL", Extra> {
|
|
4
4
|
constructor(timerfile: string);
|
|
5
5
|
/**
|
|
6
6
|
* checkTimerfileSyntax
|
|
@@ -9,8 +9,8 @@ export declare class JSONLTimersStore extends TimersStore<"JSONL"> {
|
|
|
9
9
|
* @returns void
|
|
10
10
|
* @throws If syntax is invalid
|
|
11
11
|
*/
|
|
12
|
-
protected checkTimerfileSyntax(timers: Timer<"JSONL">[]): Promise<void>;
|
|
13
|
-
toStringifyTimers(timers: Timer<"JSONL">[]): string;
|
|
14
|
-
parseTimers(data: string): Timer<"JSONL">[];
|
|
12
|
+
protected checkTimerfileSyntax(timers: Timer<"JSONL", Extra>[]): Promise<void>;
|
|
13
|
+
toStringifyTimers(timers: Timer<"JSONL", Extra>[]): string;
|
|
14
|
+
parseTimers(data: string): Timer<"JSONL", Extra>[];
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=JSONLTimersStore.d.ts.map
|
|
@@ -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;AAE/C,qBAAa,
|
|
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;AAE/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"}
|