@lichens-innovation/ts-common 1.6.1 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/index.cjs +468 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +172 -0
  4. package/dist/index.d.ts +172 -2
  5. package/dist/index.js +381 -1
  6. package/dist/index.js.map +1 -1
  7. package/package.json +15 -4
  8. package/dist/index.d.ts.map +0 -1
  9. package/dist/utils/color.utils.d.ts +0 -41
  10. package/dist/utils/color.utils.d.ts.map +0 -1
  11. package/dist/utils/color.utils.js +0 -97
  12. package/dist/utils/color.utils.js.map +0 -1
  13. package/dist/utils/date.utils.d.ts +0 -33
  14. package/dist/utils/date.utils.d.ts.map +0 -1
  15. package/dist/utils/date.utils.js +0 -66
  16. package/dist/utils/date.utils.js.map +0 -1
  17. package/dist/utils/errors.utils.d.ts +0 -2
  18. package/dist/utils/errors.utils.d.ts.map +0 -1
  19. package/dist/utils/errors.utils.js +0 -13
  20. package/dist/utils/errors.utils.js.map +0 -1
  21. package/dist/utils/http.utils.d.ts +0 -4
  22. package/dist/utils/http.utils.d.ts.map +0 -1
  23. package/dist/utils/http.utils.js +0 -20
  24. package/dist/utils/http.utils.js.map +0 -1
  25. package/dist/utils/index.d.ts +0 -14
  26. package/dist/utils/index.d.ts.map +0 -1
  27. package/dist/utils/index.js +0 -14
  28. package/dist/utils/index.js.map +0 -1
  29. package/dist/utils/number.utils.d.ts +0 -4
  30. package/dist/utils/number.utils.d.ts.map +0 -1
  31. package/dist/utils/number.utils.js +0 -30
  32. package/dist/utils/number.utils.js.map +0 -1
  33. package/dist/utils/regex.d.ts +0 -3
  34. package/dist/utils/regex.d.ts.map +0 -1
  35. package/dist/utils/regex.js +0 -3
  36. package/dist/utils/regex.js.map +0 -1
  37. package/dist/utils/string.utils.d.ts +0 -38
  38. package/dist/utils/string.utils.d.ts.map +0 -1
  39. package/dist/utils/string.utils.js +0 -63
  40. package/dist/utils/string.utils.js.map +0 -1
  41. package/dist/utils/thread.utils.d.ts +0 -2
  42. package/dist/utils/thread.utils.d.ts.map +0 -1
  43. package/dist/utils/thread.utils.js +0 -2
  44. package/dist/utils/thread.utils.js.map +0 -1
  45. package/dist/utils/time.utils.d.ts +0 -7
  46. package/dist/utils/time.utils.d.ts.map +0 -1
  47. package/dist/utils/time.utils.js +0 -11
  48. package/dist/utils/time.utils.js.map +0 -1
  49. package/dist/utils/types.utils.d.ts +0 -5
  50. package/dist/utils/types.utils.d.ts.map +0 -1
  51. package/dist/utils/types.utils.js +0 -24
  52. package/dist/utils/types.utils.js.map +0 -1
  53. package/dist/utils/units.utils.d.ts +0 -16
  54. package/dist/utils/units.utils.d.ts.map +0 -1
  55. package/dist/utils/units.utils.js +0 -37
  56. package/dist/utils/units.utils.js.map +0 -1
  57. package/dist/utils/uri.utils.d.ts +0 -12
  58. package/dist/utils/uri.utils.d.ts.map +0 -1
  59. package/dist/utils/uri.utils.js +0 -19
  60. package/dist/utils/uri.utils.js.map +0 -1
  61. package/dist/utils/websocket.utils.d.ts +0 -4
  62. package/dist/utils/websocket.utils.d.ts.map +0 -1
  63. package/dist/utils/websocket.utils.js +0 -23
  64. package/dist/utils/websocket.utils.js.map +0 -1
package/dist/index.cjs ADDED
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ HZ_TO_RPM: () => HZ_TO_RPM,
24
+ M3PS_TO_GPM: () => M3PS_TO_GPM,
25
+ M_TO_INCHES: () => M_TO_INCHES,
26
+ NO_OP: () => NO_OP,
27
+ PA_TO_FT: () => PA_TO_FT,
28
+ PeriodsInMS: () => PeriodsInMS,
29
+ REGEX_ALPHANUMERIC: () => REGEX_ALPHANUMERIC,
30
+ REGEX_IPV4: () => REGEX_IPV4,
31
+ SCHEME_PREFIXES: () => SCHEME_PREFIXES,
32
+ W_TO_HP: () => W_TO_HP,
33
+ capitalizeFirst: () => capitalizeFirst,
34
+ closeWebSocket: () => closeWebSocket,
35
+ countWords: () => countWords,
36
+ dateAs_HHMMSS: () => dateAs_HHMMSS,
37
+ dateAs_YYYYMMDD: () => dateAs_YYYYMMDD,
38
+ dateAs_YYYYMMDD_HHMMSS: () => dateAs_YYYYMMDD_HHMMSS,
39
+ formatUnixTimestamp: () => formatUnixTimestamp,
40
+ fromHzToRpm: () => fromHzToRpm,
41
+ fromM3psToGPM: () => fromM3psToGPM,
42
+ fromMToInches: () => fromMToInches,
43
+ fromPaToFt: () => fromPaToFt,
44
+ fromWToHp: () => fromWToHp,
45
+ getColorForPercentage: () => getColorForPercentage,
46
+ getContrastTextColor: () => getContrastTextColor,
47
+ getCurrentUnixTimestamp: () => getCurrentUnixTimestamp,
48
+ getErrorMessage: () => getErrorMessage,
49
+ getLuminance: () => getLuminance,
50
+ getOpacityHexValue: () => getOpacityHexValue,
51
+ getOrderOfMagnitudeExponent: () => getOrderOfMagnitudeExponent,
52
+ hasScheme: () => hasScheme,
53
+ hexToNormalizedRgb: () => hexToNormalizedRgb,
54
+ hexToRgb: () => hexToRgb,
55
+ isActiveTimestamp: () => isActiveTimestamp,
56
+ isAlphanumeric: () => isAlphanumeric,
57
+ isBlank: () => isBlank,
58
+ isExpiredTimestamp: () => isExpiredTimestamp,
59
+ isHttpClientErrorStatus: () => isHttpClientErrorStatus,
60
+ isHttpServerErrorStatus: () => isHttpServerErrorStatus,
61
+ isHttpSuccessStatus: () => isHttpSuccessStatus,
62
+ isLightColor: () => isLightColor,
63
+ isNotBlank: () => isNotBlank,
64
+ isNullish: () => isNullish,
65
+ isNumber: () => isNumber,
66
+ isString: () => isString,
67
+ isWsClosable: () => isWsClosable,
68
+ isWsOpenOrConnecting: () => isWsOpenOrConnecting,
69
+ nowAsDate: () => nowAsDate,
70
+ nowAsDateTime: () => nowAsDateTime,
71
+ nowAsDateTimeForFilename: () => nowAsDateTimeForFilename,
72
+ nowAsTime: () => nowAsTime,
73
+ removeDiacriticalMarks: () => removeDiacriticalMarks,
74
+ rgbToHex: () => rgbToHex,
75
+ rgbToString: () => rgbToString,
76
+ rgbaToHex: () => rgbaToHex,
77
+ rgbaToHexWithAlpha: () => rgbaToHexWithAlpha,
78
+ rgbaToString: () => rgbaToString,
79
+ roundUpToNearest10: () => roundUpToNearest10,
80
+ sleep: () => sleep,
81
+ toFixed: () => toFixed,
82
+ truncate: () => truncate
83
+ });
84
+ module.exports = __toCommonJS(index_exports);
85
+
86
+ // src/utils/color.utils.ts
87
+ var rgbToHex = (r, g, b) => {
88
+ if (r > 255 || g > 255 || b > 255) {
89
+ throw new Error("Invalid color component");
90
+ }
91
+ return (r << 16 | g << 8 | b).toString(16).padStart(6, "0");
92
+ };
93
+ var hexToRgb = (hex) => {
94
+ const cleanHex = hex.replace("#", "");
95
+ const r = parseInt(cleanHex.substring(0, 2), 16);
96
+ const g = parseInt(cleanHex.substring(2, 4), 16);
97
+ const b = parseInt(cleanHex.substring(4, 6), 16);
98
+ return { r, g, b };
99
+ };
100
+ var rgbaToHex = (color) => {
101
+ return "#" + rgbToHex(color.r, color.g, color.b);
102
+ };
103
+ var getOpacityHexValue = (opacity) => {
104
+ if (opacity < 0 || opacity > 1) {
105
+ throw new Error("Invalid opacity value");
106
+ }
107
+ return Math.round(opacity * 255).toString(16).padStart(2, "0");
108
+ };
109
+ var rgbaToHexWithAlpha = (color) => {
110
+ return rgbaToHex(color) + getOpacityHexValue(color.a);
111
+ };
112
+ var rgbToString = (color) => {
113
+ return `rgb(${color.r}, ${color.g}, ${color.b})`;
114
+ };
115
+ var rgbaToString = (color) => {
116
+ return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`;
117
+ };
118
+ var getLuminance = (r, g, b) => {
119
+ return (0.299 * r + 0.587 * g + 0.114 * b) / 255;
120
+ };
121
+ var getContrastTextColor = (hexColor) => {
122
+ const { r, g, b } = hexToRgb(hexColor);
123
+ return getLuminance(r, g, b) > 0.5 ? "#000000" : "#ffffff";
124
+ };
125
+ var hexToNormalizedRgb = (hex) => {
126
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
127
+ return result ? {
128
+ r: parseInt(result[1], 16) / 255,
129
+ g: parseInt(result[2], 16) / 255,
130
+ b: parseInt(result[3], 16) / 255
131
+ } : { r: 0, g: 0, b: 0 };
132
+ };
133
+ var isLightColor = (hex) => {
134
+ const rgb = hexToNormalizedRgb(hex);
135
+ const luminance = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;
136
+ return luminance > 0.5;
137
+ };
138
+ var PERCENT_COLORS = [
139
+ { pct: 0, color: { r: 255, g: 0, b: 0 } },
140
+ { pct: 0.5, color: { r: 255, g: 255, b: 0 } },
141
+ { pct: 1, color: { r: 0, g: 255, b: 0 } }
142
+ ];
143
+ var getColorForPercentage = (percent) => {
144
+ if (percent < 0 || percent > 1) {
145
+ throw new Error(`Percentage must be between 0 and 1: ${percent}`);
146
+ }
147
+ let i = 0;
148
+ for (i = 1; i < PERCENT_COLORS.length - 1; i++) {
149
+ if (percent < PERCENT_COLORS[i].pct) {
150
+ break;
151
+ }
152
+ }
153
+ const lower = PERCENT_COLORS[i - 1];
154
+ const upper = PERCENT_COLORS[i];
155
+ const range = upper.pct - lower.pct;
156
+ const rangePct = (percent - lower.pct) / range;
157
+ const pctLower = 1 - rangePct;
158
+ const pctUpper = rangePct;
159
+ const color = {
160
+ r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),
161
+ g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),
162
+ b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)
163
+ };
164
+ return "rgb(" + [color.r, color.g, color.b].join(",") + ")";
165
+ };
166
+
167
+ // src/utils/date.utils.ts
168
+ var import_date_fns = require("date-fns");
169
+
170
+ // src/utils/types.utils.ts
171
+ var NO_OP = () => {
172
+ };
173
+ var isNullish = (value) => value === null || value === void 0;
174
+ var isNumber = (value) => {
175
+ if (isNullish(value)) {
176
+ return false;
177
+ }
178
+ if (typeof value !== "number") {
179
+ return false;
180
+ }
181
+ if (isNaN(value)) {
182
+ return false;
183
+ }
184
+ return true;
185
+ };
186
+ var isString = (value) => {
187
+ if (isNullish(value)) {
188
+ return false;
189
+ }
190
+ if (typeof value !== "string") {
191
+ return false;
192
+ }
193
+ return true;
194
+ };
195
+
196
+ // src/utils/date.utils.ts
197
+ var dateAs_HHMMSS = (value) => {
198
+ if (isNullish(value)) return "";
199
+ return (0, import_date_fns.format)(value, "HH:mm:ss");
200
+ };
201
+ var dateAs_YYYYMMDD = (value) => {
202
+ if (isNullish(value)) return "";
203
+ return (0, import_date_fns.format)(value, "yyyy-MM-dd");
204
+ };
205
+ var dateAs_YYYYMMDD_HHMMSS = (value) => {
206
+ if (isNullish(value)) return "";
207
+ return (0, import_date_fns.format)(value, "yyyy-MM-dd HH:mm:ss");
208
+ };
209
+ var nowAsTime = () => dateAs_HHMMSS(/* @__PURE__ */ new Date());
210
+ var nowAsDate = () => dateAs_YYYYMMDD(/* @__PURE__ */ new Date());
211
+ var nowAsDateTime = () => dateAs_YYYYMMDD_HHMMSS(/* @__PURE__ */ new Date());
212
+ var nowAsDateTimeForFilename = () => {
213
+ return (0, import_date_fns.format)(/* @__PURE__ */ new Date(), "yyyy-MM-dd_HH-mm-ss");
214
+ };
215
+ var DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
216
+ var formatUnixTimestamp = (timestamp, dateFormat = DEFAULT_DATE_FORMAT) => {
217
+ if (!timestamp) return "N/A";
218
+ try {
219
+ return (0, import_date_fns.format)(new Date(timestamp * 1e3), dateFormat);
220
+ } catch {
221
+ return "Invalid date";
222
+ }
223
+ };
224
+ var getCurrentUnixTimestamp = () => {
225
+ return Math.floor(Date.now() / 1e3);
226
+ };
227
+ var isExpiredTimestamp = (timestamp) => {
228
+ const now = getCurrentUnixTimestamp();
229
+ return timestamp < now;
230
+ };
231
+ var isActiveTimestamp = (timestamp) => {
232
+ const now = getCurrentUnixTimestamp();
233
+ return timestamp <= now;
234
+ };
235
+
236
+ // src/utils/errors.utils.ts
237
+ var getErrorMessage = (error) => {
238
+ if (!error) {
239
+ return "";
240
+ }
241
+ if (typeof error === "string") {
242
+ return error;
243
+ }
244
+ if (typeof error === "object" && "message" in error) {
245
+ return error.message;
246
+ }
247
+ return JSON.stringify(error);
248
+ };
249
+
250
+ // src/utils/http.utils.ts
251
+ var isHttpSuccessStatus = (status) => {
252
+ if (isNullish(status)) {
253
+ return false;
254
+ }
255
+ return status >= 200 && status < 300;
256
+ };
257
+ var isHttpClientErrorStatus = (status) => {
258
+ if (isNullish(status)) {
259
+ return false;
260
+ }
261
+ return status >= 400 && status < 500;
262
+ };
263
+ var isHttpServerErrorStatus = (status) => {
264
+ if (isNullish(status)) {
265
+ return false;
266
+ }
267
+ return status >= 500;
268
+ };
269
+
270
+ // src/utils/number.utils.ts
271
+ var toFixed = (value, decimals = 0) => {
272
+ if (isNullish(value)) return 0;
273
+ if (decimals < 0) throw new Error("[toFixed] decimals must be >= 0");
274
+ if (decimals === 0) return Math.round(value);
275
+ const multiplier = Math.pow(10, decimals);
276
+ return Math.round(value * multiplier) / multiplier;
277
+ };
278
+ var roundUpToNearest10 = (value) => {
279
+ if (isNullish(value)) return 0;
280
+ return Math.ceil(value / 10) * 10;
281
+ };
282
+ var getOrderOfMagnitudeExponent = (n) => {
283
+ if (isNullish(n)) return 0;
284
+ if (!isNumber(n)) return 0;
285
+ const absValue = Math.abs(n);
286
+ if (absValue === 0) {
287
+ return 0;
288
+ }
289
+ const integerPart = Math.floor(absValue);
290
+ return Math.floor(Math.log10(integerPart));
291
+ };
292
+
293
+ // src/utils/regex.ts
294
+ var REGEX_ALPHANUMERIC = /^[a-zA-Z0-9-_ $%#(){}:/.]+$/;
295
+ var REGEX_IPV4 = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
296
+
297
+ // src/utils/string.utils.ts
298
+ var isBlank = (str) => {
299
+ return isNullish(str) || str?.trim() === "";
300
+ };
301
+ var isNotBlank = (str) => {
302
+ return !isBlank(str);
303
+ };
304
+ var isAlphanumeric = (value) => {
305
+ return REGEX_ALPHANUMERIC.test(value);
306
+ };
307
+ var removeDiacriticalMarks = (value) => {
308
+ if (!value) {
309
+ return "";
310
+ }
311
+ return value.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
312
+ };
313
+ var capitalizeFirst = (str) => {
314
+ if (!str) return str;
315
+ return str.charAt(0).toUpperCase() + str.slice(1);
316
+ };
317
+ var countWords = (text) => {
318
+ if (!text || text.trim().length === 0) return 0;
319
+ return text.split(/\s+/).filter((word) => word.length > 0).length;
320
+ };
321
+ var truncate = (str, maxLength, ellipsis = "...") => {
322
+ if (!str || str.length <= maxLength) return str;
323
+ return str.slice(0, maxLength - ellipsis.length) + ellipsis;
324
+ };
325
+
326
+ // src/utils/thread.utils.ts
327
+ var sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
328
+
329
+ // src/utils/time.utils.ts
330
+ var ONE_SECOND_IN_MS = 1e3;
331
+ var ONE_MINUTE_IN_MS = 60 * ONE_SECOND_IN_MS;
332
+ var ONE_HOUR_IN_MS = 60 * ONE_MINUTE_IN_MS;
333
+ var ONE_DAY_IN_MS = 24 * ONE_HOUR_IN_MS;
334
+ var PeriodsInMS = {
335
+ oneSecond: ONE_SECOND_IN_MS,
336
+ oneMinute: ONE_MINUTE_IN_MS,
337
+ oneHour: ONE_HOUR_IN_MS,
338
+ oneDay: ONE_DAY_IN_MS
339
+ };
340
+
341
+ // src/utils/units.utils.ts
342
+ var M3PS_TO_GPM = 15850.3;
343
+ var PA_TO_FT = 334553e-9;
344
+ var W_TO_HP = 134102e-8;
345
+ var M_TO_INCHES = 39.3701;
346
+ var HZ_TO_RPM = 60;
347
+ var fromM3psToGPM = (value) => {
348
+ if (isNullish(value)) return 0;
349
+ return value * M3PS_TO_GPM;
350
+ };
351
+ var fromPaToFt = (value) => {
352
+ if (isNullish(value)) return 0;
353
+ return value * PA_TO_FT;
354
+ };
355
+ var fromWToHp = (value) => {
356
+ if (isNullish(value)) return 0;
357
+ return value * W_TO_HP;
358
+ };
359
+ var fromMToInches = (value) => {
360
+ if (isNullish(value)) return 0;
361
+ return value * M_TO_INCHES;
362
+ };
363
+ var fromHzToRpm = (value) => {
364
+ if (isNullish(value)) return 0;
365
+ return value * HZ_TO_RPM;
366
+ };
367
+
368
+ // src/utils/uri.utils.ts
369
+ var SCHEME_PREFIXES = {
370
+ file: "file",
371
+ content: "content",
372
+ http: "http",
373
+ https: "https",
374
+ ftp: "ftp",
375
+ ftps: "ftps",
376
+ sftp: "sftp",
377
+ smb: "smb"
378
+ };
379
+ var SCHEME_PREFIXES_ARRAY = Object.values(SCHEME_PREFIXES);
380
+ var hasScheme = (uri) => {
381
+ if (!uri) {
382
+ return false;
383
+ }
384
+ const lowerUri = uri.toLowerCase();
385
+ return SCHEME_PREFIXES_ARRAY.some((prefix) => lowerUri.startsWith(`${prefix}://`));
386
+ };
387
+
388
+ // src/utils/websocket.utils.ts
389
+ var WEBSOCKET_CONNECT_STATES = [WebSocket.CONNECTING, WebSocket.OPEN];
390
+ var isWsClosable = (ws) => {
391
+ if (isNullish(ws)) return false;
392
+ return WEBSOCKET_CONNECT_STATES.includes(ws.readyState);
393
+ };
394
+ var isWsOpenOrConnecting = (ws) => {
395
+ if (isNullish(ws)) return false;
396
+ return WEBSOCKET_CONNECT_STATES.includes(ws.readyState);
397
+ };
398
+ var closeWebSocket = (ws) => {
399
+ if (isNullish(ws) || !isWsClosable(ws)) return;
400
+ try {
401
+ ws.close();
402
+ } catch {
403
+ }
404
+ };
405
+ // Annotate the CommonJS export names for ESM import in node:
406
+ 0 && (module.exports = {
407
+ HZ_TO_RPM,
408
+ M3PS_TO_GPM,
409
+ M_TO_INCHES,
410
+ NO_OP,
411
+ PA_TO_FT,
412
+ PeriodsInMS,
413
+ REGEX_ALPHANUMERIC,
414
+ REGEX_IPV4,
415
+ SCHEME_PREFIXES,
416
+ W_TO_HP,
417
+ capitalizeFirst,
418
+ closeWebSocket,
419
+ countWords,
420
+ dateAs_HHMMSS,
421
+ dateAs_YYYYMMDD,
422
+ dateAs_YYYYMMDD_HHMMSS,
423
+ formatUnixTimestamp,
424
+ fromHzToRpm,
425
+ fromM3psToGPM,
426
+ fromMToInches,
427
+ fromPaToFt,
428
+ fromWToHp,
429
+ getColorForPercentage,
430
+ getContrastTextColor,
431
+ getCurrentUnixTimestamp,
432
+ getErrorMessage,
433
+ getLuminance,
434
+ getOpacityHexValue,
435
+ getOrderOfMagnitudeExponent,
436
+ hasScheme,
437
+ hexToNormalizedRgb,
438
+ hexToRgb,
439
+ isActiveTimestamp,
440
+ isAlphanumeric,
441
+ isBlank,
442
+ isExpiredTimestamp,
443
+ isHttpClientErrorStatus,
444
+ isHttpServerErrorStatus,
445
+ isHttpSuccessStatus,
446
+ isLightColor,
447
+ isNotBlank,
448
+ isNullish,
449
+ isNumber,
450
+ isString,
451
+ isWsClosable,
452
+ isWsOpenOrConnecting,
453
+ nowAsDate,
454
+ nowAsDateTime,
455
+ nowAsDateTimeForFilename,
456
+ nowAsTime,
457
+ removeDiacriticalMarks,
458
+ rgbToHex,
459
+ rgbToString,
460
+ rgbaToHex,
461
+ rgbaToHexWithAlpha,
462
+ rgbaToString,
463
+ roundUpToNearest10,
464
+ sleep,
465
+ toFixed,
466
+ truncate
467
+ });
468
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/color.utils.ts","../src/utils/date.utils.ts","../src/utils/types.utils.ts","../src/utils/errors.utils.ts","../src/utils/http.utils.ts","../src/utils/number.utils.ts","../src/utils/regex.ts","../src/utils/string.utils.ts","../src/utils/thread.utils.ts","../src/utils/time.utils.ts","../src/utils/units.utils.ts","../src/utils/uri.utils.ts","../src/utils/websocket.utils.ts"],"sourcesContent":["export * from \"./utils\";\n","export interface RgbColor {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface RgbaColor extends RgbColor {\n a: number;\n}\n\nexport const rgbToHex = (r: number, g: number, b: number): string => {\n if (r > 255 || g > 255 || b > 255) {\n throw new Error(\"Invalid color component\");\n }\n\n return ((r << 16) | (g << 8) | b).toString(16).padStart(6, \"0\");\n};\n\nexport const hexToRgb = (hex: string): RgbColor => {\n const cleanHex = hex.replace(\"#\", \"\");\n\n const r = parseInt(cleanHex.substring(0, 2), 16);\n const g = parseInt(cleanHex.substring(2, 4), 16);\n const b = parseInt(cleanHex.substring(4, 6), 16);\n\n return { r, g, b };\n};\n\nexport const rgbaToHex = (color: RgbaColor): string => {\n return \"#\" + rgbToHex(color.r, color.g, color.b);\n};\n\nexport const getOpacityHexValue = (opacity: number): string => {\n if (opacity < 0 || opacity > 1) {\n throw new Error(\"Invalid opacity value\");\n }\n\n return Math.round(opacity * 255)\n .toString(16)\n .padStart(2, \"0\");\n};\n\nexport const rgbaToHexWithAlpha = (color: RgbaColor): string => {\n return rgbaToHex(color) + getOpacityHexValue(color.a);\n};\n\nexport const rgbToString = (color: RgbColor): string => {\n return `rgb(${color.r}, ${color.g}, ${color.b})`;\n};\n\nexport const rgbaToString = (color: RgbaColor): string => {\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`;\n};\n\nexport const getLuminance = (r: number, g: number, b: number): number => {\n return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n};\n\nexport const getContrastTextColor = (hexColor: string): string => {\n const { r, g, b } = hexToRgb(hexColor);\n return getLuminance(r, g, b) > 0.5 ? \"#000000\" : \"#ffffff\";\n};\n\n/**\n * Normalized RGB color with values between 0 and 1.\n * Useful for graphics libraries like Three.js.\n */\nexport interface NormalizedRgb {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * Convert a hex color string to normalized RGB values (0-1 range).\n * @param hex - Hex color string (with or without # prefix)\n * @returns Normalized RGB object with values between 0 and 1\n */\nexport const hexToNormalizedRgb = (hex: string): NormalizedRgb => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16) / 255,\n g: parseInt(result[2], 16) / 255,\n b: parseInt(result[3], 16) / 255,\n }\n : { r: 0, g: 0, b: 0 };\n};\n\n/**\n * Determine if a color is light or dark based on relative luminance.\n * Useful for choosing contrasting text colors.\n * @param hex - Hex color string\n * @returns True if the color is considered light (luminance > 0.5)\n */\nexport const isLightColor = (hex: string): boolean => {\n const rgb = hexToNormalizedRgb(hex);\n // Calculate relative luminance using standard coefficients\n const luminance = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;\n return luminance > 0.5;\n};\n\nconst PERCENT_COLORS = [\n { pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } },\n { pct: 0.5, color: { r: 0xff, g: 0xff, b: 0 } },\n { pct: 1.0, color: { r: 0x00, g: 0xff, b: 0 } },\n] as const;\n\n// https://stackoverflow.com/a/7128796/704681\nexport const getColorForPercentage = (percent: number): string => {\n if (percent < 0 || percent > 1) {\n throw new Error(`Percentage must be between 0 and 1: ${percent}`);\n }\n\n let i = 0;\n for (i = 1; i < PERCENT_COLORS.length - 1; i++) {\n if (percent < PERCENT_COLORS[i].pct) {\n break;\n }\n }\n\n const lower = PERCENT_COLORS[i - 1];\n const upper = PERCENT_COLORS[i];\n const range = upper.pct - lower.pct;\n const rangePct = (percent - lower.pct) / range;\n const pctLower = 1 - rangePct;\n const pctUpper = rangePct;\n const color = {\n r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),\n g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),\n b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper),\n };\n\n return \"rgb(\" + [color.r, color.g, color.b].join(\",\") + \")\";\n};\n","import { format } from \"date-fns\";\nimport { isNullish } from \"./types.utils\";\n\nexport type DateInput = Date | string | number | null;\n\nexport const dateAs_HHMMSS = (value?: DateInput) => {\n if (isNullish(value)) return \"\";\n return format(value, \"HH:mm:ss\");\n};\n\nexport const dateAs_YYYYMMDD = (value?: DateInput) => {\n if (isNullish(value)) return \"\";\n return format(value, \"yyyy-MM-dd\");\n};\n\nexport const dateAs_YYYYMMDD_HHMMSS = (value?: DateInput) => {\n if (isNullish(value)) return \"\";\n return format(value, \"yyyy-MM-dd HH:mm:ss\");\n};\n\nexport const nowAsTime = () => dateAs_HHMMSS(new Date());\nexport const nowAsDate = () => dateAs_YYYYMMDD(new Date());\nexport const nowAsDateTime = () => dateAs_YYYYMMDD_HHMMSS(new Date());\n\nexport const nowAsDateTimeForFilename = () => {\n return format(new Date(), \"yyyy-MM-dd_HH-mm-ss\");\n};\n\nconst DEFAULT_DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\n\n/**\n * Format a Unix timestamp (seconds since epoch) to a human-readable string.\n * @param timestamp - Unix timestamp in seconds\n * @param dateFormat - Date format string (default: \"yyyy-MM-dd HH:mm:ss\")\n * @returns Formatted date string or \"N/A\" if invalid or zero.\n */\nexport const formatUnixTimestamp = (\n timestamp: number,\n dateFormat: string = DEFAULT_DATE_FORMAT\n): string => {\n if (!timestamp) return \"N/A\";\n try {\n return format(new Date(timestamp * 1000), dateFormat);\n } catch {\n return \"Invalid date\";\n }\n};\n\n/**\n * Get the current Unix timestamp in seconds.\n * @returns Current Unix timestamp\n */\nexport const getCurrentUnixTimestamp = (): number => {\n return Math.floor(Date.now() / 1000);\n};\n\n/**\n * Check if a Unix timestamp has expired (is in the past).\n * @param timestamp - Unix timestamp in seconds\n * @returns True if the timestamp is in the past\n */\nexport const isExpiredTimestamp = (timestamp: number): boolean => {\n const now = getCurrentUnixTimestamp();\n return timestamp < now;\n};\n\n/**\n * Check if a Unix timestamp is active (current or past).\n * @param timestamp - Unix timestamp in seconds\n * @returns True if the timestamp is current or in the past\n */\nexport const isActiveTimestamp = (timestamp: number): boolean => {\n const now = getCurrentUnixTimestamp();\n return timestamp <= now;\n};\n","export const NO_OP: () => void = () => {};\n\nexport const isNullish = (value: unknown): value is null | undefined => value === null || value === undefined;\n\nexport const isNumber = (value?: unknown | null): value is number => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'number') {\n return false;\n }\n\n if (isNaN(value)) {\n return false;\n }\n\n return true;\n};\n\nexport const isString = (value?: unknown | null): value is string => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n return true;\n};\n","export const getErrorMessage = (error: unknown): string => {\n if (!error) {\n return \"\";\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n if (typeof error === \"object\" && \"message\" in error) {\n return (error as { message: string }).message;\n }\n\n return JSON.stringify(error);\n};\n","import { isNullish } from './types.utils';\n\nexport const isHttpSuccessStatus = (status?: number | null): boolean => {\n if (isNullish(status)) {\n return false;\n }\n\n return status >= 200 && status < 300;\n};\n\nexport const isHttpClientErrorStatus = (status?: number | null): boolean => {\n if (isNullish(status)) {\n return false;\n }\n\n return status >= 400 && status < 500;\n};\n\nexport const isHttpServerErrorStatus = (status?: number | null): boolean => {\n if (isNullish(status)) {\n return false;\n }\n\n return status >= 500;\n};\n","import { isNullish, isNumber } from \"./types.utils\";\n\n// Example: toFixed(3.14159, 3) // 3.142\nexport const toFixed = (value?: number | null, decimals = 0): number => {\n if (isNullish(value)) return 0;\n if (decimals < 0) throw new Error(\"[toFixed] decimals must be >= 0\");\n if (decimals === 0) return Math.round(value);\n\n const multiplier = Math.pow(10, decimals);\n return Math.round(value * multiplier) / multiplier;\n};\n\nexport const roundUpToNearest10 = (value?: number | null): number => {\n if (isNullish(value)) return 0;\n return Math.ceil(value / 10) * 10;\n};\n\nexport const getOrderOfMagnitudeExponent = (n?: number | null): number => {\n if (isNullish(n)) return 0;\n if (!isNumber(n)) return 0;\n\n const absValue = Math.abs(n); \n if (absValue === 0) {\n return 0;\n }\n \n const integerPart = Math.floor(absValue);\n return Math.floor(Math.log10(integerPart));\n}\n","export const REGEX_ALPHANUMERIC = /^[a-zA-Z0-9-_ $%#(){}:/.]+$/;\n\nexport const REGEX_IPV4 = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n","import { REGEX_ALPHANUMERIC } from './regex';\nimport { isNullish } from './types.utils';\n\nexport const isBlank = (str?: string | null): str is null | undefined | '' => {\n return isNullish(str) || str?.trim() === '';\n};\n\nexport const isNotBlank = (str?: string | null): str is string => {\n return !isBlank(str);\n};\n\nexport const isAlphanumeric = (value: string): boolean => {\n return REGEX_ALPHANUMERIC.test(value);\n};\n\n/**\n * Removes diacritical marks (e.g., accents, umlauts) from a string.\n * This method normalizes the input string to its canonical decomposition\n * form (NFD) and removes any combining diacritical marks.\n *\n * @param {string} value - The input string to normalize.\n * @returns {string} - The normalized string with diacritical marks removed.\n *\n * @example\n * const result = removeDiacriticalMarks(\"Ça va très bien, n'est-ce pas?\");\n * console.log(result); // \"Ca va tres bien, n'est-ce pas?\"\n */\nexport const removeDiacriticalMarks = (value: string): string => {\n if (!value) {\n return '';\n }\n\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n};\n\n/**\n * Capitalize the first letter of a string.\n * @param str - The input string\n * @returns The string with the first character uppercased\n */\nexport const capitalizeFirst = (str: string): string => {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * Count the number of words in a text string.\n * Words are separated by whitespace.\n * @param text - The text to count words in\n * @returns The number of words found\n */\nexport const countWords = (text: string): number => {\n if (!text || text.trim().length === 0) return 0;\n return text.split(/\\s+/).filter((word) => word.length > 0).length;\n};\n\n/**\n * Truncate a string to a maximum length, adding an ellipsis if truncated.\n * @param str - The string to truncate\n * @param maxLength - Maximum length before truncation\n * @param ellipsis - The ellipsis string to append (default: \"...\")\n * @returns The truncated string\n */\nexport const truncate = (str: string, maxLength: number, ellipsis = \"...\"): string => {\n if (!str || str.length <= maxLength) return str;\n return str.slice(0, maxLength - ellipsis.length) + ellipsis;\n};\n","export const sleep = (milliseconds: number) =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n","const ONE_SECOND_IN_MS = 1000;\nconst ONE_MINUTE_IN_MS = 60 * ONE_SECOND_IN_MS;\nconst ONE_HOUR_IN_MS = 60 * ONE_MINUTE_IN_MS;\nconst ONE_DAY_IN_MS = 24 * ONE_HOUR_IN_MS;\n\nexport const PeriodsInMS = {\n oneSecond: ONE_SECOND_IN_MS,\n oneMinute: ONE_MINUTE_IN_MS,\n oneHour: ONE_HOUR_IN_MS,\n oneDay: ONE_DAY_IN_MS,\n} as const;\n","import { isNullish } from \"./types.utils\";\n\n/** m³/s to gallons per minute */\nexport const M3PS_TO_GPM = 15850.3;\n\n/** Pascals to feet of head (1 Pa = 1 N/m²) */\nexport const PA_TO_FT = 0.000334553;\n\n/** Watts to Horsepower */\nexport const W_TO_HP = 0.00134102;\n\n/** meters to inches */\nexport const M_TO_INCHES = 39.3701;\n\n/** Hz to RPM (for synchronous speed) */\nexport const HZ_TO_RPM = 60;\n\nexport const fromM3psToGPM = (value?: number | null): number => {\n if (isNullish(value)) return 0;\n\n return value * M3PS_TO_GPM;\n};\n\nexport const fromPaToFt = (value?: number | null): number => {\n if (isNullish(value)) return 0;\n\n return value * PA_TO_FT;\n};\n\nexport const fromWToHp = (value?: number | null): number => {\n if (isNullish(value)) return 0;\n\n return value * W_TO_HP;\n};\n\nexport const fromMToInches = (value?: number | null): number => {\n if (isNullish(value)) return 0;\n\n return value * M_TO_INCHES;\n};\n\nexport const fromHzToRpm = (value?: number | null): number => {\n if (isNullish(value)) return 0;\n\n return value * HZ_TO_RPM;\n};\n","export const SCHEME_PREFIXES = {\n file: 'file',\n content: 'content',\n http: 'http',\n https: 'https',\n ftp: 'ftp',\n ftps: 'ftps',\n sftp: 'sftp',\n smb: 'smb',\n} as const;\n\nconst SCHEME_PREFIXES_ARRAY = Object.values(SCHEME_PREFIXES);\n\nexport const hasScheme = (uri?: string | null): boolean => {\n if (!uri) {\n return false;\n }\n\n const lowerUri = uri.toLowerCase();\n return SCHEME_PREFIXES_ARRAY.some((prefix) => lowerUri.startsWith(`${prefix}://`));\n};\n","import { isNullish } from \"./types.utils\";\n\nconst WEBSOCKET_CONNECT_STATES: number[] = [WebSocket.CONNECTING, WebSocket.OPEN] as const;\n\nexport const isWsClosable = (ws?: WebSocket | null): ws is WebSocket => {\n if (isNullish(ws)) return false;\n return WEBSOCKET_CONNECT_STATES.includes(ws.readyState);\n};\n\nexport const isWsOpenOrConnecting = (ws?: WebSocket | null): ws is WebSocket => {\n if (isNullish(ws)) return false;\n return WEBSOCKET_CONNECT_STATES.includes(ws.readyState);\n};\n\nexport const closeWebSocket = (ws?: WebSocket | null) => {\n if (isNullish(ws) || !isWsClosable(ws)) return;\n\n try {\n ws.close();\n } catch {\n // do nothing (best effort to close, ignore unexpected errors)\n }\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,172 @@
1
+ interface RgbColor {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ }
6
+ interface RgbaColor extends RgbColor {
7
+ a: number;
8
+ }
9
+ declare const rgbToHex: (r: number, g: number, b: number) => string;
10
+ declare const hexToRgb: (hex: string) => RgbColor;
11
+ declare const rgbaToHex: (color: RgbaColor) => string;
12
+ declare const getOpacityHexValue: (opacity: number) => string;
13
+ declare const rgbaToHexWithAlpha: (color: RgbaColor) => string;
14
+ declare const rgbToString: (color: RgbColor) => string;
15
+ declare const rgbaToString: (color: RgbaColor) => string;
16
+ declare const getLuminance: (r: number, g: number, b: number) => number;
17
+ declare const getContrastTextColor: (hexColor: string) => string;
18
+ /**
19
+ * Normalized RGB color with values between 0 and 1.
20
+ * Useful for graphics libraries like Three.js.
21
+ */
22
+ interface NormalizedRgb {
23
+ r: number;
24
+ g: number;
25
+ b: number;
26
+ }
27
+ /**
28
+ * Convert a hex color string to normalized RGB values (0-1 range).
29
+ * @param hex - Hex color string (with or without # prefix)
30
+ * @returns Normalized RGB object with values between 0 and 1
31
+ */
32
+ declare const hexToNormalizedRgb: (hex: string) => NormalizedRgb;
33
+ /**
34
+ * Determine if a color is light or dark based on relative luminance.
35
+ * Useful for choosing contrasting text colors.
36
+ * @param hex - Hex color string
37
+ * @returns True if the color is considered light (luminance > 0.5)
38
+ */
39
+ declare const isLightColor: (hex: string) => boolean;
40
+ declare const getColorForPercentage: (percent: number) => string;
41
+
42
+ type DateInput = Date | string | number | null;
43
+ declare const dateAs_HHMMSS: (value?: DateInput) => string;
44
+ declare const dateAs_YYYYMMDD: (value?: DateInput) => string;
45
+ declare const dateAs_YYYYMMDD_HHMMSS: (value?: DateInput) => string;
46
+ declare const nowAsTime: () => string;
47
+ declare const nowAsDate: () => string;
48
+ declare const nowAsDateTime: () => string;
49
+ declare const nowAsDateTimeForFilename: () => string;
50
+ /**
51
+ * Format a Unix timestamp (seconds since epoch) to a human-readable string.
52
+ * @param timestamp - Unix timestamp in seconds
53
+ * @param dateFormat - Date format string (default: "yyyy-MM-dd HH:mm:ss")
54
+ * @returns Formatted date string or "N/A" if invalid or zero.
55
+ */
56
+ declare const formatUnixTimestamp: (timestamp: number, dateFormat?: string) => string;
57
+ /**
58
+ * Get the current Unix timestamp in seconds.
59
+ * @returns Current Unix timestamp
60
+ */
61
+ declare const getCurrentUnixTimestamp: () => number;
62
+ /**
63
+ * Check if a Unix timestamp has expired (is in the past).
64
+ * @param timestamp - Unix timestamp in seconds
65
+ * @returns True if the timestamp is in the past
66
+ */
67
+ declare const isExpiredTimestamp: (timestamp: number) => boolean;
68
+ /**
69
+ * Check if a Unix timestamp is active (current or past).
70
+ * @param timestamp - Unix timestamp in seconds
71
+ * @returns True if the timestamp is current or in the past
72
+ */
73
+ declare const isActiveTimestamp: (timestamp: number) => boolean;
74
+
75
+ declare const getErrorMessage: (error: unknown) => string;
76
+
77
+ declare const isHttpSuccessStatus: (status?: number | null) => boolean;
78
+ declare const isHttpClientErrorStatus: (status?: number | null) => boolean;
79
+ declare const isHttpServerErrorStatus: (status?: number | null) => boolean;
80
+
81
+ declare const toFixed: (value?: number | null, decimals?: number) => number;
82
+ declare const roundUpToNearest10: (value?: number | null) => number;
83
+ declare const getOrderOfMagnitudeExponent: (n?: number | null) => number;
84
+
85
+ declare const REGEX_ALPHANUMERIC: RegExp;
86
+ declare const REGEX_IPV4: RegExp;
87
+
88
+ declare const isBlank: (str?: string | null) => str is null | undefined | "";
89
+ declare const isNotBlank: (str?: string | null) => str is string;
90
+ declare const isAlphanumeric: (value: string) => boolean;
91
+ /**
92
+ * Removes diacritical marks (e.g., accents, umlauts) from a string.
93
+ * This method normalizes the input string to its canonical decomposition
94
+ * form (NFD) and removes any combining diacritical marks.
95
+ *
96
+ * @param {string} value - The input string to normalize.
97
+ * @returns {string} - The normalized string with diacritical marks removed.
98
+ *
99
+ * @example
100
+ * const result = removeDiacriticalMarks("Ça va très bien, n'est-ce pas?");
101
+ * console.log(result); // "Ca va tres bien, n'est-ce pas?"
102
+ */
103
+ declare const removeDiacriticalMarks: (value: string) => string;
104
+ /**
105
+ * Capitalize the first letter of a string.
106
+ * @param str - The input string
107
+ * @returns The string with the first character uppercased
108
+ */
109
+ declare const capitalizeFirst: (str: string) => string;
110
+ /**
111
+ * Count the number of words in a text string.
112
+ * Words are separated by whitespace.
113
+ * @param text - The text to count words in
114
+ * @returns The number of words found
115
+ */
116
+ declare const countWords: (text: string) => number;
117
+ /**
118
+ * Truncate a string to a maximum length, adding an ellipsis if truncated.
119
+ * @param str - The string to truncate
120
+ * @param maxLength - Maximum length before truncation
121
+ * @param ellipsis - The ellipsis string to append (default: "...")
122
+ * @returns The truncated string
123
+ */
124
+ declare const truncate: (str: string, maxLength: number, ellipsis?: string) => string;
125
+
126
+ declare const sleep: (milliseconds: number) => Promise<unknown>;
127
+
128
+ declare const PeriodsInMS: {
129
+ readonly oneSecond: 1000;
130
+ readonly oneMinute: number;
131
+ readonly oneHour: number;
132
+ readonly oneDay: number;
133
+ };
134
+
135
+ declare const NO_OP: () => void;
136
+ declare const isNullish: (value: unknown) => value is null | undefined;
137
+ declare const isNumber: (value?: unknown | null) => value is number;
138
+ declare const isString: (value?: unknown | null) => value is string;
139
+
140
+ /** m³/s to gallons per minute */
141
+ declare const M3PS_TO_GPM = 15850.3;
142
+ /** Pascals to feet of head (1 Pa = 1 N/m²) */
143
+ declare const PA_TO_FT = 0.000334553;
144
+ /** Watts to Horsepower */
145
+ declare const W_TO_HP = 0.00134102;
146
+ /** meters to inches */
147
+ declare const M_TO_INCHES = 39.3701;
148
+ /** Hz to RPM (for synchronous speed) */
149
+ declare const HZ_TO_RPM = 60;
150
+ declare const fromM3psToGPM: (value?: number | null) => number;
151
+ declare const fromPaToFt: (value?: number | null) => number;
152
+ declare const fromWToHp: (value?: number | null) => number;
153
+ declare const fromMToInches: (value?: number | null) => number;
154
+ declare const fromHzToRpm: (value?: number | null) => number;
155
+
156
+ declare const SCHEME_PREFIXES: {
157
+ readonly file: "file";
158
+ readonly content: "content";
159
+ readonly http: "http";
160
+ readonly https: "https";
161
+ readonly ftp: "ftp";
162
+ readonly ftps: "ftps";
163
+ readonly sftp: "sftp";
164
+ readonly smb: "smb";
165
+ };
166
+ declare const hasScheme: (uri?: string | null) => boolean;
167
+
168
+ declare const isWsClosable: (ws?: WebSocket | null) => ws is WebSocket;
169
+ declare const isWsOpenOrConnecting: (ws?: WebSocket | null) => ws is WebSocket;
170
+ declare const closeWebSocket: (ws?: WebSocket | null) => void;
171
+
172
+ export { type DateInput, HZ_TO_RPM, M3PS_TO_GPM, M_TO_INCHES, NO_OP, type NormalizedRgb, PA_TO_FT, PeriodsInMS, REGEX_ALPHANUMERIC, REGEX_IPV4, type RgbColor, type RgbaColor, SCHEME_PREFIXES, W_TO_HP, capitalizeFirst, closeWebSocket, countWords, dateAs_HHMMSS, dateAs_YYYYMMDD, dateAs_YYYYMMDD_HHMMSS, formatUnixTimestamp, fromHzToRpm, fromM3psToGPM, fromMToInches, fromPaToFt, fromWToHp, getColorForPercentage, getContrastTextColor, getCurrentUnixTimestamp, getErrorMessage, getLuminance, getOpacityHexValue, getOrderOfMagnitudeExponent, hasScheme, hexToNormalizedRgb, hexToRgb, isActiveTimestamp, isAlphanumeric, isBlank, isExpiredTimestamp, isHttpClientErrorStatus, isHttpServerErrorStatus, isHttpSuccessStatus, isLightColor, isNotBlank, isNullish, isNumber, isString, isWsClosable, isWsOpenOrConnecting, nowAsDate, nowAsDateTime, nowAsDateTimeForFilename, nowAsTime, removeDiacriticalMarks, rgbToHex, rgbToString, rgbaToHex, rgbaToHexWithAlpha, rgbaToString, roundUpToNearest10, sleep, toFixed, truncate };