@valkyriestudios/utils 12.23.0 → 12.24.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/array/join.js +7 -4
- package/array/mapPrimitive.js +2 -2
- package/date/addUTC.d.ts +2 -2
- package/date/addUTC.js +11 -10
- package/date/convertToDate.d.ts +7 -0
- package/date/convertToDate.js +15 -0
- package/date/diff.d.ts +3 -3
- package/date/diff.js +6 -4
- package/date/endOfUTC.d.ts +2 -2
- package/date/endOfUTC.js +15 -13
- package/date/format.d.ts +2 -2
- package/date/format.js +11 -10
- package/date/index.d.ts +2 -1
- package/date/index.js +3 -1
- package/date/isLeap.d.ts +2 -2
- package/date/isLeap.js +5 -4
- package/date/setTimeUTC.d.ts +2 -2
- package/date/setTimeUTC.js +5 -3
- package/date/startOfUTC.d.ts +2 -2
- package/date/startOfUTC.js +15 -13
- package/index.d.ts +22 -15
- package/object/is.d.ts +1 -3
- package/object/isNotEmpty.d.ts +1 -1
- package/object/pick.d.ts +7 -3
- package/object/pick.js +4 -4
- package/package.json +1 -1
package/array/join.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.join = join;
|
|
|
4
4
|
exports.default = join;
|
|
5
5
|
const round_1 = require("../number/round");
|
|
6
6
|
const isIntegerAboveOrEqual_1 = require("../number/isIntegerAboveOrEqual");
|
|
7
|
-
const SPACE_RGX = /(\s)
|
|
7
|
+
const SPACE_RGX = /(\s)+/g;
|
|
8
8
|
function join(val, opts) {
|
|
9
9
|
if (!Array.isArray(val) || !val.length)
|
|
10
10
|
return '';
|
|
@@ -17,9 +17,12 @@ function join(val, opts) {
|
|
|
17
17
|
let hasVal = false;
|
|
18
18
|
for (let i = 0; i < val.length; i++) {
|
|
19
19
|
const el = val[i];
|
|
20
|
-
if (typeof el === 'string'
|
|
21
|
-
const trimmed =
|
|
22
|
-
|
|
20
|
+
if (typeof el === 'string') {
|
|
21
|
+
const trimmed = el.trim();
|
|
22
|
+
if (!trimmed)
|
|
23
|
+
continue;
|
|
24
|
+
const n_el = VALTRIM ? trimmed : el;
|
|
25
|
+
result = result + (hasVal ? DELIM : '') + (INNERTRIM ? n_el.replace(SPACE_RGX, ' ') : n_el);
|
|
23
26
|
hasVal = true;
|
|
24
27
|
}
|
|
25
28
|
else if (Number.isFinite(el)) {
|
package/array/mapPrimitive.js
CHANGED
|
@@ -17,11 +17,11 @@ function mapPrimitive(arr, opts = {}) {
|
|
|
17
17
|
const el = arr[i];
|
|
18
18
|
if (typeof el === 'string') {
|
|
19
19
|
const trimmed = el.trim();
|
|
20
|
-
if (!trimmed
|
|
20
|
+
if (!trimmed)
|
|
21
21
|
continue;
|
|
22
22
|
map[trimmed] = VALTRIM ? trimmed : el;
|
|
23
23
|
}
|
|
24
|
-
else if (
|
|
24
|
+
else if (Number.isFinite(el)) {
|
|
25
25
|
map[`${KEYROUND ? Math.round(el) : el}`] = VALROUND === false
|
|
26
26
|
? el
|
|
27
27
|
: VALROUND === true
|
package/date/addUTC.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ export type AddUTCKey = 'years' | 'year' | 'months' | 'month' | 'days' | 'day' |
|
|
|
2
2
|
/**
|
|
3
3
|
* Adds the provided amount of a specific key to the provided date
|
|
4
4
|
*
|
|
5
|
-
* @param {Date} val - Date to set to end of
|
|
5
|
+
* @param {Date|string} val - Date to set to end of
|
|
6
6
|
* @param {number} amount - (default=0) Amount of key to add
|
|
7
7
|
* @param {AddUTCKey} key - (default='millisecond') Key to set
|
|
8
8
|
*/
|
|
9
|
-
declare function addUTC(val: Date, amt?: number, key?: AddUTCKey): Date;
|
|
9
|
+
declare function addUTC(val: Date | string, amt?: number, key?: AddUTCKey): Date;
|
|
10
10
|
export { addUTC, addUTC as default };
|
package/date/addUTC.js
CHANGED
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addUTC = addUTC;
|
|
4
4
|
exports.default = addUTC;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
function addUTC(val, amt = 0, key = 'millisecond') {
|
|
7
|
-
if (!(0, is_1.isDate)(val))
|
|
8
|
-
throw new TypeError('addUTC requires a date object');
|
|
9
7
|
if (!Number.isInteger(amt))
|
|
10
8
|
throw new TypeError('Amount needs to be an integer');
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
9
|
+
const n_val = (0, convertToDate_1.convertToDate)(val);
|
|
10
|
+
if (n_val === null)
|
|
11
|
+
throw new TypeError('addUTC requires a date object');
|
|
12
|
+
const year = n_val.getUTCFullYear();
|
|
13
|
+
const month = n_val.getUTCMonth();
|
|
14
|
+
const date = n_val.getUTCDate();
|
|
15
|
+
const hour = n_val.getUTCHours();
|
|
16
|
+
const min = n_val.getUTCMinutes();
|
|
17
|
+
const sec = n_val.getUTCSeconds();
|
|
18
|
+
const ms = n_val.getUTCMilliseconds();
|
|
18
19
|
switch (key) {
|
|
19
20
|
case 'years':
|
|
20
21
|
case 'year':
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a value to a Date object if possible, handles Date objects and strings
|
|
3
|
+
*
|
|
4
|
+
* @param {Date|string} val - Value to convert
|
|
5
|
+
*/
|
|
6
|
+
declare function convertToDate(val: Date | string | number): Date | null;
|
|
7
|
+
export { convertToDate, convertToDate as default };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertToDate = convertToDate;
|
|
4
|
+
exports.default = convertToDate;
|
|
5
|
+
const is_1 = require("./is");
|
|
6
|
+
function convertToDate(val) {
|
|
7
|
+
if ((0, is_1.isDate)(val)) {
|
|
8
|
+
return val;
|
|
9
|
+
}
|
|
10
|
+
else if (typeof val === 'string') {
|
|
11
|
+
const date = new Date(val);
|
|
12
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
package/date/diff.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ export type DiffKey = 'week' | 'weeks' | 'day' | 'days' | 'hour' | 'hours' | 'mi
|
|
|
2
2
|
/**
|
|
3
3
|
* Compute the diff between two dates in the provided key
|
|
4
4
|
*
|
|
5
|
-
* @param {Date} val_a - Date to diff against
|
|
6
|
-
* @param {Date} val_b - Date to diff with
|
|
5
|
+
* @param {Date|string} val_a - Date to diff against
|
|
6
|
+
* @param {Date|string} val_b - Date to diff with
|
|
7
7
|
* @param {DiffKey} key - (default='millisecond') Key to diff in
|
|
8
8
|
*/
|
|
9
|
-
declare function diff(val_a: Date, val_b: Date, key?: DiffKey): number;
|
|
9
|
+
declare function diff(val_a: Date | string, val_b: Date | string, key?: DiffKey): number;
|
|
10
10
|
export { diff, diff as default };
|
package/date/diff.js
CHANGED
|
@@ -2,17 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.diff = diff;
|
|
4
4
|
exports.default = diff;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
const SECOND_IN_MILLISECONDS = 1000;
|
|
7
7
|
const MINUTE_IN_MILLISECONDS = SECOND_IN_MILLISECONDS * 60;
|
|
8
8
|
const HOUR_IN_MILLISECONDS = MINUTE_IN_MILLISECONDS * 60;
|
|
9
9
|
const DAY_IN_MILLISECONDS = HOUR_IN_MILLISECONDS * 24;
|
|
10
10
|
const WEEK_IN_MILLISECONDS = DAY_IN_MILLISECONDS * 7;
|
|
11
11
|
function diff(val_a, val_b, key = 'millisecond') {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const n_val_a = (0, convertToDate_1.convertToDate)(val_a);
|
|
13
|
+
const n_val_b = (0, convertToDate_1.convertToDate)(val_b);
|
|
14
|
+
if (n_val_a === null ||
|
|
15
|
+
n_val_b === null)
|
|
14
16
|
throw new TypeError('Diff requires date objects for both values');
|
|
15
|
-
const diff_in_ms =
|
|
17
|
+
const diff_in_ms = n_val_a.valueOf() - n_val_b.valueOf();
|
|
16
18
|
switch (key) {
|
|
17
19
|
case 'week':
|
|
18
20
|
case 'weeks':
|
package/date/endOfUTC.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export type EndOfUTCKey = 'year' | 'quarter' | 'month' | 'week' | 'week_sun' | '
|
|
|
2
2
|
/**
|
|
3
3
|
* Sets the provided date to end of UTC of provided key
|
|
4
4
|
*
|
|
5
|
-
* @param {Date} val - Date to set to end of
|
|
5
|
+
* @param {Date|string} val - Date to set to end of
|
|
6
6
|
* @param {EndOfUTCKey} key - (default='millisecond') Key to set
|
|
7
7
|
*/
|
|
8
|
-
declare function endOfUTC(val: Date, key?: EndOfUTCKey): Date;
|
|
8
|
+
declare function endOfUTC(val: Date | string, key?: EndOfUTCKey): Date;
|
|
9
9
|
export { endOfUTC, endOfUTC as default };
|
package/date/endOfUTC.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.endOfUTC = endOfUTC;
|
|
4
4
|
exports.default = endOfUTC;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
const WEEK_END = new Map([
|
|
7
7
|
['week', 0],
|
|
8
8
|
['week_sun', 6],
|
|
@@ -14,17 +14,19 @@ const WEEK_END = new Map([
|
|
|
14
14
|
['week_sat', 5],
|
|
15
15
|
]);
|
|
16
16
|
function endOfUTC(val, key = 'millisecond') {
|
|
17
|
-
|
|
17
|
+
const n_val = (0, convertToDate_1.convertToDate)(val);
|
|
18
|
+
if (n_val === null)
|
|
18
19
|
throw new TypeError('endOfUTC requires a date object');
|
|
20
|
+
const year = n_val.getUTCFullYear();
|
|
19
21
|
switch (key) {
|
|
20
22
|
case 'year':
|
|
21
|
-
return new Date(Date.UTC(
|
|
23
|
+
return new Date(Date.UTC(year, 11, 31, 23, 59, 59, 999));
|
|
22
24
|
case 'quarter': {
|
|
23
|
-
const UTC_MONTH =
|
|
24
|
-
return new Date(Date.UTC(
|
|
25
|
+
const UTC_MONTH = n_val.getUTCMonth();
|
|
26
|
+
return new Date(Date.UTC(year, (UTC_MONTH - (UTC_MONTH % 3)) + 3, 0, 23, 59, 59, 999));
|
|
25
27
|
}
|
|
26
28
|
case 'month':
|
|
27
|
-
return new Date(Date.UTC(
|
|
29
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth() + 1, 0, 23, 59, 59, 999));
|
|
28
30
|
case 'week':
|
|
29
31
|
case 'week_sun':
|
|
30
32
|
case 'week_mon':
|
|
@@ -33,19 +35,19 @@ function endOfUTC(val, key = 'millisecond') {
|
|
|
33
35
|
case 'week_thu':
|
|
34
36
|
case 'week_fri':
|
|
35
37
|
case 'week_sat': {
|
|
36
|
-
const UTC_DAY =
|
|
38
|
+
const UTC_DAY = n_val.getUTCDay();
|
|
37
39
|
const UTC_EOD = WEEK_END.get(key);
|
|
38
|
-
return new Date(Date.UTC(
|
|
40
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate() + (UTC_DAY <= UTC_EOD ? UTC_EOD - UTC_DAY : (7 - UTC_DAY) + UTC_EOD), 23, 59, 59, 999));
|
|
39
41
|
}
|
|
40
42
|
case 'day':
|
|
41
|
-
return new Date(Date.UTC(
|
|
43
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), 23, 59, 59, 999));
|
|
42
44
|
case 'hour':
|
|
43
|
-
return new Date(Date.UTC(
|
|
45
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), 59, 59, 999));
|
|
44
46
|
case 'minute':
|
|
45
|
-
return new Date(Date.UTC(
|
|
47
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), n_val.getUTCMinutes(), 59, 999));
|
|
46
48
|
case 'second':
|
|
47
|
-
return new Date(Date.UTC(
|
|
49
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), n_val.getUTCMinutes(), n_val.getUTCSeconds(), 999));
|
|
48
50
|
default:
|
|
49
|
-
return new Date(Date.UTC(
|
|
51
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), n_val.getUTCMinutes(), n_val.getUTCSeconds(), n_val.getUTCMilliseconds()));
|
|
50
52
|
}
|
|
51
53
|
}
|
package/date/format.d.ts
CHANGED
|
@@ -7,14 +7,14 @@ export type WEEK_START = keyof typeof WEEK_STARTS;
|
|
|
7
7
|
/**
|
|
8
8
|
* Formats the provided date according to a specific spec
|
|
9
9
|
*
|
|
10
|
-
* @param {Date} val - Date to format
|
|
10
|
+
* @param {Date|string} val - Date to format
|
|
11
11
|
* @param {string} spec - Spec to format the date to
|
|
12
12
|
* @param {string} locale - Locale to format the date in (only used in certain tokens such as dddd and MMMM)
|
|
13
13
|
* @param {string} zone - (default=current timezone) Pass the timezone to convert into. If not passed no conversion will happen
|
|
14
14
|
* @param {string} sow - (default='mon') Start of week (only useful when working with the 'W' and 'w' tokens for week numbers
|
|
15
15
|
* @throws {TypeError} When provided invalid payload
|
|
16
16
|
*/
|
|
17
|
-
declare function format(val: Date, spec: string, locale?: string, zone?: string, sow?: WEEK_START): string;
|
|
17
|
+
declare function format(val: Date | string, spec: string, locale?: string, zone?: string, sow?: WEEK_START): string;
|
|
18
18
|
declare namespace format {
|
|
19
19
|
var getLocale: () => string;
|
|
20
20
|
var setLocale: (locale: string) => void;
|
package/date/format.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.format = format;
|
|
4
4
|
exports.default = format;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
const WEEK_STARTS = {
|
|
7
7
|
mon: 'mon',
|
|
8
8
|
sun: 'sun',
|
|
@@ -14,7 +14,7 @@ let DEFAULT_SOW = 'mon';
|
|
|
14
14
|
try {
|
|
15
15
|
DEFAULT_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
16
16
|
}
|
|
17
|
-
catch
|
|
17
|
+
catch {
|
|
18
18
|
}
|
|
19
19
|
finally {
|
|
20
20
|
if (typeof DEFAULT_TZ !== 'string')
|
|
@@ -25,17 +25,17 @@ const intl_formatters = Object.create(null);
|
|
|
25
25
|
const spec_cache = Object.create(null);
|
|
26
26
|
const zone_offset_cache = Object.create(null);
|
|
27
27
|
function WeekNr(d, sow) {
|
|
28
|
-
const date = new Date(d.valueOf());
|
|
29
28
|
switch (sow) {
|
|
30
29
|
case 'sun':
|
|
31
30
|
case 'sat': {
|
|
32
31
|
const OFFSET = sow === 'sat' ? 1 : 0;
|
|
33
|
-
const jan1 = new Date(Date.UTC(
|
|
34
|
-
const near = new Date(
|
|
32
|
+
const jan1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
33
|
+
const near = new Date(d.getTime() - (((d.getDay() + OFFSET) % 7) * 86400000));
|
|
35
34
|
const first = new Date(jan1.getTime() - (((jan1.getDay() + OFFSET) % 7) * 86400000));
|
|
36
35
|
return 1 + Math.floor((near.valueOf() - first.valueOf()) / 604800000);
|
|
37
36
|
}
|
|
38
37
|
default: {
|
|
38
|
+
const date = new Date(d.valueOf());
|
|
39
39
|
date.setDate(date.getDate() - ((d.getDay() + 6) % 7) + 3);
|
|
40
40
|
const date_thu = date.valueOf();
|
|
41
41
|
date.setMonth(0, 1);
|
|
@@ -61,7 +61,7 @@ function toZone(d, zone) {
|
|
|
61
61
|
try {
|
|
62
62
|
zone_time = new Date(d.toLocaleString(DEFAULT_LOCALE, { timeZone: zone })).getTime();
|
|
63
63
|
}
|
|
64
|
-
catch
|
|
64
|
+
catch {
|
|
65
65
|
throw new Error(`format: Invalid zone passed - ${zone}`);
|
|
66
66
|
}
|
|
67
67
|
const offset = zone_time - time;
|
|
@@ -76,7 +76,7 @@ function runIntl(loc, token, props, val) {
|
|
|
76
76
|
formatter = new Intl.DateTimeFormat(loc, props);
|
|
77
77
|
intl_formatters[hash] = formatter;
|
|
78
78
|
}
|
|
79
|
-
catch
|
|
79
|
+
catch {
|
|
80
80
|
throw new Error(`format: Failed to run conversion for ${token} with locale ${loc}`);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -176,7 +176,8 @@ function getSpecChain(spec) {
|
|
|
176
176
|
return result;
|
|
177
177
|
}
|
|
178
178
|
function format(val, spec, locale = DEFAULT_LOCALE, zone = DEFAULT_TZ, sow = DEFAULT_SOW) {
|
|
179
|
-
|
|
179
|
+
const n_val = (0, convertToDate_1.convertToDate)(val);
|
|
180
|
+
if (n_val === null)
|
|
180
181
|
throw new TypeError('format: val must be a Date');
|
|
181
182
|
if (typeof spec !== 'string')
|
|
182
183
|
throw new TypeError('format: spec must be a string');
|
|
@@ -186,8 +187,8 @@ function format(val, spec, locale = DEFAULT_LOCALE, zone = DEFAULT_TZ, sow = DEF
|
|
|
186
187
|
throw new TypeError('format: zone must be a string');
|
|
187
188
|
const n_spec = getSpecChain(spec);
|
|
188
189
|
if (!n_spec)
|
|
189
|
-
return
|
|
190
|
-
const d = toZone(
|
|
190
|
+
return n_val.toISOString();
|
|
191
|
+
const d = toZone(n_val, zone);
|
|
191
192
|
let base = n_spec.base;
|
|
192
193
|
const { chain_len, chain, repl_len, repl } = n_spec;
|
|
193
194
|
for (let i = 0; i < chain_len; i++) {
|
package/date/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { addUTC } from './addUTC';
|
|
2
|
+
import { convertToDate } from './convertToDate';
|
|
2
3
|
import { diff } from './diff';
|
|
3
4
|
import { endOfUTC } from './endOfUTC';
|
|
4
5
|
import { format } from './format';
|
|
@@ -11,4 +12,4 @@ import { setTimeUTC } from './setTimeUTC';
|
|
|
11
12
|
import { startOfUTC } from './startOfUTC';
|
|
12
13
|
import { toUnix } from './toUnix';
|
|
13
14
|
import { toUTC } from './toUTC';
|
|
14
|
-
export { addUTC, diff, endOfUTC, format, isDateFormat as isFormat, isDateFormat, isDate, isDate as is, isLeap, nowUnix, nowUnixMs, setTimeUTC, startOfUTC, toUnix, toUTC };
|
|
15
|
+
export { addUTC, convertToDate, diff, endOfUTC, format, isDateFormat as isFormat, isDateFormat, isDate, isDate as is, isLeap, nowUnix, nowUnixMs, setTimeUTC, startOfUTC, toUnix, toUTC };
|
package/date/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toUTC = exports.toUnix = exports.startOfUTC = exports.setTimeUTC = exports.nowUnixMs = exports.nowUnix = exports.isLeap = exports.is = exports.isDate = exports.isDateFormat = exports.isFormat = exports.format = exports.endOfUTC = exports.diff = exports.addUTC = void 0;
|
|
3
|
+
exports.toUTC = exports.toUnix = exports.startOfUTC = exports.setTimeUTC = exports.nowUnixMs = exports.nowUnix = exports.isLeap = exports.is = exports.isDate = exports.isDateFormat = exports.isFormat = exports.format = exports.endOfUTC = exports.diff = exports.convertToDate = exports.addUTC = void 0;
|
|
4
4
|
const addUTC_1 = require("./addUTC");
|
|
5
5
|
Object.defineProperty(exports, "addUTC", { enumerable: true, get: function () { return addUTC_1.addUTC; } });
|
|
6
|
+
const convertToDate_1 = require("./convertToDate");
|
|
7
|
+
Object.defineProperty(exports, "convertToDate", { enumerable: true, get: function () { return convertToDate_1.convertToDate; } });
|
|
6
8
|
const diff_1 = require("./diff");
|
|
7
9
|
Object.defineProperty(exports, "diff", { enumerable: true, get: function () { return diff_1.diff; } });
|
|
8
10
|
const endOfUTC_1 = require("./endOfUTC");
|
package/date/isLeap.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Check whether or not a provided value is a leap year
|
|
3
3
|
*
|
|
4
|
-
* @param {Date} val - Value to verify
|
|
4
|
+
* @param {Date|string} val - Value to verify
|
|
5
5
|
*/
|
|
6
|
-
declare function isLeap(val: Date): boolean;
|
|
6
|
+
declare function isLeap(val: Date | string): boolean;
|
|
7
7
|
export { isLeap, isLeap as default };
|
package/date/isLeap.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isLeap = isLeap;
|
|
4
4
|
exports.default = isLeap;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
function isLeap(val) {
|
|
7
|
-
|
|
7
|
+
const n_val = (0, convertToDate_1.convertToDate)(val);
|
|
8
|
+
if (n_val === null)
|
|
8
9
|
return false;
|
|
9
|
-
const year =
|
|
10
|
-
return (
|
|
10
|
+
const year = n_val.getUTCFullYear();
|
|
11
|
+
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
|
11
12
|
}
|
package/date/setTimeUTC.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export type TimeProps = {
|
|
|
7
7
|
/**
|
|
8
8
|
* Sets the time on a provided date object and returns it
|
|
9
9
|
*
|
|
10
|
-
* @param {Date} val - Date to set the time for
|
|
10
|
+
* @param {Date|string} val - Date to set the time for
|
|
11
11
|
* @param {TimeProps} props - Time props to set the time to
|
|
12
12
|
*/
|
|
13
|
-
declare function setTimeUTC(val: Date, props: TimeProps): Date;
|
|
13
|
+
declare function setTimeUTC(val: Date | string, props: TimeProps): Date;
|
|
14
14
|
export { setTimeUTC, setTimeUTC as default };
|
package/date/setTimeUTC.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.setTimeUTC = setTimeUTC;
|
|
4
4
|
exports.default = setTimeUTC;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
const isIntegerBetween_1 = require("../number/isIntegerBetween");
|
|
7
7
|
function setTimeUTC(val, props) {
|
|
8
|
-
|
|
8
|
+
const n_val = (0, convertToDate_1.convertToDate)(val);
|
|
9
|
+
if (n_val === null)
|
|
9
10
|
throw new TypeError('setTimeUTC requires a date object');
|
|
10
|
-
|
|
11
|
+
const { hour, minute, second, millisecond } = props || {};
|
|
12
|
+
return new Date(Date.UTC(n_val.getUTCFullYear(), n_val.getUTCMonth(), n_val.getUTCDate(), (0, isIntegerBetween_1.isIntegerBetween)(hour, 0, 23) ? hour : n_val.getUTCHours(), (0, isIntegerBetween_1.isIntegerBetween)(minute, 0, 59) ? minute : n_val.getUTCMinutes(), (0, isIntegerBetween_1.isIntegerBetween)(second, 0, 59) ? second : n_val.getUTCSeconds(), (0, isIntegerBetween_1.isIntegerBetween)(millisecond, 0, 999) ? millisecond : n_val.getUTCMilliseconds()));
|
|
11
13
|
}
|
package/date/startOfUTC.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export type StartOfUTCKey = 'year' | 'quarter' | 'month' | 'week' | 'week_sun' |
|
|
|
2
2
|
/**
|
|
3
3
|
* Sets the provided date to start of UTC of provided key
|
|
4
4
|
*
|
|
5
|
-
* @param {Date} val - Date to set to start of
|
|
5
|
+
* @param {Date|string} val - Date to set to start of
|
|
6
6
|
* @param {StartOfUTCKey} key - (default='millisecond') Key to set
|
|
7
7
|
*/
|
|
8
|
-
declare function startOfUTC(val: Date, key?: StartOfUTCKey): Date;
|
|
8
|
+
declare function startOfUTC(val: Date | string, key?: StartOfUTCKey): Date;
|
|
9
9
|
export { startOfUTC, startOfUTC as default };
|
package/date/startOfUTC.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.startOfUTC = startOfUTC;
|
|
4
4
|
exports.default = startOfUTC;
|
|
5
|
-
const
|
|
5
|
+
const convertToDate_1 = require("./convertToDate");
|
|
6
6
|
const WEEK_START = new Map([
|
|
7
7
|
['week', 1],
|
|
8
8
|
['week_sun', 0],
|
|
@@ -14,17 +14,19 @@ const WEEK_START = new Map([
|
|
|
14
14
|
['week_sat', 6],
|
|
15
15
|
]);
|
|
16
16
|
function startOfUTC(val, key = 'millisecond') {
|
|
17
|
-
|
|
17
|
+
const n_val = (0, convertToDate_1.convertToDate)(val);
|
|
18
|
+
if (n_val === null)
|
|
18
19
|
throw new TypeError('startOfUTC requires a date object');
|
|
20
|
+
const year = n_val.getUTCFullYear();
|
|
19
21
|
switch (key) {
|
|
20
22
|
case 'year':
|
|
21
|
-
return new Date(Date.UTC(
|
|
23
|
+
return new Date(Date.UTC(year, 0));
|
|
22
24
|
case 'quarter': {
|
|
23
|
-
const UTC_MONTH =
|
|
24
|
-
return new Date(Date.UTC(
|
|
25
|
+
const UTC_MONTH = n_val.getUTCMonth();
|
|
26
|
+
return new Date(Date.UTC(year, UTC_MONTH - (UTC_MONTH % 3)));
|
|
25
27
|
}
|
|
26
28
|
case 'month':
|
|
27
|
-
return new Date(Date.UTC(
|
|
29
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth()));
|
|
28
30
|
case 'week':
|
|
29
31
|
case 'week_sun':
|
|
30
32
|
case 'week_mon':
|
|
@@ -33,19 +35,19 @@ function startOfUTC(val, key = 'millisecond') {
|
|
|
33
35
|
case 'week_thu':
|
|
34
36
|
case 'week_fri':
|
|
35
37
|
case 'week_sat': {
|
|
36
|
-
const UTC_DAY =
|
|
38
|
+
const UTC_DAY = n_val.getUTCDay();
|
|
37
39
|
const UTC_SOD = WEEK_START.get(key);
|
|
38
|
-
return new Date(Date.UTC(
|
|
40
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate() - (UTC_DAY < UTC_SOD ? (7 - UTC_SOD) + UTC_DAY : UTC_DAY - UTC_SOD)));
|
|
39
41
|
}
|
|
40
42
|
case 'day':
|
|
41
|
-
return new Date(Date.UTC(
|
|
43
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate()));
|
|
42
44
|
case 'hour':
|
|
43
|
-
return new Date(Date.UTC(
|
|
45
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours()));
|
|
44
46
|
case 'minute':
|
|
45
|
-
return new Date(Date.UTC(
|
|
47
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), n_val.getUTCMinutes()));
|
|
46
48
|
case 'second':
|
|
47
|
-
return new Date(Date.UTC(
|
|
49
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), n_val.getUTCMinutes(), n_val.getUTCSeconds()));
|
|
48
50
|
default:
|
|
49
|
-
return new Date(Date.UTC(
|
|
51
|
+
return new Date(Date.UTC(year, n_val.getUTCMonth(), n_val.getUTCDate(), n_val.getUTCHours(), n_val.getUTCMinutes(), n_val.getUTCSeconds(), n_val.getUTCMilliseconds()));
|
|
50
52
|
}
|
|
51
53
|
}
|
package/index.d.ts
CHANGED
|
@@ -66,7 +66,7 @@ declare module "array/mapPrimitive" {
|
|
|
66
66
|
export { mapPrimitive, mapPrimitive as default };
|
|
67
67
|
}
|
|
68
68
|
declare module "object/isNotEmpty" {
|
|
69
|
-
function isNotEmptyObject(val: unknown): val is
|
|
69
|
+
function isNotEmptyObject<T extends Record<string, any>>(val: T | unknown): val is T;
|
|
70
70
|
export { isNotEmptyObject, isNotEmptyObject as default };
|
|
71
71
|
}
|
|
72
72
|
declare module "array/groupBy" {
|
|
@@ -86,9 +86,7 @@ declare module "array/split" {
|
|
|
86
86
|
export { split, split as default };
|
|
87
87
|
}
|
|
88
88
|
declare module "object/is" {
|
|
89
|
-
function isObject(val: unknown): val is
|
|
90
|
-
[key: string]: any;
|
|
91
|
-
};
|
|
89
|
+
function isObject<T extends Record<string, any>>(val: T | unknown): val is T;
|
|
92
90
|
export { isObject, isObject as default };
|
|
93
91
|
}
|
|
94
92
|
declare module "array/sort" {
|
|
@@ -129,19 +127,23 @@ declare module "date/is" {
|
|
|
129
127
|
function isDate(val: unknown): val is Date;
|
|
130
128
|
export { isDate, isDate as default };
|
|
131
129
|
}
|
|
130
|
+
declare module "date/convertToDate" {
|
|
131
|
+
function convertToDate(val: Date | string | number): Date | null;
|
|
132
|
+
export { convertToDate, convertToDate as default };
|
|
133
|
+
}
|
|
132
134
|
declare module "date/addUTC" {
|
|
133
135
|
export type AddUTCKey = 'years' | 'year' | 'months' | 'month' | 'days' | 'day' | 'hours' | 'hour' | 'minutes' | 'minute' | 'seconds' | 'second' | 'milliseconds' | 'millisecond';
|
|
134
|
-
function addUTC(val: Date, amt?: number, key?: AddUTCKey): Date;
|
|
136
|
+
function addUTC(val: Date | string, amt?: number, key?: AddUTCKey): Date;
|
|
135
137
|
export { addUTC, addUTC as default };
|
|
136
138
|
}
|
|
137
139
|
declare module "date/diff" {
|
|
138
140
|
export type DiffKey = 'week' | 'weeks' | 'day' | 'days' | 'hour' | 'hours' | 'minute' | 'minutes' | 'second' | 'seconds' | 'millisecond' | 'milliseconds';
|
|
139
|
-
function diff(val_a: Date, val_b: Date, key?: DiffKey): number;
|
|
141
|
+
function diff(val_a: Date | string, val_b: Date | string, key?: DiffKey): number;
|
|
140
142
|
export { diff, diff as default };
|
|
141
143
|
}
|
|
142
144
|
declare module "date/endOfUTC" {
|
|
143
145
|
export type EndOfUTCKey = 'year' | 'quarter' | 'month' | 'week' | 'week_sun' | 'week_mon' | 'week_tue' | 'week_wed' | 'week_thu' | 'week_fri' | 'week_sat' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond';
|
|
144
|
-
function endOfUTC(val: Date, key?: EndOfUTCKey): Date;
|
|
146
|
+
function endOfUTC(val: Date | string, key?: EndOfUTCKey): Date;
|
|
145
147
|
export { endOfUTC, endOfUTC as default };
|
|
146
148
|
}
|
|
147
149
|
declare module "date/format" {
|
|
@@ -151,7 +153,7 @@ declare module "date/format" {
|
|
|
151
153
|
readonly sat: "sat";
|
|
152
154
|
};
|
|
153
155
|
export type WEEK_START = keyof typeof WEEK_STARTS;
|
|
154
|
-
function format(val: Date, spec: string, locale?: string, zone?: string, sow?: WEEK_START): string;
|
|
156
|
+
function format(val: Date | string, spec: string, locale?: string, zone?: string, sow?: WEEK_START): string;
|
|
155
157
|
namespace format {
|
|
156
158
|
var getLocale: () => string;
|
|
157
159
|
var setLocale: (locale: string) => void;
|
|
@@ -167,7 +169,7 @@ declare module "date/isFormat" {
|
|
|
167
169
|
export { isDateFormat, isDateFormat as default };
|
|
168
170
|
}
|
|
169
171
|
declare module "date/isLeap" {
|
|
170
|
-
function isLeap(val: Date): boolean;
|
|
172
|
+
function isLeap(val: Date | string): boolean;
|
|
171
173
|
export { isLeap, isLeap as default };
|
|
172
174
|
}
|
|
173
175
|
declare module "date/nowUnix" {
|
|
@@ -189,12 +191,12 @@ declare module "date/setTimeUTC" {
|
|
|
189
191
|
second?: number;
|
|
190
192
|
millisecond?: number;
|
|
191
193
|
};
|
|
192
|
-
function setTimeUTC(val: Date, props: TimeProps): Date;
|
|
194
|
+
function setTimeUTC(val: Date | string, props: TimeProps): Date;
|
|
193
195
|
export { setTimeUTC, setTimeUTC as default };
|
|
194
196
|
}
|
|
195
197
|
declare module "date/startOfUTC" {
|
|
196
198
|
export type StartOfUTCKey = 'year' | 'quarter' | 'month' | 'week' | 'week_sun' | 'week_mon' | 'week_tue' | 'week_wed' | 'week_thu' | 'week_fri' | 'week_sat' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond';
|
|
197
|
-
function startOfUTC(val: Date, key?: StartOfUTCKey): Date;
|
|
199
|
+
function startOfUTC(val: Date | string, key?: StartOfUTCKey): Date;
|
|
198
200
|
export { startOfUTC, startOfUTC as default };
|
|
199
201
|
}
|
|
200
202
|
declare module "date/toUnix" {
|
|
@@ -207,6 +209,7 @@ declare module "date/toUTC" {
|
|
|
207
209
|
}
|
|
208
210
|
declare module "date/index" {
|
|
209
211
|
import { addUTC } from "date/addUTC";
|
|
212
|
+
import { convertToDate } from "date/convertToDate";
|
|
210
213
|
import { diff } from "date/diff";
|
|
211
214
|
import { endOfUTC } from "date/endOfUTC";
|
|
212
215
|
import { format } from "date/format";
|
|
@@ -219,7 +222,7 @@ declare module "date/index" {
|
|
|
219
222
|
import { startOfUTC } from "date/startOfUTC";
|
|
220
223
|
import { toUnix } from "date/toUnix";
|
|
221
224
|
import { toUTC } from "date/toUTC";
|
|
222
|
-
export { addUTC, diff, endOfUTC, format, isDateFormat as isFormat, isDateFormat, isDate, isDate as is, isLeap, nowUnix, nowUnixMs, setTimeUTC, startOfUTC, toUnix, toUTC };
|
|
225
|
+
export { addUTC, convertToDate, diff, endOfUTC, format, isDateFormat as isFormat, isDateFormat, isDate, isDate as is, isLeap, nowUnix, nowUnixMs, setTimeUTC, startOfUTC, toUnix, toUTC };
|
|
223
226
|
}
|
|
224
227
|
declare module "formdata/is" {
|
|
225
228
|
function isFormData(val: unknown): val is FormData;
|
|
@@ -329,9 +332,13 @@ declare module "object/pick" {
|
|
|
329
332
|
type DottedKeys<T> = (T extends ObjectType ? {
|
|
330
333
|
[K in keyof T & string]: T[K] extends ObjectType ? K | `${K}.${DottedKeys<T[K]>}` : K;
|
|
331
334
|
}[keyof T & string] : string) & string;
|
|
332
|
-
|
|
333
|
-
[
|
|
334
|
-
}
|
|
335
|
+
type PickFromObject<T, K extends string> = K extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? T[Key] extends ObjectType ? {
|
|
336
|
+
[P in Key]: PickFromObject<T[Key], Rest>;
|
|
337
|
+
} : object : object : K extends keyof T ? {
|
|
338
|
+
[P in K]: T[K];
|
|
339
|
+
} : object;
|
|
340
|
+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : object) extends (k: infer I) => void ? I : object;
|
|
341
|
+
function pick<T extends Record<string, any>, K extends readonly DottedKeys<T>[]>(obj: T, keys: K): UnionToIntersection<PickFromObject<T, K[number]>>;
|
|
335
342
|
export { pick, pick as default };
|
|
336
343
|
}
|
|
337
344
|
declare module "object/index" {
|
package/object/is.d.ts
CHANGED
package/object/isNotEmpty.d.ts
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @param {unknown} val - Value to verify
|
|
5
5
|
*/
|
|
6
|
-
declare function isNotEmptyObject(val: unknown): val is
|
|
6
|
+
declare function isNotEmptyObject<T extends Record<string, any>>(val: T | unknown): val is T;
|
|
7
7
|
export { isNotEmptyObject, isNotEmptyObject as default };
|
package/object/pick.d.ts
CHANGED
|
@@ -4,13 +4,17 @@ type ObjectType = {
|
|
|
4
4
|
type DottedKeys<T> = (T extends ObjectType ? {
|
|
5
5
|
[K in keyof T & string]: T[K] extends ObjectType ? K | `${K}.${DottedKeys<T[K]>}` : K;
|
|
6
6
|
}[keyof T & string] : string) & string;
|
|
7
|
+
type PickFromObject<T, K extends string> = K extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? T[Key] extends ObjectType ? {
|
|
8
|
+
[P in Key]: PickFromObject<T[Key], Rest>;
|
|
9
|
+
} : object : object : K extends keyof T ? {
|
|
10
|
+
[P in K]: T[K];
|
|
11
|
+
} : object;
|
|
12
|
+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : object) extends (k: infer I) => void ? I : object;
|
|
7
13
|
/**
|
|
8
14
|
* Returns a new object with the keys picked from the passed object
|
|
9
15
|
*
|
|
10
16
|
* @param obj - Object to pick from
|
|
11
17
|
* @param keys - Array of keys to pick from object
|
|
12
18
|
*/
|
|
13
|
-
declare function pick<T extends Record<string, any>, K extends DottedKeys<T
|
|
14
|
-
[key: string]: any;
|
|
15
|
-
};
|
|
19
|
+
declare function pick<T extends Record<string, any>, K extends readonly DottedKeys<T>[]>(obj: T, keys: K): UnionToIntersection<PickFromObject<T, K[number]>>;
|
|
16
20
|
export { pick, pick as default };
|
package/object/pick.js
CHANGED
|
@@ -16,24 +16,24 @@ function pick(obj, keys) {
|
|
|
16
16
|
if (typeof key !== 'string')
|
|
17
17
|
continue;
|
|
18
18
|
sanitized = key.trim();
|
|
19
|
-
if (!sanitized
|
|
19
|
+
if (!sanitized)
|
|
20
20
|
continue;
|
|
21
21
|
if (sanitized.indexOf('.') >= 0) {
|
|
22
22
|
val = (0, get_1.deepGet)(obj, sanitized);
|
|
23
23
|
if (val === undefined)
|
|
24
24
|
continue;
|
|
25
|
-
const parts =
|
|
25
|
+
const parts = sanitized.split('.');
|
|
26
26
|
const parts_len = parts.length;
|
|
27
27
|
let cursor = map;
|
|
28
28
|
for (let y = 0; y < parts_len - 1; y++) {
|
|
29
29
|
const part = parts[y].trim();
|
|
30
|
-
if (!cursor
|
|
30
|
+
if (!(part in cursor))
|
|
31
31
|
cursor[part] = {};
|
|
32
32
|
cursor = cursor[part];
|
|
33
33
|
}
|
|
34
34
|
cursor[parts[parts_len - 1].trim()] = val;
|
|
35
35
|
}
|
|
36
|
-
else if (
|
|
36
|
+
else if (sanitized in obj) {
|
|
37
37
|
map[sanitized] = obj[sanitized];
|
|
38
38
|
}
|
|
39
39
|
}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "name": "@valkyriestudios/utils", "version": "12.
|
|
1
|
+
{ "name": "@valkyriestudios/utils", "version": "12.24.0", "description": "A collection of single-function utilities for common tasks", "author": { "name": "Peter Vermeulen", "url": "https://www.linkedin.com/in/petervermeulen1/" }, "keywords": [ "utility", "library", "javascript", "js", "node", "bun" ], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/ValkyrieStudios/utils.git" }, "bugs": { "url": "https://github.com/ValkyrieStudios/utils/issues" }, "homepage": "https://github.com/ValkyrieStudios/utils#readme", "types": "index.d.ts" }
|