@turndown/library 0.1.24 → 0.1.28

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 (75) hide show
  1. package/dist/index.cjs +1355 -0
  2. package/dist/index.d.cts +2820 -0
  3. package/dist/index.d.ts +2820 -2
  4. package/dist/index.js +1190 -2
  5. package/package.json +3 -2
  6. package/dist/helpers/date/index.d.ts +0 -113
  7. package/dist/helpers/date/index.js +0 -171
  8. package/dist/helpers/index.d.ts +0 -4
  9. package/dist/helpers/index.js +0 -3
  10. package/dist/helpers/object/index.d.ts +0 -298
  11. package/dist/helpers/object/index.js +0 -540
  12. package/dist/helpers/string/index.d.ts +0 -258
  13. package/dist/helpers/string/index.js +0 -496
  14. package/dist/types/api/index.d.ts +0 -71
  15. package/dist/types/api/index.js +0 -54
  16. package/dist/types/auth/index.d.ts +0 -107
  17. package/dist/types/auth/index.js +0 -8
  18. package/dist/types/auth/routes.d.ts +0 -160
  19. package/dist/types/auth/routes.js +0 -1
  20. package/dist/types/base/index.d.ts +0 -200
  21. package/dist/types/base/index.js +0 -177
  22. package/dist/types/base/paging.types.d.ts +0 -47
  23. package/dist/types/base/paging.types.js +0 -1
  24. package/dist/types/checklist-template/index.d.ts +0 -48
  25. package/dist/types/checklist-template/index.js +0 -1
  26. package/dist/types/checklist-template/routes.d.ts +0 -85
  27. package/dist/types/checklist-template/routes.js +0 -1
  28. package/dist/types/company/index.d.ts +0 -22
  29. package/dist/types/company/index.js +0 -7
  30. package/dist/types/company/routes.d.ts +0 -100
  31. package/dist/types/company/routes.js +0 -1
  32. package/dist/types/damage-report/index.d.ts +0 -148
  33. package/dist/types/damage-report/index.js +0 -29
  34. package/dist/types/damage-report/routes.d.ts +0 -112
  35. package/dist/types/damage-report/routes.js +0 -1
  36. package/dist/types/errors/index.d.ts +0 -66
  37. package/dist/types/errors/index.js +0 -41
  38. package/dist/types/health/index.d.ts +0 -20
  39. package/dist/types/health/index.js +0 -1
  40. package/dist/types/health/routes.d.ts +0 -10
  41. package/dist/types/health/routes.js +0 -1
  42. package/dist/types/image/index.d.ts +0 -35
  43. package/dist/types/image/index.js +0 -12
  44. package/dist/types/image/routes.d.ts +0 -32
  45. package/dist/types/image/routes.js +0 -1
  46. package/dist/types/index.d.ts +0 -22
  47. package/dist/types/index.js +0 -22
  48. package/dist/types/inventory/index.d.ts +0 -124
  49. package/dist/types/inventory/index.js +0 -30
  50. package/dist/types/inventory/routes.d.ts +0 -109
  51. package/dist/types/inventory/routes.js +0 -1
  52. package/dist/types/job/index.d.ts +0 -7
  53. package/dist/types/job/index.js +0 -1
  54. package/dist/types/property/index.d.ts +0 -113
  55. package/dist/types/property/index.js +0 -25
  56. package/dist/types/property/routes.d.ts +0 -54
  57. package/dist/types/property/routes.js +0 -1
  58. package/dist/types/room/index.d.ts +0 -28
  59. package/dist/types/room/index.js +0 -17
  60. package/dist/types/room/routes.d.ts +0 -35
  61. package/dist/types/room/routes.js +0 -1
  62. package/dist/types/room-checklist/index.d.ts +0 -43
  63. package/dist/types/room-checklist/index.js +0 -1
  64. package/dist/types/room-checklist/routes.d.ts +0 -78
  65. package/dist/types/room-checklist/routes.js +0 -1
  66. package/dist/types/subscription/index.d.ts +0 -32
  67. package/dist/types/subscription/index.js +0 -16
  68. package/dist/types/user/index.d.ts +0 -59
  69. package/dist/types/user/index.js +0 -20
  70. package/dist/types/user/routes.d.ts +0 -46
  71. package/dist/types/user/routes.js +0 -1
  72. package/dist/types/work-session/index.d.ts +0 -97
  73. package/dist/types/work-session/index.js +0 -18
  74. package/dist/types/work-session/routes.d.ts +0 -89
  75. package/dist/types/work-session/routes.js +0 -1
package/dist/index.js CHANGED
@@ -1,2 +1,1190 @@
1
- export * from "./helpers";
2
- export * from "./types";
1
+ // src/helpers/date/index.ts
2
+ import dayjs from "dayjs";
3
+ import isoWeek from "dayjs/plugin/isoWeek";
4
+ import relativeTime from "dayjs/plugin/relativeTime";
5
+ dayjs.extend(relativeTime);
6
+ dayjs.extend(isoWeek);
7
+ var defaultDateFallback = "--";
8
+ var isValidDateInput = (date) => {
9
+ return date !== null && date !== void 0 && dayjs(date).isValid();
10
+ };
11
+ var formatDate = (date, format = "MM/DD/YYYY") => {
12
+ if (!isValidDateInput(date)) {
13
+ return defaultDateFallback;
14
+ }
15
+ return dayjs(date).format(format);
16
+ };
17
+ var timeAgo = (date) => {
18
+ if (!isValidDateInput(date)) {
19
+ return defaultDateFallback;
20
+ }
21
+ return dayjs(date).fromNow();
22
+ };
23
+ var addDays = (date, days) => {
24
+ return dayjs(date).add(days, "day").toDate();
25
+ };
26
+ var subtractDays = (date, days) => {
27
+ return dayjs(date).subtract(days, "day").toDate();
28
+ };
29
+ var daysBetween = (dateA, dateB) => {
30
+ if (!isValidDateInput(dateA) || !isValidDateInput(dateB)) {
31
+ return 0;
32
+ }
33
+ return Math.abs(dayjs(dateA).diff(dayjs(dateB), "day"));
34
+ };
35
+ var isToday = (date) => {
36
+ if (!isValidDateInput(date)) {
37
+ return false;
38
+ }
39
+ return dayjs(date).isSame(dayjs(), "day");
40
+ };
41
+ var isPast = (date) => {
42
+ if (!isValidDateInput(date)) {
43
+ return false;
44
+ }
45
+ return dayjs(date).isBefore(dayjs());
46
+ };
47
+ var isFuture = (date) => {
48
+ if (!isValidDateInput(date)) {
49
+ return false;
50
+ }
51
+ return dayjs(date).isAfter(dayjs());
52
+ };
53
+ var startOfDay = (date) => {
54
+ return dayjs(date).startOf("day").toDate();
55
+ };
56
+ var endOfDay = (date) => {
57
+ return dayjs(date).endOf("day").toDate();
58
+ };
59
+ var startOfWeek = (date) => {
60
+ return dayjs(date).startOf("isoWeek").toDate();
61
+ };
62
+ var endOfWeek = (date) => {
63
+ return dayjs(date).endOf("isoWeek").toDate();
64
+ };
65
+ var getWeekDays = (date) => {
66
+ const weekStart = dayjs(date).startOf("isoWeek");
67
+ return Array.from({ length: 7 }, (_value, index) => {
68
+ return weekStart.add(index, "day").startOf("day").toDate();
69
+ });
70
+ };
71
+ var addWeeks = (date, weeks) => {
72
+ return dayjs(date).add(weeks, "week").toDate();
73
+ };
74
+ var subtractWeeks = (date, weeks) => {
75
+ return dayjs(date).subtract(weeks, "week").toDate();
76
+ };
77
+
78
+ // src/helpers/object/index.ts
79
+ var unsafePathSegments = /* @__PURE__ */ new Set(["__proto__", "prototype", "constructor"]);
80
+ var isRecord = (value) => {
81
+ return typeof value === "object" && value !== null && !Array.isArray(value) && !(value instanceof Date);
82
+ };
83
+ var isSafePathSegment = (segment) => {
84
+ return segment.length > 0 && !unsafePathSegments.has(segment);
85
+ };
86
+ var getPathSegments = (path) => {
87
+ return path.split(".").filter((segment) => segment.length > 0);
88
+ };
89
+ function parseJSON(jsonString, fallbackValue) {
90
+ if (!jsonString) {
91
+ return fallbackValue ?? {};
92
+ }
93
+ try {
94
+ const parsedValue = JSON.parse(jsonString);
95
+ return parsedValue;
96
+ } catch {
97
+ return fallbackValue ?? {};
98
+ }
99
+ }
100
+ var JSONStringify = (value) => {
101
+ const seenValues = /* @__PURE__ */ new WeakSet();
102
+ try {
103
+ return JSON.stringify(value, (_key, nestedValue) => {
104
+ if (typeof nestedValue === "bigint") {
105
+ return nestedValue.toString();
106
+ }
107
+ if (typeof nestedValue === "object" && nestedValue !== null) {
108
+ if (seenValues.has(nestedValue)) {
109
+ return void 0;
110
+ }
111
+ seenValues.add(nestedValue);
112
+ }
113
+ return nestedValue;
114
+ });
115
+ } catch {
116
+ return void 0;
117
+ }
118
+ };
119
+ var removeUndefined = (value) => {
120
+ if (Array.isArray(value)) {
121
+ return value.map((item) => removeUndefined(item));
122
+ }
123
+ if (isRecord(value)) {
124
+ const updatedValue = Object.entries(value).reduce(
125
+ (accumulator, [key, nestedValue]) => {
126
+ if (nestedValue !== void 0) {
127
+ accumulator[key] = removeUndefined(nestedValue);
128
+ }
129
+ return accumulator;
130
+ },
131
+ {}
132
+ );
133
+ return updatedValue;
134
+ }
135
+ return value;
136
+ };
137
+ var validPath = (location, key) => {
138
+ return location?.pathname === key;
139
+ };
140
+ var returnObject = (input) => {
141
+ return Array.isArray(input) ? input[0] : input;
142
+ };
143
+ var filterArrayById = (array1, array2) => {
144
+ if (!Array.isArray(array1) || !Array.isArray(array2)) {
145
+ return [];
146
+ }
147
+ const idsToExclude = new Set(array2.map((item) => item.id));
148
+ return array1.filter((item) => !idsToExclude.has(item.id));
149
+ };
150
+ var sortArrayByProperty = (array, property) => {
151
+ if (!Array.isArray(array) || array.length === 0) return [];
152
+ return array.sort((a, b) => {
153
+ const firstValue = a[property];
154
+ const secondValue = b[property];
155
+ if (firstValue === secondValue) return 0;
156
+ if (firstValue === null || firstValue === void 0) return 1;
157
+ if (secondValue === null || secondValue === void 0) return -1;
158
+ if (firstValue < secondValue) return -1;
159
+ if (firstValue > secondValue) return 1;
160
+ return 0;
161
+ });
162
+ };
163
+ var replaceNulls = (value) => {
164
+ if (value === null) {
165
+ return "";
166
+ }
167
+ if (Array.isArray(value)) {
168
+ return value.map((item) => replaceNulls(item));
169
+ }
170
+ if (isRecord(value)) {
171
+ const updatedValue = Object.entries(value).reduce(
172
+ (accumulator, [key, nestedValue]) => {
173
+ accumulator[key] = replaceNulls(nestedValue);
174
+ return accumulator;
175
+ },
176
+ {}
177
+ );
178
+ return updatedValue;
179
+ }
180
+ return value;
181
+ };
182
+ var removeFormProperties = (value) => {
183
+ if (Array.isArray(value)) {
184
+ return value.map((item) => removeFormProperties(item));
185
+ }
186
+ if (isRecord(value)) {
187
+ const updatedValue = Object.entries(value).reduce(
188
+ (accumulator, [key, nestedValue]) => {
189
+ if (!key.includes(".")) {
190
+ accumulator[key] = removeFormProperties(nestedValue);
191
+ }
192
+ return accumulator;
193
+ },
194
+ {}
195
+ );
196
+ return updatedValue;
197
+ }
198
+ return value;
199
+ };
200
+ var convertStringBooleans = (value) => {
201
+ if (Array.isArray(value)) {
202
+ return value.map((item) => convertStringBooleans(item));
203
+ }
204
+ if (isRecord(value)) {
205
+ const updatedValue = Object.entries(value).reduce(
206
+ (accumulator, [key, nestedValue]) => {
207
+ if (nestedValue === "true") {
208
+ accumulator[key] = true;
209
+ } else if (nestedValue === "false") {
210
+ accumulator[key] = false;
211
+ } else {
212
+ accumulator[key] = convertStringBooleans(nestedValue);
213
+ }
214
+ return accumulator;
215
+ },
216
+ {}
217
+ );
218
+ return updatedValue;
219
+ }
220
+ return value;
221
+ };
222
+ var cleanFormData = (objectToClean) => {
223
+ return removeFormProperties(
224
+ convertStringBooleans(removeUndefined(objectToClean))
225
+ );
226
+ };
227
+ var resetPagination = (sort, filters) => {
228
+ return {
229
+ page: 1,
230
+ size: 25,
231
+ sort: sort || [],
232
+ filters: filters || []
233
+ };
234
+ };
235
+ var formatPhoneNumber = (value) => {
236
+ const originalValue = value.toString();
237
+ const digits = originalValue.replace(/\D/g, "");
238
+ const normalizedDigits = digits.length === 11 && digits.startsWith("1") ? digits.slice(1) : digits;
239
+ if (normalizedDigits.length !== 10) return originalValue;
240
+ const area = normalizedDigits.slice(0, 3);
241
+ const prefix = normalizedDigits.slice(3, 6);
242
+ const line = normalizedDigits.slice(6);
243
+ return `(${area}) ${prefix}-${line}`;
244
+ };
245
+ var formatNumber = (value) => {
246
+ return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
247
+ };
248
+ var parseNumber = (value) => {
249
+ return value.toString().replace(/,/g, "");
250
+ };
251
+ var deletePropertyIfExists = (objectToUpdate, propertyName) => {
252
+ if (Object.prototype.hasOwnProperty.call(objectToUpdate, propertyName)) {
253
+ delete objectToUpdate[propertyName];
254
+ }
255
+ };
256
+ var chunkArray = (array, chunkSize) => {
257
+ if (!Array.isArray(array) || chunkSize <= 0 || !Number.isFinite(chunkSize)) {
258
+ return [];
259
+ }
260
+ const result = [];
261
+ const normalizedChunkSize = Math.floor(chunkSize);
262
+ for (let i = 0; i < array.length; i += normalizedChunkSize) {
263
+ result.push(array.slice(i, i + normalizedChunkSize));
264
+ }
265
+ return result;
266
+ };
267
+ var omitProperties = (objectToOmitFrom, propsToOmit) => {
268
+ const updatedObject = { ...objectToOmitFrom };
269
+ propsToOmit.forEach((propertyName) => {
270
+ delete updatedObject[propertyName];
271
+ });
272
+ return updatedObject;
273
+ };
274
+ var hasProperty = (value, key) => {
275
+ if (value === null || value === void 0) return false;
276
+ return Object.prototype.hasOwnProperty.call(value, key);
277
+ };
278
+ var hasOwnProp = (value, key) => {
279
+ return hasProperty(value, key);
280
+ };
281
+ var hasProperties = (value) => {
282
+ return isRecord(value) && Object.keys(value).length > 0;
283
+ };
284
+ var getFirstPropertyValue = (value) => {
285
+ if (value === null || value === void 0 || !hasProperties(value)) {
286
+ return null;
287
+ }
288
+ const source = value;
289
+ const keys = Object.keys(source);
290
+ return source[keys[0]];
291
+ };
292
+ var getNestedValue = (value, path) => {
293
+ const pathSegments = getPathSegments(path);
294
+ if (pathSegments.length === 0) {
295
+ return value;
296
+ }
297
+ let currentValue = value;
298
+ for (const pathSegment of pathSegments) {
299
+ if (!isSafePathSegment(pathSegment)) {
300
+ return void 0;
301
+ }
302
+ if (currentValue === null || currentValue === void 0) {
303
+ return void 0;
304
+ }
305
+ if (typeof currentValue !== "object" && typeof currentValue !== "function") {
306
+ return void 0;
307
+ }
308
+ currentValue = currentValue[pathSegment];
309
+ }
310
+ return currentValue;
311
+ };
312
+ var setNestedValue = (objectToUpdate, path, value) => {
313
+ const pathSegments = getPathSegments(path);
314
+ if (pathSegments.length === 0 || pathSegments.some((pathSegment) => !isSafePathSegment(pathSegment))) {
315
+ return objectToUpdate;
316
+ }
317
+ let currentValue = objectToUpdate;
318
+ for (let i = 0; i < pathSegments.length - 1; i += 1) {
319
+ const pathSegment = pathSegments[i];
320
+ const nextValue = currentValue[pathSegment];
321
+ if (!isRecord(nextValue)) {
322
+ currentValue[pathSegment] = {};
323
+ }
324
+ currentValue = currentValue[pathSegment];
325
+ }
326
+ currentValue[pathSegments[pathSegments.length - 1]] = value;
327
+ return objectToUpdate;
328
+ };
329
+ var deepClone = (value) => {
330
+ const cloneValue = (nestedValue, seenValues) => {
331
+ if (nestedValue === null || typeof nestedValue !== "object") {
332
+ return nestedValue;
333
+ }
334
+ if (nestedValue instanceof Date) {
335
+ return new Date(nestedValue.getTime());
336
+ }
337
+ if (seenValues.has(nestedValue)) {
338
+ return seenValues.get(nestedValue);
339
+ }
340
+ if (Array.isArray(nestedValue)) {
341
+ const clonedArray = [];
342
+ seenValues.set(nestedValue, clonedArray);
343
+ nestedValue.forEach((item) => {
344
+ clonedArray.push(cloneValue(item, seenValues));
345
+ });
346
+ return clonedArray;
347
+ }
348
+ const clonedObject = Object.create(
349
+ Object.getPrototypeOf(nestedValue)
350
+ );
351
+ seenValues.set(nestedValue, clonedObject);
352
+ Reflect.ownKeys(nestedValue).forEach((key) => {
353
+ clonedObject[key] = cloneValue(
354
+ nestedValue[key],
355
+ seenValues
356
+ );
357
+ });
358
+ return clonedObject;
359
+ };
360
+ return cloneValue(value, /* @__PURE__ */ new WeakMap());
361
+ };
362
+ var flatten = (value, prefix = "") => {
363
+ const result = {};
364
+ Object.entries(value).forEach(([key, nestedValue]) => {
365
+ const newKey = prefix ? `${prefix}.${key}` : key;
366
+ if (isRecord(nestedValue)) {
367
+ Object.assign(result, flatten(nestedValue, newKey));
368
+ return;
369
+ }
370
+ result[newKey] = nestedValue;
371
+ });
372
+ return result;
373
+ };
374
+ var unflatten = (value) => {
375
+ const result = {};
376
+ Object.entries(value).forEach(([key, nestedValue]) => {
377
+ setNestedValue(result, key, nestedValue);
378
+ });
379
+ return result;
380
+ };
381
+
382
+ // src/helpers/string/index.ts
383
+ var wordBoundaryRegex = /([a-z0-9])([A-Z])/g;
384
+ var acronymBoundaryRegex = /([A-Z]+)([A-Z][a-z])/g;
385
+ var getWords = (value) => {
386
+ return value.trim().replace(acronymBoundaryRegex, "$1 $2").replace(wordBoundaryRegex, "$1 $2").replace(/[^a-zA-Z0-9]+/g, " ").trim().split(/\s+/).filter(Boolean);
387
+ };
388
+ var capitalizeWord = (value) => {
389
+ if (!value) {
390
+ return "";
391
+ }
392
+ return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
393
+ };
394
+ var normalCase = (str) => {
395
+ if (!str) {
396
+ return "";
397
+ }
398
+ return getWords(str).map(capitalizeWord).join(" ");
399
+ };
400
+ var sentenceCase = (str) => {
401
+ if (!str) {
402
+ return "";
403
+ }
404
+ const normalizedValue = str.trim().toLowerCase();
405
+ return normalizedValue.charAt(0).toUpperCase() + normalizedValue.slice(1);
406
+ };
407
+ var upperCase = (str) => {
408
+ return str?.toUpperCase() ?? "";
409
+ };
410
+ var lowerCase = (str) => {
411
+ return str?.toLowerCase() ?? "";
412
+ };
413
+ var toCamelCase = (str) => {
414
+ const words = getWords(str);
415
+ if (words.length === 0) {
416
+ return "";
417
+ }
418
+ const [firstWord, ...remainingWords] = words;
419
+ return [firstWord.toLowerCase(), ...remainingWords.map(capitalizeWord)].join(
420
+ ""
421
+ );
422
+ };
423
+ var camelCase = toCamelCase;
424
+ var toKebabCase = (str) => {
425
+ return getWords(str).map((word) => word.toLowerCase()).join("-");
426
+ };
427
+ var kebabCase = toKebabCase;
428
+ var toSnakeCase = (str) => {
429
+ return getWords(str).map((word) => word.toLowerCase()).join("_");
430
+ };
431
+ var snakeCase = toSnakeCase;
432
+ var toPascalCase = (str) => {
433
+ return getWords(str).map(capitalizeWord).join("");
434
+ };
435
+ var pascalCase = toPascalCase;
436
+ var snakeCaseToSpaces = (str) => {
437
+ return str.replace(/_+/g, " ").trim();
438
+ };
439
+ var kebabToSpaces = (str) => {
440
+ return str.replace(/-+/g, " ").trim();
441
+ };
442
+ var capitalize = (str) => {
443
+ if (!str) {
444
+ return "";
445
+ }
446
+ return str.charAt(0).toUpperCase() + str.slice(1);
447
+ };
448
+ var titleCase = (str) => {
449
+ return str.replace(/\b\w/g, (char) => char.toUpperCase());
450
+ };
451
+ var truncate = (str, length, suffix = "...") => {
452
+ if (length <= 0) {
453
+ return "";
454
+ }
455
+ if (str.length <= length) {
456
+ return str;
457
+ }
458
+ const maxLength = Math.max(0, length - suffix.length);
459
+ if (maxLength === 0) {
460
+ return suffix.length > length ? "" : suffix;
461
+ }
462
+ return str.slice(0, maxLength) + suffix;
463
+ };
464
+ var removeWhitespace = (str) => {
465
+ return str.replace(/\s+/g, "");
466
+ };
467
+ var removeSpecialChars = (str) => {
468
+ return str.replace(/[^a-zA-Z0-9]/g, "");
469
+ };
470
+ var slug = (str) => {
471
+ return str.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
472
+ };
473
+ var isEmail = (str) => {
474
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
475
+ return emailRegex.test(str.trim());
476
+ };
477
+ var isUrl = (str) => {
478
+ try {
479
+ const parsedUrl = new URL(str);
480
+ return parsedUrl.protocol === "http:" || parsedUrl.protocol === "https:";
481
+ } catch {
482
+ return false;
483
+ }
484
+ };
485
+ var isNumeric = (str) => {
486
+ return /^\d+$/.test(str);
487
+ };
488
+ var isEmpty = (str) => {
489
+ return str.trim().length === 0;
490
+ };
491
+ var reverse = (str) => {
492
+ return Array.from(str).reverse().join("");
493
+ };
494
+ var repeat = (str, times) => {
495
+ return str.repeat(Math.max(0, Math.floor(times)));
496
+ };
497
+ var padStart = (str, length, padChar = " ") => {
498
+ return str.padStart(length, padChar);
499
+ };
500
+ var padEnd = (str, length, padChar = " ") => {
501
+ return str.padEnd(length, padChar);
502
+ };
503
+ var toBase64 = (str) => {
504
+ return Buffer.from(str, "utf-8").toString("base64");
505
+ };
506
+ var fromBase64 = (str) => {
507
+ return Buffer.from(str, "base64").toString("utf-8");
508
+ };
509
+ var wordCount = (str) => {
510
+ const trimmedValue = str.trim();
511
+ if (!trimmedValue) {
512
+ return 0;
513
+ }
514
+ return trimmedValue.split(/\s+/).length;
515
+ };
516
+ var charCount = (str) => {
517
+ return str.replace(/\s/g, "").length;
518
+ };
519
+ var repeatChar = (char, times) => {
520
+ return char.repeat(Math.max(0, Math.floor(times)));
521
+ };
522
+ var extractNumbers = (str) => {
523
+ return str.replace(/\D/g, "");
524
+ };
525
+ var removeDuplicates = (str) => {
526
+ return str.replace(/(.)\1+/g, "$1");
527
+ };
528
+ var isPalindrome = (str) => {
529
+ const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, "");
530
+ return cleaned === cleaned.split("").reverse().join("");
531
+ };
532
+ var longestWord = (str) => {
533
+ const words = str.trim().split(/\s+/).filter(Boolean);
534
+ return words.reduce(
535
+ (longest, word) => word.length > longest.length ? word : longest,
536
+ ""
537
+ );
538
+ };
539
+ var pluralize = (word) => {
540
+ const exceptions = {
541
+ child: "children",
542
+ person: "people",
543
+ man: "men",
544
+ woman: "women",
545
+ tooth: "teeth",
546
+ foot: "feet",
547
+ mouse: "mice"
548
+ };
549
+ const lowercaseWord = word.toLowerCase();
550
+ const exception = exceptions[lowercaseWord];
551
+ if (exception) {
552
+ return word.charAt(0) === word.charAt(0).toUpperCase() ? capitalize(exception) : exception;
553
+ }
554
+ if (/[^aeiou]y$/i.test(word)) {
555
+ return `${word.slice(0, -1)}ies`;
556
+ }
557
+ if (/(s|x|z|ch|sh)$/i.test(word)) {
558
+ return `${word}es`;
559
+ }
560
+ if (/fe$/i.test(word)) {
561
+ return `${word.slice(0, -2)}ves`;
562
+ }
563
+ if (/f$/i.test(word)) {
564
+ return `${word.slice(0, -1)}ves`;
565
+ }
566
+ return `${word}s`;
567
+ };
568
+ var highlight = (str, substring, marker = "**") => {
569
+ if (!substring) {
570
+ return str;
571
+ }
572
+ return str.replace(
573
+ new RegExp(`(${escapeRegex(substring)})`, "gi"),
574
+ `${marker}$1${marker}`
575
+ );
576
+ };
577
+ var escapeRegex = (str) => {
578
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
579
+ };
580
+ var stringSimilarity = (str1, str2) => {
581
+ const s1 = str1.toLowerCase();
582
+ const s2 = str2.toLowerCase();
583
+ const longer = s1.length > s2.length ? s1 : s2;
584
+ const shorter = s1.length > s2.length ? s2 : s1;
585
+ if (longer.length === 0) {
586
+ return 1;
587
+ }
588
+ const editDistance = getEditDistance(longer, shorter);
589
+ return (longer.length - editDistance) / longer.length;
590
+ };
591
+ var getEditDistance = (s1, s2) => {
592
+ const costs = [];
593
+ for (let i = 0; i <= s1.length; i += 1) {
594
+ let lastValue = i;
595
+ for (let j = 0; j <= s2.length; j += 1) {
596
+ if (i === 0) {
597
+ costs[j] = j;
598
+ } else if (j > 0) {
599
+ let newValue = costs[j - 1];
600
+ if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {
601
+ newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;
602
+ }
603
+ costs[j - 1] = lastValue;
604
+ lastValue = newValue;
605
+ }
606
+ }
607
+ if (i > 0) {
608
+ costs[s2.length] = lastValue;
609
+ }
610
+ }
611
+ return costs[s2.length];
612
+ };
613
+ var stripHtml = (str) => {
614
+ return str.replace(/<[^>]*>/g, "");
615
+ };
616
+ var normalizeSpaces = (str) => {
617
+ return str.replace(/\s+/g, " ").trim();
618
+ };
619
+ var toNumber = (str) => {
620
+ if (str.trim() === "") {
621
+ return null;
622
+ }
623
+ const num = Number(str);
624
+ return Number.isNaN(num) ? null : num;
625
+ };
626
+ var splitMultiple = (str, ...delimiters) => {
627
+ if (delimiters.length === 0) {
628
+ return [str].filter((part) => part.length > 0);
629
+ }
630
+ let result = [str];
631
+ delimiters.forEach((delimiter) => {
632
+ if (delimiter !== "") {
633
+ result = result.flatMap((part) => part.split(delimiter));
634
+ }
635
+ });
636
+ return result.filter((part) => part.length > 0);
637
+ };
638
+ var containsAny = (str, ...substrings) => {
639
+ return substrings.some((substring) => str.includes(substring));
640
+ };
641
+ var containsAll = (str, ...substrings) => {
642
+ return substrings.every((substring) => str.includes(substring));
643
+ };
644
+ var formatAddress = (address) => {
645
+ const parts = [
646
+ address.addressLine1,
647
+ address.addressLine2,
648
+ address.city,
649
+ address.stateCode,
650
+ address.postalCode
651
+ ].filter(Boolean);
652
+ return parts.join(", ");
653
+ };
654
+
655
+ // src/types/api/index.ts
656
+ var HTTP_METHOD = {
657
+ Get: "GET",
658
+ Post: "POST",
659
+ Put: "PUT",
660
+ Patch: "PATCH",
661
+ Delete: "DELETE"
662
+ };
663
+ var ERROR_CODES = {
664
+ // 400 - Bad Request
665
+ BAD_REQUEST: "BAD_REQUEST",
666
+ VALIDATION_ERROR: "VALIDATION_ERROR",
667
+ MISSING_FIELDS: "MISSING_FIELDS",
668
+ // 401 - Unauthorized
669
+ UNAUTHORIZED: "UNAUTHORIZED",
670
+ INVALID_TOKEN: "INVALID_TOKEN",
671
+ INVALID_CREDENTIALS: "INVALID_CREDENTIALS",
672
+ // 403 - Forbidden
673
+ FORBIDDEN: "FORBIDDEN",
674
+ // 404 - Not Found
675
+ NOT_FOUND: "NOT_FOUND",
676
+ // 409 - Conflict
677
+ CONFLICT: "CONFLICT",
678
+ ALREADY_EXISTS: "ALREADY_EXISTS",
679
+ // 429 - Rate Limiting
680
+ RATE_LIMIT: "RATE_LIMIT",
681
+ RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
682
+ // 500 - Server Errors
683
+ INTERNAL_ERROR: "INTERNAL_ERROR",
684
+ DATABASE_ERROR: "DATABASE_ERROR"
685
+ };
686
+ var HTTP_STATUS = {
687
+ OK: 200,
688
+ CREATED: 201,
689
+ NO_CONTENT: 204,
690
+ BAD_REQUEST: 400,
691
+ UNAUTHORIZED: 401,
692
+ FORBIDDEN: 403,
693
+ NOT_FOUND: 404,
694
+ CONFLICT: 409,
695
+ RATE_LIMIT: 429,
696
+ INTERNAL_ERROR: 500
697
+ };
698
+
699
+ // src/types/auth/index.ts
700
+ var AUTH_STATUS = {
701
+ Initializing: "Initializing",
702
+ Unauthenticated: "Unauthenticated",
703
+ Authenticated: "Authenticated",
704
+ Refreshing: "Refreshing",
705
+ SessionExpired: "SessionExpired"
706
+ };
707
+
708
+ // src/types/base/index.ts
709
+ var IMAGE_ENTITY = {
710
+ USER_PROFILE: "user_profile",
711
+ PROPERTY: "property",
712
+ PROPERTY_ROOM: "property_room",
713
+ MAINTENANCE_TICKET: "maintenance_ticket",
714
+ WORK_REPORT: "work_report"
715
+ };
716
+ var US_STATES_CODE = {
717
+ // 50 States
718
+ AL: "AL",
719
+ AK: "AK",
720
+ AZ: "AZ",
721
+ AR: "AR",
722
+ CA: "CA",
723
+ CO: "CO",
724
+ CT: "CT",
725
+ DE: "DE",
726
+ FL: "FL",
727
+ GA: "GA",
728
+ HI: "HI",
729
+ ID: "ID",
730
+ IL: "IL",
731
+ IN: "IN",
732
+ IA: "IA",
733
+ KS: "KS",
734
+ KY: "KY",
735
+ LA: "LA",
736
+ ME: "ME",
737
+ MD: "MD",
738
+ MA: "MA",
739
+ MI: "MI",
740
+ MN: "MN",
741
+ MS: "MS",
742
+ MO: "MO",
743
+ MT: "MT",
744
+ NE: "NE",
745
+ NV: "NV",
746
+ NH: "NH",
747
+ NJ: "NJ",
748
+ NM: "NM",
749
+ NY: "NY",
750
+ NC: "NC",
751
+ ND: "ND",
752
+ OH: "OH",
753
+ OK: "OK",
754
+ OR: "OR",
755
+ PA: "PA",
756
+ RI: "RI",
757
+ SC: "SC",
758
+ SD: "SD",
759
+ TN: "TN",
760
+ TX: "TX",
761
+ UT: "UT",
762
+ VT: "VT",
763
+ VA: "VA",
764
+ WA: "WA",
765
+ WV: "WV",
766
+ WI: "WI",
767
+ WY: "WY",
768
+ // Territories
769
+ DC: "DC",
770
+ PR: "PR",
771
+ GU: "GU",
772
+ VI: "VI",
773
+ AS: "AS",
774
+ MP: "MP"
775
+ };
776
+ var US_JURISDICTIONS = {
777
+ // 50 States
778
+ AL: "Alabama",
779
+ AK: "Alaska",
780
+ AZ: "Arizona",
781
+ AR: "Arkansas",
782
+ CA: "California",
783
+ CO: "Colorado",
784
+ CT: "Connecticut",
785
+ DE: "Delaware",
786
+ FL: "Florida",
787
+ GA: "Georgia",
788
+ HI: "Hawaii",
789
+ ID: "Idaho",
790
+ IL: "Illinois",
791
+ IN: "Indiana",
792
+ IA: "Iowa",
793
+ KS: "Kansas",
794
+ KY: "Kentucky",
795
+ LA: "Louisiana",
796
+ ME: "Maine",
797
+ MD: "Maryland",
798
+ MA: "Massachusetts",
799
+ MI: "Michigan",
800
+ MN: "Minnesota",
801
+ MS: "Mississippi",
802
+ MO: "Missouri",
803
+ MT: "Montana",
804
+ NE: "Nebraska",
805
+ NV: "Nevada",
806
+ NH: "New Hampshire",
807
+ NJ: "New Jersey",
808
+ NM: "New Mexico",
809
+ NY: "New York",
810
+ NC: "North Carolina",
811
+ ND: "North Dakota",
812
+ OH: "Ohio",
813
+ OK: "Oklahoma",
814
+ OR: "Oregon",
815
+ PA: "Pennsylvania",
816
+ RI: "Rhode Island",
817
+ SC: "South Carolina",
818
+ SD: "South Dakota",
819
+ TN: "Tennessee",
820
+ TX: "Texas",
821
+ UT: "Utah",
822
+ VT: "Vermont",
823
+ VA: "Virginia",
824
+ WA: "Washington",
825
+ WV: "West Virginia",
826
+ WI: "Wisconsin",
827
+ WY: "Wyoming",
828
+ // Territories
829
+ DC: "District of Columbia",
830
+ PR: "Puerto Rico",
831
+ GU: "Guam",
832
+ VI: "United States Virgin Islands",
833
+ AS: "American Samoa",
834
+ MP: "Northern Mariana Islands"
835
+ };
836
+ var UnitedStatesJurisdictionOptions = Object.values(
837
+ US_JURISDICTIONS
838
+ ).map((jurisdiction) => ({
839
+ label: jurisdiction,
840
+ value: jurisdiction
841
+ }));
842
+ var STATUS = {
843
+ Pending: "Pending",
844
+ InProgress: "InProgress",
845
+ Completed: "Completed",
846
+ Overdue: "Overdue",
847
+ Active: "Active",
848
+ Inactive: "Inactive"
849
+ };
850
+ var StatusOptions = Object.values(STATUS).map((status) => ({
851
+ label: status,
852
+ value: status
853
+ }));
854
+ var SEVERITY = {
855
+ Low: "Low",
856
+ Medium: "Medium",
857
+ High: "High"
858
+ };
859
+ var SeverityOptions = Object.values(SEVERITY).map((severity) => ({
860
+ label: severity,
861
+ value: severity
862
+ }));
863
+ var SERVICE_TYPES = {
864
+ Cleaning: "Cleaning",
865
+ Maintenance: "Maintenance",
866
+ Inspection: "Inspections",
867
+ Other: "Other"
868
+ };
869
+ var ServiceTypeOptions = Object.values(SERVICE_TYPES).map(
870
+ (serviceType) => ({
871
+ label: serviceType,
872
+ value: serviceType
873
+ })
874
+ );
875
+ var MONTHS = [
876
+ "January",
877
+ "February",
878
+ "March",
879
+ "April",
880
+ "May",
881
+ "June",
882
+ "July",
883
+ "August",
884
+ "September",
885
+ "October",
886
+ "November",
887
+ "December"
888
+ ];
889
+
890
+ // src/types/company/index.ts
891
+ var COMPANY_TYPES = {
892
+ PROPERTY_MANAGEMENT: "PROPERTY_MANAGEMENT",
893
+ MAINTENANCE: "MAINTENANCE",
894
+ CLEANER: "CLEANER",
895
+ OTHER: "OTHER"
896
+ };
897
+
898
+ // src/types/damage-report/index.ts
899
+ var DAMAGE_SEVERITY = {
900
+ LOW: "LOW",
901
+ MEDIUM: "MEDIUM",
902
+ HIGH: "HIGH",
903
+ CRITICAL: "CRITICAL"
904
+ };
905
+ var DAMAGE_STATUS = {
906
+ OPEN: "OPEN",
907
+ IN_REVIEW: "IN_REVIEW",
908
+ ASSIGNED: "ASSIGNED",
909
+ IN_PROGRESS: "IN_PROGRESS",
910
+ RESOLVED: "RESOLVED",
911
+ CLOSED: "CLOSED",
912
+ ESCALATED: "ESCALATED"
913
+ };
914
+ var WORK_ORDER_PRIORITY = {
915
+ LOW: "LOW",
916
+ NORMAL: "NORMAL",
917
+ HIGH: "HIGH",
918
+ URGENT: "URGENT"
919
+ };
920
+ var WORK_ORDER_STATUS = {
921
+ PENDING: "PENDING",
922
+ SCHEDULED: "SCHEDULED",
923
+ IN_PROGRESS: "IN_PROGRESS",
924
+ COMPLETED: "COMPLETED",
925
+ CANCELLED: "CANCELLED"
926
+ };
927
+
928
+ // src/types/errors/index.ts
929
+ var isErrorLike = (error) => {
930
+ return typeof error === "object" && error !== null;
931
+ };
932
+ function isValidationError(error) {
933
+ return isErrorLike(error) && error.code === "VALIDATION_ERROR" && Array.isArray(error.details);
934
+ }
935
+ function isMissingFieldsError(error) {
936
+ return isErrorLike(error) && error.code === "MISSING_FIELDS" && typeof error.details === "object" && error.details !== null && "missingFields" in error.details && Array.isArray(error.details.missingFields);
937
+ }
938
+ function isRateLimitError(error) {
939
+ return isErrorLike(error) && error.code === "RATE_LIMIT_EXCEEDED";
940
+ }
941
+ function isAuthError(error) {
942
+ return isErrorLike(error) && (error.code === "UNAUTHORIZED" || error.code === "INVALID_TOKEN" || error.code === "INVALID_CREDENTIALS");
943
+ }
944
+
945
+ // src/types/image/index.ts
946
+ var IMAGE_ENTITY_TYPE = {
947
+ USER_PROFILE: "USER_PROFILE",
948
+ PROPERTY: "PROPERTY",
949
+ COMPANY: "COMPANY",
950
+ CHECKLIST_ITEM: "CHECKLIST_ITEM",
951
+ PROPERTY_ROOM: "PROPERTY_ROOM",
952
+ MAINTENANCE_TICKET: "MAINTENANCE_TICKET",
953
+ WORK_REPORT: "WORK_REPORT",
954
+ CLEANING_REPORT: "CLEANING_REPORT",
955
+ TURNDOWN_DEFAULT: "TURNDOWN_DEFAULT"
956
+ };
957
+
958
+ // src/types/inventory/index.ts
959
+ var INVENTORY_UNITS = {
960
+ COUNT: "COUNT",
961
+ ROLLS: "ROLLS",
962
+ PODS: "PODS",
963
+ BOXES: "BOXES",
964
+ BOTTLES: "BOTTLES",
965
+ PACKS: "PACKS",
966
+ BAGS: "BAGS",
967
+ GALLONS: "GALLONS",
968
+ LITERS: "LITERS",
969
+ KILOGRAMS: "KILOGRAMS",
970
+ POUNDS: "POUNDS",
971
+ OUNCES: "OUNCES",
972
+ GRAMS: "GRAMS",
973
+ SHEETS: "SHEETS",
974
+ CASES: "CASES",
975
+ CARTONS: "CARTONS",
976
+ OTHER: "OTHER"
977
+ };
978
+ var INVENTORY_ITEM_TYPE = {
979
+ CONSUMABLE: "CONSUMABLE",
980
+ FIXED: "FIXED"
981
+ };
982
+
983
+ // src/types/property/index.ts
984
+ var PROPERTY_STATUS = {
985
+ Active: "Active",
986
+ Inactive: "Inactive"
987
+ };
988
+ var PropertyStatusOptions = [
989
+ {
990
+ label: "Active",
991
+ value: PROPERTY_STATUS.Active
992
+ },
993
+ {
994
+ label: "Inactive",
995
+ value: PROPERTY_STATUS.Inactive
996
+ }
997
+ ];
998
+ var PROPERTY_TYPES = [
999
+ "Apartment",
1000
+ "Commercial",
1001
+ "Condo",
1002
+ "House"
1003
+ ];
1004
+ var PropertyTypeOptions = PROPERTY_TYPES.map((propertyType) => ({
1005
+ label: propertyType,
1006
+ value: propertyType
1007
+ }));
1008
+
1009
+ // src/types/subscription/index.ts
1010
+ var SUBSCRIPTION_STATUS = {
1011
+ ACTIVE: "active",
1012
+ CANCELED: "canceled",
1013
+ EXPIRED: "expired",
1014
+ PAST_DUE: "past_due",
1015
+ TRIALING: "trialing"
1016
+ };
1017
+ var SUBSCRIPTION_PROVIDER = {
1018
+ STRIPE: "stripe",
1019
+ APPLE: "apple",
1020
+ GOOGLE: "google"
1021
+ };
1022
+ var BILLING_PERIOD = {
1023
+ MONTHLY: "monthly",
1024
+ YEARLY: "yearly"
1025
+ };
1026
+
1027
+ // src/types/user/index.ts
1028
+ var ACCOUNT_TYPE = {
1029
+ TURNDOWN_ADMIN: "TURNDOWN_ADMIN",
1030
+ ACCOUNT_ADMIN: "ACCOUNT_ADMIN",
1031
+ MANAGER: "MANAGER",
1032
+ STAFF: "STAFF",
1033
+ GUEST: "GUEST"
1034
+ };
1035
+ var ACCOUNT_STATUS = {
1036
+ ACTIVE: "ACTIVE",
1037
+ INACTIVE: "INACTIVE",
1038
+ SUSPENDED: "SUSPENDED",
1039
+ PENDING: "PENDING"
1040
+ };
1041
+ var LANGUAGE = {
1042
+ ENGLISH: "ENGLISH",
1043
+ FRENCH: "FRENCH",
1044
+ SPANISH: "SPANISH",
1045
+ GERMAN: "GERMAN"
1046
+ };
1047
+
1048
+ // src/types/work-session/index.ts
1049
+ var WORK_SESSION_STATUS = {
1050
+ IN_PROGRESS: "IN_PROGRESS",
1051
+ COMPLETED: "COMPLETED",
1052
+ CANCELLED: "CANCELLED"
1053
+ };
1054
+ var CHECKLIST_EXECUTION_STATUS = {
1055
+ PENDING: "PENDING",
1056
+ IN_PROGRESS: "IN_PROGRESS",
1057
+ COMPLETED: "COMPLETED",
1058
+ SKIPPED: "SKIPPED"
1059
+ };
1060
+ export {
1061
+ ACCOUNT_STATUS,
1062
+ ACCOUNT_TYPE,
1063
+ AUTH_STATUS,
1064
+ BILLING_PERIOD,
1065
+ CHECKLIST_EXECUTION_STATUS,
1066
+ COMPANY_TYPES,
1067
+ DAMAGE_SEVERITY,
1068
+ DAMAGE_STATUS,
1069
+ ERROR_CODES,
1070
+ HTTP_METHOD,
1071
+ HTTP_STATUS,
1072
+ IMAGE_ENTITY,
1073
+ IMAGE_ENTITY_TYPE,
1074
+ INVENTORY_ITEM_TYPE,
1075
+ INVENTORY_UNITS,
1076
+ JSONStringify,
1077
+ LANGUAGE,
1078
+ MONTHS,
1079
+ PROPERTY_STATUS,
1080
+ PROPERTY_TYPES,
1081
+ PropertyStatusOptions,
1082
+ PropertyTypeOptions,
1083
+ SERVICE_TYPES,
1084
+ SEVERITY,
1085
+ STATUS,
1086
+ SUBSCRIPTION_PROVIDER,
1087
+ SUBSCRIPTION_STATUS,
1088
+ ServiceTypeOptions,
1089
+ SeverityOptions,
1090
+ StatusOptions,
1091
+ US_JURISDICTIONS,
1092
+ US_STATES_CODE,
1093
+ UnitedStatesJurisdictionOptions,
1094
+ WORK_ORDER_PRIORITY,
1095
+ WORK_ORDER_STATUS,
1096
+ WORK_SESSION_STATUS,
1097
+ addDays,
1098
+ addWeeks,
1099
+ camelCase,
1100
+ capitalize,
1101
+ charCount,
1102
+ chunkArray,
1103
+ cleanFormData,
1104
+ containsAll,
1105
+ containsAny,
1106
+ convertStringBooleans,
1107
+ daysBetween,
1108
+ deepClone,
1109
+ deletePropertyIfExists,
1110
+ endOfDay,
1111
+ endOfWeek,
1112
+ escapeRegex,
1113
+ extractNumbers,
1114
+ filterArrayById,
1115
+ flatten,
1116
+ formatAddress,
1117
+ formatDate,
1118
+ formatNumber,
1119
+ formatPhoneNumber,
1120
+ fromBase64,
1121
+ getFirstPropertyValue,
1122
+ getNestedValue,
1123
+ getWeekDays,
1124
+ hasOwnProp,
1125
+ hasProperties,
1126
+ hasProperty,
1127
+ highlight,
1128
+ isAuthError,
1129
+ isEmail,
1130
+ isEmpty,
1131
+ isFuture,
1132
+ isMissingFieldsError,
1133
+ isNumeric,
1134
+ isPalindrome,
1135
+ isPast,
1136
+ isRateLimitError,
1137
+ isToday,
1138
+ isUrl,
1139
+ isValidationError,
1140
+ kebabCase,
1141
+ kebabToSpaces,
1142
+ longestWord,
1143
+ lowerCase,
1144
+ normalCase,
1145
+ normalizeSpaces,
1146
+ omitProperties,
1147
+ padEnd,
1148
+ padStart,
1149
+ parseJSON,
1150
+ parseNumber,
1151
+ pascalCase,
1152
+ pluralize,
1153
+ removeDuplicates,
1154
+ removeFormProperties,
1155
+ removeSpecialChars,
1156
+ removeUndefined,
1157
+ removeWhitespace,
1158
+ repeat,
1159
+ repeatChar,
1160
+ replaceNulls,
1161
+ resetPagination,
1162
+ returnObject,
1163
+ reverse,
1164
+ sentenceCase,
1165
+ setNestedValue,
1166
+ slug,
1167
+ snakeCase,
1168
+ snakeCaseToSpaces,
1169
+ sortArrayByProperty,
1170
+ splitMultiple,
1171
+ startOfDay,
1172
+ startOfWeek,
1173
+ stringSimilarity,
1174
+ stripHtml,
1175
+ subtractDays,
1176
+ subtractWeeks,
1177
+ timeAgo,
1178
+ titleCase,
1179
+ toBase64,
1180
+ toCamelCase,
1181
+ toKebabCase,
1182
+ toNumber,
1183
+ toPascalCase,
1184
+ toSnakeCase,
1185
+ truncate,
1186
+ unflatten,
1187
+ upperCase,
1188
+ validPath,
1189
+ wordCount
1190
+ };