eternal-timer 2.2.1 → 2.4.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 (93) hide show
  1. package/README.md +89 -46
  2. package/dist/cjs/Log.cjs +0 -21
  3. package/dist/cjs/{Log.js.map → Log.cjs.map} +1 -1
  4. package/dist/cjs/TimersManager/JSONLTimersManager.cjs +25 -0
  5. package/dist/cjs/TimersManager/JSONLTimersManager.cjs.map +1 -0
  6. package/dist/cjs/TimersManager/JSONLTimersManager.d.ts +18 -0
  7. package/dist/cjs/TimersManager/JSONLTimersManager.d.ts.map +1 -0
  8. package/dist/cjs/TimersManager/PlainTextTimersManager.cjs +25 -0
  9. package/dist/cjs/TimersManager/PlainTextTimersManager.cjs.map +1 -0
  10. package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts +18 -0
  11. package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts.map +1 -0
  12. package/dist/cjs/TimersManager/TimersManager.cjs +211 -0
  13. package/dist/cjs/TimersManager/TimersManager.cjs.map +1 -0
  14. package/dist/cjs/TimersManager/TimersManager.d.ts +87 -0
  15. package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -0
  16. package/dist/cjs/TimersStore/JSONLTimersStore.cjs +50 -0
  17. package/dist/cjs/TimersStore/JSONLTimersStore.cjs.map +1 -0
  18. package/dist/cjs/TimersStore/JSONLTimersStore.d.ts +16 -0
  19. package/dist/cjs/TimersStore/JSONLTimersStore.d.ts.map +1 -0
  20. package/dist/cjs/TimersStore/PlainTextTimersStore.cjs +56 -0
  21. package/dist/cjs/TimersStore/PlainTextTimersStore.cjs.map +1 -0
  22. package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts +16 -0
  23. package/dist/cjs/TimersStore/PlainTextTimersStore.d.ts.map +1 -0
  24. package/dist/cjs/TimersStore/TimersStore.cjs +44 -0
  25. package/dist/cjs/TimersStore/TimersStore.cjs.map +1 -0
  26. package/dist/cjs/TimersStore/TimersStore.d.ts +12 -0
  27. package/dist/cjs/TimersStore/TimersStore.d.ts.map +1 -0
  28. package/dist/cjs/index.cjs +2 -2
  29. package/dist/cjs/index.cjs.map +1 -0
  30. package/dist/cjs/index.d.ts +3 -3
  31. package/dist/cjs/index.d.ts.map +1 -1
  32. package/dist/cjs/types.d.ts +11 -1
  33. package/dist/cjs/types.d.ts.map +1 -1
  34. package/dist/esm/Log.js +0 -21
  35. package/dist/esm/Log.js.map +1 -1
  36. package/dist/esm/TimersManager/JSONLTimersManager.d.ts +18 -0
  37. package/dist/esm/TimersManager/JSONLTimersManager.d.ts.map +1 -0
  38. package/dist/esm/TimersManager/JSONLTimersManager.js +21 -0
  39. package/dist/esm/TimersManager/JSONLTimersManager.js.map +1 -0
  40. package/dist/esm/TimersManager/PlainTextTimersManager.d.ts +18 -0
  41. package/dist/esm/TimersManager/PlainTextTimersManager.d.ts.map +1 -0
  42. package/dist/esm/TimersManager/PlainTextTimersManager.js +21 -0
  43. package/dist/esm/TimersManager/PlainTextTimersManager.js.map +1 -0
  44. package/dist/esm/TimersManager/TimersManager.d.ts +87 -0
  45. package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -0
  46. package/dist/esm/TimersManager/TimersManager.js +205 -0
  47. package/dist/esm/TimersManager/TimersManager.js.map +1 -0
  48. package/dist/esm/TimersStore/JSONLTimersStore.d.ts +16 -0
  49. package/dist/esm/TimersStore/JSONLTimersStore.d.ts.map +1 -0
  50. package/dist/esm/TimersStore/JSONLTimersStore.js +46 -0
  51. package/dist/esm/TimersStore/JSONLTimersStore.js.map +1 -0
  52. package/dist/esm/TimersStore/PlainTextTimersStore.d.ts +16 -0
  53. package/dist/esm/TimersStore/PlainTextTimersStore.d.ts.map +1 -0
  54. package/dist/esm/TimersStore/PlainTextTimersStore.js +52 -0
  55. package/dist/esm/TimersStore/PlainTextTimersStore.js.map +1 -0
  56. package/dist/esm/TimersStore/TimersStore.d.ts +12 -0
  57. package/dist/esm/TimersStore/TimersStore.d.ts.map +1 -0
  58. package/dist/esm/TimersStore/TimersStore.js +37 -0
  59. package/dist/esm/TimersStore/TimersStore.js.map +1 -0
  60. package/dist/esm/index.d.ts +3 -3
  61. package/dist/esm/index.d.ts.map +1 -1
  62. package/dist/esm/index.js +2 -2
  63. package/dist/esm/index.js.map +1 -1
  64. package/dist/esm/types.d.ts +11 -1
  65. package/dist/esm/types.d.ts.map +1 -1
  66. package/package.json +7 -4
  67. package/dist/cjs/JSONLTimersManager.cjs +0 -198
  68. package/dist/cjs/JSONLTimersManager.d.ts +0 -63
  69. package/dist/cjs/JSONLTimersManager.d.ts.map +0 -1
  70. package/dist/cjs/JSONLTimersManager.js.map +0 -1
  71. package/dist/cjs/PlainTextTimersManager.cjs +0 -200
  72. package/dist/cjs/PlainTextTimersManager.d.ts +0 -60
  73. package/dist/cjs/PlainTextTimersManager.d.ts.map +0 -1
  74. package/dist/cjs/PlainTextTimersManager.js.map +0 -1
  75. package/dist/cjs/TimersManager.cjs +0 -39
  76. package/dist/cjs/TimersManager.d.ts +0 -75
  77. package/dist/cjs/TimersManager.d.ts.map +0 -1
  78. package/dist/cjs/TimersManager.js.map +0 -1
  79. package/dist/cjs/index.js.map +0 -1
  80. package/dist/esm/JSONLTimersManager.d.ts +0 -63
  81. package/dist/esm/JSONLTimersManager.d.ts.map +0 -1
  82. package/dist/esm/JSONLTimersManager.js +0 -191
  83. package/dist/esm/JSONLTimersManager.js.map +0 -1
  84. package/dist/esm/PlainTextTimersManager.d.ts +0 -60
  85. package/dist/esm/PlainTextTimersManager.d.ts.map +0 -1
  86. package/dist/esm/PlainTextTimersManager.js +0 -193
  87. package/dist/esm/PlainTextTimersManager.js.map +0 -1
  88. package/dist/esm/TimersManager.d.ts +0 -75
  89. package/dist/esm/TimersManager.d.ts.map +0 -1
  90. package/dist/esm/TimersManager.js +0 -32
  91. package/dist/esm/TimersManager.js.map +0 -1
  92. /package/dist/cjs/{searchRoot.js.map → searchRoot.cjs.map} +0 -0
  93. /package/dist/cjs/{types.js.map → types.cjs.map} +0 -0
@@ -0,0 +1,205 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ import { v4 as uuidv4 } from "uuid";
4
+ import searchRoot from "../searchRoot.js";
5
+ import { TimersStore } from "../TimersStore/TimersStore.js";
6
+ import { Log } from "../Log.js";
7
+ /**
8
+ * TimersManager
9
+ * @description
10
+ * Manages timers stored in a file.
11
+ * (This is a abstract class)
12
+ *
13
+ * - Timers are persisted in a file
14
+ * - Expired timers are detected by polling
15
+ */
16
+ export class TimersManager {
17
+ timerfiledir;
18
+ checkLock = false;
19
+ TimersStore = null;
20
+ queue = Promise.resolve();
21
+ runExclusive(fn) {
22
+ const p = this.queue.then(fn);
23
+ this.queue = p.then(() => { }, () => { });
24
+ return p;
25
+ }
26
+ /**
27
+ * constructor
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.
30
+ * @throws If file access or creation fails
31
+ * @example
32
+ * const manager = new TimersManager(); // Uses default timer file path
33
+ * const manager = new TimersManager("/path/to/timers.txt"); // Uses specified timer file path
34
+ */
35
+ constructor(options) {
36
+ const rootDir = searchRoot();
37
+ this.timerfiledir = path.resolve(rootDir, options ?? this.getDefaultFilename());
38
+ if (!this.timerfiledir.startsWith(rootDir)) {
39
+ throw new Error(`Timer file path must be within the project directory`);
40
+ }
41
+ try {
42
+ fs.accessSync(this.timerfiledir);
43
+ }
44
+ catch {
45
+ fs.writeFileSync(this.timerfiledir, "");
46
+ }
47
+ }
48
+ /**
49
+ * createTimer
50
+ * @description Creates a new timer.
51
+ * @param length Timer duration in milliseconds
52
+ * @returns Promise that resolves to the timer ID (UUID)
53
+ * @throws If length is invalid(e.g. length < 0) or file operation fails
54
+ * @example
55
+ * const manager = new TimersManager();
56
+ * const newTimer = await manager.createTimer(5000);
57
+ * // newTimer will be id of the timer
58
+ */
59
+ async createTimer(options) {
60
+ return this.runExclusive(async () => {
61
+ this.TimersStore ??= await this.createTimersStore();
62
+ let length = typeof options === "object" ? options.length : options;
63
+ if (length < 0)
64
+ throw new Error(`Invalid length: ${length}`);
65
+ length = Math.trunc(length);
66
+ const id = uuidv4();
67
+ const now = Date.now();
68
+ const stopTime = now + Math.max(1, length);
69
+ const newTimerData = {
70
+ id,
71
+ start: now,
72
+ stop: stopTime,
73
+ ...(typeof options === "object" && options.title !== undefined && { title: options.title }),
74
+ ...(typeof options === "object" && options.description !== undefined && { description: options.description }),
75
+ };
76
+ await this.TimersStore.appendTimer(newTimerData);
77
+ return id;
78
+ });
79
+ }
80
+ /**
81
+ * removeTimer
82
+ * @description Removes a timer by ID.
83
+ * @param id ID of the timer to remove
84
+ * @returns void
85
+ * @throws If file operation fails
86
+ * @example
87
+ * await manager.removeTimer(id);
88
+ */
89
+ async removeTimer(id) {
90
+ return this.runExclusive(async () => {
91
+ this.TimersStore ??= await this.createTimersStore();
92
+ const timers = await this.TimersStore.loadTimers();
93
+ const index = timers.findIndex(t => t.id === id);
94
+ if (index === -1) {
95
+ throw new Error(`Timer with id ${id} not found`);
96
+ }
97
+ timers.splice(index, 1);
98
+ await this.TimersStore.saveTimers(timers);
99
+ return;
100
+ });
101
+ }
102
+ /**
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
111
+ * @example
112
+ * const interval = await manager.checkTimers((timer) => {
113
+ * console.log(`A timer was stopped: ${timer.id}`);
114
+ * });
115
+ */
116
+ async checkTimers(callback, interval = 200) {
117
+ this.TimersStore ??= await this.createTimersStore();
118
+ const loop = async () => {
119
+ if (this.checkLock) {
120
+ return;
121
+ }
122
+ this.checkLock = true;
123
+ try {
124
+ const expiredTimers = await this.runExclusive(async () => {
125
+ const allTimers = await this.TimersStore.loadTimers();
126
+ const now = Date.now();
127
+ const expired = [];
128
+ const active = [];
129
+ for (const timer of allTimers) {
130
+ if (timer.stop <= now) {
131
+ expired.push(timer);
132
+ }
133
+ else {
134
+ active.push(timer);
135
+ }
136
+ }
137
+ if (expired.length > 0) {
138
+ await this.TimersStore.saveTimers(active);
139
+ }
140
+ return expired;
141
+ });
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
+ }
152
+ catch (e) {
153
+ await Log.ensureLogger();
154
+ Log.loggerInstance?.error(`Error when checking timer: ${e}`);
155
+ }
156
+ finally {
157
+ this.checkLock = false;
158
+ }
159
+ };
160
+ return setInterval(loop, interval);
161
+ }
162
+ /**
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
+ */
171
+ async showTimers() {
172
+ return this.runExclusive(async () => {
173
+ this.TimersStore ??= await this.createTimersStore();
174
+ const timersData = await this.TimersStore.loadTimers();
175
+ return timersData;
176
+ });
177
+ }
178
+ /**
179
+ * adjustRemainingTime
180
+ * @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
183
+ * @returns Promise resolving when the operation is complete
184
+ * @throws If file operation fails
185
+ */
186
+ async adjustRemainingTime(id, delay) {
187
+ return this.runExclusive(async () => {
188
+ this.TimersStore ??= await this.createTimersStore();
189
+ const timers = await this.TimersStore.loadTimers();
190
+ const index = timers.findIndex(t => t.id === id);
191
+ if (index === -1) {
192
+ throw new Error(`Timer with id ${id} not found`);
193
+ }
194
+ const now = Date.now();
195
+ const timer = timers[index];
196
+ const remaining = Math.max(0, timer.stop - now);
197
+ const newRemaining = Math.max(0, remaining + delay);
198
+ timer.stop = now + newRemaining;
199
+ timers[index] = timer;
200
+ await this.TimersStore.saveTimers(timers);
201
+ return;
202
+ });
203
+ }
204
+ }
205
+ //# sourceMappingURL=TimersManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Timer } from "../types.js";
2
+ import { TimersStore } from "./TimersStore.js";
3
+ export declare class JSONLTimersStore extends TimersStore<"JSONL"> {
4
+ constructor(timerfile: string);
5
+ /**
6
+ * checkTimerfileSyntax
7
+ * @description Checks the syntax of the timer file.
8
+ * @param timers Array of timer objects to check
9
+ * @returns void
10
+ * @throws If syntax is invalid
11
+ */
12
+ protected checkTimerfileSyntax(timers: Timer<"JSONL">[]): Promise<void>;
13
+ toStringifyTimers(timers: Timer<"JSONL">[]): string;
14
+ parseTimers(data: string): Timer<"JSONL">[];
15
+ }
16
+ //# sourceMappingURL=JSONLTimersStore.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,46 @@
1
+ import { validate } from "uuid";
2
+ import { TimersStore } from "./TimersStore.js";
3
+ export class JSONLTimersStore extends TimersStore {
4
+ constructor(timerfile) {
5
+ super(timerfile);
6
+ }
7
+ /**
8
+ * checkTimerfileSyntax
9
+ * @description Checks the syntax of the timer file.
10
+ * @param timers Array of timer objects to check
11
+ * @returns void
12
+ * @throws If syntax is invalid
13
+ */
14
+ async checkTimerfileSyntax(timers) {
15
+ const throwing = () => {
16
+ throw new Error(`Timer file's syntax is wrong`);
17
+ };
18
+ for (const timer of timers) {
19
+ if (!timer.id || !validate(timer.id))
20
+ throwing();
21
+ if (!timer.start || typeof timer.start !== "number")
22
+ throwing();
23
+ if (!timer.stop || typeof timer.stop !== "number")
24
+ throwing();
25
+ if (timer.start > timer.stop)
26
+ throwing();
27
+ if (timer.title && typeof timer.title !== "string")
28
+ throwing();
29
+ if (timer.description && typeof timer.description !== "string")
30
+ throwing();
31
+ }
32
+ }
33
+ toStringifyTimers(timers) {
34
+ if (timers.length === 0) {
35
+ return "";
36
+ }
37
+ return timers.map(t => JSON.stringify(t)).join("\n");
38
+ }
39
+ parseTimers(data) {
40
+ return data
41
+ .split(/\r?\n/)
42
+ .filter((line) => line.trim())
43
+ .map((line) => JSON.parse(line));
44
+ }
45
+ }
46
+ //# sourceMappingURL=JSONLTimersStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,gBAAiB,SAAQ,WAAoB;IAEzD,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACgB,KAAK,CAAC,oBAAoB,CAAC,MAAwB;QACrE,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;gBAAE,QAAQ,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAC/D,IAAI,KAAK,CAAC,WAAW,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QAC5E,CAAC;IACF,CAAC;IAEe,iBAAiB,CAAC,MAAwB;QACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,CAAC;IACrD,CAAC;CACD"}
@@ -0,0 +1,16 @@
1
+ import type { Timer } from "../types.js";
2
+ import { TimersStore } from "./TimersStore.js";
3
+ export declare class PlainTextTimersStore extends TimersStore<"PlainText"> {
4
+ constructor(timerfile: string);
5
+ /**
6
+ * checkTimerfileSyntax
7
+ * @description Checks the syntax of the timer file.
8
+ * @param fileData
9
+ * @returns void
10
+ * @throws If syntax is invalid
11
+ */
12
+ protected checkTimerfileSyntax(timers: Timer<"PlainText">[]): Promise<void>;
13
+ toStringifyTimers(timers: Timer<"PlainText">[]): string;
14
+ parseTimers(data: string): Timer<"PlainText">[];
15
+ }
16
+ //# sourceMappingURL=PlainTextTimersStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,CAAC;gBAGhE,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMM;cACmB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1E,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM;IAOvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE;CAa/D"}
@@ -0,0 +1,52 @@
1
+ import { validate } from "uuid";
2
+ import { TimersStore } from "./TimersStore.js";
3
+ export class PlainTextTimersStore extends TimersStore {
4
+ constructor(timerfile) {
5
+ super(timerfile);
6
+ }
7
+ /**
8
+ * checkTimerfileSyntax
9
+ * @description Checks the syntax of the timer file.
10
+ * @param fileData
11
+ * @returns void
12
+ * @throws If syntax is invalid
13
+ */
14
+ async checkTimerfileSyntax(timers) {
15
+ const throwing = () => {
16
+ throw new Error(`Timer file's syntax is wrong`);
17
+ };
18
+ for (const timer of timers) {
19
+ if (Object.keys(timer).length !== 3)
20
+ throwing();
21
+ if (!validate(timer.id))
22
+ throwing();
23
+ if (isNaN(Number(timer.start)))
24
+ throwing();
25
+ if (isNaN(Number(timer.stop)))
26
+ throwing();
27
+ if (Number(timer.start) > Number(timer.stop))
28
+ throwing();
29
+ }
30
+ return;
31
+ }
32
+ toStringifyTimers(timers) {
33
+ if (timers.length === 0) {
34
+ return "";
35
+ }
36
+ return timers.map(timer => `${timer.id} ${timer.start} ${timer.stop}`).join("\n");
37
+ }
38
+ parseTimers(data) {
39
+ return data
40
+ .split(/\r?\n/)
41
+ .filter((line) => line.trim())
42
+ .map((line) => {
43
+ const [id, startStr, stopStr] = line.split(" ");
44
+ return {
45
+ id: id,
46
+ start: Number(startStr),
47
+ stop: Number(stopStr),
48
+ };
49
+ });
50
+ }
51
+ }
52
+ //# sourceMappingURL=PlainTextTimersStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,oBAAqB,SAAQ,WAAwB;IAEjE,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMM;IACa,KAAK,CAAC,oBAAoB,CAAC,MAA4B;QACzE,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,QAAQ,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO;IACR,CAAC;IAEe,iBAAiB,CAAC,MAA4B;QAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,EAAG;gBACP,KAAK,EAAE,MAAM,CAAC,QAAS,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,OAAQ,CAAC;aACA,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;CACD"}
@@ -0,0 +1,12 @@
1
+ import type { StorageType, Timer } from "../types.js";
2
+ export declare abstract class TimersStore<T extends StorageType> {
3
+ protected readonly timerfile: string;
4
+ protected constructor(timerfile: string);
5
+ loadTimers(): Promise<Timer<T>[]>;
6
+ saveTimers(timers: Timer<T>[]): Promise<void>;
7
+ appendTimer(timer: Timer<T>): Promise<void>;
8
+ protected abstract checkTimerfileSyntax(timers: Timer<T>[]): Promise<void>;
9
+ abstract toStringifyTimers(timers: Timer<T>[]): string;
10
+ abstract parseTimers(data: string): Timer<T>[];
11
+ }
12
+ //# sourceMappingURL=TimersStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,8BAAsB,WAAW,CAAC,CAAC,SAAS,WAAW;IACtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAErC,SAAS,aACR,SAAS,EAAE,MAAM;IAKL,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAWjC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aAC1D,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM;aAChD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;CACrD"}
@@ -0,0 +1,37 @@
1
+ import fs from "fs";
2
+ export class TimersStore {
3
+ timerfile;
4
+ constructor(timerfile) {
5
+ this.timerfile = timerfile;
6
+ }
7
+ async loadTimers() {
8
+ try {
9
+ const data = await fs.promises.readFile(this.timerfile, "utf-8");
10
+ const timersData = this.parseTimers(data);
11
+ await this.checkTimerfileSyntax(timersData);
12
+ return timersData;
13
+ }
14
+ catch (e) {
15
+ throw new Error("Error when loading timer data", { cause: e });
16
+ }
17
+ }
18
+ async saveTimers(timers) {
19
+ const data = this.toStringifyTimers(timers);
20
+ try {
21
+ await fs.promises.writeFile(this.timerfile, data, "utf-8");
22
+ }
23
+ catch (e) {
24
+ throw new Error(`Error when saving timer data`, { cause: e });
25
+ }
26
+ }
27
+ async appendTimer(timer) {
28
+ try {
29
+ await fs.promises.appendFile(this.timerfile, this.toStringifyTimers([timer]) + "\n");
30
+ return;
31
+ }
32
+ catch (e) {
33
+ throw new Error(`Error when appending timer data`, { cause: e });
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=TimersStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,MAAM,OAAgB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,UAAU,GAAe,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAe;QACvC,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACrF,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;CAKD"}
@@ -1,4 +1,4 @@
1
- export type { Timer } from "./types.js";
2
- export { JSONLTimersManager } from "./JSONLTimersManager.js";
3
- export { PlainTextTimersManager } from "./PlainTextTimersManager.js";
1
+ export type { Timer, CreateTimerOptions, StorageType } from "./types.js";
2
+ export { JSONLTimersManager } from "./TimersManager/JSONLTimersManager.js";
3
+ export { PlainTextTimersManager } from "./TimersManager/PlainTextTimersManager.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { JSONLTimersManager } from "./JSONLTimersManager.js";
2
- export { PlainTextTimersManager } from "./PlainTextTimersManager.js";
1
+ export { JSONLTimersManager } from "./TimersManager/JSONLTimersManager.js";
2
+ export { PlainTextTimersManager } from "./TimersManager/PlainTextTimersManager.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -1,8 +1,18 @@
1
- export type Timer = {
1
+ export type StorageType = "JSONL" | "PlainText";
2
+ export type Timer<T extends StorageType> = T extends "JSONL" ? {
2
3
  id: string;
3
4
  start: number;
4
5
  stop: number;
5
6
  title?: string;
6
7
  description?: string;
8
+ } : {
9
+ id: string;
10
+ start: number;
11
+ stop: number;
7
12
  };
13
+ export type CreateTimerOptions<T extends StorageType> = T extends "JSONL" ? {
14
+ length: number;
15
+ title?: string;
16
+ description?: string;
17
+ } | number : T extends "PlainText" ? number : never;
8
18
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,IACnC,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GACnE;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,GACV,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "eternal-timer",
3
- "version": "2.2.1",
3
+ "version": "2.4.0",
4
4
  "description": "timer for node.js package",
5
5
  "scripts": {
6
6
  "dev": "nodemon --watch src --exec ts-node src/index.ts",
7
7
  "build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/rename-cjs.js",
8
8
  "start": "npm run build && node dist/esm/index.js",
9
9
  "lint": "npx eslint --fix --config ./eslint/eslint.config.ts",
10
- "test": "node test/index.js"
10
+ "test": "npm run build && node test/index.js"
11
11
  },
12
12
  "repository": {
13
13
  "type": "git",
@@ -40,10 +40,13 @@
40
40
  ".": {
41
41
  "import": "./dist/esm/index.js",
42
42
  "require": "./dist/cjs/index.cjs",
43
- "types": "./dist/esm/index.d.ts"
43
+ "types": {
44
+ "import": "./dist/esm/index.d.ts",
45
+ "require": "./dist/cjs/index.d.ts"
46
+ }
44
47
  }
45
48
  },
46
- "types": "dist/esm/index.d.ts",
49
+ "types": "dist/cjs/index.d.ts",
47
50
  "dependencies": {
48
51
  "uuid": "^13.0.0"
49
52
  },