eternal-timer 2.5.1 → 3.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 +50 -21
- 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 +16 -20
- 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 +16 -15
- package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.js +15 -11
- 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 +5 -7
- package/dist/cjs/types.d.ts.map +1 -1
- 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 +16 -20
- 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 +16 -15
- package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/TimersManager.js +15 -11
- 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 +5 -7
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ You can choose between two manager classes depending on the desired storage form
|
|
|
24
24
|
|
|
25
25
|
### `JSONLTimersManager` (JSON Lines)
|
|
26
26
|
|
|
27
|
-
Use this manager to store timers in a `.jsonl` file, which allows for storing `
|
|
27
|
+
Use this manager to store timers in a `.jsonl` file, which allows for storing `extra` data.
|
|
28
28
|
|
|
29
29
|
```javascript
|
|
30
30
|
import { JSONLTimersManager } from 'eternal-timer';
|
|
@@ -34,12 +34,12 @@ async function main() {
|
|
|
34
34
|
const manager = new JSONLTimersManager();
|
|
35
35
|
|
|
36
36
|
// Create a timer (5 seconds) with a title and description
|
|
37
|
-
const timerId = await manager.createTimer({length: 5000, title: 'My Timer', description: 'This is a test timer.'});
|
|
37
|
+
const timerId = await manager.createTimer({length: 5000, extra: { title: 'My Timer', description: 'This is a test timer.' }});
|
|
38
38
|
console.log('Timer created:', timerId);
|
|
39
39
|
|
|
40
40
|
// Monitor timers (executes when timer expires)
|
|
41
41
|
const interval = await manager.checkTimers(async (timer) => {
|
|
42
|
-
console.log('Timer expired:', timer.id, timer.title);
|
|
42
|
+
console.log('Timer expired:', timer.id, timer.extra?.title);
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
// Display all timers
|
|
@@ -99,25 +99,57 @@ Creates a manager for timers stored in **JSON Lines** format.
|
|
|
99
99
|
|
|
100
100
|
- **`timerfiledir`** (optional, string): Path to the timer file. Defaults to `.timers.jsonl` in the project root.
|
|
101
101
|
|
|
102
|
-
#### `
|
|
103
|
-
Changes the
|
|
102
|
+
#### `changeExtra(id: string, newExtra: Extra): Promise<void>`
|
|
103
|
+
Changes the `extra` data of an existing timer.
|
|
104
104
|
|
|
105
105
|
- **`id`**: The ID of the timer to modify.
|
|
106
|
-
- **`
|
|
106
|
+
- **`newExtra`**: The new `extra` object for the timer.
|
|
107
107
|
|
|
108
|
-
**Returns:** A `Promise<void>` that resolves when the timer's
|
|
108
|
+
**Returns:** A `Promise<void>` that resolves when the timer's `extra` data has been updated.
|
|
109
109
|
|
|
110
110
|
**Throws:** An error if: the timer with the specified ID is not found, or a file operation fails.
|
|
111
111
|
|
|
112
|
-
####
|
|
113
|
-
Changes the description of an existing timer.
|
|
112
|
+
#### Using the `Extra` Type Parameter
|
|
114
113
|
|
|
115
|
-
|
|
116
|
-
- **`newDescription`**: The new description for the timer.
|
|
114
|
+
The `JSONLTimersManager` is a generic class that accepts a type parameter `Extra`. This allows you to define the structure of the `extra` object that will be stored with your timers. By default, `Extra` is an empty object `{}`.
|
|
117
115
|
|
|
118
|
-
**
|
|
116
|
+
**Example:** Defining and using a custom `Extra` type
|
|
119
117
|
|
|
120
|
-
|
|
118
|
+
```typescript
|
|
119
|
+
import { JSONLTimersManager } from 'eternal-timer';
|
|
120
|
+
|
|
121
|
+
interface MyTimerExtra {
|
|
122
|
+
title?: string;
|
|
123
|
+
description?: string;
|
|
124
|
+
category?: string;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async function main() {
|
|
128
|
+
// Specify MyTimerExtra as the type argument for JSONLTimersManager
|
|
129
|
+
const manager = new JSONLTimersManager<MyTimerExtra>();
|
|
130
|
+
|
|
131
|
+
// Create a timer with custom extra data
|
|
132
|
+
const timerId = await manager.createTimer({
|
|
133
|
+
length: 10000,
|
|
134
|
+
extra: {
|
|
135
|
+
title: 'Project Alpha Deadline',
|
|
136
|
+
description: 'Final submission for project Alpha.',
|
|
137
|
+
category: 'Work'
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
console.log('Timer created:', timerId);
|
|
141
|
+
|
|
142
|
+
// Retrieve and access the custom extra data
|
|
143
|
+
const timers = await manager.showTimers();
|
|
144
|
+
const myTimer = timers.find(t => t.id === timerId);
|
|
145
|
+
if (myTimer) {
|
|
146
|
+
console.log('Timer title:', myTimer.extra?.title);
|
|
147
|
+
console.log('Timer category:', myTimer.extra?.category);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
main();
|
|
152
|
+
```
|
|
121
153
|
|
|
122
154
|
### `PlainTextTimersManager`
|
|
123
155
|
|
|
@@ -140,13 +172,9 @@ Creates a new timer and saves it to the file.
|
|
|
140
172
|
- `number` — Timer duration in milliseconds.
|
|
141
173
|
|
|
142
174
|
When using `"JSONL"` storage:
|
|
143
|
-
- `{ length: number;
|
|
175
|
+
- `{ length: number; extra?: Extra }`
|
|
144
176
|
- `length` (number): Timer duration in milliseconds.
|
|
145
|
-
- `
|
|
146
|
-
- `description` (optional, string): A description for the timer.
|
|
147
|
-
|
|
148
|
-
- `number` — Timer duration in milliseconds.
|
|
149
|
-
⚠ Not recommended. See [Storage Formats](#storage-formats).
|
|
177
|
+
- `extra` (optional, Extra): An object containing arbitrary user-defined metadata.
|
|
150
178
|
|
|
151
179
|
**Returns** A `Promise<string>` that resolves to the timer's unique ID (UUID).
|
|
152
180
|
|
|
@@ -208,14 +236,15 @@ type StorageType = "JSONL" | "PlainText"
|
|
|
208
236
|
The `Timer` object has the following structure:
|
|
209
237
|
|
|
210
238
|
```typescript
|
|
211
|
-
type Timer<T extends StorageType> = {
|
|
239
|
+
type Timer<T extends StorageType, Extra extends object> = {
|
|
212
240
|
id: string;
|
|
213
241
|
start: number;
|
|
214
242
|
stop: number;
|
|
215
243
|
} & (T extends "JSONL"
|
|
216
|
-
? {
|
|
244
|
+
? { extra: Extra }
|
|
217
245
|
: {});
|
|
218
246
|
```
|
|
247
|
+
`Extra` is a generic type parameter that represents an object containing arbitrary user-defined metadata for JSONL timers. For example, it can be `{ title?: string; description?: string }`.
|
|
219
248
|
|
|
220
249
|
## Scripts
|
|
221
250
|
|
|
@@ -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;CAkBhB"}
|
|
@@ -20,7 +20,20 @@ class JSONLTimersManager extends TimersManager_js_1.TimersManager {
|
|
|
20
20
|
async createTimersStore() {
|
|
21
21
|
return new JSONLTimersStore_js_1.JSONLTimersStore(this.timerfiledir);
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
type = "JSONL";
|
|
24
|
+
/**
|
|
25
|
+
* changeExtra
|
|
26
|
+
* @description Change extra field
|
|
27
|
+
* @param {string} id
|
|
28
|
+
* @param {Extra} newExtra
|
|
29
|
+
* @returns Promise resolving when the operation is complete
|
|
30
|
+
* @throws If timer with id not found or file operation fails
|
|
31
|
+
* @example
|
|
32
|
+
* const timer = await manager.createTimer({ length: 1000, extra: {author: "someone"} });
|
|
33
|
+
* await changeExtra(timer, {author: "SUKEsann2000"});
|
|
34
|
+
* // extra is changed and author will be "SUKEsann2000" instead of "someone"
|
|
35
|
+
*/
|
|
36
|
+
async changeExtra(id, newExtra) {
|
|
24
37
|
return this.runExclusive(async () => {
|
|
25
38
|
this.TimersStore ??= await this.createTimersStore();
|
|
26
39
|
try {
|
|
@@ -29,28 +42,11 @@ class JSONLTimersManager extends TimersManager_js_1.TimersManager {
|
|
|
29
42
|
if (index === -1) {
|
|
30
43
|
throw new Error(`Timer with id ${id} not found`);
|
|
31
44
|
}
|
|
32
|
-
timers[index].
|
|
45
|
+
timers[index].extra = newExtra;
|
|
33
46
|
await this.TimersStore.saveTimers(timers);
|
|
34
47
|
}
|
|
35
48
|
catch (e) {
|
|
36
|
-
throw new Error(`Error when changing
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
async changeDescription(id, newDescription) {
|
|
41
|
-
return this.runExclusive(async () => {
|
|
42
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
43
|
-
try {
|
|
44
|
-
const timers = await this.TimersStore.loadTimers();
|
|
45
|
-
const index = timers?.findIndex(t => t.id === id);
|
|
46
|
-
if (index === -1) {
|
|
47
|
-
throw new Error(`Timer with id ${id} not found`);
|
|
48
|
-
}
|
|
49
|
-
timers[index].description = newDescription;
|
|
50
|
-
await this.TimersStore.saveTimers(timers);
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
throw new Error(`Error when changing description`, { cause: e });
|
|
49
|
+
throw new Error(`Error when changing extra`, { cause: e });
|
|
54
50
|
}
|
|
55
51
|
});
|
|
56
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,4EAAsE;AAEtE;;;;;;;;GAQG;AACH,MAAa,
|
|
1
|
+
{"version":3,"file":"JSONLTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/JSONLTimersManager.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,4EAAsE;AAEtE;;;;;;;;GAQG;AACH,MAAa,kBAAkD,SAAQ,gCAA6B;IAChF,WAAW,GAAmC,IAAI,CAAC;IAEnD,kBAAkB;QACpC,OAAO,eAAe,CAAC;IACxB,CAAC;IAEkB,KAAK,CAAC,iBAAiB;QACzC,OAAO,IAAI,sCAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAEkB,IAAI,GAAY,OAAgB,CAAC;IAEpD;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,WAAW,CACvB,EAAU,EACV,QAAe;QAEf,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACpD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAEnD,MAAM,KAAK,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClD,IAAI,KAAK,KAAK,CAAC,CAAC,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;CACD;AA9CD,gDA8CC"}
|
|
@@ -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"}
|
|
@@ -20,6 +20,7 @@ class PlainTextTimersManager extends TimersManager_js_1.TimersManager {
|
|
|
20
20
|
async createTimersStore() {
|
|
21
21
|
return new PlainTextTimersStore_js_1.PlainTextTimersStore(this.timerfiledir);
|
|
22
22
|
}
|
|
23
|
+
type = "PlainText";
|
|
23
24
|
}
|
|
24
25
|
exports.PlainTextTimersManager = PlainTextTimersManager;
|
|
25
26
|
//# sourceMappingURL=PlainTextTimersManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/PlainTextTimersManager.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,oFAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAa,sBAAuB,SAAQ,
|
|
1
|
+
{"version":3,"file":"PlainTextTimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/PlainTextTimersManager.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,oFAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAa,sBAAuB,SAAQ,gCAAkC;IAC1D,WAAW,GAAgC,IAAI,CAAC;IAEhD,kBAAkB;QACpC,OAAO,SAAS,CAAC;IAClB,CAAC;IAES,KAAK,CAAC,iBAAiB;QAChC,OAAO,IAAI,8CAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAEkB,IAAI,GAAgB,WAAoB,CAAC;CAC5D;AAZD,wDAYC"}
|
|
@@ -9,18 +9,19 @@ import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
|
9
9
|
* - Timers are persisted in a file
|
|
10
10
|
* - Expired timers are detected by polling
|
|
11
11
|
*/
|
|
12
|
-
export declare abstract class TimersManager<T extends StorageType> {
|
|
12
|
+
export declare abstract class TimersManager<T extends StorageType, Extra extends object> {
|
|
13
13
|
protected readonly timerfiledir: string;
|
|
14
14
|
private checkLock;
|
|
15
|
-
protected TimersStore: TimersStore<T> | null;
|
|
15
|
+
protected TimersStore: TimersStore<T, Extra> | null;
|
|
16
16
|
private queue;
|
|
17
17
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
18
18
|
protected abstract getDefaultFilename(): string;
|
|
19
|
-
protected abstract createTimersStore(): Promise<TimersStore<T>>;
|
|
19
|
+
protected abstract createTimersStore(): Promise<TimersStore<T, Extra>>;
|
|
20
|
+
protected abstract type: T;
|
|
20
21
|
/**
|
|
21
22
|
* constructor
|
|
22
23
|
* @description Initializes the TimersManager instance. If the timer file does not exist, an empty file is created.
|
|
23
|
-
* @param options (
|
|
24
|
+
* @param {string} [options] (string, optional) Configuration timer file path and it is treated as the timer file path.
|
|
24
25
|
* @throws If file access or creation fails
|
|
25
26
|
* @example
|
|
26
27
|
* const manager = new TimersManager(); // Uses default timer file path
|
|
@@ -30,7 +31,7 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
30
31
|
/**
|
|
31
32
|
* createTimer
|
|
32
33
|
* @description Creates a new timer.
|
|
33
|
-
* @param length Timer duration in milliseconds
|
|
34
|
+
* @param {{length: number, extra: Extra} | number} options Timer duration in milliseconds and extra field(only JSONL)
|
|
34
35
|
* @returns Promise that resolves to the timer ID (UUID)
|
|
35
36
|
* @throws If length is invalid(e.g. length < 0) or file operation fails
|
|
36
37
|
* @example
|
|
@@ -38,12 +39,12 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
38
39
|
* const newTimer = await manager.createTimer(5000);
|
|
39
40
|
* // newTimer will be id of the timer
|
|
40
41
|
*/
|
|
41
|
-
createTimer(options: CreateTimerOptions<T>): Promise<string>;
|
|
42
|
+
createTimer(options: CreateTimerOptions<T, Extra>): Promise<string>;
|
|
42
43
|
/**
|
|
43
44
|
* removeTimer
|
|
44
45
|
* @description Removes a timer by ID.
|
|
45
|
-
* @param id ID of the timer to remove
|
|
46
|
-
* @returns
|
|
46
|
+
* @param {string} id ID of the timer to remove
|
|
47
|
+
* @returns Promise resolving when the operation is complete
|
|
47
48
|
* @throws If file operation fails
|
|
48
49
|
* @example
|
|
49
50
|
* await manager.removeTimer(id);
|
|
@@ -54,16 +55,16 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
54
55
|
* @description Starts monitoring timers at the specified interval.
|
|
55
56
|
* When a timer expires, the provided `callback` is invoked with the timer.
|
|
56
57
|
* 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)
|
|
58
|
+
* @param {(timer: Timer<T, Extra>) => void | Promise<void>} callback Function invoked when an expired timer is detected (called asynchronously)
|
|
59
|
+
* @param {number} [interval=200] (number, optional): Check interval in milliseconds (default: 200ms)
|
|
59
60
|
* @throws If file operation fails
|
|
60
|
-
* @returns
|
|
61
|
+
* @returns {Promise<NodeJS.Timeout>} intervalId interval id of checkTimers
|
|
61
62
|
* @example
|
|
62
63
|
* const interval = await manager.checkTimers((timer) => {
|
|
63
64
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
64
65
|
* });
|
|
65
66
|
*/
|
|
66
|
-
checkTimers(callback: (timer: Timer<T>) => void | Promise<void>, interval?: number): Promise<NodeJS.Timeout>;
|
|
67
|
+
checkTimers(callback: (timer: Timer<T, Extra>) => void | Promise<void>, interval?: number): Promise<NodeJS.Timeout>;
|
|
67
68
|
/**
|
|
68
69
|
* showTimers
|
|
69
70
|
* @description Retrieves all active timers.
|
|
@@ -73,12 +74,12 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
73
74
|
* const timers = await manager.showTimers();
|
|
74
75
|
* console.log(JSON.stringify(timers))
|
|
75
76
|
*/
|
|
76
|
-
showTimers(): Promise<Timer<T>[]>;
|
|
77
|
+
showTimers(): Promise<Timer<T, Extra>[]>;
|
|
77
78
|
/**
|
|
78
79
|
* adjustRemainingTime
|
|
79
80
|
* @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
|
|
81
|
+
* @param {string} id ID of the timer to modify
|
|
82
|
+
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
82
83
|
* @returns Promise resolving when the operation is complete
|
|
83
84
|
* @throws If file operation fails
|
|
84
85
|
*/
|
|
@@ -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;
|
|
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,EAAE,KAAK,SAAS,MAAM;IAC9E,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,OAAO,CAAC,SAAS,CAAkB;IAEnC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAQ;IAE3D,OAAO,CAAC,KAAK,CAAoC;IACjD,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAM9C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;;;;QAQO;gBAEN,OAAO,CAAC,EAAE,MAAM;IAcjB;;;;;;;;;;OAUM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BhF;;;;;;;;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,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAuDrI;;;;;;;;OAQM;IACO,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;CAsB1E"}
|
|
@@ -31,7 +31,7 @@ class TimersManager {
|
|
|
31
31
|
/**
|
|
32
32
|
* constructor
|
|
33
33
|
* @description Initializes the TimersManager instance. If the timer file does not exist, an empty file is created.
|
|
34
|
-
* @param options (
|
|
34
|
+
* @param {string} [options] (string, optional) Configuration timer file path and it is treated as the timer file path.
|
|
35
35
|
* @throws If file access or creation fails
|
|
36
36
|
* @example
|
|
37
37
|
* const manager = new TimersManager(); // Uses default timer file path
|
|
@@ -53,7 +53,7 @@ class TimersManager {
|
|
|
53
53
|
/**
|
|
54
54
|
* createTimer
|
|
55
55
|
* @description Creates a new timer.
|
|
56
|
-
* @param length Timer duration in milliseconds
|
|
56
|
+
* @param {{length: number, extra: Extra} | number} options Timer duration in milliseconds and extra field(only JSONL)
|
|
57
57
|
* @returns Promise that resolves to the timer ID (UUID)
|
|
58
58
|
* @throws If length is invalid(e.g. length < 0) or file operation fails
|
|
59
59
|
* @example
|
|
@@ -64,6 +64,9 @@ class TimersManager {
|
|
|
64
64
|
async createTimer(options) {
|
|
65
65
|
return this.runExclusive(async () => {
|
|
66
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
|
+
}
|
|
67
70
|
let length = typeof options === "object" ? options.length : options;
|
|
68
71
|
if (length < 0)
|
|
69
72
|
throw new Error(`Invalid length: ${length}`);
|
|
@@ -75,8 +78,9 @@ class TimersManager {
|
|
|
75
78
|
id,
|
|
76
79
|
start: now,
|
|
77
80
|
stop: stopTime,
|
|
78
|
-
...(typeof options === "object" && options.
|
|
79
|
-
|
|
81
|
+
...(options && typeof options === "object" && options.extra !== undefined
|
|
82
|
+
? { extra: options.extra }
|
|
83
|
+
: {}),
|
|
80
84
|
};
|
|
81
85
|
await this.TimersStore.appendTimer(newTimerData);
|
|
82
86
|
return id;
|
|
@@ -85,8 +89,8 @@ class TimersManager {
|
|
|
85
89
|
/**
|
|
86
90
|
* removeTimer
|
|
87
91
|
* @description Removes a timer by ID.
|
|
88
|
-
* @param id ID of the timer to remove
|
|
89
|
-
* @returns
|
|
92
|
+
* @param {string} id ID of the timer to remove
|
|
93
|
+
* @returns Promise resolving when the operation is complete
|
|
90
94
|
* @throws If file operation fails
|
|
91
95
|
* @example
|
|
92
96
|
* await manager.removeTimer(id);
|
|
@@ -109,10 +113,10 @@ class TimersManager {
|
|
|
109
113
|
* @description Starts monitoring timers at the specified interval.
|
|
110
114
|
* When a timer expires, the provided `callback` is invoked with the timer.
|
|
111
115
|
* The callback is awaited before the next processing cycle continues.
|
|
112
|
-
* @param callback Function invoked when an expired timer is detected (called asynchronously)
|
|
113
|
-
* @param interval (number, optional): Check interval in milliseconds (default: 200ms)
|
|
116
|
+
* @param {(timer: Timer<T, Extra>) => void | Promise<void>} callback Function invoked when an expired timer is detected (called asynchronously)
|
|
117
|
+
* @param {number} [interval=200] (number, optional): Check interval in milliseconds (default: 200ms)
|
|
114
118
|
* @throws If file operation fails
|
|
115
|
-
* @returns
|
|
119
|
+
* @returns {Promise<NodeJS.Timeout>} intervalId interval id of checkTimers
|
|
116
120
|
* @example
|
|
117
121
|
* const interval = await manager.checkTimers((timer) => {
|
|
118
122
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
@@ -183,8 +187,8 @@ class TimersManager {
|
|
|
183
187
|
/**
|
|
184
188
|
* adjustRemainingTime
|
|
185
189
|
* @description Adjusts the remaining time of a timer.
|
|
186
|
-
* @param id ID of the timer to modify
|
|
187
|
-
* @param delay Delay in milliseconds to add/subtract from the remaining time
|
|
190
|
+
* @param {string} id ID of the timer to modify
|
|
191
|
+
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
188
192
|
* @returns Promise resolving when the operation is complete
|
|
189
193
|
* @throws If file operation fails
|
|
190
194
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AACpB,+BAAoC;AAEpC,qEAA0C;AAG1C,sCAAgC;AAEhC;;;;;;;;GAQG;AACH,MAAsB,aAAa;IACf,YAAY,CAAS;IAChC,SAAS,GAAY,KAAK,CAAC;IAEzB,WAAW,
|
|
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"}
|
|
@@ -19,6 +19,10 @@ class JSONLTimersStore extends TimersStore_js_1.TimersStore {
|
|
|
19
19
|
throw new Error(`Timer file's syntax is wrong`);
|
|
20
20
|
};
|
|
21
21
|
for (const timer of timers) {
|
|
22
|
+
if (Object.keys(timer).length !== 4)
|
|
23
|
+
throwing();
|
|
24
|
+
if (Object.keys(timer).length !== 4)
|
|
25
|
+
throwing();
|
|
22
26
|
if (!timer.id || !(0, uuid_1.validate)(timer.id))
|
|
23
27
|
throwing();
|
|
24
28
|
if (!timer.start || typeof timer.start !== "number")
|
|
@@ -27,9 +31,7 @@ class JSONLTimersStore extends TimersStore_js_1.TimersStore {
|
|
|
27
31
|
throwing();
|
|
28
32
|
if (timer.start > timer.stop)
|
|
29
33
|
throwing();
|
|
30
|
-
if (timer.
|
|
31
|
-
throwing();
|
|
32
|
-
if (timer.description && typeof timer.description !== "string")
|
|
34
|
+
if (!timer.extra || typeof timer.extra !== "object")
|
|
33
35
|
throwing();
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;AAE/C,MAAa,
|
|
1
|
+
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;AAE/C,MAAa,gBAAuC,SAAQ,4BAA2B;IAEtF,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACgB,KAAK,CAAC,oBAAoB,CAAC,MAA+B;QAC5E,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,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,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;gBAAE,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAEe,iBAAiB,CAAC,MAA+B;QAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC,CAAC;IAC5D,CAAC;CACD;AA3CD,4CA2CC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Timer } from "../types.js";
|
|
2
2
|
import { TimersStore } from "./TimersStore.js";
|
|
3
|
-
export declare class PlainTextTimersStore extends TimersStore<"PlainText"> {
|
|
3
|
+
export declare class PlainTextTimersStore extends TimersStore<"PlainText", object> {
|
|
4
4
|
constructor(timerfile: string);
|
|
5
5
|
/**
|
|
6
6
|
* checkTimerfileSyntax
|
|
@@ -9,8 +9,8 @@ export declare class PlainTextTimersStore extends TimersStore<"PlainText"> {
|
|
|
9
9
|
* @returns void
|
|
10
10
|
* @throws If syntax is invalid
|
|
11
11
|
*/
|
|
12
|
-
protected checkTimerfileSyntax(timers: Timer<"PlainText">[]): Promise<void>;
|
|
13
|
-
toStringifyTimers(timers: Timer<"PlainText">[]): string;
|
|
14
|
-
parseTimers(data: string): Timer<"PlainText">[];
|
|
12
|
+
protected checkTimerfileSyntax(timers: Timer<"PlainText", object>[]): Promise<void>;
|
|
13
|
+
toStringifyTimers(timers: Timer<"PlainText", object>[]): string;
|
|
14
|
+
parseTimers(data: string): Timer<"PlainText", object>[];
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=PlainTextTimersStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGxE,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMM;cACmB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAclF,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM;IAO/D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;CAavE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;AAE/C,MAAa,oBAAqB,SAAQ,
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAGhC,qDAA+C;AAE/C,MAAa,oBAAqB,SAAQ,4BAAgC;IAEzE,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMM;IACa,KAAK,CAAC,oBAAoB,CAAC,MAAoC;QACjF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,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,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,QAAQ,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO;IACR,CAAC;IAEe,iBAAiB,CAAC,MAAoC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,EAAG;gBACP,KAAK,EAAE,MAAM,CAAC,QAAS,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,OAAQ,CAAC;aACQ,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACD;AAjDD,oDAiDC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { StorageType, Timer } from "../types.js";
|
|
2
|
-
export declare abstract class TimersStore<T extends StorageType> {
|
|
2
|
+
export declare abstract class TimersStore<T extends StorageType, Extra extends object> {
|
|
3
3
|
protected readonly timerfile: string;
|
|
4
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>[];
|
|
5
|
+
loadTimers(): Promise<Timer<T, Extra>[]>;
|
|
6
|
+
saveTimers(timers: Timer<T, Extra>[]): Promise<void>;
|
|
7
|
+
appendTimer(timer: Timer<T, Extra>): Promise<void>;
|
|
8
|
+
protected abstract checkTimerfileSyntax(timers: Timer<T, Extra>[]): Promise<void>;
|
|
9
|
+
abstract toStringifyTimers(timers: Timer<T, Extra>[]): string;
|
|
10
|
+
abstract parseTimers(data: string): Timer<T, Extra>[];
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=TimersStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,8BAAsB,WAAW,CAAC,CAAC,SAAS,WAAW;
|
|
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,EAAE,KAAK,SAAS,MAAM;IAC5E,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAErC,SAAS,aACR,SAAS,EAAE,MAAM;IAKL,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAWxC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aACjE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;aACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;CAC5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAI7B,MAAsB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAI7B,MAAsB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,GAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAyB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAsB;QAC9C,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;CAKD;AA1CD,kCA0CC"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
export type StorageType = "JSONL" | "PlainText";
|
|
2
|
-
export type Timer<T extends StorageType> = T extends "JSONL" ? {
|
|
2
|
+
export type Timer<T extends StorageType, Extra extends object> = T extends "JSONL" ? {
|
|
3
3
|
id: string;
|
|
4
4
|
start: number;
|
|
5
5
|
stop: number;
|
|
6
|
-
|
|
7
|
-
description?: string;
|
|
6
|
+
extra: Extra;
|
|
8
7
|
} : {
|
|
9
8
|
id: string;
|
|
10
9
|
start: number;
|
|
11
10
|
stop: number;
|
|
12
11
|
};
|
|
13
|
-
export type CreateTimerOptions<T extends StorageType> = T extends "JSONL" ? {
|
|
12
|
+
export type CreateTimerOptions<T extends StorageType, Extra extends object> = T extends "JSONL" ? {
|
|
14
13
|
length: number;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} | number : T extends "PlainText" ? number : never;
|
|
14
|
+
extra: Extra;
|
|
15
|
+
} : T extends "PlainText" ? number : never;
|
|
18
16
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/cjs/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IACzD,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAA;CACf,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,SAAS,OAAO,GACzF;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAA;CACf,GACD,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC"}
|
|
@@ -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;CAkBhB"}
|
|
@@ -17,7 +17,20 @@ 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 {
|
|
@@ -26,28 +39,11 @@ export class JSONLTimersManager extends TimersManager {
|
|
|
26
39
|
if (index === -1) {
|
|
27
40
|
throw new Error(`Timer with id ${id} not found`);
|
|
28
41
|
}
|
|
29
|
-
timers[index].
|
|
42
|
+
timers[index].extra = newExtra;
|
|
30
43
|
await this.TimersStore.saveTimers(timers);
|
|
31
44
|
}
|
|
32
45
|
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 });
|
|
46
|
+
throw new Error(`Error when changing extra`, { cause: e });
|
|
51
47
|
}
|
|
52
48
|
});
|
|
53
49
|
}
|
|
@@ -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,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;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"}
|
|
@@ -9,18 +9,19 @@ import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
|
9
9
|
* - Timers are persisted in a file
|
|
10
10
|
* - Expired timers are detected by polling
|
|
11
11
|
*/
|
|
12
|
-
export declare abstract class TimersManager<T extends StorageType> {
|
|
12
|
+
export declare abstract class TimersManager<T extends StorageType, Extra extends object> {
|
|
13
13
|
protected readonly timerfiledir: string;
|
|
14
14
|
private checkLock;
|
|
15
|
-
protected TimersStore: TimersStore<T> | null;
|
|
15
|
+
protected TimersStore: TimersStore<T, Extra> | null;
|
|
16
16
|
private queue;
|
|
17
17
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
18
18
|
protected abstract getDefaultFilename(): string;
|
|
19
|
-
protected abstract createTimersStore(): Promise<TimersStore<T>>;
|
|
19
|
+
protected abstract createTimersStore(): Promise<TimersStore<T, Extra>>;
|
|
20
|
+
protected abstract type: T;
|
|
20
21
|
/**
|
|
21
22
|
* constructor
|
|
22
23
|
* @description Initializes the TimersManager instance. If the timer file does not exist, an empty file is created.
|
|
23
|
-
* @param options (
|
|
24
|
+
* @param {string} [options] (string, optional) Configuration timer file path and it is treated as the timer file path.
|
|
24
25
|
* @throws If file access or creation fails
|
|
25
26
|
* @example
|
|
26
27
|
* const manager = new TimersManager(); // Uses default timer file path
|
|
@@ -30,7 +31,7 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
30
31
|
/**
|
|
31
32
|
* createTimer
|
|
32
33
|
* @description Creates a new timer.
|
|
33
|
-
* @param length Timer duration in milliseconds
|
|
34
|
+
* @param {{length: number, extra: Extra} | number} options Timer duration in milliseconds and extra field(only JSONL)
|
|
34
35
|
* @returns Promise that resolves to the timer ID (UUID)
|
|
35
36
|
* @throws If length is invalid(e.g. length < 0) or file operation fails
|
|
36
37
|
* @example
|
|
@@ -38,12 +39,12 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
38
39
|
* const newTimer = await manager.createTimer(5000);
|
|
39
40
|
* // newTimer will be id of the timer
|
|
40
41
|
*/
|
|
41
|
-
createTimer(options: CreateTimerOptions<T>): Promise<string>;
|
|
42
|
+
createTimer(options: CreateTimerOptions<T, Extra>): Promise<string>;
|
|
42
43
|
/**
|
|
43
44
|
* removeTimer
|
|
44
45
|
* @description Removes a timer by ID.
|
|
45
|
-
* @param id ID of the timer to remove
|
|
46
|
-
* @returns
|
|
46
|
+
* @param {string} id ID of the timer to remove
|
|
47
|
+
* @returns Promise resolving when the operation is complete
|
|
47
48
|
* @throws If file operation fails
|
|
48
49
|
* @example
|
|
49
50
|
* await manager.removeTimer(id);
|
|
@@ -54,16 +55,16 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
54
55
|
* @description Starts monitoring timers at the specified interval.
|
|
55
56
|
* When a timer expires, the provided `callback` is invoked with the timer.
|
|
56
57
|
* 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)
|
|
58
|
+
* @param {(timer: Timer<T, Extra>) => void | Promise<void>} callback Function invoked when an expired timer is detected (called asynchronously)
|
|
59
|
+
* @param {number} [interval=200] (number, optional): Check interval in milliseconds (default: 200ms)
|
|
59
60
|
* @throws If file operation fails
|
|
60
|
-
* @returns
|
|
61
|
+
* @returns {Promise<NodeJS.Timeout>} intervalId interval id of checkTimers
|
|
61
62
|
* @example
|
|
62
63
|
* const interval = await manager.checkTimers((timer) => {
|
|
63
64
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
64
65
|
* });
|
|
65
66
|
*/
|
|
66
|
-
checkTimers(callback: (timer: Timer<T>) => void | Promise<void>, interval?: number): Promise<NodeJS.Timeout>;
|
|
67
|
+
checkTimers(callback: (timer: Timer<T, Extra>) => void | Promise<void>, interval?: number): Promise<NodeJS.Timeout>;
|
|
67
68
|
/**
|
|
68
69
|
* showTimers
|
|
69
70
|
* @description Retrieves all active timers.
|
|
@@ -73,12 +74,12 @@ export declare abstract class TimersManager<T extends StorageType> {
|
|
|
73
74
|
* const timers = await manager.showTimers();
|
|
74
75
|
* console.log(JSON.stringify(timers))
|
|
75
76
|
*/
|
|
76
|
-
showTimers(): Promise<Timer<T>[]>;
|
|
77
|
+
showTimers(): Promise<Timer<T, Extra>[]>;
|
|
77
78
|
/**
|
|
78
79
|
* adjustRemainingTime
|
|
79
80
|
* @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
|
|
81
|
+
* @param {string} id ID of the timer to modify
|
|
82
|
+
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
82
83
|
* @returns Promise resolving when the operation is complete
|
|
83
84
|
* @throws If file operation fails
|
|
84
85
|
*/
|
|
@@ -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;
|
|
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,EAAE,KAAK,SAAS,MAAM;IAC9E,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACxC,OAAO,CAAC,SAAS,CAAkB;IAEnC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAQ;IAE3D,OAAO,CAAC,KAAK,CAAoC;IACjD,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAM9C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;;;;QAQO;gBAEN,OAAO,CAAC,EAAE,MAAM;IAcjB;;;;;;;;;;OAUM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BhF;;;;;;;;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,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAuDrI;;;;;;;;OAQM;IACO,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;CAsB1E"}
|
|
@@ -26,7 +26,7 @@ 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 (
|
|
29
|
+
* @param {string} [options] (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
|
|
@@ -48,7 +48,7 @@ export class TimersManager {
|
|
|
48
48
|
/**
|
|
49
49
|
* createTimer
|
|
50
50
|
* @description Creates a new timer.
|
|
51
|
-
* @param length Timer duration in milliseconds
|
|
51
|
+
* @param {{length: number, extra: Extra} | number} options Timer duration in milliseconds and extra field(only JSONL)
|
|
52
52
|
* @returns Promise that resolves to the timer ID (UUID)
|
|
53
53
|
* @throws If length is invalid(e.g. length < 0) or file operation fails
|
|
54
54
|
* @example
|
|
@@ -59,6 +59,9 @@ export class TimersManager {
|
|
|
59
59
|
async createTimer(options) {
|
|
60
60
|
return this.runExclusive(async () => {
|
|
61
61
|
this.TimersStore ??= await this.createTimersStore();
|
|
62
|
+
if (this.type === "JSONL" && typeof options === "number") {
|
|
63
|
+
throw new Error(`Cannot create timer without extra fields in JSONL`);
|
|
64
|
+
}
|
|
62
65
|
let length = typeof options === "object" ? options.length : options;
|
|
63
66
|
if (length < 0)
|
|
64
67
|
throw new Error(`Invalid length: ${length}`);
|
|
@@ -70,8 +73,9 @@ export class TimersManager {
|
|
|
70
73
|
id,
|
|
71
74
|
start: now,
|
|
72
75
|
stop: stopTime,
|
|
73
|
-
...(typeof options === "object" && options.
|
|
74
|
-
|
|
76
|
+
...(options && typeof options === "object" && options.extra !== undefined
|
|
77
|
+
? { extra: options.extra }
|
|
78
|
+
: {}),
|
|
75
79
|
};
|
|
76
80
|
await this.TimersStore.appendTimer(newTimerData);
|
|
77
81
|
return id;
|
|
@@ -80,8 +84,8 @@ export class TimersManager {
|
|
|
80
84
|
/**
|
|
81
85
|
* removeTimer
|
|
82
86
|
* @description Removes a timer by ID.
|
|
83
|
-
* @param id ID of the timer to remove
|
|
84
|
-
* @returns
|
|
87
|
+
* @param {string} id ID of the timer to remove
|
|
88
|
+
* @returns Promise resolving when the operation is complete
|
|
85
89
|
* @throws If file operation fails
|
|
86
90
|
* @example
|
|
87
91
|
* await manager.removeTimer(id);
|
|
@@ -104,10 +108,10 @@ export class TimersManager {
|
|
|
104
108
|
* @description Starts monitoring timers at the specified interval.
|
|
105
109
|
* When a timer expires, the provided `callback` is invoked with the timer.
|
|
106
110
|
* 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)
|
|
111
|
+
* @param {(timer: Timer<T, Extra>) => void | Promise<void>} callback Function invoked when an expired timer is detected (called asynchronously)
|
|
112
|
+
* @param {number} [interval=200] (number, optional): Check interval in milliseconds (default: 200ms)
|
|
109
113
|
* @throws If file operation fails
|
|
110
|
-
* @returns
|
|
114
|
+
* @returns {Promise<NodeJS.Timeout>} intervalId interval id of checkTimers
|
|
111
115
|
* @example
|
|
112
116
|
* const interval = await manager.checkTimers((timer) => {
|
|
113
117
|
* console.log(`A timer was stopped: ${timer.id}`);
|
|
@@ -178,8 +182,8 @@ export class TimersManager {
|
|
|
178
182
|
/**
|
|
179
183
|
* adjustRemainingTime
|
|
180
184
|
* @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
|
|
185
|
+
* @param {string} id ID of the timer to modify
|
|
186
|
+
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
183
187
|
* @returns Promise resolving when the operation is complete
|
|
184
188
|
* @throws If file operation fails
|
|
185
189
|
*/
|
|
@@ -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,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,OAAgB,aAAa;IACf,YAAY,CAAS;IAChC,SAAS,GAAY,KAAK,CAAC;IAEzB,WAAW,
|
|
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"}
|
|
@@ -16,6 +16,10 @@ export class JSONLTimersStore extends TimersStore {
|
|
|
16
16
|
throw new Error(`Timer file's syntax is wrong`);
|
|
17
17
|
};
|
|
18
18
|
for (const timer of timers) {
|
|
19
|
+
if (Object.keys(timer).length !== 4)
|
|
20
|
+
throwing();
|
|
21
|
+
if (Object.keys(timer).length !== 4)
|
|
22
|
+
throwing();
|
|
19
23
|
if (!timer.id || !validate(timer.id))
|
|
20
24
|
throwing();
|
|
21
25
|
if (!timer.start || typeof timer.start !== "number")
|
|
@@ -24,9 +28,7 @@ export class JSONLTimersStore extends TimersStore {
|
|
|
24
28
|
throwing();
|
|
25
29
|
if (timer.start > timer.stop)
|
|
26
30
|
throwing();
|
|
27
|
-
if (timer.
|
|
28
|
-
throwing();
|
|
29
|
-
if (timer.description && typeof timer.description !== "string")
|
|
31
|
+
if (!timer.extra || typeof timer.extra !== "object")
|
|
30
32
|
throwing();
|
|
31
33
|
}
|
|
32
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONLTimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/JSONLTimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,
|
|
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,gBAAuC,SAAQ,WAA2B;IAEtF,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACgB,KAAK,CAAC,oBAAoB,CAAC,MAA+B;QAC5E,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,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,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;gBAAE,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAEe,iBAAiB,CAAC,MAA+B;QAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC,CAAC;IAC5D,CAAC;CACD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Timer } from "../types.js";
|
|
2
2
|
import { TimersStore } from "./TimersStore.js";
|
|
3
|
-
export declare class PlainTextTimersStore extends TimersStore<"PlainText"> {
|
|
3
|
+
export declare class PlainTextTimersStore extends TimersStore<"PlainText", object> {
|
|
4
4
|
constructor(timerfile: string);
|
|
5
5
|
/**
|
|
6
6
|
* checkTimerfileSyntax
|
|
@@ -9,8 +9,8 @@ export declare class PlainTextTimersStore extends TimersStore<"PlainText"> {
|
|
|
9
9
|
* @returns void
|
|
10
10
|
* @throws If syntax is invalid
|
|
11
11
|
*/
|
|
12
|
-
protected checkTimerfileSyntax(timers: Timer<"PlainText">[]): Promise<void>;
|
|
13
|
-
toStringifyTimers(timers: Timer<"PlainText">[]): string;
|
|
14
|
-
parseTimers(data: string): Timer<"PlainText">[];
|
|
12
|
+
protected checkTimerfileSyntax(timers: Timer<"PlainText", object>[]): Promise<void>;
|
|
13
|
+
toStringifyTimers(timers: Timer<"PlainText", object>[]): string;
|
|
14
|
+
parseTimers(data: string): Timer<"PlainText", object>[];
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=PlainTextTimersStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"PlainTextTimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/PlainTextTimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGxE,SAAS,EAAE,MAAM;IAKlB;;;;;;OAMM;cACmB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAclF,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM;IAO/D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;CAavE"}
|
|
@@ -1 +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,
|
|
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,WAAgC;IAEzE,YACC,SAAiB;QAEjB,KAAK,CAAC,SAAS,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;OAMM;IACa,KAAK,CAAC,oBAAoB,CAAC,MAAoC;QACjF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,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,MAAoC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAEe,WAAW,CAAC,IAAY;QACvC,OAAO,IAAI;aACT,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO;gBACN,EAAE,EAAE,EAAG;gBACP,KAAK,EAAE,MAAM,CAAC,QAAS,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,OAAQ,CAAC;aACQ,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { StorageType, Timer } from "../types.js";
|
|
2
|
-
export declare abstract class TimersStore<T extends StorageType> {
|
|
2
|
+
export declare abstract class TimersStore<T extends StorageType, Extra extends object> {
|
|
3
3
|
protected readonly timerfile: string;
|
|
4
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>[];
|
|
5
|
+
loadTimers(): Promise<Timer<T, Extra>[]>;
|
|
6
|
+
saveTimers(timers: Timer<T, Extra>[]): Promise<void>;
|
|
7
|
+
appendTimer(timer: Timer<T, Extra>): Promise<void>;
|
|
8
|
+
protected abstract checkTimerfileSyntax(timers: Timer<T, Extra>[]): Promise<void>;
|
|
9
|
+
abstract toStringifyTimers(timers: Timer<T, Extra>[]): string;
|
|
10
|
+
abstract parseTimers(data: string): Timer<T, Extra>[];
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=TimersStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.d.ts","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,8BAAsB,WAAW,CAAC,CAAC,SAAS,WAAW;
|
|
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,EAAE,KAAK,SAAS,MAAM;IAC5E,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAErC,SAAS,aACR,SAAS,EAAE,MAAM;IAKL,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAWxC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aACjE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;aACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;CAC5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAI7B,MAAM,OAAgB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAI7B,MAAM,OAAgB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,GAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAyB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAsB;QAC9C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;CAKD"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
export type StorageType = "JSONL" | "PlainText";
|
|
2
|
-
export type Timer<T extends StorageType> = T extends "JSONL" ? {
|
|
2
|
+
export type Timer<T extends StorageType, Extra extends object> = T extends "JSONL" ? {
|
|
3
3
|
id: string;
|
|
4
4
|
start: number;
|
|
5
5
|
stop: number;
|
|
6
|
-
|
|
7
|
-
description?: string;
|
|
6
|
+
extra: Extra;
|
|
8
7
|
} : {
|
|
9
8
|
id: string;
|
|
10
9
|
start: number;
|
|
11
10
|
stop: number;
|
|
12
11
|
};
|
|
13
|
-
export type CreateTimerOptions<T extends StorageType> = T extends "JSONL" ? {
|
|
12
|
+
export type CreateTimerOptions<T extends StorageType, Extra extends object> = T extends "JSONL" ? {
|
|
14
13
|
length: number;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} | number : T extends "PlainText" ? number : never;
|
|
14
|
+
extra: Extra;
|
|
15
|
+
} : T extends "PlainText" ? number : never;
|
|
18
16
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IACzD,CAAC,SAAS,OAAO,GACX;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAA;CACf,GACD;IACI,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,SAAS,OAAO,GACzF;IACI,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAA;CACf,GACD,CAAC,SAAS,WAAW,GACnB,MAAM,GACN,KAAK,CAAC"}
|