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.
- package/CHANGELOG.md +12 -0
- package/README.md +5 -5
- package/dist/cjs/array/Finder.js +13 -11
- package/dist/cjs/array/sort.js +4 -4
- package/dist/cjs/array/transform.js +2 -2
- package/dist/cjs/date/BanglaCalendar.js +32 -20
- package/dist/cjs/date/Chronos.js +10 -47
- package/dist/cjs/date/helpers.js +5 -3
- package/dist/cjs/date/plugins/businessPlugin.js +2 -2
- package/dist/cjs/date/plugins/dateRangePlugin.js +52 -0
- package/dist/cjs/date/plugins/durationPlugin.js +1 -3
- package/dist/cjs/dom/query.js +2 -2
- package/dist/cjs/form/convert.js +12 -12
- package/dist/cjs/form/transform.js +3 -4
- package/dist/cjs/index.js +12 -9
- package/dist/cjs/number/basics.js +2 -2
- package/dist/cjs/number/convert.js +2 -2
- package/dist/cjs/number/helpers.js +2 -2
- package/dist/cjs/number/range.js +2 -2
- package/dist/cjs/number/utilities.js +1 -3
- package/dist/cjs/object/sanitize.js +2 -2
- package/dist/cjs/string/case.js +21 -25
- package/dist/cjs/string/convert.js +2 -2
- package/dist/cjs/string/diff.js +158 -0
- package/dist/cjs/string/helpers.js +70 -0
- package/dist/cjs/string/utilities.js +3 -5
- package/dist/cjs/stylog/Stylog.js +7 -5
- package/dist/dts/colors/css-colors.d.ts +1 -1
- package/dist/dts/date/Chronos.d.ts +4 -64
- package/dist/dts/date/constants.d.ts +1 -1
- package/dist/dts/date/plugins/dateRangePlugin.d.ts +67 -0
- package/dist/dts/date/types.d.ts +5 -3
- package/dist/dts/date/utils.d.ts +4 -4
- package/dist/dts/hash/types.d.ts +1 -1
- package/dist/dts/index.d.ts +1 -0
- package/dist/dts/object/types.d.ts +4 -4
- package/dist/dts/string/diff.d.ts +48 -0
- package/dist/dts/string/helpers.d.ts +25 -0
- package/dist/dts/string/types.d.ts +65 -19
- package/dist/dts/utils/types.d.ts +10 -8
- package/dist/esm/array/Finder.js +13 -11
- package/dist/esm/array/sort.js +4 -4
- package/dist/esm/array/transform.js +2 -2
- package/dist/esm/date/BanglaCalendar.js +32 -20
- package/dist/esm/date/Chronos.js +10 -47
- package/dist/esm/date/helpers.js +5 -3
- package/dist/esm/date/plugins/businessPlugin.js +2 -2
- package/dist/esm/date/plugins/dateRangePlugin.js +48 -0
- package/dist/esm/date/plugins/durationPlugin.js +1 -3
- package/dist/esm/dom/query.js +2 -2
- package/dist/esm/form/convert.js +12 -12
- package/dist/esm/form/transform.js +3 -4
- package/dist/esm/index.js +1 -0
- package/dist/esm/number/basics.js +2 -2
- package/dist/esm/number/convert.js +2 -2
- package/dist/esm/number/helpers.js +2 -2
- package/dist/esm/number/range.js +2 -2
- package/dist/esm/number/utilities.js +1 -3
- package/dist/esm/object/sanitize.js +2 -2
- package/dist/esm/string/case.js +21 -25
- package/dist/esm/string/convert.js +2 -2
- package/dist/esm/string/diff.js +154 -0
- package/dist/esm/string/helpers.js +65 -0
- package/dist/esm/string/utilities.js +3 -5
- package/dist/esm/stylog/Stylog.js +7 -5
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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>
|
package/dist/cjs/array/Finder.js
CHANGED
|
@@ -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'
|
|
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'
|
|
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
|
|
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, {
|
package/dist/cjs/array/sort.js
CHANGED
|
@@ -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
|
|
22
|
-
|
|
23
|
-
dateBnYrOrCfg
|
|
24
|
-
|
|
25
|
-
dateBnYrOrCfg
|
|
26
|
-
:
|
|
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)
|
|
32
|
-
|
|
33
|
-
|
|
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)
|
|
36
|
-
|
|
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)
|
|
39
|
-
|
|
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
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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);
|
package/dist/cjs/date/Chronos.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
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
|
|
700
|
-
|
|
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
|
|
818
|
-
const diffMins =
|
|
819
|
-
const target =
|
|
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) {
|
package/dist/cjs/date/helpers.js
CHANGED
|
@@ -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)
|
|
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
|
|
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;
|
package/dist/cjs/dom/query.js
CHANGED
|
@@ -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() === ''))
|
package/dist/cjs/form/convert.js
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
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.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
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;
|
package/dist/cjs/number/range.js
CHANGED
|
@@ -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
|
}
|