@decaf-ts/logging 0.10.0 → 0.10.2
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 +298 -171
- package/dist/logging.cjs +1 -1
- package/dist/logging.cjs.map +1 -1
- package/dist/logging.js +1 -1
- package/dist/logging.js.map +1 -1
- package/lib/LoggedClass.cjs +4 -4
- package/lib/LoggedClass.d.ts +4 -4
- package/lib/constants.cjs +32 -63
- package/lib/constants.d.ts +32 -63
- package/lib/constants.js.map +1 -1
- package/lib/decorators.cjs +28 -28
- package/lib/decorators.d.ts +29 -36
- package/lib/decorators.js.map +1 -1
- package/lib/environment.cjs +34 -41
- package/lib/environment.d.ts +31 -32
- package/lib/environment.js.map +1 -1
- package/lib/esm/LoggedClass.d.ts +4 -4
- package/lib/esm/LoggedClass.js +4 -4
- package/lib/esm/constants.d.ts +32 -63
- package/lib/esm/constants.js +32 -63
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/decorators.d.ts +29 -36
- package/lib/esm/decorators.js +28 -28
- package/lib/esm/decorators.js.map +1 -1
- package/lib/esm/environment.d.ts +31 -32
- package/lib/esm/environment.js +34 -41
- package/lib/esm/environment.js.map +1 -1
- package/lib/esm/filters/LogFilter.d.ts +11 -11
- package/lib/esm/filters/LogFilter.js +5 -5
- package/lib/esm/filters/PatternFilter.d.ts +15 -15
- package/lib/esm/filters/PatternFilter.js +12 -12
- package/lib/esm/index.d.ts +2 -2
- package/lib/esm/index.js +3 -3
- package/lib/esm/logging.d.ts +119 -113
- package/lib/esm/logging.js +223 -138
- package/lib/esm/logging.js.map +1 -1
- package/lib/esm/pino/index.d.ts +6 -0
- package/lib/esm/pino/index.js +6 -0
- package/lib/esm/pino/index.js.map +1 -1
- package/lib/esm/pino/pino.d.ts +13 -5
- package/lib/esm/pino/pino.js +70 -124
- package/lib/esm/pino/pino.js.map +1 -1
- package/lib/esm/text.d.ts +29 -67
- package/lib/esm/text.js +29 -67
- package/lib/esm/text.js.map +1 -1
- package/lib/esm/time.d.ts +45 -43
- package/lib/esm/time.js +38 -36
- package/lib/esm/time.js.map +1 -1
- package/lib/esm/types.d.ts +59 -50
- package/lib/esm/utils.d.ts +43 -0
- package/lib/esm/utils.js +55 -3
- package/lib/esm/utils.js.map +1 -1
- package/lib/esm/web.d.ts +2 -2
- package/lib/esm/web.js +2 -2
- package/lib/esm/winston/index.d.ts +7 -0
- package/lib/esm/winston/index.js +7 -1
- package/lib/esm/winston/index.js.map +1 -1
- package/lib/esm/winston/winston.d.ts +17 -21
- package/lib/esm/winston/winston.js +29 -36
- package/lib/esm/winston/winston.js.map +1 -1
- package/lib/filters/LogFilter.cjs +5 -5
- package/lib/filters/LogFilter.d.ts +11 -11
- package/lib/filters/PatternFilter.cjs +12 -12
- package/lib/filters/PatternFilter.d.ts +15 -15
- package/lib/index.cjs +3 -3
- package/lib/index.d.ts +2 -2
- package/lib/logging.cjs +224 -139
- package/lib/logging.d.ts +119 -113
- package/lib/logging.js.map +1 -1
- package/lib/pino/index.cjs +6 -0
- package/lib/pino/index.d.ts +6 -0
- package/lib/pino/index.js.map +1 -1
- package/lib/pino/pino.cjs +102 -126
- package/lib/pino/pino.d.ts +13 -5
- package/lib/pino/pino.js.map +1 -1
- package/lib/text.cjs +29 -67
- package/lib/text.d.ts +29 -67
- package/lib/text.js.map +1 -1
- package/lib/time.cjs +38 -36
- package/lib/time.d.ts +45 -43
- package/lib/time.js.map +1 -1
- package/lib/types.d.ts +59 -50
- package/lib/utils.cjs +55 -3
- package/lib/utils.d.ts +43 -0
- package/lib/utils.js.map +1 -1
- package/lib/web.cjs +2 -2
- package/lib/web.d.ts +2 -2
- package/lib/winston/index.cjs +22 -0
- package/lib/winston/index.d.ts +7 -0
- package/lib/winston/index.js.map +1 -1
- package/lib/winston/winston.cjs +29 -36
- package/lib/winston/winston.d.ts +17 -21
- package/lib/winston/winston.js.map +1 -1
- package/package.json +9 -10
- package/lib/accumulate.types.cjs +0 -27
- package/lib/accumulate.types.d.ts +0 -1
- package/lib/accumulate.types.js.map +0 -1
- package/lib/esm/accumulate.types.d.ts +0 -1
- package/lib/esm/accumulate.types.js +0 -25
- package/lib/esm/accumulate.types.js.map +0 -1
package/lib/text.d.ts
CHANGED
|
@@ -1,34 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @description Pads the end of a string with a specified character.
|
|
3
|
-
* @summary
|
|
4
|
-
* If the input string is already longer than the specified length, it is returned unchanged.
|
|
5
|
-
*
|
|
3
|
+
* @summary This function extends the input string to a specified length by adding a padding character to the end. If the input string is already longer than the specified length, it is returned unchanged.
|
|
6
4
|
* @param {string} str - The input string to be padded.
|
|
7
5
|
* @param {number} length - The desired total length of the resulting string.
|
|
8
|
-
* @param {string} [char=" "] - The character to use for padding.
|
|
6
|
+
* @param {string} [char=" "] - The character to use for padding.
|
|
9
7
|
* @return {string} The padded string.
|
|
10
8
|
* @throws {Error} If the padding character is not exactly one character long.
|
|
11
|
-
*
|
|
12
9
|
* @function padEnd
|
|
13
|
-
*
|
|
14
10
|
* @memberOf module:Logging
|
|
15
11
|
*/
|
|
16
12
|
export declare function padEnd(str: string, length: number, char?: string): string;
|
|
17
13
|
/**
|
|
18
|
-
* @description Replaces placeholders in a string with provided values.
|
|
19
|
-
* @summary
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* @param {string}
|
|
24
|
-
* @param {
|
|
25
|
-
* @
|
|
26
|
-
* @param suffix
|
|
27
|
-
* @param flags
|
|
28
|
-
* @return {string} The interpolated string with placeholders replaced by their corresponding values.
|
|
29
|
-
*
|
|
14
|
+
* @description Replaces placeholders in a string with the provided values.
|
|
15
|
+
* @summary This function interpolates a string by replacing placeholders of the form `${variableName}` with the corresponding values from the provided object. If a placeholder does not have a corresponding value, it is left unchanged in the string.
|
|
16
|
+
* @param {string} input - The input string containing the placeholders to be replaced.
|
|
17
|
+
* @param {Record<string, (number|string)>} values - An object containing key-value pairs for the replacement.
|
|
18
|
+
* @param {string} [prefix="${"] - The prefix for the placeholders.
|
|
19
|
+
* @param {string} [suffix="}"] - The suffix for the placeholders.
|
|
20
|
+
* @param {string} [flags="g"] - The regular expression flags to use.
|
|
21
|
+
* @return {string} The interpolated string with the placeholders replaced by their corresponding values.
|
|
30
22
|
* @function patchPlaceholders
|
|
31
|
-
*
|
|
32
23
|
* @mermaid
|
|
33
24
|
* sequenceDiagram
|
|
34
25
|
* participant Caller
|
|
@@ -38,117 +29,88 @@ export declare function padEnd(str: string, length: number, char?: string): stri
|
|
|
38
29
|
* patchString->>String.replace: Call with regex and replacement function
|
|
39
30
|
* String.replace->>patchString: Return replaced string
|
|
40
31
|
* patchString-->>Caller: Return patched string
|
|
41
|
-
*
|
|
42
32
|
* @memberOf module:Logging
|
|
43
33
|
*/
|
|
44
34
|
export declare function patchPlaceholders(input: string, values: Record<string, number | string>, prefix?: string, suffix?: string, flags?: string): string;
|
|
45
35
|
/**
|
|
46
36
|
* @description Replaces occurrences of keys with their corresponding values in a string.
|
|
47
|
-
* @summary
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* @param {string}
|
|
51
|
-
* @
|
|
52
|
-
* @param {string} [flags="g"] - Regular expression flags to control the replacement behavior.
|
|
53
|
-
* @return {string} The string with all specified replacements applied.
|
|
54
|
-
*
|
|
37
|
+
* @summary This function iterates through a set of key-value pairs and replaces all occurrences of each key in the input string with its corresponding value. It supports regular expression flags for customized replacement.
|
|
38
|
+
* @param {string} input - The input string in which the replacements will be made.
|
|
39
|
+
* @param {Record<string, (number|string)>} values - An object containing key-value pairs for the replacement.
|
|
40
|
+
* @param {string} [flags="g"] - The regular expression flags to control the replacement behavior.
|
|
41
|
+
* @return {string} The string with all the specified replacements applied.
|
|
55
42
|
* @function patchString
|
|
56
|
-
*
|
|
57
43
|
* @memberOf module:Logging
|
|
58
44
|
*/
|
|
59
45
|
export declare function patchString(input: string, values: Record<string, number | string>, flags?: string): string;
|
|
60
46
|
/**
|
|
61
47
|
* @description Converts a string to camelCase.
|
|
62
|
-
* @summary
|
|
63
|
-
* and each word after the first starts with a capital letter.
|
|
64
|
-
*
|
|
48
|
+
* @summary This function transforms the input string into camelCase format, where words are joined without spaces and each word after the first starts with a capital letter.
|
|
65
49
|
* @param {string} text - The input string to be converted.
|
|
66
50
|
* @return {string} The input string converted to camelCase.
|
|
67
|
-
*
|
|
68
51
|
* @function toCamelCase
|
|
69
|
-
*
|
|
70
52
|
* @memberOf module:Logging
|
|
71
53
|
*/
|
|
72
54
|
export declare function toCamelCase(text: string): string;
|
|
73
55
|
/**
|
|
74
56
|
* @description Converts a string to ENVIRONMENT_VARIABLE format.
|
|
75
|
-
* @summary
|
|
76
|
-
* typically used for environment variable names.
|
|
77
|
-
*
|
|
57
|
+
* @summary This function transforms the input string into uppercase with words separated by underscores, which is a format that is typically used for environment variable names.
|
|
78
58
|
* @param {string} text - The input string to be converted.
|
|
79
59
|
* @return {string} The input string converted to ENVIRONMENT_VARIABLE format.
|
|
80
|
-
*
|
|
81
60
|
* @function toENVFormat
|
|
82
|
-
*
|
|
83
61
|
* @memberOf module:Logging
|
|
84
62
|
*/
|
|
85
63
|
export declare function toENVFormat(text: string): string;
|
|
86
64
|
/**
|
|
87
65
|
* @description Converts a string to snake_case.
|
|
88
|
-
* @summary
|
|
89
|
-
*
|
|
66
|
+
* @summary This function transforms the input string into lowercase with words separated by underscores.
|
|
90
67
|
* @param {string} text - The input string to be converted.
|
|
91
68
|
* @return {string} The input string converted to snake_case.
|
|
92
|
-
*
|
|
93
69
|
* @function toSnakeCase
|
|
94
|
-
*
|
|
95
70
|
* @memberOf module:Logging
|
|
96
71
|
*/
|
|
97
72
|
export declare function toSnakeCase(text: string): string;
|
|
98
73
|
/**
|
|
99
74
|
* @description Converts a string to kebab-case.
|
|
100
|
-
* @summary
|
|
101
|
-
*
|
|
75
|
+
* @summary This function transforms the input string into lowercase with words separated by hyphens.
|
|
102
76
|
* @param {string} text - The input string to be converted.
|
|
103
77
|
* @return {string} The input string converted to kebab-case.
|
|
104
|
-
*
|
|
105
78
|
* @function toKebabCase
|
|
106
|
-
*
|
|
107
79
|
* @memberOf module:Logging
|
|
108
80
|
*/
|
|
109
81
|
export declare function toKebabCase(text: string): string;
|
|
110
82
|
/**
|
|
111
83
|
* @description Converts a string to PascalCase.
|
|
112
|
-
* @summary
|
|
113
|
-
* and each word starts with a capital letter.
|
|
114
|
-
*
|
|
84
|
+
* @summary This function transforms the input string into PascalCase format, where words are joined without spaces and each word starts with a capital letter.
|
|
115
85
|
* @param {string} text - The input string to be converted.
|
|
116
86
|
* @return {string} The input string converted to PascalCase.
|
|
117
|
-
*
|
|
118
87
|
* @function toPascalCase
|
|
119
|
-
*
|
|
120
88
|
* @memberOf module:Logging
|
|
121
89
|
*/
|
|
122
90
|
export declare function toPascalCase(text: string): string;
|
|
123
91
|
/**
|
|
124
92
|
* @description Escapes special characters in a string for use in a regular expression.
|
|
125
|
-
* @summary
|
|
126
|
-
* allowing the string to be used as a literal match in a RegExp.
|
|
127
|
-
*
|
|
93
|
+
* @summary This function adds backslashes before characters that have a special meaning in regular expressions, which allows the string to be used as a literal match in a RegExp.
|
|
128
94
|
* @param {string} string - The string to escape for regular expression use.
|
|
129
|
-
* @return {string} The escaped string safe for use in regular expressions.
|
|
130
|
-
*
|
|
95
|
+
* @return {string} The escaped string that is safe for use in regular expressions.
|
|
131
96
|
* @function escapeRegExp
|
|
132
|
-
*
|
|
133
97
|
* @memberOf module:Logging
|
|
134
98
|
*/
|
|
135
99
|
export declare function escapeRegExp(string: string): string;
|
|
136
100
|
/**
|
|
137
|
-
* @
|
|
138
|
-
*
|
|
139
|
-
* @param {string} string
|
|
140
|
-
* @param {
|
|
141
|
-
* @return {string} formatted string
|
|
142
|
-
*
|
|
101
|
+
* @description A utility function that provides string formatting functionality that is similar to C#'s string.format.
|
|
102
|
+
* @summary This function replaces placeholders in a string with the provided arguments.
|
|
103
|
+
* @param {string} string - The string to format.
|
|
104
|
+
* @param {...(string|number|Record<string, any>)} args - The arguments to use for formatting.
|
|
105
|
+
* @return {string} The formatted string.
|
|
143
106
|
* @function sf
|
|
144
107
|
* @memberOf module:Logging
|
|
145
108
|
*/
|
|
146
109
|
export declare function sf(string: string, ...args: (string | number | Record<string, any>)[]): string;
|
|
147
110
|
/**
|
|
148
|
-
* @
|
|
149
|
-
*
|
|
111
|
+
* @description A utility function that provides string formatting functionality that is similar to C#'s string.format.
|
|
112
|
+
* @summary This function is deprecated. Use {@link sf} instead.
|
|
150
113
|
* @see sf
|
|
151
|
-
*
|
|
152
114
|
* @deprecated
|
|
153
115
|
* @function stringFormat
|
|
154
116
|
* @memberOf module:Logging
|
package/lib/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"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"}
|
package/lib/time.cjs
CHANGED
|
@@ -20,15 +20,17 @@ function safeNow() {
|
|
|
20
20
|
return () => Date.now();
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* @description
|
|
24
|
-
* @summary
|
|
25
|
-
* @return {number}
|
|
23
|
+
* @description A high-resolution clock accessor that returns milliseconds.
|
|
24
|
+
* @summary This function chooses the most precise timer available in the current runtime, preferring `performance.now` or `process.hrtime.bigint`.
|
|
25
|
+
* @return {number} The milliseconds that have elapsed, according to the best available clock.
|
|
26
|
+
* @function now
|
|
27
|
+
* @memberOf module:Logging
|
|
26
28
|
*/
|
|
27
29
|
exports.now = safeNow();
|
|
28
30
|
/**
|
|
29
|
-
* @description
|
|
30
|
-
* @summary
|
|
31
|
-
* @param {boolean} [autoStart=false] - When true
|
|
31
|
+
* @description A high-resolution stopwatch with pause, resume, and lap tracking.
|
|
32
|
+
* @summary This class tracks elapsed time using the highest precision timer available. It supports pausing, resuming, and recording labeled laps for diagnostics and benchmarking.
|
|
33
|
+
* @param {boolean} [autoStart=false] - When `true`, the stopwatch starts immediately upon construction.
|
|
32
34
|
* @class StopWatch
|
|
33
35
|
* @example
|
|
34
36
|
* const sw = new StopWatch(true);
|
|
@@ -64,16 +66,16 @@ class StopWatch {
|
|
|
64
66
|
}
|
|
65
67
|
/**
|
|
66
68
|
* @description Indicates whether the stopwatch is actively running.
|
|
67
|
-
* @summary
|
|
68
|
-
* @return {boolean}
|
|
69
|
+
* @summary This method returns `true` when timing is in progress, and `false` when it is paused or stopped.
|
|
70
|
+
* @return {boolean} The current running state.
|
|
69
71
|
*/
|
|
70
72
|
get running() {
|
|
71
73
|
return this._running;
|
|
72
74
|
}
|
|
73
75
|
/**
|
|
74
|
-
* @description
|
|
75
|
-
* @summary
|
|
76
|
-
* @return {number}
|
|
76
|
+
* @description The elapsed time that has been captured by the stopwatch.
|
|
77
|
+
* @summary This method computes the total elapsed time in milliseconds, including the current session if it is running.
|
|
78
|
+
* @return {number} The milliseconds that have elapsed since the stopwatch started.
|
|
77
79
|
*/
|
|
78
80
|
get elapsedMs() {
|
|
79
81
|
if (!this._running || this._startMs == null)
|
|
@@ -82,8 +84,8 @@ class StopWatch {
|
|
|
82
84
|
}
|
|
83
85
|
/**
|
|
84
86
|
* @description Starts timing if the stopwatch is not already running.
|
|
85
|
-
* @summary
|
|
86
|
-
* @return {this}
|
|
87
|
+
* @summary This method records the current timestamp and transitions the stopwatch into the running state.
|
|
88
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
87
89
|
*/
|
|
88
90
|
start() {
|
|
89
91
|
if (!this._running) {
|
|
@@ -93,9 +95,9 @@ class StopWatch {
|
|
|
93
95
|
return this;
|
|
94
96
|
}
|
|
95
97
|
/**
|
|
96
|
-
* @description Pauses timing and accumulates elapsed milliseconds.
|
|
97
|
-
* @summary
|
|
98
|
-
* @return {this}
|
|
98
|
+
* @description Pauses timing and accumulates the elapsed milliseconds.
|
|
99
|
+
* @summary This method captures the partial duration, updates the accumulator, and keeps the stopwatch ready to resume later.
|
|
100
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
99
101
|
*/
|
|
100
102
|
pause() {
|
|
101
103
|
if (this._running && this._startMs != null) {
|
|
@@ -107,8 +109,8 @@ class StopWatch {
|
|
|
107
109
|
}
|
|
108
110
|
/**
|
|
109
111
|
* @description Resumes timing after a pause.
|
|
110
|
-
* @summary
|
|
111
|
-
* @return {this}
|
|
112
|
+
* @summary This method captures a fresh start timestamp, while keeping the previous elapsed time intact.
|
|
113
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
112
114
|
*/
|
|
113
115
|
resume() {
|
|
114
116
|
if (!this._running) {
|
|
@@ -119,17 +121,17 @@ class StopWatch {
|
|
|
119
121
|
}
|
|
120
122
|
/**
|
|
121
123
|
* @description Stops timing and returns the total elapsed milliseconds.
|
|
122
|
-
* @summary
|
|
123
|
-
* @return {number}
|
|
124
|
+
* @summary This method invokes {@link StopWatch.pause} to consolidate the elapsed time, and leaves the stopwatch in a non-running state.
|
|
125
|
+
* @return {number} The milliseconds that have accumulated across all runs.
|
|
124
126
|
*/
|
|
125
127
|
stop() {
|
|
126
128
|
this.pause();
|
|
127
129
|
return this._elapsedMs;
|
|
128
130
|
}
|
|
129
131
|
/**
|
|
130
|
-
* @description Resets the stopwatch state while optionally continuing to run.
|
|
131
|
-
* @summary
|
|
132
|
-
* @return {this}
|
|
132
|
+
* @description Resets the stopwatch state, while optionally continuing to run.
|
|
133
|
+
* @summary This method clears the elapsed time and lap history, and preserves whether the stopwatch should continue ticking.
|
|
134
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
133
135
|
*/
|
|
134
136
|
reset() {
|
|
135
137
|
const wasRunning = this._running;
|
|
@@ -140,10 +142,10 @@ class StopWatch {
|
|
|
140
142
|
return this;
|
|
141
143
|
}
|
|
142
144
|
/**
|
|
143
|
-
* @description Records a lap split since the stopwatch started or since the previous lap.
|
|
144
|
-
* @summary
|
|
145
|
-
* @param {string} [label] -
|
|
146
|
-
* @return {Lap}
|
|
145
|
+
* @description Records a lap split since the stopwatch started, or since the previous lap.
|
|
146
|
+
* @summary This method stores the lap metadata, updates the cumulative tracking, and returns the newly created {@link Lap}.
|
|
147
|
+
* @param {string} [label] - An optional label that describes the lap.
|
|
148
|
+
* @return {Lap} A lap snapshot that captures incremental and cumulative timings.
|
|
147
149
|
*/
|
|
148
150
|
lap(label) {
|
|
149
151
|
const total = this.elapsedMs;
|
|
@@ -160,24 +162,24 @@ class StopWatch {
|
|
|
160
162
|
}
|
|
161
163
|
/**
|
|
162
164
|
* @description Retrieves the recorded lap history.
|
|
163
|
-
* @summary
|
|
164
|
-
* @return {Lap
|
|
165
|
+
* @summary This method returns the internal lap array as a read-only view to prevent external mutation.
|
|
166
|
+
* @return {Array<Lap>} The laps that have been captured by the stopwatch.
|
|
165
167
|
*/
|
|
166
168
|
get laps() {
|
|
167
169
|
return this._laps;
|
|
168
170
|
}
|
|
169
171
|
/**
|
|
170
172
|
* @description Formats the elapsed time in a human-readable representation.
|
|
171
|
-
* @summary
|
|
172
|
-
* @return {string}
|
|
173
|
+
* @summary This method uses {@link formatMs} to produce an `hh:mm:ss.mmm` string for display and logging.
|
|
174
|
+
* @return {string} The elapsed time, formatted for presentation.
|
|
173
175
|
*/
|
|
174
176
|
toString() {
|
|
175
177
|
return formatMs(this.elapsedMs);
|
|
176
178
|
}
|
|
177
179
|
/**
|
|
178
180
|
* @description Serializes the stopwatch state.
|
|
179
|
-
* @summary
|
|
180
|
-
* @return {{running: boolean, elapsedMs: number, laps: Lap[]}}
|
|
181
|
+
* @summary This method provides a JSON-friendly snapshot that includes the running state, elapsed time, and lap details.
|
|
182
|
+
* @return {{running: boolean, elapsedMs: number, laps: Lap[]}} A serializable stopwatch representation.
|
|
181
183
|
*/
|
|
182
184
|
toJSON() {
|
|
183
185
|
return {
|
|
@@ -190,9 +192,9 @@ class StopWatch {
|
|
|
190
192
|
exports.StopWatch = StopWatch;
|
|
191
193
|
/**
|
|
192
194
|
* @description Formats milliseconds into `hh:mm:ss.mmm`.
|
|
193
|
-
* @summary
|
|
194
|
-
* @param {number} ms -
|
|
195
|
-
* @return {string}
|
|
195
|
+
* @summary This function breaks the duration into hours, minutes, seconds, and milliseconds, and returns a zero-padded string.
|
|
196
|
+
* @param {number} ms - The milliseconds to format.
|
|
197
|
+
* @return {string} The formatted duration string.
|
|
196
198
|
* @function formatMs
|
|
197
199
|
* @memberOf module:Logging
|
|
198
200
|
* @mermaid
|
package/lib/time.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @description
|
|
3
|
-
* @summary
|
|
4
|
-
* @typedef {
|
|
5
|
-
* @property {number} index -
|
|
6
|
-
* @property {string} [label] -
|
|
7
|
-
* @property {number} ms -
|
|
8
|
-
* @property {number} totalMs -
|
|
2
|
+
* @description A snapshot of a recorded lap interval.
|
|
3
|
+
* @summary This captures the lap index, an optional label, the elapsed milliseconds for the lap, and the cumulative elapsed time since the stopwatch started.
|
|
4
|
+
* @typedef {object} Lap
|
|
5
|
+
* @property {number} index - The zero-based lap order.
|
|
6
|
+
* @property {string} [label] - An optional label that describes the lap.
|
|
7
|
+
* @property {number} ms - The duration of the lap in milliseconds.
|
|
8
|
+
* @property {number} totalMs - The total elapsed time when the lap was recorded.
|
|
9
9
|
* @memberOf module:Logging
|
|
10
10
|
*/
|
|
11
11
|
export type Lap = {
|
|
@@ -18,15 +18,17 @@ export type Lap = {
|
|
|
18
18
|
};
|
|
19
19
|
type NowFn = () => number;
|
|
20
20
|
/**
|
|
21
|
-
* @description
|
|
22
|
-
* @summary
|
|
23
|
-
* @return {number}
|
|
21
|
+
* @description A high-resolution clock accessor that returns milliseconds.
|
|
22
|
+
* @summary This function chooses the most precise timer available in the current runtime, preferring `performance.now` or `process.hrtime.bigint`.
|
|
23
|
+
* @return {number} The milliseconds that have elapsed, according to the best available clock.
|
|
24
|
+
* @function now
|
|
25
|
+
* @memberOf module:Logging
|
|
24
26
|
*/
|
|
25
27
|
export declare const now: NowFn;
|
|
26
28
|
/**
|
|
27
|
-
* @description
|
|
28
|
-
* @summary
|
|
29
|
-
* @param {boolean} [autoStart=false] - When true
|
|
29
|
+
* @description A high-resolution stopwatch with pause, resume, and lap tracking.
|
|
30
|
+
* @summary This class tracks elapsed time using the highest precision timer available. It supports pausing, resuming, and recording labeled laps for diagnostics and benchmarking.
|
|
31
|
+
* @param {boolean} [autoStart=false] - When `true`, the stopwatch starts immediately upon construction.
|
|
30
32
|
* @class StopWatch
|
|
31
33
|
* @example
|
|
32
34
|
* const sw = new StopWatch(true);
|
|
@@ -59,69 +61,69 @@ export declare class StopWatch {
|
|
|
59
61
|
constructor(autoStart?: boolean);
|
|
60
62
|
/**
|
|
61
63
|
* @description Indicates whether the stopwatch is actively running.
|
|
62
|
-
* @summary
|
|
63
|
-
* @return {boolean}
|
|
64
|
+
* @summary This method returns `true` when timing is in progress, and `false` when it is paused or stopped.
|
|
65
|
+
* @return {boolean} The current running state.
|
|
64
66
|
*/
|
|
65
67
|
get running(): boolean;
|
|
66
68
|
/**
|
|
67
|
-
* @description
|
|
68
|
-
* @summary
|
|
69
|
-
* @return {number}
|
|
69
|
+
* @description The elapsed time that has been captured by the stopwatch.
|
|
70
|
+
* @summary This method computes the total elapsed time in milliseconds, including the current session if it is running.
|
|
71
|
+
* @return {number} The milliseconds that have elapsed since the stopwatch started.
|
|
70
72
|
*/
|
|
71
73
|
get elapsedMs(): number;
|
|
72
74
|
/**
|
|
73
75
|
* @description Starts timing if the stopwatch is not already running.
|
|
74
|
-
* @summary
|
|
75
|
-
* @return {this}
|
|
76
|
+
* @summary This method records the current timestamp and transitions the stopwatch into the running state.
|
|
77
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
76
78
|
*/
|
|
77
79
|
start(): this;
|
|
78
80
|
/**
|
|
79
|
-
* @description Pauses timing and accumulates elapsed milliseconds.
|
|
80
|
-
* @summary
|
|
81
|
-
* @return {this}
|
|
81
|
+
* @description Pauses timing and accumulates the elapsed milliseconds.
|
|
82
|
+
* @summary This method captures the partial duration, updates the accumulator, and keeps the stopwatch ready to resume later.
|
|
83
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
82
84
|
*/
|
|
83
85
|
pause(): this;
|
|
84
86
|
/**
|
|
85
87
|
* @description Resumes timing after a pause.
|
|
86
|
-
* @summary
|
|
87
|
-
* @return {this}
|
|
88
|
+
* @summary This method captures a fresh start timestamp, while keeping the previous elapsed time intact.
|
|
89
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
88
90
|
*/
|
|
89
91
|
resume(): this;
|
|
90
92
|
/**
|
|
91
93
|
* @description Stops timing and returns the total elapsed milliseconds.
|
|
92
|
-
* @summary
|
|
93
|
-
* @return {number}
|
|
94
|
+
* @summary This method invokes {@link StopWatch.pause} to consolidate the elapsed time, and leaves the stopwatch in a non-running state.
|
|
95
|
+
* @return {number} The milliseconds that have accumulated across all runs.
|
|
94
96
|
*/
|
|
95
97
|
stop(): number;
|
|
96
98
|
/**
|
|
97
|
-
* @description Resets the stopwatch state while optionally continuing to run.
|
|
98
|
-
* @summary
|
|
99
|
-
* @return {this}
|
|
99
|
+
* @description Resets the stopwatch state, while optionally continuing to run.
|
|
100
|
+
* @summary This method clears the elapsed time and lap history, and preserves whether the stopwatch should continue ticking.
|
|
101
|
+
* @return {this} A fluent reference to the stopwatch.
|
|
100
102
|
*/
|
|
101
103
|
reset(): this;
|
|
102
104
|
/**
|
|
103
|
-
* @description Records a lap split since the stopwatch started or since the previous lap.
|
|
104
|
-
* @summary
|
|
105
|
-
* @param {string} [label] -
|
|
106
|
-
* @return {Lap}
|
|
105
|
+
* @description Records a lap split since the stopwatch started, or since the previous lap.
|
|
106
|
+
* @summary This method stores the lap metadata, updates the cumulative tracking, and returns the newly created {@link Lap}.
|
|
107
|
+
* @param {string} [label] - An optional label that describes the lap.
|
|
108
|
+
* @return {Lap} A lap snapshot that captures incremental and cumulative timings.
|
|
107
109
|
*/
|
|
108
110
|
lap(label?: string): Lap;
|
|
109
111
|
/**
|
|
110
112
|
* @description Retrieves the recorded lap history.
|
|
111
|
-
* @summary
|
|
112
|
-
* @return {Lap
|
|
113
|
+
* @summary This method returns the internal lap array as a read-only view to prevent external mutation.
|
|
114
|
+
* @return {Array<Lap>} The laps that have been captured by the stopwatch.
|
|
113
115
|
*/
|
|
114
116
|
get laps(): readonly Lap[];
|
|
115
117
|
/**
|
|
116
118
|
* @description Formats the elapsed time in a human-readable representation.
|
|
117
|
-
* @summary
|
|
118
|
-
* @return {string}
|
|
119
|
+
* @summary This method uses {@link formatMs} to produce an `hh:mm:ss.mmm` string for display and logging.
|
|
120
|
+
* @return {string} The elapsed time, formatted for presentation.
|
|
119
121
|
*/
|
|
120
122
|
toString(): string;
|
|
121
123
|
/**
|
|
122
124
|
* @description Serializes the stopwatch state.
|
|
123
|
-
* @summary
|
|
124
|
-
* @return {{running: boolean, elapsedMs: number, laps: Lap[]}}
|
|
125
|
+
* @summary This method provides a JSON-friendly snapshot that includes the running state, elapsed time, and lap details.
|
|
126
|
+
* @return {{running: boolean, elapsedMs: number, laps: Lap[]}} A serializable stopwatch representation.
|
|
125
127
|
*/
|
|
126
128
|
toJSON(): {
|
|
127
129
|
running: boolean;
|
|
@@ -131,9 +133,9 @@ export declare class StopWatch {
|
|
|
131
133
|
}
|
|
132
134
|
/**
|
|
133
135
|
* @description Formats milliseconds into `hh:mm:ss.mmm`.
|
|
134
|
-
* @summary
|
|
135
|
-
* @param {number} ms -
|
|
136
|
-
* @return {string}
|
|
136
|
+
* @summary This function breaks the duration into hours, minutes, seconds, and milliseconds, and returns a zero-padded string.
|
|
137
|
+
* @param {number} ms - The milliseconds to format.
|
|
138
|
+
* @return {string} The formatted duration string.
|
|
137
139
|
* @function formatMs
|
|
138
140
|
* @memberOf module:Logging
|
|
139
141
|
* @mermaid
|
package/lib/time.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":";;;AA+OA,4BASC;AAnOD,SAAS,OAAO;IACd,wCAAwC;IACxC,IACE,OAAO,UAAU,KAAK,WAAW;QACjC,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,KAAK,UAAU,EACjD,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;IACD,oEAAoE;IACpE,IACE,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAQ,OAAe,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,EACrD,CAAC;QACD,OAAO,GAAG,EAAE;YACV,MAAM,EAAE,GAAI,OAAe,CAAC,MAAM,CAAC,MAAM,EAAY,CAAC,CAAC,cAAc;YACrE,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,QAAQ;QACzC,CAAC,CAAC;IACJ,CAAC;IACD,WAAW;IACX,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACU,QAAA,GAAG,GAAG,OAAO,EAAE,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAa,SAAS;IAOpB,YAAY,SAAS,GAAG,KAAK;QANrB,aAAQ,GAAkB,IAAI,CAAC;QAC/B,eAAU,GAAG,CAAC,CAAC;QACf,aAAQ,GAAG,KAAK,CAAC;QACjB,UAAK,GAAU,EAAE,CAAC;QAClB,oBAAe,GAAG,CAAC,CAAC;QAG1B,IAAI,SAAS;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QACpE,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,IAAA,WAAG,GAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAA,WAAG,GAAE,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,UAAU,IAAI,IAAA,WAAG,GAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAA,WAAG,GAAE,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,WAAG,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,KAAc;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;QACxC,MAAM,GAAG,GAAQ;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACxB,KAAK;YACL,EAAE;YACF,OAAO,EAAE,KAAK;SACf,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IACD;;;;OAIG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;SACzB,CAAC;IACJ,CAAC;CACF;AA/ID,8BA+IC;AACD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,QAAQ,CAAC,EAAU;IACjC,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpE,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3F,CAAC"}
|