easier-http-request 0.1.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/LICENSE.md ADDED
@@ -0,0 +1,7 @@
1
+ Copyright (c) 2026 Rotem Dan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Easier HTTP request
2
+
3
+ Simple wrapper around the `fetch` API.
4
+
5
+ Extends `fetch` in the following ways:
6
+
7
+ * Accepts URL parameters as an object
8
+ * Accepts headers as a single object
9
+ * If body is given as plain object, automatically converts it to JSON
10
+ * Supports setting a timeout for waiting until headers are returned by the server
11
+ * Errors if response doesn't have a 2xx status code
12
+ * Produces machine-readable error objects, including information about the status and state of the response
13
+ * On success, returns the result object produced by `fetch`
14
+
15
+ ## Installation
16
+
17
+ ```
18
+ npm install easier-http-request
19
+ ```
@@ -0,0 +1,32 @@
1
+ export declare function requestHttp(config: EasierHttpRequestConfig): Promise<Response>;
2
+ export interface EasierHttpRequestConfig {
3
+ url: string;
4
+ method?: HttpRequestMethod;
5
+ params?: Record<string, unknown>;
6
+ headers?: Record<string, string | string[] | undefined>;
7
+ body?: unknown;
8
+ timeout?: number;
9
+ abortSignal?: AbortSignal;
10
+ redirect?: RequestRedirect;
11
+ integrity?: string;
12
+ credentials?: RequestCredentials;
13
+ mode?: RequestMode;
14
+ referrer?: string;
15
+ referrerPolicy?: ReferrerPolicy;
16
+ }
17
+ export declare const defaultEasierHttpRequestConfig: EasierHttpRequestConfig;
18
+ export type HttpRequestMethod = 'get' | 'GET' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'options' | 'OPTIONS' | 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'purge' | 'PURGE' | 'link' | 'LINK' | 'unlink' | 'UNLINK';
19
+ export declare class EasierHttpRequestError extends Error {
20
+ readonly message: string;
21
+ readonly config: EasierHttpRequestConfig;
22
+ readonly response?: Response | undefined;
23
+ readonly errorBody?: unknown;
24
+ constructor(message: string, config: EasierHttpRequestConfig, response?: Response | undefined, errorBody?: unknown);
25
+ get statusCode(): number | undefined;
26
+ get statusText(): string | undefined;
27
+ }
28
+ export declare class EasierHttpRequestTimeoutError extends Error {
29
+ readonly message: string;
30
+ constructor(message: string);
31
+ }
32
+ //# sourceMappingURL=Exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Exports.d.ts","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoKpF;AAGD,MAAM,WAAW,uBAAuB;IAMvC,GAAG,EAAE,MAAM,CAAA;IAGX,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAG1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAGhC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;IAGvD,IAAI,CAAC,EAAE,OAAO,CAAA;IAGd,OAAO,CAAC,EAAE,MAAM,CAAA;IAGhB,WAAW,CAAC,EAAE,WAAW,CAAA;IAOzB,QAAQ,CAAC,EAAE,eAAe,CAAA;IAG1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAGlB,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAGhC,IAAI,CAAC,EAAE,WAAW,CAAA;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAGjB,cAAc,CAAC,EAAE,cAAc,CAAA;CAC/B;AAGD,eAAO,MAAM,8BAA8B,EAAE,uBAO5C,CAAA;AAGD,MAAM,MAAM,iBAAiB,GAC5B,KAAK,GAAG,KAAK,GACb,QAAQ,GAAG,QAAQ,GACnB,MAAM,GAAG,MAAM,GACf,SAAS,GAAG,SAAS,GACrB,MAAM,GAAG,MAAM,GACf,KAAK,GAAG,KAAK,GACb,OAAO,GAAG,OAAO,GACjB,OAAO,GAAG,OAAO,GACjB,MAAM,GAAG,MAAM,GACf,QAAQ,GAAG,QAAQ,CAAA;AAGpB,qBAAa,sBAAuB,SAAQ,KAAK;aAE/B,OAAO,EAAE,MAAM;aACf,MAAM,EAAE,uBAAuB;aAC/B,QAAQ,CAAC,EAAE,QAAQ;aACnB,SAAS,CAAC,EAAE,OAAO;IAJpC,YACiB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,CAAC,EAAE,QAAQ,YAAA,EACnB,SAAS,CAAC,EAAE,OAAO,EAWnC;IAED,IAAI,UAAU,uBAEb;IAED,IAAI,UAAU,uBAEb;CACD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAC3B,OAAO,EAAE,MAAM;IAA3C,YAA4B,OAAO,EAAE,MAAM,EAI1C;CACD"}
@@ -0,0 +1,187 @@
1
+ import { isPlainObject } from '../utilities/ObjectUtilities.js';
2
+ import { isValidHttpUrl } from '../utilities/Utilities.js';
3
+ export async function requestHttp(config) {
4
+ // Error if given a bad URL
5
+ if (!isValidHttpUrl(config.url)) {
6
+ throw new Error(`'${config.url}' is not a valid HTTP(S) URL.`);
7
+ }
8
+ // Resolve configuration
9
+ config = { ...defaultEasierHttpRequestConfig, ...config };
10
+ // Process URL and Params
11
+ const urlObject = new URL(config.url);
12
+ // Add parameters from parameter object
13
+ for (const [key, valueOrValues] of Object.entries(config.params)) {
14
+ if (valueOrValues == null) {
15
+ continue;
16
+ }
17
+ const values = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues];
18
+ for (const value of values) {
19
+ urlObject.searchParams.append(key, String(value));
20
+ }
21
+ }
22
+ // Derive final URL as string
23
+ const urlString = urlObject.toString();
24
+ // Get method
25
+ const method = config.method.toUpperCase();
26
+ // Build headers
27
+ const headers = new Headers();
28
+ for (const [key, valueOrValues] of Object.entries(config.headers)) {
29
+ if (valueOrValues === undefined) {
30
+ continue;
31
+ }
32
+ let values;
33
+ if (Array.isArray(valueOrValues)) {
34
+ values = valueOrValues;
35
+ }
36
+ else {
37
+ values = [valueOrValues];
38
+ }
39
+ // Ensure repeating keys with different capitalizations don't concatenate with each other
40
+ headers.delete(key);
41
+ // Append header values
42
+ for (const value of values) {
43
+ headers.append(key, String(value));
44
+ }
45
+ }
46
+ // Process request body
47
+ let body = undefined;
48
+ const bodyArg = config.body;
49
+ if (bodyArg !== undefined) {
50
+ if (['GET', 'HEAD'].includes(method)) {
51
+ throw new Error(`Request method '${method}' doesn't accept a request body.`);
52
+ }
53
+ if (isPlainObject(bodyArg)) {
54
+ body = JSON.stringify(bodyArg);
55
+ headers.set('Content-Type', 'application/json');
56
+ }
57
+ else {
58
+ // TODO: consider ensuring bodyArg type is valid
59
+ body = bodyArg;
60
+ }
61
+ }
62
+ // Handle timeout and user-defined abort signal
63
+ const abortController = new AbortController();
64
+ const abortSignal = abortController.signal;
65
+ // Set timeout to abort when maximum time elapses before headers are sent by the server
66
+ const timeoutMilliseconds = Math.floor(config.timeout * 1000);
67
+ const requestTimeoutHandle = setTimeout(() => {
68
+ abortController?.abort('timeout');
69
+ }, timeoutMilliseconds);
70
+ // Set user abort listener
71
+ const userAbortListener = () => abortController?.abort();
72
+ config.abortSignal?.addEventListener('abort', userAbortListener);
73
+ // Prepare fetch options (RequestInit)
74
+ const fetchInitOptions = {
75
+ // Pass arguments
76
+ method,
77
+ headers,
78
+ body,
79
+ signal: abortSignal,
80
+ // Forward other aruments to 'fetch', unmodified.
81
+ redirect: config.redirect,
82
+ integrity: config.integrity,
83
+ credentials: config.credentials,
84
+ mode: config.mode,
85
+ referrer: config.referrer,
86
+ referrerPolicy: config.referrerPolicy,
87
+ };
88
+ // Execute fetch
89
+ let response;
90
+ try {
91
+ response = await fetch(urlString, fetchInitOptions);
92
+ // Check for HTTP error (non-2xx status)
93
+ if (!response.ok) {
94
+ let errorBody;
95
+ try {
96
+ // Attempt to parse body for error details, but don't fail if it's not JSON/text
97
+ const contentType = response.headers.get('content-type');
98
+ if (contentType?.includes('application/json')) {
99
+ errorBody = await response.json();
100
+ }
101
+ else if (contentType?.includes('text/')) {
102
+ errorBody = await response.text();
103
+ }
104
+ }
105
+ catch (e) {
106
+ // Ignore parsing errors for the error body itself
107
+ }
108
+ const status = response.status;
109
+ const statusText = response.statusText || 'Unknown Error';
110
+ const errorMessage = `Request failed with status code ${status}: ${statusText}`;
111
+ const error = new EasierHttpRequestError(errorMessage, config, response, errorBody);
112
+ throw error;
113
+ }
114
+ }
115
+ catch (error) {
116
+ if (error instanceof EasierHttpRequestError || error instanceof EasierHttpRequestTimeoutError) {
117
+ // This is our custom HTTP error (non-2xx)
118
+ throw error;
119
+ }
120
+ else if (error.name === 'AbortError') {
121
+ if (error.reason === 'timeout') {
122
+ throw new EasierHttpRequestTimeoutError(`Request timed out after ${config.timeout}ms.`);
123
+ }
124
+ else {
125
+ throw error;
126
+ }
127
+ }
128
+ else {
129
+ // Other network errors
130
+ const networkError = new EasierHttpRequestError(`Network Error: ${error.message}`, config);
131
+ // Optionally attach the original error
132
+ networkError.originalError = error;
133
+ throw networkError;
134
+ }
135
+ }
136
+ finally {
137
+ // Clear timeout
138
+ clearTimeout(requestTimeoutHandle);
139
+ }
140
+ return response;
141
+ }
142
+ // Default configuration
143
+ export const defaultEasierHttpRequestConfig = {
144
+ url: '',
145
+ method: 'GET',
146
+ params: {},
147
+ headers: {},
148
+ body: undefined,
149
+ timeout: 60 * 2,
150
+ };
151
+ // Request error object
152
+ export class EasierHttpRequestError extends Error {
153
+ message;
154
+ config;
155
+ response;
156
+ errorBody;
157
+ constructor(message, config, response, errorBody) {
158
+ super(message);
159
+ this.message = message;
160
+ this.config = config;
161
+ this.response = response;
162
+ this.errorBody = errorBody;
163
+ this.name = 'RequestError';
164
+ // Capture stack trace, excluding constructor call from it
165
+ if (typeof Error.captureStackTrace === 'function') {
166
+ Error.captureStackTrace(this, EasierHttpRequestError);
167
+ }
168
+ else {
169
+ this.stack = (new Error(message)).stack;
170
+ }
171
+ }
172
+ get statusCode() {
173
+ return this.response?.status;
174
+ }
175
+ get statusText() {
176
+ return this.response?.statusText;
177
+ }
178
+ }
179
+ export class EasierHttpRequestTimeoutError extends Error {
180
+ message;
181
+ constructor(message) {
182
+ super(message);
183
+ this.message = message;
184
+ this.name = 'RequestTimeoutError';
185
+ }
186
+ }
187
+ //# sourceMappingURL=Exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Exports.js","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SimpleHttpRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleHttpRequest.d.ts","sourceRoot":"","sources":["../../src/http-request/SimpleHttpRequest.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SimpleHttpRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleHttpRequest.js","sourceRoot":"","sources":["../../src/http-request/SimpleHttpRequest.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../src/tests/Test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Test.js","sourceRoot":"","sources":["../../src/tests/Test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare function extendDeep(base: any, extension: any): any;
2
+ export declare function shallowClone<T>(val: T): T;
3
+ export declare function deepClone<T>(val: T): T;
4
+ export declare function isPlainObject(val: any): boolean;
5
+ //# sourceMappingURL=ObjectUtilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectUtilities.d.ts","sourceRoot":"","sources":["../../src/utilities/ObjectUtilities.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,GAAG,CAqBzD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAErC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAElC;AAiKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,WAErC"}
@@ -0,0 +1,145 @@
1
+ export function extendDeep(base, extension) {
2
+ const baseClone = deepClone(base);
3
+ if (isPlainObject(base) && extension === undefined) {
4
+ return baseClone;
5
+ }
6
+ const extensionClone = deepClone(extension);
7
+ if (!isPlainObject(base) || !isPlainObject(extension)) {
8
+ return extensionClone;
9
+ }
10
+ for (const propName in extensionClone) {
11
+ if (!extensionClone.hasOwnProperty(propName)) {
12
+ continue;
13
+ }
14
+ baseClone[propName] = extendDeep(baseClone[propName], extensionClone[propName]);
15
+ }
16
+ return baseClone;
17
+ }
18
+ export function shallowClone(val) {
19
+ return clone(val, false);
20
+ }
21
+ export function deepClone(val) {
22
+ return clone(val, true);
23
+ }
24
+ function clone(val, deep = true, seenObjects = []) {
25
+ if (val === undefined || val === null || typeof val !== 'object') {
26
+ return val;
27
+ }
28
+ const obj = val;
29
+ const prototypeIdentifier = toString.call(obj);
30
+ switch (prototypeIdentifier) {
31
+ case '[object Array]': {
32
+ if (seenObjects.includes(obj)) {
33
+ throw new Error('deepClone: encountered a cyclic object');
34
+ }
35
+ seenObjects.push(obj);
36
+ const clonedArray = new Array(obj.length);
37
+ for (let i = 0; i < obj.length; i++) {
38
+ if (deep) {
39
+ clonedArray[i] = clone(obj[i], true, seenObjects);
40
+ }
41
+ else {
42
+ clonedArray[i] = obj[i];
43
+ }
44
+ }
45
+ seenObjects.pop();
46
+ return clonedArray;
47
+ }
48
+ case '[object ArrayBuffer]': {
49
+ const clonedArray = new Uint8Array(obj.byteLength);
50
+ clonedArray.set(new Uint8Array(obj));
51
+ return clonedArray.buffer;
52
+ }
53
+ case '[object Int8Array]': {
54
+ const clonedArray = new Int8Array(obj.length);
55
+ clonedArray.set(obj);
56
+ return clonedArray;
57
+ }
58
+ case '[object Uint8Array]': {
59
+ const clonedArray = new Uint8Array(obj.length);
60
+ clonedArray.set(obj);
61
+ return clonedArray;
62
+ }
63
+ case '[object Uint8ClampedArray]': {
64
+ const clonedArray = new Uint8ClampedArray(obj.length);
65
+ clonedArray.set(obj);
66
+ return clonedArray;
67
+ }
68
+ case '[object Int16Array]': {
69
+ const clonedArray = new Int16Array(obj.length);
70
+ clonedArray.set(obj);
71
+ return clonedArray;
72
+ }
73
+ case '[object Uint16Array]': {
74
+ const clonedArray = new Uint16Array(obj.length);
75
+ clonedArray.set(obj);
76
+ return clonedArray;
77
+ }
78
+ case '[object Int32Array]': {
79
+ const clonedArray = new Int32Array(obj.length);
80
+ clonedArray.set(obj);
81
+ return clonedArray;
82
+ }
83
+ case '[object Uint32Array]': {
84
+ const clonedArray = new Uint32Array(obj.length);
85
+ clonedArray.set(obj);
86
+ return clonedArray;
87
+ }
88
+ case '[object Float32Array]': {
89
+ const clonedArray = new Float32Array(obj.length);
90
+ clonedArray.set(obj);
91
+ return clonedArray;
92
+ }
93
+ case '[object Float64Array]': {
94
+ const clonedArray = new Float64Array(obj.length);
95
+ clonedArray.set(obj);
96
+ return clonedArray;
97
+ }
98
+ case '[object BigInt64Array]': {
99
+ const clonedArray = new BigInt64Array(obj.length);
100
+ clonedArray.set(obj);
101
+ return clonedArray;
102
+ }
103
+ case '[object BigUint64Array]': {
104
+ const clonedArray = new BigUint64Array(obj.length);
105
+ clonedArray.set(obj);
106
+ return clonedArray;
107
+ }
108
+ case '[object Date]': {
109
+ return new Date(obj.valueOf());
110
+ }
111
+ case '[object RegExp]': {
112
+ return obj;
113
+ }
114
+ case '[object Function]': {
115
+ return obj;
116
+ }
117
+ case '[object Object]': {
118
+ if (seenObjects.includes(obj)) {
119
+ throw new Error('deepClone: encountered a cyclic object');
120
+ }
121
+ seenObjects.push(obj);
122
+ const clonedObj = {};
123
+ for (const propName in obj) {
124
+ if (!obj.hasOwnProperty(propName)) {
125
+ continue;
126
+ }
127
+ if (deep) {
128
+ clonedObj[propName] = clone(obj[propName], true, seenObjects);
129
+ }
130
+ else {
131
+ clonedObj[propName] = obj[propName];
132
+ }
133
+ }
134
+ seenObjects.pop();
135
+ return clonedObj;
136
+ }
137
+ default: {
138
+ throw new Error(`Cloning of type ${prototypeIdentifier} is not supported`);
139
+ }
140
+ }
141
+ }
142
+ export function isPlainObject(val) {
143
+ return val != null && typeof val === 'object' && toString.call(val) === '[object Object]';
144
+ }
145
+ //# sourceMappingURL=ObjectUtilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectUtilities.js","sourceRoot":"","sources":["../../src/utilities/ObjectUtilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare class Timer {
2
+ startTime: number;
3
+ constructor();
4
+ restart(): void;
5
+ get elapsedTime(): number;
6
+ get elapsedTimeSeconds(): number;
7
+ getElapsedTimeAndRestart(): number;
8
+ logAndRestart(title: string, timePrecision?: number): number;
9
+ static get currentTime(): number;
10
+ static get microsecondTimestamp(): number;
11
+ private static createTimestampFunction;
12
+ private static getTimestamp;
13
+ }
14
+ //# sourceMappingURL=Timer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timer.d.ts","sourceRoot":"","sources":["../../src/utilities/Timer.ts"],"names":[],"mappings":"AAEA,qBAAa,KAAK;IACjB,SAAS,SAAI;IAEb,cAEC;IAED,OAAO,SAEN;IAED,IAAI,WAAW,IAAI,MAAM,CAGxB;IAED,IAAI,kBAAkB,IAAI,MAAM,CAG/B;IAED,wBAAwB,IAAI,MAAM,CAKjC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM,CAYtD;IAED,MAAM,KAAK,WAAW,IAAI,MAAM,CAM/B;IAED,MAAM,KAAK,oBAAoB,IAAI,MAAM,CAExC;IAED,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqBtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAc;CACzC"}
@@ -0,0 +1,61 @@
1
+ import { logToStderr, roundToDigits } from './Utilities.js';
2
+ export class Timer {
3
+ startTime = 0;
4
+ constructor() {
5
+ this.restart();
6
+ }
7
+ restart() {
8
+ this.startTime = Timer.currentTime;
9
+ }
10
+ get elapsedTime() {
11
+ // Elapsed time (milliseconds)
12
+ return Timer.currentTime - this.startTime;
13
+ }
14
+ get elapsedTimeSeconds() {
15
+ // Elapsed time (seconds)
16
+ return this.elapsedTime / 1000;
17
+ }
18
+ getElapsedTimeAndRestart() {
19
+ const elapsedTime = this.elapsedTime;
20
+ this.restart();
21
+ return elapsedTime;
22
+ }
23
+ logAndRestart(title, timePrecision = 3) {
24
+ const elapsedTime = this.elapsedTime;
25
+ //
26
+ const message = `${title}: ${roundToDigits(elapsedTime, timePrecision)}ms`;
27
+ logToStderr(message);
28
+ //
29
+ this.restart();
30
+ return elapsedTime;
31
+ }
32
+ static get currentTime() {
33
+ if (!this.getTimestamp) {
34
+ this.createTimestampFunction();
35
+ }
36
+ return this.getTimestamp();
37
+ }
38
+ static get microsecondTimestamp() {
39
+ return Math.floor(Timer.currentTime * 1000);
40
+ }
41
+ static createTimestampFunction() {
42
+ if (typeof process === 'object' && typeof process.hrtime === 'function') {
43
+ let baseTimestamp = 0;
44
+ this.getTimestamp = () => {
45
+ const nodeTimeNanoSeconds = process.hrtime.bigint();
46
+ const nodeTimeMilliseconds = Number(nodeTimeNanoSeconds) / 1_000_000;
47
+ return baseTimestamp + nodeTimeMilliseconds;
48
+ };
49
+ baseTimestamp = Date.now() - this.getTimestamp();
50
+ }
51
+ else if (typeof performance === 'object' && performance.now) {
52
+ const baseTimestamp = Date.now() - performance.now();
53
+ this.getTimestamp = () => baseTimestamp + performance.now();
54
+ }
55
+ else {
56
+ this.getTimestamp = () => Date.now();
57
+ }
58
+ }
59
+ static getTimestamp;
60
+ }
61
+ //# sourceMappingURL=Timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timer.js","sourceRoot":"","sources":["../../src/utilities/Timer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,MAAM,OAAO,KAAK;IACjB,SAAS,GAAG,CAAC,CAAA;IAEb;QACC,IAAI,CAAC,OAAO,EAAE,CAAA;IACf,CAAC;IAED,OAAO;QACN,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAA;IACnC,CAAC;IAED,IAAI,WAAW;QACd,8BAA8B;QAC9B,OAAO,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAA;IAC1C,CAAC;IAED,IAAI,kBAAkB;QACrB,yBAAyB;QACzB,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IAC/B,CAAC;IAED,wBAAwB;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,OAAO,WAAW,CAAA;IACnB,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,aAAa,GAAG,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAEpC,EAAE;QACF,MAAM,OAAO,GAAG,GAAG,KAAK,KAAK,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,CAAA;QAE1E,WAAW,CAAC,OAAO,CAAC,CAAA;QACpB,EAAE;QAEF,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,OAAO,WAAW,CAAA;IACnB,CAAC;IAED,MAAM,KAAK,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,KAAK,oBAAoB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC5C,CAAC;IAEO,MAAM,CAAC,uBAAuB;QACrC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACzE,IAAI,aAAa,GAAG,CAAC,CAAA;YAErB,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE;gBACxB,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;gBACnD,MAAM,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAA;gBAEpE,OAAO,aAAa,GAAG,oBAAoB,CAAA;YAC5C,CAAC,CAAA;YAED,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACjD,CAAC;aAAM,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;YAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;YAEpD,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAC5D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACrC,CAAC;IACF,CAAC;IAEO,MAAM,CAAC,YAAY,CAAc;CACzC"}
@@ -0,0 +1,10 @@
1
+ export declare function writeToStderr(message: any): void;
2
+ export declare function logToStderr(message: any): void;
3
+ export declare function formatIntegerWithLeadingZeros(num: number, minDigitCount: number): string;
4
+ export declare function roundToDigits(val: number, digits?: number): number;
5
+ export declare function sleep(timeMs: number): Promise<void>;
6
+ export declare function parseUrlOrPath(inputString: string, baseUrl?: string): URL;
7
+ export declare function getDomainName(url: string): string;
8
+ export declare function yieldToEventLoop(): Promise<unknown>;
9
+ export declare function isValidHttpUrl(urlString: string): boolean;
10
+ //# sourceMappingURL=Utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,QAEzC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,GAAG,QAGvC;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAU/E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAIpD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,iBAgBnC;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,SAAsB,OAoBhF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,UAaxC;AAED,wBAAgB,gBAAgB,qBAI/B;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAoCzD"}