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.
Files changed (66) hide show
  1. package/README.md +189 -50
  2. package/dist/cjs/EventEmitter.d.ts +12 -0
  3. package/dist/cjs/EventEmitter.d.ts.map +1 -0
  4. package/dist/cjs/EventEmitter.js +50 -0
  5. package/dist/cjs/EventEmitter.js.map +1 -0
  6. package/dist/cjs/TimersManager/JSONLTimersManager.d.ts +17 -5
  7. package/dist/cjs/TimersManager/JSONLTimersManager.d.ts.map +1 -1
  8. package/dist/cjs/TimersManager/JSONLTimersManager.js +19 -21
  9. package/dist/cjs/TimersManager/JSONLTimersManager.js.map +1 -1
  10. package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts +2 -1
  11. package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
  12. package/dist/cjs/TimersManager/PlainTextTimersManager.js +1 -0
  13. package/dist/cjs/TimersManager/PlainTextTimersManager.js.map +1 -1
  14. package/dist/cjs/TimersManager/TimersManager.d.ts +39 -37
  15. package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -1
  16. package/dist/cjs/TimersManager/TimersManager.js +62 -55
  17. package/dist/cjs/TimersManager/TimersManager.js.map +1 -1
  18. package/dist/cjs/TimersStore/JSONLTimersStore.d.ts +4 -4
  19. package/dist/cjs/TimersStore/JSONLTimersStore.d.ts.map +1 -1
  20. package/dist/cjs/TimersStore/JSONLTimersStore.js +5 -3
  21. package/dist/cjs/TimersStore/JSONLTimersStore.js.map +1 -1
  22. package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts +4 -4
  23. package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts.map +1 -1
  24. package/dist/cjs/TimersStore/PlainTextTimersStore.js.map +1 -1
  25. package/dist/cjs/TimersStore/TimersStore.d.ts +7 -7
  26. package/dist/cjs/TimersStore/TimersStore.d.ts.map +1 -1
  27. package/dist/cjs/TimersStore/TimersStore.js.map +1 -1
  28. package/dist/cjs/types.d.ts +19 -7
  29. package/dist/cjs/types.d.ts.map +1 -1
  30. package/dist/esm/EventEmitter.d.ts +12 -0
  31. package/dist/esm/EventEmitter.d.ts.map +1 -0
  32. package/dist/esm/EventEmitter.js +46 -0
  33. package/dist/esm/EventEmitter.js.map +1 -0
  34. package/dist/esm/TimersManager/JSONLTimersManager.d.ts +17 -5
  35. package/dist/esm/TimersManager/JSONLTimersManager.d.ts.map +1 -1
  36. package/dist/esm/TimersManager/JSONLTimersManager.js +19 -21
  37. package/dist/esm/TimersManager/JSONLTimersManager.js.map +1 -1
  38. package/dist/esm/TimersManager/PlainTextTimersManager.d.ts +2 -1
  39. package/dist/esm/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
  40. package/dist/esm/TimersManager/PlainTextTimersManager.js +1 -0
  41. package/dist/esm/TimersManager/PlainTextTimersManager.js.map +1 -1
  42. package/dist/esm/TimersManager/TimersManager.d.ts +39 -37
  43. package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -1
  44. package/dist/esm/TimersManager/TimersManager.js +62 -55
  45. package/dist/esm/TimersManager/TimersManager.js.map +1 -1
  46. package/dist/esm/TimersStore/JSONLTimersStore.d.ts +4 -4
  47. package/dist/esm/TimersStore/JSONLTimersStore.d.ts.map +1 -1
  48. package/dist/esm/TimersStore/JSONLTimersStore.js +5 -3
  49. package/dist/esm/TimersStore/JSONLTimersStore.js.map +1 -1
  50. package/dist/esm/TimersStore/PlainTextTimersStore.d.ts +4 -4
  51. package/dist/esm/TimersStore/PlainTextTimersStore.d.ts.map +1 -1
  52. package/dist/esm/TimersStore/PlainTextTimersStore.js.map +1 -1
  53. package/dist/esm/TimersStore/TimersStore.d.ts +7 -7
  54. package/dist/esm/TimersStore/TimersStore.d.ts.map +1 -1
  55. package/dist/esm/TimersStore/TimersStore.js.map +1 -1
  56. package/dist/esm/types.d.ts +19 -7
  57. package/dist/esm/types.d.ts.map +1 -1
  58. package/package.json +2 -5
  59. package/dist/cjs/Log.d.ts +0 -8
  60. package/dist/cjs/Log.d.ts.map +0 -1
  61. package/dist/cjs/Log.js +0 -61
  62. package/dist/cjs/Log.js.map +0 -1
  63. package/dist/esm/Log.d.ts +0 -8
  64. package/dist/esm/Log.d.ts.map +0 -1
  65. package/dist/esm/Log.js +0 -24
  66. 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
- changeTitle(id: string, newTitle: string): Promise<void>;
17
- changeDescription(id: string, newDescription: string): Promise<void>;
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,kBAAmB,SAAQ,aAAa,CAAC,OAAO,CAAC;IAC7D,UAAmB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAQ;cAE5C,kBAAkB,IAAI,MAAM;cAItB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI1D,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxD,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjF"}
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
- async changeTitle(id, newTitle) {
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].title = newTitle;
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 title`, { cause: e });
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,kBAAmB,SAAQ,aAAsB;IAC1C,WAAW,GAA4B,IAAI,CAAC;IAE5C,kBAAkB;QACpC,OAAO,eAAe,CAAC;IACxB,CAAC;IAEkB,KAAK,CAAC,iBAAiB;QACzC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,QAAgB;QACpD,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,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAClD,CAAC;gBAED,MAAM,CAAC,KAAK,CAAE,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAChC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3C,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;IAEM,KAAK,CAAC,iBAAiB,CAAC,EAAU,EAAE,cAAsB;QAChE,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,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAClD,CAAC;gBAED,MAAM,CAAC,KAAK,CAAE,CAAC,WAAW,GAAG,cAAc,CAAC;gBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
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;IACrE,UAAmB,WAAW,EAAE,oBAAoB,GAAG,IAAI,CAAQ;cAEhD,kBAAkB,IAAI,MAAM;cAI/B,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAGlE"}
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"}
@@ -17,5 +17,6 @@ export class PlainTextTimersManager extends TimersManager {
17
17
  async createTimersStore() {
18
18
  return new PlainTextTimersStore(this.timerfiledir);
19
19
  }
20
+ type = "PlainText";
20
21
  }
21
22
  //# 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;;;;;;;;GAQG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAA0B;IAClD,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;CACD"}
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
- private checkLock;
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 options (TimersManagerOptions | string, optional) Configuration object or timer file path. If a string is provided, it is treated as the timer file path. If an object is provided, `timerfiledir` can be specified.
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(options?: string);
31
+ constructor(timerfile?: string);
30
32
  /**
31
33
  * createTimer
32
34
  * @description Creates a new timer.
33
- * @param length Timer duration in milliseconds
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
- * const manager = new TimersManager();
38
- * const newTimer = await manager.createTimer(5000);
39
- * // newTimer will be id of the timer
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 void
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
- * checkTimers
54
- * @description Starts monitoring timers at the specified interval.
55
- * When a timer expires, the provided `callback` is invoked with the timer.
56
- * The callback is awaited before the next processing cycle continues.
57
- * @param callback Function invoked when an expired timer is detected (called asynchronously)
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 interval = await manager.checkTimers((timer) => {
63
- * console.log(`A timer was stopped: ${timer.id}`);
64
- * });
65
+ * const manager = new TimersManager();
66
+ * manager.checkStart(1000); // Check for expired timers every 1 second
65
67
  */
66
- checkTimers(callback: (timer: Timer<T>) => void | Promise<void>, interval?: number): Promise<NodeJS.Timeout>;
68
+ checkStart(interval?: number): Promise<NodeJS.Timeout>;
67
69
  /**
68
- * showTimers
69
- * @description Retrieves all active timers.
70
- * @returns Array of `Timer` objects
71
- * @throws If file operation fails
72
- * @example
73
- * const timers = await manager.showTimers();
74
- * console.log(JSON.stringify(timers))
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;AAG5D;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW;IACxD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,OAAO,CAAC,SAAS,CAAkB;IAEnC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IAEpD,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,CAAC,CAAC;IAE/D;;;;;;;;QAQO;gBAEN,OAAO,CAAC,EAAE,MAAM;IAcjB;;;;;;;;;;OAUM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BzE;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnD;;;;;;;;;;;;;OAaM;IACO,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAuD9H;;;;;;;;OAQM;IACO,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAQ9C;;;;;;;QAOO;IACM,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB1E"}
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 { Log } from "../Log.js";
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 options (TimersManagerOptions | string, optional) Configuration object or timer file path. If a string is provided, it is treated as the timer file path. If an object is provided, `timerfiledir` can be specified.
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(options) {
35
+ constructor(timerfile) {
36
+ super();
36
37
  const rootDir = searchRoot();
37
- this.timerfiledir = path.resolve(rootDir, options ?? this.getDefaultFilename());
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 length Timer duration in milliseconds
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
- * const manager = new TimersManager();
56
- * const newTimer = await manager.createTimer(5000);
57
- * // newTimer will be id of the timer
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.title !== undefined && { title: options.title }),
74
- ...(typeof options === "object" && options.description !== undefined && { description: options.description }),
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 void
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
- * checkTimers
104
- * @description Starts monitoring timers at the specified interval.
105
- * When a timer expires, the provided `callback` is invoked with the timer.
106
- * The callback is awaited before the next processing cycle continues.
107
- * @param callback Function invoked when an expired timer is detected (called asynchronously)
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 interval = await manager.checkTimers((timer) => {
113
- * console.log(`A timer was stopped: ${timer.id}`);
114
- * });
120
+ * const manager = new TimersManager();
121
+ * manager.checkStart(1000); // Check for expired timers every 1 second
115
122
  */
116
- async checkTimers(callback, interval = 200) {
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
- const expiredTimers = await this.runExclusive(async () => {
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
- await Log.ensureLogger();
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
- * showTimers
164
- * @description Retrieves all active timers.
165
- * @returns Array of `Timer` objects
166
- * @throws If file operation fails
167
- * @example
168
- * const timers = await manager.showTimers();
169
- * console.log(JSON.stringify(timers))
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":"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"}
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,gBAAiB,SAAQ,WAAW,CAAC,OAAO,CAAC;gBAGxD,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMG;cACsB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IActE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM;IAOnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE;CAM3D"}
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"}