eternal-timer 4.3.1 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -22
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts +22 -7
- package/dist/cjs/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/JSONLTimersManager.js +44 -9
- package/dist/cjs/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts +19 -4
- package/dist/cjs/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/PlainTextTimersManager.js +43 -6
- package/dist/cjs/TimersManager/PlainTextTimersManager.js.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.d.ts +25 -26
- package/dist/cjs/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/cjs/TimersManager/TimersManager.js +39 -50
- package/dist/cjs/TimersManager/TimersManager.js.map +1 -1
- package/dist/cjs/searchRoot.d.ts +1 -1
- package/dist/cjs/searchRoot.d.ts.map +1 -1
- package/dist/cjs/searchRoot.js +13 -7
- package/dist/cjs/searchRoot.js.map +1 -1
- package/dist/cjs/throwMessage.d.ts +1 -0
- package/dist/cjs/throwMessage.d.ts.map +1 -1
- package/dist/cjs/throwMessage.js +1 -0
- package/dist/cjs/throwMessage.js.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts +22 -7
- package/dist/esm/TimersManager/JSONLTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/JSONLTimersManager.js +41 -9
- package/dist/esm/TimersManager/JSONLTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.d.ts +19 -4
- package/dist/esm/TimersManager/PlainTextTimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/PlainTextTimersManager.js +40 -6
- package/dist/esm/TimersManager/PlainTextTimersManager.js.map +1 -1
- package/dist/esm/TimersManager/TimersManager.d.ts +25 -26
- package/dist/esm/TimersManager/TimersManager.d.ts.map +1 -1
- package/dist/esm/TimersManager/TimersManager.js +39 -47
- package/dist/esm/TimersManager/TimersManager.js.map +1 -1
- package/dist/esm/searchRoot.d.ts +1 -1
- package/dist/esm/searchRoot.d.ts.map +1 -1
- package/dist/esm/searchRoot.js +13 -7
- package/dist/esm/searchRoot.js.map +1 -1
- package/dist/esm/throwMessage.d.ts +1 -0
- package/dist/esm/throwMessage.d.ts.map +1 -1
- package/dist/esm/throwMessage.js +1 -0
- package/dist/esm/throwMessage.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,24 +13,21 @@ import { EventEmitter } from "../EventEmitter.js";
|
|
|
13
13
|
export declare abstract class TimersManager<T extends StorageType, Extra extends object> extends EventEmitter<T, Extra> {
|
|
14
14
|
protected readonly timerfiledir: string;
|
|
15
15
|
protected checkLock: boolean;
|
|
16
|
-
protected
|
|
16
|
+
protected static intervals: Map<string, NodeJS.Timeout>;
|
|
17
17
|
protected running: boolean;
|
|
18
|
-
protected TimersStore: TimersStore<T, Extra
|
|
18
|
+
protected abstract TimersStore: TimersStore<T, Extra>;
|
|
19
19
|
private queue;
|
|
20
20
|
protected runExclusive<T>(fn: () => Promise<T>): Promise<T>;
|
|
21
|
-
protected abstract getDefaultFilename(): string;
|
|
22
|
-
protected abstract createTimersStore(): Promise<TimersStore<T, Extra>>;
|
|
23
21
|
protected abstract type: T;
|
|
24
22
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
constructor(timerfile?: string);
|
|
23
|
+
* constructor
|
|
24
|
+
* @param {string} timerfile timer file path.
|
|
25
|
+
* @description Initializes the TimersManager instance.
|
|
26
|
+
* @deprecated This constructor is deprecated. Please use the static `create` method instead, which performs necessary asynchronous initialization. The constructor will be made private in a future release.
|
|
27
|
+
* @example
|
|
28
|
+
* const manager = new TimersManager("/path/to/timers"); // Uses specified timer file path
|
|
29
|
+
*/
|
|
30
|
+
protected constructor(timerfile: string);
|
|
34
31
|
/**
|
|
35
32
|
* createTimer
|
|
36
33
|
* @description Creates a new timer.
|
|
@@ -39,11 +36,11 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
39
36
|
* @throws If length is invalid (e.g. length < 0) or file operation fails
|
|
40
37
|
* @example
|
|
41
38
|
* // For PlainTextTimersManager
|
|
42
|
-
* const manager =
|
|
39
|
+
* const manager = await PlainTextTimersManager.create();
|
|
43
40
|
* const newTimerId = await manager.createTimer(5000); // Create a 5-second timer
|
|
44
41
|
*
|
|
45
42
|
* // For JSONLTimersManager
|
|
46
|
-
* const jsonlManager =
|
|
43
|
+
* const jsonlManager = await JSONLTimersManager.create<{ title: string }>();
|
|
47
44
|
* const jsonlTimerId = await jsonlManager.createTimer({ length: 10000, extra: { title: "My JSONL Timer" } }); // Create a 10-second timer with extra data
|
|
48
45
|
*/
|
|
49
46
|
createTimer(options: CreateTimerOptions<T, Extra>): Promise<string>;
|
|
@@ -64,7 +61,6 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
64
61
|
* @returns Promise<void> that resolves when the loop has been started
|
|
65
62
|
* @throws If file operation fails during checking
|
|
66
63
|
* @example
|
|
67
|
-
* const manager = new TimersManager();
|
|
68
64
|
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
69
65
|
*/
|
|
70
66
|
checkStart(interval?: number): Promise<void>;
|
|
@@ -73,7 +69,6 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
73
69
|
* @description Stops the timer checking loop.
|
|
74
70
|
* @returns Promise resolving when the loop has been stopped
|
|
75
71
|
* @example
|
|
76
|
-
* const manager = new TimersManager();
|
|
77
72
|
* await manager.checkStart(1000);
|
|
78
73
|
* // ... later, to stop checking:
|
|
79
74
|
* await manager.checkStop();
|
|
@@ -90,22 +85,26 @@ export declare abstract class TimersManager<T extends StorageType, Extra extends
|
|
|
90
85
|
*/
|
|
91
86
|
get isBusy(): boolean;
|
|
92
87
|
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
* showTimers
|
|
89
|
+
* @description Retrieves all active timers.
|
|
90
|
+
* @returns Array of `Timer` objects
|
|
91
|
+
* @throws If file operation fails
|
|
92
|
+
* @example
|
|
93
|
+
* const timers = await manager.showTimers();
|
|
94
|
+
* console.log(JSON.stringify(timers));
|
|
95
|
+
*/
|
|
101
96
|
showTimers(): Promise<Timer<T, Extra>[]>;
|
|
102
97
|
/**
|
|
103
|
-
|
|
98
|
+
* adjustRemainingTime
|
|
104
99
|
* @description Adjusts the remaining time of a timer.
|
|
105
100
|
* @param {string} id ID of the timer to modify
|
|
106
101
|
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
107
102
|
* @returns Promise resolving when the operation is complete
|
|
108
103
|
* @throws If file operation fails
|
|
104
|
+
* @example
|
|
105
|
+
* const timer = await manager.createTimer(10000); // Create a 10-second timer
|
|
106
|
+
* await manager.adjustRemainingTime(timer, -2000); // Subtract 2 seconds from the remaining time (now 8 seconds left)
|
|
107
|
+
* await manager.adjustRemainingTime(timer, 3000); // Add 3 seconds to the remaining time (now 11 seconds left)
|
|
109
108
|
*/
|
|
110
109
|
adjustRemainingTime(id: string, delay: number): Promise<void>;
|
|
111
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimersManager.d.ts","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,CAAE,SAAQ,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;IAC9G,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAGxC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAMrC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAa;IAEpE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAGtD,OAAO,CAAC,KAAK,CAAoC;IACjD,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAM9C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3B;;;;;;;OAOG;IACH,SAAS,aAAa,SAAS,EAAE,MAAM;IAKvC;;;;;;;;;;;;;;OAcM;IACO,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BhF;;;;;;;;OAQM;IACO,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD;;;;;;;;OAQG;IACU,UAAU,CACtB,QAAQ,GAAE,MAAY,GACpB,OAAO,CAAC,IAAI,CAAC;IAyDhB;;;;;;;;OAQG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;;;;;;;OAQG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;OAQG;IACU,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAOrD;;;;;;;;;;;QAWO;IACM,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB1E"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
import fs from "fs";
|
|
3
1
|
import { v4 as uuidv4 } from "uuid";
|
|
4
|
-
import searchRoot from "../searchRoot.js";
|
|
5
2
|
import { TimersStore } from "../TimersStore/TimersStore.js";
|
|
6
3
|
import { EventEmitter } from "../EventEmitter.js";
|
|
7
4
|
import { throwMessage } from "../throwMessage.js";
|
|
@@ -16,10 +13,16 @@ import { throwMessage } from "../throwMessage.js";
|
|
|
16
13
|
*/
|
|
17
14
|
export class TimersManager extends EventEmitter {
|
|
18
15
|
timerfiledir;
|
|
16
|
+
// lock if the check loop is running, or not. This is used to prevent multiple check loops from running simultaneously and to indicate whether a file operation is in progress (e.g. loading or saving timers).
|
|
19
17
|
checkLock = false;
|
|
20
|
-
|
|
18
|
+
/*
|
|
19
|
+
// Interval id of the check loop. If the loop is not running, this is undefined.
|
|
20
|
+
protected interval: NodeJS.Timeout | undefined;
|
|
21
|
+
*/
|
|
22
|
+
static intervals = new Map();
|
|
23
|
+
// Indicates whether the check loop is running. This is used to control the loop and to prevent starting multiple loops simultaneously.
|
|
21
24
|
running = false;
|
|
22
|
-
|
|
25
|
+
// A simple promise queue to ensure that file operations are performed sequentially, preventing race conditions
|
|
23
26
|
queue = Promise.resolve();
|
|
24
27
|
runExclusive(fn) {
|
|
25
28
|
const p = this.queue.then(fn);
|
|
@@ -27,27 +30,16 @@ export class TimersManager extends EventEmitter {
|
|
|
27
30
|
return p;
|
|
28
31
|
}
|
|
29
32
|
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
*/
|
|
33
|
+
* constructor
|
|
34
|
+
* @param {string} timerfile timer file path.
|
|
35
|
+
* @description Initializes the TimersManager instance.
|
|
36
|
+
* @deprecated This constructor is deprecated. Please use the static `create` method instead, which performs necessary asynchronous initialization. The constructor will be made private in a future release.
|
|
37
|
+
* @example
|
|
38
|
+
* const manager = new TimersManager("/path/to/timers"); // Uses specified timer file path
|
|
39
|
+
*/
|
|
38
40
|
constructor(timerfile) {
|
|
39
41
|
super();
|
|
40
|
-
|
|
41
|
-
this.timerfiledir = path.resolve(rootDir, timerfile ?? this.getDefaultFilename());
|
|
42
|
-
if (!this.timerfiledir.startsWith(rootDir)) {
|
|
43
|
-
throw new Error(throwMessage.FilePathinvalid);
|
|
44
|
-
}
|
|
45
|
-
try {
|
|
46
|
-
fs.accessSync(this.timerfiledir);
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
fs.writeFileSync(this.timerfiledir, "");
|
|
50
|
-
}
|
|
42
|
+
this.timerfiledir = timerfile;
|
|
51
43
|
}
|
|
52
44
|
/**
|
|
53
45
|
* createTimer
|
|
@@ -57,16 +49,15 @@ export class TimersManager extends EventEmitter {
|
|
|
57
49
|
* @throws If length is invalid (e.g. length < 0) or file operation fails
|
|
58
50
|
* @example
|
|
59
51
|
* // For PlainTextTimersManager
|
|
60
|
-
* const manager =
|
|
52
|
+
* const manager = await PlainTextTimersManager.create();
|
|
61
53
|
* const newTimerId = await manager.createTimer(5000); // Create a 5-second timer
|
|
62
54
|
*
|
|
63
55
|
* // For JSONLTimersManager
|
|
64
|
-
* const jsonlManager =
|
|
56
|
+
* const jsonlManager = await JSONLTimersManager.create<{ title: string }>();
|
|
65
57
|
* const jsonlTimerId = await jsonlManager.createTimer({ length: 10000, extra: { title: "My JSONL Timer" } }); // Create a 10-second timer with extra data
|
|
66
58
|
*/
|
|
67
59
|
async createTimer(options) {
|
|
68
60
|
return this.runExclusive(async () => {
|
|
69
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
70
61
|
if (this.type === "JSONL" && typeof options === "number") {
|
|
71
62
|
throw new Error(throwMessage.NoExtra);
|
|
72
63
|
}
|
|
@@ -100,7 +91,6 @@ export class TimersManager extends EventEmitter {
|
|
|
100
91
|
*/
|
|
101
92
|
async removeTimer(id) {
|
|
102
93
|
return this.runExclusive(async () => {
|
|
103
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
104
94
|
const timers = await this.TimersStore.loadTimers();
|
|
105
95
|
const index = timers.findIndex(t => t.id === id);
|
|
106
96
|
if (index === -1 || timers[index] === undefined) {
|
|
@@ -118,14 +108,12 @@ export class TimersManager extends EventEmitter {
|
|
|
118
108
|
* @returns Promise<void> that resolves when the loop has been started
|
|
119
109
|
* @throws If file operation fails during checking
|
|
120
110
|
* @example
|
|
121
|
-
* const manager = new TimersManager();
|
|
122
111
|
* await manager.checkStart(1000); // Check for expired timers every 1 second
|
|
123
112
|
*/
|
|
124
113
|
async checkStart(interval = 200) {
|
|
125
114
|
if (this.running)
|
|
126
115
|
return;
|
|
127
116
|
this.running = true;
|
|
128
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
129
117
|
const loop = async () => {
|
|
130
118
|
if (!this.running)
|
|
131
119
|
return;
|
|
@@ -165,28 +153,30 @@ export class TimersManager extends EventEmitter {
|
|
|
165
153
|
finally {
|
|
166
154
|
this.checkLock = false;
|
|
167
155
|
if (this.running) {
|
|
168
|
-
this.
|
|
156
|
+
TimersManager.intervals.set(this.timerfiledir, setTimeout(loop, interval));
|
|
169
157
|
}
|
|
170
158
|
}
|
|
171
159
|
};
|
|
172
160
|
this.emit("started", void 0);
|
|
173
|
-
this.
|
|
161
|
+
if (TimersManager.intervals.has(this.timerfiledir)) {
|
|
162
|
+
throw new Error(throwMessage.AlreadyExists);
|
|
163
|
+
}
|
|
164
|
+
TimersManager.intervals.set(this.timerfiledir, setTimeout(loop, interval));
|
|
174
165
|
}
|
|
175
166
|
/**
|
|
176
167
|
* checkStop
|
|
177
168
|
* @description Stops the timer checking loop.
|
|
178
169
|
* @returns Promise resolving when the loop has been stopped
|
|
179
170
|
* @example
|
|
180
|
-
* const manager = new TimersManager();
|
|
181
171
|
* await manager.checkStart(1000);
|
|
182
172
|
* // ... later, to stop checking:
|
|
183
173
|
* await manager.checkStop();
|
|
184
174
|
*/
|
|
185
175
|
async checkStop() {
|
|
186
176
|
this.running = false;
|
|
187
|
-
if (this.
|
|
188
|
-
clearTimeout(this.
|
|
189
|
-
this.
|
|
177
|
+
if (TimersManager.intervals.has(this.timerfiledir)) {
|
|
178
|
+
clearTimeout(TimersManager.intervals.get(this.timerfiledir));
|
|
179
|
+
TimersManager.intervals.delete(this.timerfiledir);
|
|
190
180
|
}
|
|
191
181
|
this.emit("stopped", void 0);
|
|
192
182
|
}
|
|
@@ -203,35 +193,37 @@ export class TimersManager extends EventEmitter {
|
|
|
203
193
|
return this.checkLock;
|
|
204
194
|
}
|
|
205
195
|
/**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
196
|
+
* showTimers
|
|
197
|
+
* @description Retrieves all active timers.
|
|
198
|
+
* @returns Array of `Timer` objects
|
|
199
|
+
* @throws If file operation fails
|
|
200
|
+
* @example
|
|
201
|
+
* const timers = await manager.showTimers();
|
|
202
|
+
* console.log(JSON.stringify(timers));
|
|
203
|
+
*/
|
|
214
204
|
async showTimers() {
|
|
215
205
|
return this.runExclusive(async () => {
|
|
216
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
217
206
|
const timersData = await this.TimersStore.loadTimers();
|
|
218
207
|
return timersData;
|
|
219
208
|
});
|
|
220
209
|
}
|
|
221
210
|
/**
|
|
222
|
-
|
|
211
|
+
* adjustRemainingTime
|
|
223
212
|
* @description Adjusts the remaining time of a timer.
|
|
224
213
|
* @param {string} id ID of the timer to modify
|
|
225
214
|
* @param {number} delay Delay in milliseconds to add/subtract from the remaining time
|
|
226
215
|
* @returns Promise resolving when the operation is complete
|
|
227
216
|
* @throws If file operation fails
|
|
217
|
+
* @example
|
|
218
|
+
* const timer = await manager.createTimer(10000); // Create a 10-second timer
|
|
219
|
+
* await manager.adjustRemainingTime(timer, -2000); // Subtract 2 seconds from the remaining time (now 8 seconds left)
|
|
220
|
+
* await manager.adjustRemainingTime(timer, 3000); // Add 3 seconds to the remaining time (now 11 seconds left)
|
|
228
221
|
*/
|
|
229
222
|
async adjustRemainingTime(id, delay) {
|
|
230
223
|
return this.runExclusive(async () => {
|
|
231
224
|
if (typeof delay !== "number" || !Number.isFinite(delay)) {
|
|
232
225
|
throw new Error(throwMessage.InvalidAdjustment(delay));
|
|
233
226
|
}
|
|
234
|
-
this.TimersStore ??= await this.createTimersStore();
|
|
235
227
|
const timers = await this.TimersStore.loadTimers();
|
|
236
228
|
const index = timers.findIndex(t => t.id === id);
|
|
237
229
|
if (index === -1 || timers[index] === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TimersManager.js","sourceRoot":"","sources":["../../../src/TimersManager/TimersManager.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/searchRoot.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchRoot.d.ts","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"searchRoot.d.ts","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAA8B,UAAU,oBAavC"}
|
package/dist/esm/searchRoot.js
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
import fs from "fs";
|
|
1
|
+
import fs from "fs/promises";
|
|
2
2
|
import path from "path";
|
|
3
3
|
/**
|
|
4
4
|
* searchRoot
|
|
5
5
|
* @description searching root directly of the project
|
|
6
6
|
* @returns directly of the project(string)
|
|
7
7
|
*/
|
|
8
|
-
export default function searchRoot() {
|
|
8
|
+
export default async function searchRoot() {
|
|
9
9
|
let dir = process.cwd();
|
|
10
|
-
while (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
while (true) {
|
|
11
|
+
try {
|
|
12
|
+
await fs.access(path.join(dir, "package.json"));
|
|
13
|
+
return dir;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
const parent = path.dirname(dir);
|
|
17
|
+
if (parent === dir)
|
|
18
|
+
break;
|
|
19
|
+
dir = parent;
|
|
20
|
+
}
|
|
15
21
|
}
|
|
16
22
|
return dir;
|
|
17
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchRoot.js","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"searchRoot.js","sourceRoot":"","sources":["../../src/searchRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,UAAU;IACvC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,OAAO,IAAI,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throwMessage.d.ts","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;mBACT,MAAM;;;;4BAIG,MAAM;+BACH,MAAM
|
|
1
|
+
{"version":3,"file":"throwMessage.d.ts","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;mBACT,MAAM;;;;4BAIG,MAAM;+BACH,MAAM;;;;;;CAMjC,CAAC"}
|
package/dist/esm/throwMessage.js
CHANGED
|
@@ -9,5 +9,6 @@ export const throwMessage = {
|
|
|
9
9
|
LoadTimerData: "Error when loading timer data",
|
|
10
10
|
SaveTimerData: "Error when saving timer data",
|
|
11
11
|
AppendTimerData: "Error when appending timer data",
|
|
12
|
+
AlreadyExists: "The loop is already running",
|
|
12
13
|
};
|
|
13
14
|
//# sourceMappingURL=throwMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throwMessage.js","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY;IACzD,WAAW,EAAE,2BAA2B;IACxC,eAAe,EAAE,sDAAsD;IACvE,OAAO,EAAE,mDAAmD;IAC5D,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,mBAAmB,MAAM,EAAE;IAC9D,iBAAiB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,uBAAuB,KAAK,EAAE;IACpE,aAAa,EAAE,8BAA8B;IAC7C,aAAa,EAAE,+BAA+B;IAC9C,aAAa,EAAE,8BAA8B;IAC7C,eAAe,EAAE,iCAAiC;
|
|
1
|
+
{"version":3,"file":"throwMessage.js","sourceRoot":"","sources":["../../src/throwMessage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY;IACzD,WAAW,EAAE,2BAA2B;IACxC,eAAe,EAAE,sDAAsD;IACvE,OAAO,EAAE,mDAAmD;IAC5D,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,mBAAmB,MAAM,EAAE;IAC9D,iBAAiB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,uBAAuB,KAAK,EAAE;IACpE,aAAa,EAAE,8BAA8B;IAC7C,aAAa,EAAE,+BAA+B;IAC9C,aAAa,EAAE,8BAA8B;IAC7C,eAAe,EAAE,iCAAiC;IAClD,aAAa,EAAE,6BAA6B;CAC5C,CAAC"}
|