nhb-toolbox 4.28.72 → 4.29.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +5 -5
  3. package/dist/cjs/array/Finder.js +13 -11
  4. package/dist/cjs/array/sort.js +4 -4
  5. package/dist/cjs/array/transform.js +2 -2
  6. package/dist/cjs/date/BanglaCalendar.js +32 -20
  7. package/dist/cjs/date/Chronos.js +10 -47
  8. package/dist/cjs/date/helpers.js +5 -3
  9. package/dist/cjs/date/plugins/businessPlugin.js +2 -2
  10. package/dist/cjs/date/plugins/dateRangePlugin.js +52 -0
  11. package/dist/cjs/date/plugins/durationPlugin.js +1 -3
  12. package/dist/cjs/dom/query.js +2 -2
  13. package/dist/cjs/form/convert.js +12 -12
  14. package/dist/cjs/form/transform.js +3 -4
  15. package/dist/cjs/index.js +12 -9
  16. package/dist/cjs/number/basics.js +2 -2
  17. package/dist/cjs/number/convert.js +2 -2
  18. package/dist/cjs/number/helpers.js +2 -2
  19. package/dist/cjs/number/range.js +2 -2
  20. package/dist/cjs/number/utilities.js +1 -3
  21. package/dist/cjs/object/sanitize.js +2 -2
  22. package/dist/cjs/string/case.js +21 -25
  23. package/dist/cjs/string/convert.js +2 -2
  24. package/dist/cjs/string/diff.js +158 -0
  25. package/dist/cjs/string/helpers.js +70 -0
  26. package/dist/cjs/string/utilities.js +3 -5
  27. package/dist/cjs/stylog/Stylog.js +7 -5
  28. package/dist/dts/colors/css-colors.d.ts +1 -1
  29. package/dist/dts/date/Chronos.d.ts +4 -64
  30. package/dist/dts/date/constants.d.ts +1 -1
  31. package/dist/dts/date/plugins/dateRangePlugin.d.ts +67 -0
  32. package/dist/dts/date/types.d.ts +5 -3
  33. package/dist/dts/date/utils.d.ts +4 -4
  34. package/dist/dts/hash/types.d.ts +1 -1
  35. package/dist/dts/index.d.ts +1 -0
  36. package/dist/dts/object/types.d.ts +4 -4
  37. package/dist/dts/string/diff.d.ts +48 -0
  38. package/dist/dts/string/helpers.d.ts +25 -0
  39. package/dist/dts/string/types.d.ts +65 -19
  40. package/dist/dts/utils/types.d.ts +10 -8
  41. package/dist/esm/array/Finder.js +13 -11
  42. package/dist/esm/array/sort.js +4 -4
  43. package/dist/esm/array/transform.js +2 -2
  44. package/dist/esm/date/BanglaCalendar.js +32 -20
  45. package/dist/esm/date/Chronos.js +10 -47
  46. package/dist/esm/date/helpers.js +5 -3
  47. package/dist/esm/date/plugins/businessPlugin.js +2 -2
  48. package/dist/esm/date/plugins/dateRangePlugin.js +48 -0
  49. package/dist/esm/date/plugins/durationPlugin.js +1 -3
  50. package/dist/esm/dom/query.js +2 -2
  51. package/dist/esm/form/convert.js +12 -12
  52. package/dist/esm/form/transform.js +3 -4
  53. package/dist/esm/index.js +1 -0
  54. package/dist/esm/number/basics.js +2 -2
  55. package/dist/esm/number/convert.js +2 -2
  56. package/dist/esm/number/helpers.js +2 -2
  57. package/dist/esm/number/range.js +2 -2
  58. package/dist/esm/number/utilities.js +1 -3
  59. package/dist/esm/object/sanitize.js +2 -2
  60. package/dist/esm/string/case.js +21 -25
  61. package/dist/esm/string/convert.js +2 -2
  62. package/dist/esm/string/diff.js +154 -0
  63. package/dist/esm/string/helpers.js +65 -0
  64. package/dist/esm/string/utilities.js +3 -5
  65. package/dist/esm/stylog/Stylog.js +7 -5
  66. package/package.json +23 -17
package/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@
4
4
 
5
5
  All notable changes to the package will be documented here.
6
6
 
7
+ ## [4.29.0] - 2026-03-26
8
+
9
+ - **Added** new *string utilities* `computeTextDiff` and `getCharacterDifferences` for computing differences between two strings at both *line* and *character* levels.
10
+ - **Added** new type `ISODateTimeString` (only includes `Z`) for `Chronos.toISOString()` method which is a subset of `ISOTimeString` that includes both `Z` and timezone offset formats.
11
+
12
+ ## [4.28.80] - 2026-02-07
13
+
14
+ - **Moved** `getDatesInRange` method to `Chronos` *plugin system*, usable via `dateRangePlugin`.
15
+ - **Updated** `Timestamp` type to `ISOTimeString` and removed *branding* for better clarity and consistency across the codebase.
16
+ - `Chronos` methods `toISOString()` and `toLocalISOString()`; and `getTimestamp` utility now return `ISOTimeString` type.
17
+ - `Chronos` method `getDatesInRange(...)` now return `ISOTimeString[]` instead of `string[]`.
18
+
7
19
  ## [4.28.72] - 2026-02-06
8
20
 
9
21
  - **Updated** *tsdoc* for the overload signatures of `getTimestamp` utility to clarify the behavior.
package/README.md CHANGED
@@ -515,31 +515,31 @@ debounceAction(fetchResults, 300);
515
515
 
516
516
  ## 🔗 Related Packages
517
517
 
518
- <div title="React Hooks: nhb-hooks" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
518
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
519
519
  <a target="_blank" href="https://www.npmjs.com/package/nhb-hooks">
520
520
  <img src="https://img.shields.io/badge/React_Hooks-nhb--hooks-blue" alt="nhb-hooks" />
521
521
  </a>
522
522
  </div>
523
523
 
524
- <div title="IndexedDB ORM: locality-idb" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
524
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
525
525
  <a target="_blank" href="https://www.npmjs.com/package/locality-idb">
526
526
  <img src="https://img.shields.io/badge/IndexedDB_ORM-locality--idb-darkviolet" alt="locality-idb" />
527
527
  </a>
528
528
  </div>
529
529
 
530
- <div title="Development Scripts: nhb-scripts" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
530
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
531
531
  <a target="_blank" href="https://www.npmjs.com/package/nhb-scripts">
532
532
  <img src="https://img.shields.io/badge/Development_Scripts-nhb--scripts-red" alt="nhb-scripts" />
533
533
  </a>
534
534
  </div>
535
535
 
536
- <div title="Express Server Scaffolder: nhb-express" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
536
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
537
537
  <a target="_blank" href="https://www.npmjs.com/package/nhb-express">
538
538
  <img src="https://img.shields.io/badge/Express_Server_Scaffolder-nhb--express-orange" alt="nhb-express" />
539
539
  </a>
540
540
  </div>
541
541
 
542
- <div title="Anagram Generator: nhb-anagram-generator" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
542
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
543
543
  <a target="_blank" href="https://www.npmjs.com/package/nhb-anagram-generator">
544
544
  <img src="https://img.shields.io/badge/Anagram_Generator-nhb--anagram--generator-teal" alt="nhb-anagram-generator" />
545
545
  </a>
@@ -24,7 +24,9 @@ class Finder {
24
24
  const source = typeof data === 'function' ? data() : (data ?? this.#items);
25
25
  if (!source?.length)
26
26
  return [];
27
- const rawGetKey = typeof keySelector === 'function' ? keySelector : ((item) => item[keySelector]);
27
+ const rawGetKey = typeof keySelector === 'function'
28
+ ? keySelector
29
+ : (item) => item[keySelector];
28
30
  const getKey = Finder.#createMemoizedKeyGetter(rawGetKey);
29
31
  const normalizedMatcher = caseInsensitive && typeof matcher === 'string' ? matcher.toLowerCase() : matcher;
30
32
  if (cacheKey) {
@@ -49,8 +51,8 @@ class Finder {
49
51
  const firstMatch = this.binarySearch(sorted, normalizedMatcher, getKey, caseInsensitive);
50
52
  if (firstMatch) {
51
53
  const baseKey = getKey(firstMatch);
52
- const base = caseInsensitive && typeof baseKey === 'string' ?
53
- baseKey.toLowerCase()
54
+ const base = caseInsensitive && typeof baseKey === 'string'
55
+ ? baseKey.toLowerCase()
54
56
  : baseKey;
55
57
  results = sorted.filter((item) => {
56
58
  const key = getKey(item);
@@ -62,8 +64,8 @@ class Finder {
62
64
  if (!results.length && fuzzy && typeof normalizedMatcher === 'string') {
63
65
  results = source.filter((item) => {
64
66
  const rawKey = getKey(item);
65
- const key = caseInsensitive && typeof rawKey === 'string' ?
66
- rawKey.toLowerCase()
67
+ const key = caseInsensitive && typeof rawKey === 'string'
68
+ ? rawKey.toLowerCase()
67
69
  : String(rawKey);
68
70
  return this.#match(key, normalizedMatcher);
69
71
  });
@@ -81,7 +83,9 @@ class Finder {
81
83
  const source = typeof data === 'function' ? data() : (data ?? this.#items);
82
84
  if (!source?.length)
83
85
  return undefined;
84
- const rawGetKey = typeof keySelector === 'function' ? keySelector : ((item) => item[keySelector]);
86
+ const rawGetKey = typeof keySelector === 'function'
87
+ ? keySelector
88
+ : (item) => item[keySelector];
85
89
  const getKey = Finder.#createMemoizedKeyGetter(rawGetKey);
86
90
  const normalizedMatcher = caseInsensitive && typeof matcher === 'string' ? matcher.toLowerCase() : matcher;
87
91
  if (cacheKey) {
@@ -141,8 +145,8 @@ class Finder {
141
145
  fuzzySearch(array, matcher, keySelector, caseInsensitive) {
142
146
  for (const item of array) {
143
147
  const rawKey = keySelector(item);
144
- const key = caseInsensitive && typeof rawKey === 'string' ?
145
- rawKey.toLowerCase()
148
+ const key = caseInsensitive && typeof rawKey === 'string'
149
+ ? rawKey.toLowerCase()
146
150
  : String(rawKey);
147
151
  if (this.#match(key, matcher))
148
152
  return item;
@@ -172,9 +176,7 @@ class Finder {
172
176
  const sorted = [...data].sort((a, b) => {
173
177
  const keyA = getKey(a);
174
178
  const keyB = getKey(b);
175
- return (keyA < keyB ? -1
176
- : keyA > keyB ? 1
177
- : 0);
179
+ return keyA < keyB ? -1 : keyA > keyB ? 1 : 0;
178
180
  });
179
181
  if (cacheKey) {
180
182
  this.#sortedCache.set(cacheKey, {
@@ -86,16 +86,16 @@ function sortAnArray(array, options) {
86
86
  return keyA == null ? 1 : -1;
87
87
  }
88
88
  if ((0, primitives_1.isString)(keyA) && (0, primitives_1.isString)(keyB)) {
89
- return options?.sortOrder === 'desc' ?
90
- naturalSort(keyB, keyA)
89
+ return options?.sortOrder === 'desc'
90
+ ? naturalSort(keyB, keyA)
91
91
  : naturalSort(keyA, keyB);
92
92
  }
93
93
  if ((0, primitives_1.isNumber)(keyA) && (0, primitives_1.isNumber)(keyB)) {
94
94
  return options?.sortOrder === 'desc' ? keyB - keyA : keyA - keyB;
95
95
  }
96
96
  if ((0, primitives_1.isBoolean)(keyA) && (0, primitives_1.isBoolean)(keyB)) {
97
- return options?.sortOrder === 'desc' ?
98
- Number(keyB) - Number(keyA)
97
+ return options?.sortOrder === 'desc'
98
+ ? Number(keyB) - Number(keyA)
99
99
  : Number(keyA) - Number(keyB);
100
100
  }
101
101
  return 0;
@@ -16,8 +16,8 @@ function createOptionsArray(data, config) {
16
16
  const { firstFieldKey, secondFieldKey, firstFieldName = 'value', secondFieldName = 'label', retainNumberValue = false, } = config || {};
17
17
  if (data && data?.length) {
18
18
  return data?.map((datum) => {
19
- const firstValue = retainNumberValue && (0, primitives_1.isNumber)(datum[firstFieldKey]) ?
20
- datum[firstFieldKey]
19
+ const firstValue = retainNumberValue && (0, primitives_1.isNumber)(datum[firstFieldKey])
20
+ ? datum[firstFieldKey]
21
21
  : String(datum[firstFieldKey] ?? '');
22
22
  return {
23
23
  [firstFieldName]: firstValue,
@@ -18,25 +18,33 @@ class BanglaCalendar {
18
18
  isoWeekDay;
19
19
  constructor(dateBnYrOrCfg, bnMonthOrCfg, bnDateOrCfg, config) {
20
20
  this.variant = this.#processVariants(dateBnYrOrCfg, bnMonthOrCfg, bnDateOrCfg, config);
21
- let date = dateBnYrOrCfg instanceof Date ? dateBnYrOrCfg : (new Date(((0, specials_1.isDateString)(dateBnYrOrCfg) &&
22
- !_a.isBanglaDateString(dateBnYrOrCfg)) ?
23
- dateBnYrOrCfg
24
- : (0, primitives_1.isNumber)(dateBnYrOrCfg) && !_a.isBanglaYearEn(dateBnYrOrCfg) ?
25
- dateBnYrOrCfg
26
- : Date.now()));
21
+ let date = dateBnYrOrCfg instanceof Date
22
+ ? dateBnYrOrCfg
23
+ : new Date((0, specials_1.isDateString)(dateBnYrOrCfg) &&
24
+ !_a.isBanglaDateString(dateBnYrOrCfg)
25
+ ? dateBnYrOrCfg
26
+ : (0, primitives_1.isNumber)(dateBnYrOrCfg) &&
27
+ !_a.isBanglaYearEn(dateBnYrOrCfg)
28
+ ? dateBnYrOrCfg
29
+ : Date.now());
27
30
  if (isNaN(date.getTime())) {
28
31
  date = new Date();
29
32
  }
30
33
  const { year, month, monthDate } = this.#processDate(date);
31
- let bnYear = _a.isBanglaYear(dateBnYrOrCfg) ? (0, convert_1.banglaToDigit)(dateBnYrOrCfg)
32
- : (0, primitives_1.isNumber)(dateBnYrOrCfg) && _a.isBanglaYearEn(dateBnYrOrCfg) ?
33
- dateBnYrOrCfg
34
+ let bnYear = _a.isBanglaYear(dateBnYrOrCfg)
35
+ ? (0, convert_1.banglaToDigit)(dateBnYrOrCfg)
36
+ : (0, primitives_1.isNumber)(dateBnYrOrCfg) && _a.isBanglaYearEn(dateBnYrOrCfg)
37
+ ? dateBnYrOrCfg
34
38
  : year;
35
- let bnMonth = _a.isBanglaMonth(bnMonthOrCfg) ? (0, convert_1.banglaToDigit)(bnMonthOrCfg)
36
- : _a.isBanglaMonthEn(bnMonthOrCfg) ? bnMonthOrCfg
39
+ let bnMonth = _a.isBanglaMonth(bnMonthOrCfg)
40
+ ? (0, convert_1.banglaToDigit)(bnMonthOrCfg)
41
+ : _a.isBanglaMonthEn(bnMonthOrCfg)
42
+ ? bnMonthOrCfg
37
43
  : month;
38
- let bnDate = _a.isBanglaDate(bnDateOrCfg) ? (0, convert_1.banglaToDigit)(bnDateOrCfg)
39
- : _a.isBanglaDateEn(bnDateOrCfg) ? bnDateOrCfg
44
+ let bnDate = _a.isBanglaDate(bnDateOrCfg)
45
+ ? (0, convert_1.banglaToDigit)(bnDateOrCfg)
46
+ : _a.isBanglaDateEn(bnDateOrCfg)
47
+ ? bnDateOrCfg
40
48
  : monthDate;
41
49
  if (_a.isBanglaDateString(dateBnYrOrCfg)) {
42
50
  const parts = dateBnYrOrCfg.replace(/['"]/g, '').split('-');
@@ -218,8 +226,8 @@ class BanglaCalendar {
218
226
  }
219
227
  #getBnMonthTableLeap(gregYear, bnYear) {
220
228
  const isBnLeapYear = (0, helpers_1._isBnLeapYear)(bnYear ?? this.year.en, gregYear, this.variant);
221
- const bnMonthTable = isBnLeapYear ?
222
- constants_1.BN_MONTH_TABLES?.[this.variant].leap
229
+ const bnMonthTable = isBnLeapYear
230
+ ? constants_1.BN_MONTH_TABLES?.[this.variant].leap
223
231
  : constants_1.BN_MONTH_TABLES?.[this.variant].normal;
224
232
  return { bnMonthTable, isBnLeapYear };
225
233
  }
@@ -230,11 +238,15 @@ class BanglaCalendar {
230
238
  return new _a(tyBn, tmBn, tdBn, { variant });
231
239
  }
232
240
  #processVariants(v1, v2, v3, v4) {
233
- return (this.$hasVariantConfig(v1) ? v1.variant
234
- : this.$hasVariantConfig(v2) ? v2.variant
235
- : this.$hasVariantConfig(v3) ? v3.variant
236
- : this.$hasVariantConfig(v4) ? v4.variant
237
- : 'revised-2019');
241
+ return this.$hasVariantConfig(v1)
242
+ ? v1.variant
243
+ : this.$hasVariantConfig(v2)
244
+ ? v2.variant
245
+ : this.$hasVariantConfig(v3)
246
+ ? v3.variant
247
+ : this.$hasVariantConfig(v4)
248
+ ? v4.variant
249
+ : 'revised-2019';
238
250
  }
239
251
  #processDate(date) {
240
252
  const bnYear = (0, helpers_1._getBnYear)(date);
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.INTERNALS = exports.Chronus = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.Chronos = void 0;
5
- const non_primitives_1 = require("../guards/non-primitives");
4
+ exports.Chronus = exports.INTERNALS = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.Chronos = void 0;
6
5
  const primitives_1 = require("../guards/primitives");
7
6
  const constants_1 = require("./constants");
8
7
  const guards_1 = require("./guards");
@@ -142,8 +141,8 @@ class Chronos {
142
141
  }
143
142
  #removeUTCFromISO(local = true) {
144
143
  const search = /\.\d+(Z|[+-]\d{2}:\d{2})?$/;
145
- return local ?
146
- this.toLocalISOString().replace(search, '')
144
+ return local
145
+ ? this.toLocalISOString().replace(search, '')
147
146
  : this.toISOString().replace(search, '');
148
147
  }
149
148
  get year() {
@@ -592,44 +591,6 @@ class Chronos {
592
591
  monthName(index) {
593
592
  return constants_1.MONTHS[index ?? this.month];
594
593
  }
595
- getDatesInRange(options) {
596
- let startDate = this.clone(), endDate = this.addWeeks(4);
597
- const { format = 'local', onlyDays, skipDays, roundDate = false } = options ?? {};
598
- if (options) {
599
- if ('from' in options || 'to' in options) {
600
- if (options?.from)
601
- startDate = _a.#cast(options.from);
602
- if (options?.to)
603
- endDate = _a.#cast(options.to);
604
- }
605
- else if ('span' in options || 'unit' in options) {
606
- const { span = 4, unit = 'week' } = options;
607
- endDate = startDate.add(span, unit);
608
- }
609
- }
610
- if (roundDate) {
611
- startDate = startDate.startOf('day');
612
- endDate = endDate.startOf('day');
613
- }
614
- const skipSet = new Set(((0, non_primitives_1.isValidArray)(onlyDays) ? onlyDays
615
- : (0, non_primitives_1.isValidArray)(skipDays) ? skipDays
616
- : []).map((day) => ((0, primitives_1.isNumber)(day) ? day : constants_1.DAYS.indexOf(day))));
617
- const dates = [];
618
- const startTime = startDate.#timestamp;
619
- const endTime = endDate.#timestamp;
620
- const step = (startTime <= endTime ? 1 : -1) * constants_1.MS_PER_DAY;
621
- const totalDays = Math.floor(Math.abs(endTime - startTime) / constants_1.MS_PER_DAY);
622
- for (let i = 0; i <= totalDays; i++) {
623
- const ts = startTime + i * step;
624
- const wDay = new Date(ts).getDay();
625
- const include = (0, non_primitives_1.isValidArray)(onlyDays) ? skipSet.has(wDay) : !skipSet.has(wDay);
626
- if (include) {
627
- const chr = new _a(ts).#withOrigin('clone', startDate.#offset, startDate.timeZoneName, startDate.timeZoneId, startDate.$tzTracker);
628
- dates.push(format === 'local' ? chr.toLocalISOString() : chr.toISOString());
629
- }
630
- }
631
- return dates;
632
- }
633
594
  static parse(dateStr, format) {
634
595
  const tokenPatterns = {
635
596
  YYYY: '(?<YYYY>\\d{4})',
@@ -696,8 +657,10 @@ class Chronos {
696
657
  .set('year', year ?? now.year)
697
658
  .set('month', month ?? now.isoMonth).lastDateOfMonth;
698
659
  };
699
- return new _a(year ?? now.year, month ?? now.isoMonth, date ? date
700
- : now.isLastDayOfMonth() && now.date >= nextLDoM() ? nextLDoM()
660
+ return new _a(year ?? now.year, month ?? now.isoMonth, date
661
+ ? date
662
+ : now.isLastDayOfMonth() && now.date >= nextLDoM()
663
+ ? nextLDoM()
701
664
  : now.date, hour ?? now.hour, minute ?? now.minute, second ?? now.second, millisecond ?? now.millisecond).#withOrigin('with');
702
665
  }
703
666
  static today(options) {
@@ -814,9 +777,9 @@ class Chronos {
814
777
  }
815
778
  const { native, origin, utcOffset, timeZoneName, timeZoneId, $tzTracker } = value;
816
779
  const offsetMins = (0, utils_1.extractMinutesFromUTC)(utcOffset);
817
- const instance = new _a(native);
818
- const diffMins = instance.getTimeZoneOffsetMinutes() - offsetMins;
819
- const target = instance.utcOffset === utcOffset ? instance : instance.add(-diffMins, 'minute');
780
+ const chr = new _a(native);
781
+ const diffMins = chr.getTimeZoneOffsetMinutes() - offsetMins;
782
+ const target = chr.utcOffset === utcOffset ? chr : chr.add(-diffMins, 'minute');
820
783
  return target.#withOrigin(origin, utcOffset, timeZoneName, timeZoneId, $tzTracker);
821
784
  }
822
785
  static use(plugin) {
@@ -138,8 +138,8 @@ function _getElapsedDays(date) {
138
138
  }
139
139
  function _bnDaysMonthIdx(date, variant) {
140
140
  const v = variant ?? 'revised-2019';
141
- const table = _isBnLeapYear(_getBnYear(date), date.getFullYear(), v) ?
142
- constants_1.BN_MONTH_TABLES?.[v].leap
141
+ const table = _isBnLeapYear(_getBnYear(date), date.getFullYear(), v)
142
+ ? constants_1.BN_MONTH_TABLES?.[v].leap
143
143
  : constants_1.BN_MONTH_TABLES?.[v].normal;
144
144
  let days = _getElapsedDays(date);
145
145
  let monthIdx = 0;
@@ -156,7 +156,9 @@ function _padShunno(str, length = 2) {
156
156
  return str.padStart(length, '০');
157
157
  }
158
158
  function _dateArgsToDate(value) {
159
- return (0, non_primitives_1.isDate)(value) ? value : (new Date((0, primitives_1.isString)(value) ? value.replace(/['"]/g, '') : (value ?? Date.now())));
159
+ return (0, non_primitives_1.isDate)(value)
160
+ ? value
161
+ : new Date((0, primitives_1.isString)(value) ? value.replace(/['"]/g, '') : (value ?? Date.now()));
160
162
  }
161
163
  function _hasChronosProperties(value) {
162
164
  return ((0, non_primitives_1.isObjectWithKeys)(value, [
@@ -7,8 +7,8 @@ const constants_1 = require("../constants");
7
7
  const businessPlugin = ($Chronos) => {
8
8
  const { internalDate: $Date, withOrigin, cast, offset } = $Chronos[constants_1.INTERNALS];
9
9
  const _buildWeekendMask = (weekDef, length) => {
10
- const weekendDays = (0, non_primitives_1.isValidArray)(weekDef) ?
11
- [...weekDef].sort()
10
+ const weekendDays = (0, non_primitives_1.isValidArray)(weekDef)
11
+ ? [...weekDef].sort()
12
12
  : Array.from({ length }, (_, i) => (weekDef + 7 - 1 - i) % 7).sort();
13
13
  const mask = new Array(7).fill(true);
14
14
  for (const d of weekendDays)
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dateRangePlugin = void 0;
4
+ const non_primitives_1 = require("../../guards/non-primitives");
5
+ const primitives_1 = require("../../guards/primitives");
6
+ const Chronos_1 = require("../Chronos");
7
+ const constants_1 = require("../constants");
8
+ const dateRangePlugin = ($Chronos) => {
9
+ const { internalDate: $Date, cast, withOrigin, offset } = $Chronos[Chronos_1.INTERNALS];
10
+ $Chronos.prototype.getDatesInRange = function (options) {
11
+ let startDate = this.clone(), endDate = this.addWeeks(4);
12
+ const { format = 'local', onlyDays, skipDays, roundDate = false } = options ?? {};
13
+ if (options) {
14
+ if ('from' in options || 'to' in options) {
15
+ if (options?.from)
16
+ startDate = cast(options.from);
17
+ if (options?.to)
18
+ endDate = cast(options.to);
19
+ }
20
+ else if ('span' in options || 'unit' in options) {
21
+ const { span = 4, unit = 'week' } = options;
22
+ endDate = startDate.add(span, unit);
23
+ }
24
+ }
25
+ if (roundDate) {
26
+ startDate = startDate.startOf('day');
27
+ endDate = endDate.startOf('day');
28
+ }
29
+ const skippedDays = (0, non_primitives_1.isValidArray)(onlyDays)
30
+ ? onlyDays
31
+ : (0, non_primitives_1.isValidArray)(skipDays)
32
+ ? skipDays
33
+ : [];
34
+ const skipSet = new Set(skippedDays.map((day) => ((0, primitives_1.isNumber)(day) ? day : constants_1.DAYS.indexOf(day))));
35
+ const dates = [];
36
+ const startTime = $Date(startDate).getTime();
37
+ const endTime = $Date(endDate).getTime();
38
+ const step = (startTime <= endTime ? 1 : -1) * constants_1.MS_PER_DAY;
39
+ const totalDays = Math.floor(Math.abs(endTime - startTime) / constants_1.MS_PER_DAY);
40
+ for (let i = 0; i <= totalDays; i++) {
41
+ const ts = startTime + i * step;
42
+ const wDay = new Date(ts).getDay();
43
+ const include = (0, non_primitives_1.isValidArray)(onlyDays) ? skipSet.has(wDay) : !skipSet.has(wDay);
44
+ if (include) {
45
+ const chr = withOrigin(new $Chronos(ts), 'clone', offset(this), startDate.timeZoneName, startDate.timeZoneId, startDate.$tzTracker);
46
+ dates.push(format === 'local' ? chr.toLocalISOString() : chr.toISOString());
47
+ }
48
+ }
49
+ return dates;
50
+ };
51
+ };
52
+ exports.dateRangePlugin = dateRangePlugin;
@@ -90,9 +90,7 @@ const durationPlugin = ($Chronos) => {
90
90
  .filter(([_, value]) => showZero || Math.abs(value) > 0)
91
91
  .slice(0, maxUnits)
92
92
  .map(([unit, value]) => _formatUnit(unit, value));
93
- return (parts.length ? parts.join(separator)
94
- : style === 'short' ? '0s'
95
- : '0 seconds');
93
+ return parts.length ? parts.join(separator) : style === 'short' ? '0s' : '0 seconds';
96
94
  };
97
95
  };
98
96
  exports.durationPlugin = durationPlugin;
@@ -14,8 +14,8 @@ function generateQueryParams(params = {}) {
14
14
  ?.filter(([_, value]) => value !== undefined &&
15
15
  value !== null &&
16
16
  !(typeof value === 'string' && value?.trim() === ''))
17
- ?.flatMap(([key, value]) => Array.isArray(value) ?
18
- value
17
+ ?.flatMap(([key, value]) => Array.isArray(value)
18
+ ? value
19
19
  ?.filter((v) => v !== undefined &&
20
20
  v !== null &&
21
21
  !(typeof v === 'string' && v.trim() === ''))
@@ -9,13 +9,13 @@ const createControlledFormData = (data, configs) => {
9
9
  const formData = new FormData();
10
10
  const { stringifyNested = '*' } = configs || {};
11
11
  const _shouldLowercaseKeys = (key) => {
12
- return Array.isArray(configs?.lowerCaseKeys) ?
13
- configs?.lowerCaseKeys?.some((path) => key === path || key.startsWith(`${path}.`))
12
+ return Array.isArray(configs?.lowerCaseKeys)
13
+ ? configs?.lowerCaseKeys?.some((path) => key === path || key.startsWith(`${path}.`))
14
14
  : configs?.lowerCaseKeys === '*';
15
15
  };
16
16
  const _shouldLowercaseValue = (key) => {
17
- return Array.isArray(configs?.lowerCaseValues) ?
18
- configs.lowerCaseValues?.some((path) => key === path || key?.startsWith(`${path}.`))
17
+ return Array.isArray(configs?.lowerCaseValues)
18
+ ? configs.lowerCaseValues?.some((path) => key === path || key?.startsWith(`${path}.`))
19
19
  : configs?.lowerCaseValues === '*';
20
20
  };
21
21
  const _transformKey = (key) => {
@@ -23,26 +23,26 @@ const createControlledFormData = (data, configs) => {
23
23
  };
24
24
  const _isRequiredKey = (key) => {
25
25
  const transformedKey = _transformKey(key);
26
- return Array.isArray(configs?.requiredKeys) ?
27
- configs?.requiredKeys?.some((path) => transformedKey === path || transformedKey?.startsWith(`${path}.`))
26
+ return Array.isArray(configs?.requiredKeys)
27
+ ? configs?.requiredKeys?.some((path) => transformedKey === path || transformedKey?.startsWith(`${path}.`))
28
28
  : configs?.requiredKeys === '*';
29
29
  };
30
30
  const _shouldDotNotate = (key) => {
31
31
  const transformedKey = _transformKey(key);
32
- return Array.isArray(configs?.dotNotateNested) ?
33
- configs.dotNotateNested.includes(transformedKey)
32
+ return Array.isArray(configs?.dotNotateNested)
33
+ ? configs.dotNotateNested.includes(transformedKey)
34
34
  : configs?.dotNotateNested === '*';
35
35
  };
36
36
  const _shouldStringify = (key) => {
37
37
  const transformedKey = _transformKey(key);
38
- return Array.isArray(stringifyNested) ?
39
- stringifyNested.includes(transformedKey)
38
+ return Array.isArray(stringifyNested)
39
+ ? stringifyNested.includes(transformedKey)
40
40
  : stringifyNested === '*';
41
41
  };
42
42
  const _shouldBreakArray = (key) => {
43
43
  const transformedKey = _transformKey(key);
44
- return Array.isArray(configs?.breakArray) ?
45
- configs.breakArray.includes(transformedKey)
44
+ return Array.isArray(configs?.breakArray)
45
+ ? configs.breakArray.includes(transformedKey)
46
46
  : configs?.breakArray === '*';
47
47
  };
48
48
  const _cleanObject = (obj, parentKey = '') => {
@@ -9,10 +9,9 @@ function serializeForm(form, toQueryString = false) {
9
9
  const data = {};
10
10
  formData?.forEach((value, key) => {
11
11
  if (data[key]) {
12
- data[key] =
13
- Array.isArray(data[key]) ?
14
- [...data[key], value.toString()]
15
- : [data[key], value.toString()];
12
+ data[key] = Array.isArray(data[key])
13
+ ? [...data[key], value.toString()]
14
+ : [data[key], value.toString()];
16
15
  }
17
16
  else {
18
17
  data[key] = value.toString();
package/dist/cjs/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertToDecimal = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateFactorial = exports.calculateAverage = exports.verbalizer = exports.Verbalizer = exports.pluralizer = exports.Pluralizer = exports.VolumeConverter = exports.TimeConverter = exports.TemperatureConverter = exports.MassConverter = exports.LengthConverter = exports.DataConverter = exports.converter = exports.Converter = exports.AreaConverter = exports.wordCount = exports.parseNumbersFromText = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = exports.extractNumbers = exports.countWordsInString = exports.countWords = exports.slugifyString = exports.reverseString = exports.replaceAllInString = exports.normalizeString = exports.maskString = exports.formatWithPlural = exports.formatUnitWithPlural = exports.formatNumberWithPluralUnit = exports.extractURLs = exports.extractEmails = exports.convertStringCase = exports.capitalizeString = exports.isSnakeCase = exports.isPascalCase = exports.isPalindrome = exports.isKebabCase = exports.isEmojiOnly = exports.isCamelCase = exports.generateAnagrams = exports.truncateString = exports.trimString = exports.generateRandomID = void 0;
4
- exports.convertRomanToInteger = exports.convertRomanToArabic = exports.convertNumberToWordsOrdinal = exports.convertNumberToWords = exports.cardinalWordsToOrdinal = exports.banglaToDigit = exports.arabicToRoman = exports.isPerfectSquare = exports.isPartOfFibonacciSeries = exports.isPartOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isNumberInvalid = exports.isMultiple = exports.isInvalidNumber = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.areNumbersInvalid = exports.areInvalidNumbers = exports.getNthFibonacci = exports.getMemoizedFibonacciSeries = exports.getMemoizedFibonacci = exports.getFibonacciSeriesMemo = exports.getFibonacciSeries = exports.getFibonacciNumbers = exports.getFibonacci = exports.generateFibonacci = exports.fibonacciGenerator = exports.calculatePercentage = exports.UnitConverter = exports.Unit = exports.Currency = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.roundToDecimal = exports.roundNumber = exports.reverseNumber = exports.getSumOfNumbers = exports.getRandomNumber = exports.getRandomInt = exports.getFactors = exports.getFactorial = exports.getDivisors = exports.getAverageOfNumbers = exports.getAverage = exports.factorsOf = exports.factorial = exports.convertToFixed = void 0;
5
- exports.convertHslaToHex8 = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.getRandomHSL = exports.getRandomColor = exports.generateRandomHSLColor = exports.generateRandomHSL = exports.generateRandomColorInHexRGB = exports.generateRandomColor = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.numberToOrdinal = exports.normalizeNumber = exports.getRandomFloat = exports.getRandomDecimal = exports.getOrdinalNumber = exports.getOrdinal = exports.formatCurrency = exports.convertToOrdinal = exports.convertNumberToOrdinal = exports.convertNumberToCurrency = exports.clampNumber = exports.cardinalToOrdinal = exports.isPrimeNumber = exports.isPrime = exports.getPrimeNumbers = exports.findPrimeNumbers = exports.wordToNumber = exports.wordsToNumber = exports.toRomanNumeral = exports.toRoman = exports.romanToNumeric = exports.romanToInteger = exports.romanToArabic = exports.numericToRoman = exports.numberToWordsOrdinal = exports.numberToWords = exports.numberToRoman = exports.integerToRoman = exports.digitToBangla = exports.convertWordToNumber = exports.convertWordsToNumber = exports.convertToRomanNumerals = exports.convertRomanToNumeric = void 0;
6
- exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.convertMinutesToTime = exports.convertMinutesToHourMinutes = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.INTERNALS = exports.Chronus = exports.Chronos = exports.Bongabdo = exports.BnCalendar = exports.BanglaCalendar = exports.isValidUTCOffset = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeZoneId = exports.isValidTimeString = exports.isValidTime = exports.isTimeWithUnit = exports.isNativeTimeZoneId = exports.isLeapYear = exports.isDateLike = exports.parseMSec = exports.parseMs = exports.greet = exports.getGreeting = exports.generateGreeting = exports.extractSolidColorValues = exports.extractAlphaColorValues = exports.Colour = exports.Color = exports.isRGBA = exports.isRGB = exports.isHSLA = exports.isHSL = exports.isHex8 = exports.isHex6 = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = exports.convertHslToRgb = exports.convertHslToHex = exports.convertHslaToRgba = void 0;
7
- exports.groupArrayByProperty = exports.getMissingElements = exports.getDuplicatesFromArray = exports.getDuplicates = exports.findMissingElements = exports.extractMissingElements = exports.extractDuplicatesFromArray = exports.extractDuplicates = exports.createOptionsArray = exports.sortAnArray = exports.naturalSortForString = exports.naturalSort = exports.compareSorter = exports.compareNaturally = exports.Finder = exports.totalDeltaByField = exports.sumFieldDifference = exports.sumByField = exports.groupAndSumByField = exports.groupAndAvgByField = exports.groupAndAverageByField = exports.avgByField = exports.averageByField = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeZoneIds = exports.getTimeZoneDetails = exports.getTimeStringFromUTC = exports.getTimeFromMinutes = exports.getNativeTimeZoneId = exports.getMinutesFromUTC = exports.getHourMinutesFromMinutes = exports.getTimestamp = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.formatTimePart = exports.formatDateTime = exports.formatDate = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = void 0;
8
- exports.createQueryParams = exports.removeObjectFields = exports.removeFields = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.omitObjectFields = exports.omitFields = exports.deleteObjectFields = exports.deleteFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedObjectValues = exports.parseObjectValues = exports.parseJsonToObject = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.extractObjectKeysDeep = exports.extractObjectKeys = exports.extractKeysDeep = exports.extractKeys = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = exports.isFileOrBlob = exports.isFileList = exports.isFileArray = exports.isCustomFileArray = exports.isCustomFile = exports.serializeForm = exports.parseFormData = exports.createFormData = exports.createControlledFormData = exports.convertIntoFormData = exports.splitArrayByProperty = exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.removeDuplicates = exports.moveArrayElement = void 0;
9
- exports.isPrimitive = exports.isPositiveInteger = exports.isNumber = exports.isNull = exports.isNormalPrimitive = exports.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.isBigInt = exports.Paginator = exports.throttleAction = exports.stripJsonEdgeGarbage = exports.stableStringify = exports.parsePrimitivesDeep = exports.parseJsonDeep = exports.parseJSON = exports.joinArrayElements = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getStaticGetterNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getInstanceGetterNames = exports.getClassDetails = exports.definePrototypeMethod = exports.deepParsePrimitives = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.queryStringToObject = exports.parseQueryStringLiteral = exports.parseQueryString = exports.literalQueryStringToObject = exports.getQueryStringAsObject = exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = void 0;
10
- exports.isURL = exports.isPhoneNumber = exports.isNumericString = exports.isNodeEnvironment = exports.isNodeENV = exports.isNode = exports.isIPAddress = exports.isHexString = exports.isExpectedNodeENV = exports.isEnvironment = exports.isEmailArray = exports.isEmail = exports.isDateString = exports.isBrowser = exports.isBinaryString = exports.isBase64 = exports.httpStatus = exports.HttpStatus = exports.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = exports.isObjectWithKeys = exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMethodDescriptor = exports.isMethod = exports.isMap = exports.isJSONObject = exports.isJSON = exports.isFunction = exports.isError = exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isArrayWithLength = exports.isArrayOfType = exports.isArray = exports.doesReturnPromise = exports.isUndefined = exports.isTruthy = exports.isSymbol = exports.isString = void 0;
11
- exports.isValidURL = exports.isValidEmail = exports.isUUID = void 0;
3
+ exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateFactorial = exports.calculateAverage = exports.verbalizer = exports.Verbalizer = exports.pluralizer = exports.Pluralizer = exports.VolumeConverter = exports.TimeConverter = exports.TemperatureConverter = exports.MassConverter = exports.LengthConverter = exports.DataConverter = exports.converter = exports.Converter = exports.AreaConverter = exports.wordCount = exports.parseNumbersFromText = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = exports.extractNumbers = exports.countWordsInString = exports.countWords = exports.getCharacterDifferences = exports.computeTextDiff = exports.slugifyString = exports.reverseString = exports.replaceAllInString = exports.normalizeString = exports.maskString = exports.formatWithPlural = exports.formatUnitWithPlural = exports.formatNumberWithPluralUnit = exports.extractURLs = exports.extractEmails = exports.convertStringCase = exports.capitalizeString = exports.isSnakeCase = exports.isPascalCase = exports.isPalindrome = exports.isKebabCase = exports.isEmojiOnly = exports.isCamelCase = exports.generateAnagrams = exports.truncateString = exports.trimString = exports.generateRandomID = void 0;
4
+ exports.convertNumberToWordsOrdinal = exports.convertNumberToWords = exports.cardinalWordsToOrdinal = exports.banglaToDigit = exports.arabicToRoman = exports.isPerfectSquare = exports.isPartOfFibonacciSeries = exports.isPartOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isNumberInvalid = exports.isMultiple = exports.isInvalidNumber = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.areNumbersInvalid = exports.areInvalidNumbers = exports.getNthFibonacci = exports.getMemoizedFibonacciSeries = exports.getMemoizedFibonacci = exports.getFibonacciSeriesMemo = exports.getFibonacciSeries = exports.getFibonacciNumbers = exports.getFibonacci = exports.generateFibonacci = exports.fibonacciGenerator = exports.calculatePercentage = exports.UnitConverter = exports.Unit = exports.Currency = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.roundToDecimal = exports.roundNumber = exports.reverseNumber = exports.getSumOfNumbers = exports.getRandomNumber = exports.getRandomInt = exports.getFactors = exports.getFactorial = exports.getDivisors = exports.getAverageOfNumbers = exports.getAverage = exports.factorsOf = exports.factorial = exports.convertToFixed = exports.convertToDecimal = exports.calculateLCM = void 0;
5
+ exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.getRandomHSL = exports.getRandomColor = exports.generateRandomHSLColor = exports.generateRandomHSL = exports.generateRandomColorInHexRGB = exports.generateRandomColor = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.numberToOrdinal = exports.normalizeNumber = exports.getRandomFloat = exports.getRandomDecimal = exports.getOrdinalNumber = exports.getOrdinal = exports.formatCurrency = exports.convertToOrdinal = exports.convertNumberToOrdinal = exports.convertNumberToCurrency = exports.clampNumber = exports.cardinalToOrdinal = exports.isPrimeNumber = exports.isPrime = exports.getPrimeNumbers = exports.findPrimeNumbers = exports.wordToNumber = exports.wordsToNumber = exports.toRomanNumeral = exports.toRoman = exports.romanToNumeric = exports.romanToInteger = exports.romanToArabic = exports.numericToRoman = exports.numberToWordsOrdinal = exports.numberToWords = exports.numberToRoman = exports.integerToRoman = exports.digitToBangla = exports.convertWordToNumber = exports.convertWordsToNumber = exports.convertToRomanNumerals = exports.convertRomanToNumeric = exports.convertRomanToInteger = exports.convertRomanToArabic = void 0;
6
+ exports.convertMinutesToUTCOffset = exports.convertMinutesToTime = exports.convertMinutesToHourMinutes = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.INTERNALS = exports.Chronus = exports.Chronos = exports.Bongabdo = exports.BnCalendar = exports.BanglaCalendar = exports.isValidUTCOffset = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeZoneId = exports.isValidTimeString = exports.isValidTime = exports.isTimeWithUnit = exports.isNativeTimeZoneId = exports.isLeapYear = exports.isDateLike = exports.parseMSec = exports.parseMs = exports.greet = exports.getGreeting = exports.generateGreeting = exports.extractSolidColorValues = exports.extractAlphaColorValues = exports.Colour = exports.Color = exports.isRGBA = exports.isRGB = exports.isHSLA = exports.isHSL = exports.isHex8 = exports.isHex6 = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = exports.convertHslToRgb = exports.convertHslToHex = exports.convertHslaToRgba = exports.convertHslaToHex8 = exports.convertHexToRgb = void 0;
7
+ exports.getDuplicatesFromArray = exports.getDuplicates = exports.findMissingElements = exports.extractMissingElements = exports.extractDuplicatesFromArray = exports.extractDuplicates = exports.createOptionsArray = exports.sortAnArray = exports.naturalSortForString = exports.naturalSort = exports.compareSorter = exports.compareNaturally = exports.Finder = exports.totalDeltaByField = exports.sumFieldDifference = exports.sumByField = exports.groupAndSumByField = exports.groupAndAvgByField = exports.groupAndAverageByField = exports.avgByField = exports.averageByField = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeZoneIds = exports.getTimeZoneDetails = exports.getTimeStringFromUTC = exports.getTimeFromMinutes = exports.getNativeTimeZoneId = exports.getMinutesFromUTC = exports.getHourMinutesFromMinutes = exports.getTimestamp = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.formatTimePart = exports.formatDateTime = exports.formatDate = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = void 0;
8
+ exports.removeFields = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.omitObjectFields = exports.omitFields = exports.deleteObjectFields = exports.deleteFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedObjectValues = exports.parseObjectValues = exports.parseJsonToObject = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.extractObjectKeysDeep = exports.extractObjectKeys = exports.extractKeysDeep = exports.extractKeys = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = exports.isFileOrBlob = exports.isFileList = exports.isFileArray = exports.isCustomFileArray = exports.isCustomFile = exports.serializeForm = exports.parseFormData = exports.createFormData = exports.createControlledFormData = exports.convertIntoFormData = exports.splitArrayByProperty = exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.removeDuplicates = exports.moveArrayElement = exports.groupArrayByProperty = exports.getMissingElements = void 0;
9
+ exports.isNumber = exports.isNull = exports.isNormalPrimitive = exports.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.isBigInt = exports.Paginator = exports.throttleAction = exports.stripJsonEdgeGarbage = exports.stableStringify = exports.parsePrimitivesDeep = exports.parseJsonDeep = exports.parseJSON = exports.joinArrayElements = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getStaticGetterNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getInstanceGetterNames = exports.getClassDetails = exports.definePrototypeMethod = exports.deepParsePrimitives = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.queryStringToObject = exports.parseQueryStringLiteral = exports.parseQueryString = exports.literalQueryStringToObject = exports.getQueryStringAsObject = exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = exports.createQueryParams = exports.removeObjectFields = void 0;
10
+ exports.isNumericString = exports.isNodeEnvironment = exports.isNodeENV = exports.isNode = exports.isIPAddress = exports.isHexString = exports.isExpectedNodeENV = exports.isEnvironment = exports.isEmailArray = exports.isEmail = exports.isDateString = exports.isBrowser = exports.isBinaryString = exports.isBase64 = exports.httpStatus = exports.HttpStatus = exports.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = exports.isObjectWithKeys = exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMethodDescriptor = exports.isMethod = exports.isMap = exports.isJSONObject = exports.isJSON = exports.isFunction = exports.isError = exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isArrayWithLength = exports.isArrayOfType = exports.isArray = exports.doesReturnPromise = exports.isUndefined = exports.isTruthy = exports.isSymbol = exports.isString = exports.isPrimitive = exports.isPositiveInteger = void 0;
11
+ exports.isValidURL = exports.isValidEmail = exports.isUUID = exports.isURL = exports.isPhoneNumber = void 0;
12
12
  var basics_1 = require("./string/basics");
13
13
  Object.defineProperty(exports, "generateRandomID", { enumerable: true, get: function () { return basics_1.generateRandomID; } });
14
14
  Object.defineProperty(exports, "trimString", { enumerable: true, get: function () { return basics_1.trimString; } });
@@ -36,6 +36,9 @@ Object.defineProperty(exports, "normalizeString", { enumerable: true, get: funct
36
36
  Object.defineProperty(exports, "replaceAllInString", { enumerable: true, get: function () { return convert_1.replaceAllInString; } });
37
37
  Object.defineProperty(exports, "reverseString", { enumerable: true, get: function () { return convert_1.reverseString; } });
38
38
  Object.defineProperty(exports, "slugifyString", { enumerable: true, get: function () { return convert_1.slugifyString; } });
39
+ var diff_1 = require("./string/diff");
40
+ Object.defineProperty(exports, "computeTextDiff", { enumerable: true, get: function () { return diff_1.computeTextDiff; } });
41
+ Object.defineProperty(exports, "getCharacterDifferences", { enumerable: true, get: function () { return diff_1.getCharacterDifferences; } });
39
42
  var utilities_1 = require("./string/utilities");
40
43
  Object.defineProperty(exports, "countWords", { enumerable: true, get: function () { return utilities_1.countWords; } });
41
44
  Object.defineProperty(exports, "countWordsInString", { enumerable: true, get: function () { return utilities_1.countWords; } });
@@ -44,8 +44,8 @@ exports.getRandomNumber = getRandomNumber;
44
44
  const convertToDecimal = (input, options) => {
45
45
  const { decimalPlaces = 2, isString = false } = options || {};
46
46
  const number = typeof input === 'number' ? input : Number(input);
47
- return isString ?
48
- number.toFixed(decimalPlaces)
47
+ return isString
48
+ ? number.toFixed(decimalPlaces)
49
49
  : Number(number.toFixed(decimalPlaces));
50
50
  };
51
51
  exports.convertToDecimal = convertToDecimal;
@@ -112,8 +112,8 @@ function numberToWordsOrdinal(number) {
112
112
  const _fixUnderTeen = (cardinal) => {
113
113
  return constants_1.ORDINAL_UNDER_TEEN[cardinal];
114
114
  };
115
- const wordNumber = (0, specials_1.isNumericString)(number) || (0, primitives_1.isNumber)(number) ?
116
- numberToWords(number)
115
+ const wordNumber = (0, specials_1.isNumericString)(number) || (0, primitives_1.isNumber)(number)
116
+ ? numberToWords(number)
117
117
  : number?.trim()?.toLowerCase();
118
118
  if (TEEN_OR_HUNDRED.test(wordNumber)) {
119
119
  return wordNumber + 'th';
@@ -20,8 +20,8 @@ function _convertLessThanThousand(num, isLast) {
20
20
  result += `-${constants_1.ONES[remainder]}`;
21
21
  if (num >= 100) {
22
22
  const hundredsPart = `${constants_1.ONES[Math.floor(num / 100)]} hundred`;
23
- return num % 100 === 0 ?
24
- hundredsPart
23
+ return num % 100 === 0
24
+ ? hundredsPart
25
25
  : `${hundredsPart} ${isLast ? 'and' : ''} ${_convertLessThanThousand(num % 100, false)}`;
26
26
  }
27
27
  return result;
@@ -58,7 +58,7 @@ function getNumbersInRange(type = 'any', options) {
58
58
  if (type !== 'prime') {
59
59
  output = (0, helpers_1._applyMultiples)(output, multiplesOf);
60
60
  }
61
- return getAsString ?
62
- (0, index_1.convertArrayToString)(output, { separator })
61
+ return getAsString
62
+ ? (0, index_1.convertArrayToString)(output, { separator })
63
63
  : output;
64
64
  }