@gzl10/ts-helpers 4.2.1
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 +320 -0
- package/README.md +233 -0
- package/USAGE-GUIDE.md +800 -0
- package/dist/browser/async.js +15 -0
- package/dist/browser/async.js.map +1 -0
- package/dist/browser/chunk-4O7ZPIJN.js +383 -0
- package/dist/browser/chunk-4O7ZPIJN.js.map +1 -0
- package/dist/browser/chunk-75XNTC34.js +60 -0
- package/dist/browser/chunk-75XNTC34.js.map +1 -0
- package/dist/browser/chunk-C3D7YZVE.js +299 -0
- package/dist/browser/chunk-C3D7YZVE.js.map +1 -0
- package/dist/browser/chunk-CZL6C2EI.js +452 -0
- package/dist/browser/chunk-CZL6C2EI.js.map +1 -0
- package/dist/browser/chunk-D4FZFIVA.js +240 -0
- package/dist/browser/chunk-D4FZFIVA.js.map +1 -0
- package/dist/browser/chunk-IL7NG7IC.js +72 -0
- package/dist/browser/chunk-IL7NG7IC.js.map +1 -0
- package/dist/browser/chunk-NSBPE2FW.js +17 -0
- package/dist/browser/chunk-NSBPE2FW.js.map +1 -0
- package/dist/browser/chunk-SLQVNPTH.js +27 -0
- package/dist/browser/chunk-SLQVNPTH.js.map +1 -0
- package/dist/browser/chunk-WG7ILCUB.js +195 -0
- package/dist/browser/chunk-WG7ILCUB.js.map +1 -0
- package/dist/browser/chunk-WJA4JDMZ.js +278 -0
- package/dist/browser/chunk-WJA4JDMZ.js.map +1 -0
- package/dist/browser/chunk-ZFVYLUTT.js +65 -0
- package/dist/browser/chunk-ZFVYLUTT.js.map +1 -0
- package/dist/browser/chunk-ZYTSVMTI.js +263 -0
- package/dist/browser/chunk-ZYTSVMTI.js.map +1 -0
- package/dist/browser/dates.js +78 -0
- package/dist/browser/dates.js.map +1 -0
- package/dist/browser/environment-detection.js +21 -0
- package/dist/browser/environment-detection.js.map +1 -0
- package/dist/browser/environment.js +34 -0
- package/dist/browser/environment.js.map +1 -0
- package/dist/browser/errors.js +18 -0
- package/dist/browser/errors.js.map +1 -0
- package/dist/browser/index.js +412 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/math.js +51 -0
- package/dist/browser/math.js.map +1 -0
- package/dist/browser/number.js +10 -0
- package/dist/browser/number.js.map +1 -0
- package/dist/browser/objects.js +31 -0
- package/dist/browser/objects.js.map +1 -0
- package/dist/browser/strings.js +80 -0
- package/dist/browser/strings.js.map +1 -0
- package/dist/browser/validation-core.js +54 -0
- package/dist/browser/validation-core.js.map +1 -0
- package/dist/browser/validation-crypto.js +28 -0
- package/dist/browser/validation-crypto.js.map +1 -0
- package/dist/browser/validators.js +98 -0
- package/dist/browser/validators.js.map +1 -0
- package/dist/cjs/async.js +86 -0
- package/dist/cjs/async.js.map +1 -0
- package/dist/cjs/dates.js +285 -0
- package/dist/cjs/dates.js.map +1 -0
- package/dist/cjs/environment-detection.js +84 -0
- package/dist/cjs/environment-detection.js.map +1 -0
- package/dist/cjs/environment.js +261 -0
- package/dist/cjs/environment.js.map +1 -0
- package/dist/cjs/errors.js +80 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +2035 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/math.js +388 -0
- package/dist/cjs/math.js.map +1 -0
- package/dist/cjs/number.js +37 -0
- package/dist/cjs/number.js.map +1 -0
- package/dist/cjs/objects.js +249 -0
- package/dist/cjs/objects.js.map +1 -0
- package/dist/cjs/strings.js +253 -0
- package/dist/cjs/strings.js.map +1 -0
- package/dist/cjs/validation.js +450 -0
- package/dist/cjs/validation.js.map +1 -0
- package/dist/esm/async.js +15 -0
- package/dist/esm/async.js.map +1 -0
- package/dist/esm/chunk-4O7ZPIJN.js +383 -0
- package/dist/esm/chunk-4O7ZPIJN.js.map +1 -0
- package/dist/esm/chunk-75XNTC34.js +60 -0
- package/dist/esm/chunk-75XNTC34.js.map +1 -0
- package/dist/esm/chunk-BDOBKBKA.js +72 -0
- package/dist/esm/chunk-BDOBKBKA.js.map +1 -0
- package/dist/esm/chunk-C3D7YZVE.js +299 -0
- package/dist/esm/chunk-C3D7YZVE.js.map +1 -0
- package/dist/esm/chunk-CZL6C2EI.js +452 -0
- package/dist/esm/chunk-CZL6C2EI.js.map +1 -0
- package/dist/esm/chunk-EBLSTOEC.js +263 -0
- package/dist/esm/chunk-EBLSTOEC.js.map +1 -0
- package/dist/esm/chunk-NSBPE2FW.js +17 -0
- package/dist/esm/chunk-NSBPE2FW.js.map +1 -0
- package/dist/esm/chunk-SLQVNPTH.js +27 -0
- package/dist/esm/chunk-SLQVNPTH.js.map +1 -0
- package/dist/esm/chunk-WG7ILCUB.js +195 -0
- package/dist/esm/chunk-WG7ILCUB.js.map +1 -0
- package/dist/esm/chunk-WJA4JDMZ.js +278 -0
- package/dist/esm/chunk-WJA4JDMZ.js.map +1 -0
- package/dist/esm/chunk-ZFVYLUTT.js +65 -0
- package/dist/esm/chunk-ZFVYLUTT.js.map +1 -0
- package/dist/esm/dates.js +78 -0
- package/dist/esm/dates.js.map +1 -0
- package/dist/esm/environment-detection.js +21 -0
- package/dist/esm/environment-detection.js.map +1 -0
- package/dist/esm/environment.js +34 -0
- package/dist/esm/environment.js.map +1 -0
- package/dist/esm/errors.js +18 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.js +380 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/math.js +51 -0
- package/dist/esm/math.js.map +1 -0
- package/dist/esm/number.js +10 -0
- package/dist/esm/number.js.map +1 -0
- package/dist/esm/objects.js +31 -0
- package/dist/esm/objects.js.map +1 -0
- package/dist/esm/strings.js +80 -0
- package/dist/esm/strings.js.map +1 -0
- package/dist/esm/validation.js +54 -0
- package/dist/esm/validation.js.map +1 -0
- package/dist/node/async.js +93 -0
- package/dist/node/async.js.map +1 -0
- package/dist/node/csv.js +102 -0
- package/dist/node/csv.js.map +1 -0
- package/dist/node/data.js +880 -0
- package/dist/node/data.js.map +1 -0
- package/dist/node/dates.js +324 -0
- package/dist/node/dates.js.map +1 -0
- package/dist/node/environment.js +278 -0
- package/dist/node/environment.js.map +1 -0
- package/dist/node/errors.js +89 -0
- package/dist/node/errors.js.map +1 -0
- package/dist/node/index.js +3151 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/json.js +107 -0
- package/dist/node/json.js.map +1 -0
- package/dist/node/math.js +413 -0
- package/dist/node/math.js.map +1 -0
- package/dist/node/number.js +42 -0
- package/dist/node/number.js.map +1 -0
- package/dist/node/objects.js +264 -0
- package/dist/node/objects.js.map +1 -0
- package/dist/node/strings.js +293 -0
- package/dist/node/strings.js.map +1 -0
- package/dist/node/tree.js +89 -0
- package/dist/node/tree.js.map +1 -0
- package/dist/node/validation-core.js +477 -0
- package/dist/node/validation-core.js.map +1 -0
- package/dist/node/validation-crypto.js +179 -0
- package/dist/node/validation-crypto.js.map +1 -0
- package/dist/node/validation.js +677 -0
- package/dist/node/validation.js.map +1 -0
- package/dist/node/validators.js +123 -0
- package/dist/node/validators.js.map +1 -0
- package/dist/node-esm/async.js +15 -0
- package/dist/node-esm/async.js.map +1 -0
- package/dist/node-esm/chunk-3YOF7NPT.js +299 -0
- package/dist/node-esm/chunk-3YOF7NPT.js.map +1 -0
- package/dist/node-esm/chunk-64TBXJQS.js +263 -0
- package/dist/node-esm/chunk-64TBXJQS.js.map +1 -0
- package/dist/node-esm/chunk-75XNTC34.js +60 -0
- package/dist/node-esm/chunk-75XNTC34.js.map +1 -0
- package/dist/node-esm/chunk-C4PKXIPB.js +278 -0
- package/dist/node-esm/chunk-C4PKXIPB.js.map +1 -0
- package/dist/node-esm/chunk-CMDFZME3.js +452 -0
- package/dist/node-esm/chunk-CMDFZME3.js.map +1 -0
- package/dist/node-esm/chunk-DZZPUYMP.js +74 -0
- package/dist/node-esm/chunk-DZZPUYMP.js.map +1 -0
- package/dist/node-esm/chunk-HTSEHRHI.js +195 -0
- package/dist/node-esm/chunk-HTSEHRHI.js.map +1 -0
- package/dist/node-esm/chunk-JCAUVOPH.js +27 -0
- package/dist/node-esm/chunk-JCAUVOPH.js.map +1 -0
- package/dist/node-esm/chunk-KBHE3K2F.js +505 -0
- package/dist/node-esm/chunk-KBHE3K2F.js.map +1 -0
- package/dist/node-esm/chunk-LYTET5NX.js +65 -0
- package/dist/node-esm/chunk-LYTET5NX.js.map +1 -0
- package/dist/node-esm/chunk-PZ5AY32C.js +10 -0
- package/dist/node-esm/chunk-PZ5AY32C.js.map +1 -0
- package/dist/node-esm/chunk-UKGXL2QO.js +383 -0
- package/dist/node-esm/chunk-UKGXL2QO.js.map +1 -0
- package/dist/node-esm/chunk-XAEYT23H.js +164 -0
- package/dist/node-esm/chunk-XAEYT23H.js.map +1 -0
- package/dist/node-esm/csv.js +63 -0
- package/dist/node-esm/csv.js.map +1 -0
- package/dist/node-esm/data.js +32 -0
- package/dist/node-esm/data.js.map +1 -0
- package/dist/node-esm/dates.js +78 -0
- package/dist/node-esm/dates.js.map +1 -0
- package/dist/node-esm/environment.js +34 -0
- package/dist/node-esm/environment.js.map +1 -0
- package/dist/node-esm/errors.js +18 -0
- package/dist/node-esm/errors.js.map +1 -0
- package/dist/node-esm/index.js +426 -0
- package/dist/node-esm/index.js.map +1 -0
- package/dist/node-esm/json.js +68 -0
- package/dist/node-esm/json.js.map +1 -0
- package/dist/node-esm/math.js +51 -0
- package/dist/node-esm/math.js.map +1 -0
- package/dist/node-esm/number.js +10 -0
- package/dist/node-esm/number.js.map +1 -0
- package/dist/node-esm/objects.js +31 -0
- package/dist/node-esm/objects.js.map +1 -0
- package/dist/node-esm/strings.js +80 -0
- package/dist/node-esm/strings.js.map +1 -0
- package/dist/node-esm/tree.js +8 -0
- package/dist/node-esm/tree.js.map +1 -0
- package/dist/node-esm/validation-core.js +54 -0
- package/dist/node-esm/validation-core.js.map +1 -0
- package/dist/node-esm/validation-crypto.js +26 -0
- package/dist/node-esm/validation-crypto.js.map +1 -0
- package/dist/node-esm/validation.js +606 -0
- package/dist/node-esm/validation.js.map +1 -0
- package/dist/node-esm/validators.js +98 -0
- package/dist/node-esm/validators.js.map +1 -0
- package/dist/types/async-C8gvbSG-.d.ts +453 -0
- package/dist/types/async.d.ts +1 -0
- package/dist/types/csv.d.ts +226 -0
- package/dist/types/data.d.ts +1561 -0
- package/dist/types/dates-hTiE0Z11.d.ts +298 -0
- package/dist/types/dates.d.ts +1 -0
- package/dist/types/environment-B8eLS7KT.d.ts +420 -0
- package/dist/types/environment-detection.d.ts +102 -0
- package/dist/types/environment.d.ts +1 -0
- package/dist/types/errors.d.ts +147 -0
- package/dist/types/index.d.ts +211 -0
- package/dist/types/json.d.ts +284 -0
- package/dist/types/math-BQ9Lwdp7.d.ts +2060 -0
- package/dist/types/math.d.ts +1 -0
- package/dist/types/number-CYnQfLWj.d.ts +44 -0
- package/dist/types/number.d.ts +1 -0
- package/dist/types/objects-BohS8GCS.d.ts +1185 -0
- package/dist/types/objects.d.ts +1 -0
- package/dist/types/strings-CiqRPYLL.d.ts +1349 -0
- package/dist/types/strings.d.ts +1 -0
- package/dist/types/tree.d.ts +284 -0
- package/dist/types/validation-core-DfHF8rCG.d.ts +238 -0
- package/dist/types/validation-crypto-browser.d.ts +56 -0
- package/dist/types/validation-crypto-node.d.ts +31 -0
- package/dist/types/validation.d.ts +1 -0
- package/dist/types/validators.d.ts +216 -0
- package/package.json +253 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-PZ5AY32C.js";
|
|
4
|
+
|
|
5
|
+
// src/dates.ts
|
|
6
|
+
var dates_exports = {};
|
|
7
|
+
__export(dates_exports, {
|
|
8
|
+
addDays: () => addDays,
|
|
9
|
+
addMonths: () => addMonths,
|
|
10
|
+
addNowDays: () => addNowDays,
|
|
11
|
+
addNowMonths: () => addNowMonths,
|
|
12
|
+
addNowSeconds: () => addNowSeconds,
|
|
13
|
+
addNowYears: () => addNowYears,
|
|
14
|
+
addSeconds: () => addSeconds,
|
|
15
|
+
addYears: () => addYears,
|
|
16
|
+
areDatesEqualWithTolerance: () => areDatesEqualWithTolerance,
|
|
17
|
+
dayOfWeek: () => dayOfWeek,
|
|
18
|
+
diffBusinessDays: () => diffBusinessDays,
|
|
19
|
+
diffDays: () => diffDays,
|
|
20
|
+
diffMilliSeconds: () => diffMilliSeconds,
|
|
21
|
+
diffMonths: () => diffMonths,
|
|
22
|
+
diffYears: () => diffYears,
|
|
23
|
+
excelToDate: () => excelToDate,
|
|
24
|
+
format: () => format,
|
|
25
|
+
formatForMysql: () => formatForMysql,
|
|
26
|
+
formatNow: () => formatNow,
|
|
27
|
+
fromNow: () => fromNow,
|
|
28
|
+
getFirstDayOfYear: () => getFirstDayOfYear,
|
|
29
|
+
getFirstWorkdayAfterMonths: () => getFirstWorkdayAfterMonths,
|
|
30
|
+
getFirstWorkdayOfMonth: () => getFirstWorkdayOfMonth,
|
|
31
|
+
getLastDayOfYear: () => getLastDayOfYear,
|
|
32
|
+
getLastWorkdayOfMonth: () => getLastWorkdayOfMonth,
|
|
33
|
+
isDateTime: () => isDateTime,
|
|
34
|
+
isEqualsDateTimeByDay: () => isEqualsDateTimeByDay,
|
|
35
|
+
isExpired: () => isExpired,
|
|
36
|
+
isNew: () => isNew,
|
|
37
|
+
isWeekday: () => isWeekday,
|
|
38
|
+
longString: () => longString,
|
|
39
|
+
now: () => now,
|
|
40
|
+
toDate: () => toDate,
|
|
41
|
+
toDateFromString: () => toDateFromString,
|
|
42
|
+
toISO: () => toISO,
|
|
43
|
+
weekOfYear: () => weekOfYear
|
|
44
|
+
});
|
|
45
|
+
import dayjs from "dayjs";
|
|
46
|
+
import utc from "dayjs/plugin/utc.js";
|
|
47
|
+
import relativeTime from "dayjs/plugin/relativeTime.js";
|
|
48
|
+
import weekOfYearPlugin from "dayjs/plugin/weekOfYear.js";
|
|
49
|
+
import customParseFormat from "dayjs/plugin/customParseFormat.js";
|
|
50
|
+
import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
|
|
51
|
+
import isSameOrBefore from "dayjs/plugin/isSameOrBefore.js";
|
|
52
|
+
import weekday from "dayjs/plugin/weekday.js";
|
|
53
|
+
import localeData from "dayjs/plugin/localeData.js";
|
|
54
|
+
import localizedFormat from "dayjs/plugin/localizedFormat.js";
|
|
55
|
+
import "dayjs/locale/es.js";
|
|
56
|
+
import * as dateValidator from "iso-datestring-validator";
|
|
57
|
+
var { isValidDate, isValidISODateString } = dateValidator;
|
|
58
|
+
dayjs.extend(utc);
|
|
59
|
+
dayjs.extend(relativeTime);
|
|
60
|
+
dayjs.extend(weekOfYearPlugin);
|
|
61
|
+
dayjs.extend(customParseFormat);
|
|
62
|
+
dayjs.extend(isSameOrAfter);
|
|
63
|
+
dayjs.extend(isSameOrBefore);
|
|
64
|
+
dayjs.extend(weekday);
|
|
65
|
+
dayjs.extend(localeData);
|
|
66
|
+
dayjs.extend(localizedFormat);
|
|
67
|
+
dayjs.locale("es");
|
|
68
|
+
var formatNow = (formatStr = "DD/MM/YYYY") => dayjs().format(formatStr);
|
|
69
|
+
var format = (value, formatStr = "DD/MM/YYYY") => {
|
|
70
|
+
if (!value) return "";
|
|
71
|
+
if (formatStr.toLowerCase() === "gg") return weekOfYear(value);
|
|
72
|
+
else if (formatStr.toLowerCase() === "gggg") return dayjs(value).format("YY") + weekOfYear(value);
|
|
73
|
+
return dayjs(value).format(formatStr);
|
|
74
|
+
};
|
|
75
|
+
var longString = (value = null) => {
|
|
76
|
+
if (!value) return "";
|
|
77
|
+
return dayjs(value).format("LL");
|
|
78
|
+
};
|
|
79
|
+
var toDate = (value, isUtc) => {
|
|
80
|
+
if (isUtc === void 0) return dayjs(value).toDate();
|
|
81
|
+
return isUtc ? dayjs.utc(value).toDate() : dayjs(value).toDate();
|
|
82
|
+
};
|
|
83
|
+
var toDateFromString = (dateString, format2) => {
|
|
84
|
+
const formatRegex = {
|
|
85
|
+
"DD/MM/YYYY": /^(\d{2})\/(\d{2})\/(\d{4})$/,
|
|
86
|
+
"YYYY-MM-DD": /^(\d{4})-(\d{2})-(\d{2})$/,
|
|
87
|
+
"MM/DD/YYYY": /^(\d{2})\/(\d{2})\/(\d{4})$/,
|
|
88
|
+
"YYYY/MM/DD": /^(\d{4})\/(\d{2})\/(\d{2})$/,
|
|
89
|
+
"DD-MM-YYYY": /^(\d{2})-(\d{2})-(\d{4})$/,
|
|
90
|
+
"MM-DD-YYYY": /^(\d{2})-(\d{2})-(\d{4})$/,
|
|
91
|
+
YYYYMMDD: /^(\d{4})(\d{2})(\d{2})$/,
|
|
92
|
+
DDMMYYYY: /^(\d{2})(\d{2})(\d{4})$/,
|
|
93
|
+
MMDDYYYY: /^(\d{2})(\d{2})(\d{4})$/,
|
|
94
|
+
"YYYY.MM.DD": /^(\d{4})\.(\d{2})\.(\d{2})$/,
|
|
95
|
+
"DD.MM.YYYY": /^(\d{2})\.(\d{2})\.(\d{4})$/,
|
|
96
|
+
"MM.DD.YYYY": /^(\d{2})\.(\d{2})\.(\d{4})$/
|
|
97
|
+
};
|
|
98
|
+
const regex = formatRegex[format2];
|
|
99
|
+
if (!regex) return null;
|
|
100
|
+
const match = dateString.match(regex);
|
|
101
|
+
if (match) {
|
|
102
|
+
let year, month, day;
|
|
103
|
+
if (format2.startsWith("YYYY")) {
|
|
104
|
+
year = parseInt(match[1], 10);
|
|
105
|
+
month = parseInt(match[2], 10) - 1;
|
|
106
|
+
day = parseInt(match[3], 10);
|
|
107
|
+
} else if (format2.startsWith("DD")) {
|
|
108
|
+
day = parseInt(match[1], 10);
|
|
109
|
+
month = parseInt(match[2], 10) - 1;
|
|
110
|
+
year = parseInt(match[3], 10);
|
|
111
|
+
} else if (format2.startsWith("MM")) {
|
|
112
|
+
month = parseInt(match[1], 10) - 1;
|
|
113
|
+
day = parseInt(match[2], 10);
|
|
114
|
+
year = parseInt(match[3], 10);
|
|
115
|
+
} else {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return new Date(year, month, day);
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
};
|
|
122
|
+
var now = () => dayjs().toDate();
|
|
123
|
+
var isNew = (value, daysnew = 1) => dayjs().isSameOrBefore(dayjs(value).add(daysnew, "days"));
|
|
124
|
+
var toISO = (value = null, isUtc = false) => {
|
|
125
|
+
if (!value) return dayjs().toISOString();
|
|
126
|
+
return isUtc ? dayjs.utc(value).toISOString() : dayjs(value).toISOString();
|
|
127
|
+
};
|
|
128
|
+
var fromNow = (value) => dayjs(value).fromNow();
|
|
129
|
+
var dayOfWeek = (value = null) => {
|
|
130
|
+
if (!value) return dayjs().format("d");
|
|
131
|
+
return dayjs(value).format("d");
|
|
132
|
+
};
|
|
133
|
+
var weekOfYear = (value = null) => {
|
|
134
|
+
if (!value) return dayjs().locale("es").week().toString().padStart(2, "0");
|
|
135
|
+
return dayjs(value).locale("es").week().toString().padStart(2, "0");
|
|
136
|
+
};
|
|
137
|
+
var diffDays = (start, end = null, precise = false) => {
|
|
138
|
+
const v2 = !end ? dayjs() : dayjs(end);
|
|
139
|
+
return dayjs(start).diff(v2, "days", precise);
|
|
140
|
+
};
|
|
141
|
+
var diffBusinessDays = (start, end = null, precise = false) => {
|
|
142
|
+
let startDate = dayjs(start).startOf("day");
|
|
143
|
+
let endDate = end ? dayjs(end).startOf("day") : dayjs().startOf("day");
|
|
144
|
+
if (startDate.isAfter(endDate)) {
|
|
145
|
+
;
|
|
146
|
+
[startDate, endDate] = [endDate, startDate];
|
|
147
|
+
}
|
|
148
|
+
let businessDays = 0;
|
|
149
|
+
let currentDate = startDate;
|
|
150
|
+
while (currentDate.isBefore(endDate)) {
|
|
151
|
+
if (isWeekday(currentDate)) {
|
|
152
|
+
businessDays++;
|
|
153
|
+
}
|
|
154
|
+
currentDate = currentDate.add(1, "day");
|
|
155
|
+
}
|
|
156
|
+
if (precise) {
|
|
157
|
+
const fractionalDay = endDate.diff(currentDate, "hours") / 24;
|
|
158
|
+
businessDays += fractionalDay;
|
|
159
|
+
}
|
|
160
|
+
return businessDays;
|
|
161
|
+
};
|
|
162
|
+
var diffMonths = (value, valueRefOrNow = null, precise = false) => {
|
|
163
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
164
|
+
return dayjs(value).diff(v2, "months", precise);
|
|
165
|
+
};
|
|
166
|
+
var diffYears = (value, valueRefOrNow = null, precise = false) => {
|
|
167
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
168
|
+
return dayjs(value).diff(v2, "years", precise);
|
|
169
|
+
};
|
|
170
|
+
var diffMilliSeconds = (value, valueRefOrNow = null) => {
|
|
171
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
172
|
+
return dayjs(value).diff(v2, "milliseconds", true);
|
|
173
|
+
};
|
|
174
|
+
var addDays = (value, nDays = 1) => dayjs(value).add(nDays, "days").toDate();
|
|
175
|
+
var addSeconds = (value, nSeconds = 1) => dayjs(value).add(nSeconds, "seconds").toDate();
|
|
176
|
+
var areDatesEqualWithTolerance = (date1, date2) => {
|
|
177
|
+
const tolerance = 2 * 1e3;
|
|
178
|
+
return Math.abs(dayjs(date1).diff(dayjs(date2))) <= tolerance;
|
|
179
|
+
};
|
|
180
|
+
var addNowDays = (nDays = 1) => dayjs().add(nDays, "days").toDate();
|
|
181
|
+
var addNowSeconds = (nSeconds = 60) => dayjs().add(nSeconds, "seconds").toDate();
|
|
182
|
+
var addMonths = (value, nMonths = 1) => dayjs(value).add(nMonths, "months").toDate();
|
|
183
|
+
var addNowMonths = (nMonths = 1) => dayjs().add(nMonths, "months").toDate();
|
|
184
|
+
var addYears = (value, nYears = 1) => dayjs(value).add(nYears, "years").toDate();
|
|
185
|
+
var addNowYears = (nYears = 1) => dayjs().add(nYears, "years").toDate();
|
|
186
|
+
var excelToDate = (value) => {
|
|
187
|
+
try {
|
|
188
|
+
const d = Number(value);
|
|
189
|
+
if (d >= 18e3 && d <= 3e5) return new Date(Math.round((d - 25569) * 86400 * 1e3));
|
|
190
|
+
return null;
|
|
191
|
+
} catch (_err) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
var isDateTime = (value) => {
|
|
196
|
+
try {
|
|
197
|
+
if (!value) return false;
|
|
198
|
+
if (typeof value === "number") return false;
|
|
199
|
+
else if (typeof value === "boolean") return false;
|
|
200
|
+
else if (typeof value === "string" && !isValidISODateString(value) && !isValidDate(value) && !isValidDate(value, ""))
|
|
201
|
+
return false;
|
|
202
|
+
else if (typeof value === "object" && !(value instanceof Date) && !dayjs.isDayjs(value))
|
|
203
|
+
return false;
|
|
204
|
+
return dayjs(value).isValid();
|
|
205
|
+
} catch (_err) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
var isEqualsDateTimeByDay = (value1, value2) => {
|
|
210
|
+
if (!isDateTime(value1)) return false;
|
|
211
|
+
if (!isDateTime(value2)) return false;
|
|
212
|
+
return dayjs(value1).isSame(dayjs(value2), "day");
|
|
213
|
+
};
|
|
214
|
+
var isExpired = (value, valueRefOrNow = null) => {
|
|
215
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
216
|
+
if (isDateTime(value)) {
|
|
217
|
+
return v2.isAfter(value);
|
|
218
|
+
}
|
|
219
|
+
return true;
|
|
220
|
+
};
|
|
221
|
+
var formatForMysql = (fecha) => {
|
|
222
|
+
if (!fecha) return null;
|
|
223
|
+
fecha.setMinutes(fecha.getMinutes() - fecha.getTimezoneOffset());
|
|
224
|
+
return fecha.toISOString().slice(0, 19).replace("T", " ");
|
|
225
|
+
};
|
|
226
|
+
var getFirstWorkdayOfMonth = (month) => {
|
|
227
|
+
const monthToUse = month === void 0 ? dayjs().month() : month;
|
|
228
|
+
let firstDay = dayjs().month(monthToUse).startOf("month");
|
|
229
|
+
while (firstDay.day() === 0 || firstDay.day() === 6) {
|
|
230
|
+
firstDay = firstDay.add(1, "day");
|
|
231
|
+
}
|
|
232
|
+
return firstDay.toDate();
|
|
233
|
+
};
|
|
234
|
+
var getLastWorkdayOfMonth = (month) => {
|
|
235
|
+
const monthToUse = month === void 0 ? dayjs().month() : month;
|
|
236
|
+
let lastDay = dayjs().month(monthToUse).endOf("month");
|
|
237
|
+
while (lastDay.day() === 0 || lastDay.day() === 6) {
|
|
238
|
+
lastDay = lastDay.subtract(1, "day");
|
|
239
|
+
}
|
|
240
|
+
return lastDay.toDate();
|
|
241
|
+
};
|
|
242
|
+
var getFirstWorkdayAfterMonths = (initialDate, n) => {
|
|
243
|
+
const startDate = dayjs(initialDate);
|
|
244
|
+
const monthsToAdd = n;
|
|
245
|
+
const targetDate = startDate.add(monthsToAdd, "months");
|
|
246
|
+
let firstWorkday = targetDate.startOf("month");
|
|
247
|
+
while (firstWorkday.day() === 0 || firstWorkday.day() === 6) {
|
|
248
|
+
firstWorkday = firstWorkday.add(1, "day");
|
|
249
|
+
}
|
|
250
|
+
return firstWorkday.toDate();
|
|
251
|
+
};
|
|
252
|
+
var getFirstDayOfYear = () => dayjs().startOf("year").toDate();
|
|
253
|
+
var getLastDayOfYear = () => dayjs().endOf("year").toDate();
|
|
254
|
+
var isWeekday = (date) => {
|
|
255
|
+
const d = dayjs(date);
|
|
256
|
+
const dayOfWeek2 = d.day();
|
|
257
|
+
return dayOfWeek2 !== 0 && dayOfWeek2 !== 6;
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
export {
|
|
261
|
+
formatNow,
|
|
262
|
+
format,
|
|
263
|
+
longString,
|
|
264
|
+
toDate,
|
|
265
|
+
toDateFromString,
|
|
266
|
+
now,
|
|
267
|
+
isNew,
|
|
268
|
+
toISO,
|
|
269
|
+
fromNow,
|
|
270
|
+
dayOfWeek,
|
|
271
|
+
weekOfYear,
|
|
272
|
+
diffDays,
|
|
273
|
+
diffBusinessDays,
|
|
274
|
+
diffMonths,
|
|
275
|
+
diffYears,
|
|
276
|
+
diffMilliSeconds,
|
|
277
|
+
addDays,
|
|
278
|
+
addSeconds,
|
|
279
|
+
areDatesEqualWithTolerance,
|
|
280
|
+
addNowDays,
|
|
281
|
+
addNowSeconds,
|
|
282
|
+
addMonths,
|
|
283
|
+
addNowMonths,
|
|
284
|
+
addYears,
|
|
285
|
+
addNowYears,
|
|
286
|
+
excelToDate,
|
|
287
|
+
isDateTime,
|
|
288
|
+
isEqualsDateTimeByDay,
|
|
289
|
+
isExpired,
|
|
290
|
+
formatForMysql,
|
|
291
|
+
getFirstWorkdayOfMonth,
|
|
292
|
+
getLastWorkdayOfMonth,
|
|
293
|
+
getFirstWorkdayAfterMonths,
|
|
294
|
+
getFirstDayOfYear,
|
|
295
|
+
getLastDayOfYear,
|
|
296
|
+
isWeekday,
|
|
297
|
+
dates_exports
|
|
298
|
+
};
|
|
299
|
+
//# sourceMappingURL=chunk-3YOF7NPT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dates.ts"],"sourcesContent":["/**\n * Date manipulation and formatting utilities\n * Consolidated from specialized/date module\n */\n\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc.js'\nimport relativeTime from 'dayjs/plugin/relativeTime.js'\nimport weekOfYearPlugin from 'dayjs/plugin/weekOfYear.js'\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js'\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter.js'\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore.js'\nimport weekday from 'dayjs/plugin/weekday.js'\nimport localeData from 'dayjs/plugin/localeData.js'\nimport localizedFormat from 'dayjs/plugin/localizedFormat.js'\nimport 'dayjs/locale/es.js'\nimport * as dateValidator from 'iso-datestring-validator'\nconst { isValidDate, isValidISODateString } = dateValidator\n\n// Configure dayjs plugins\ndayjs.extend(utc)\ndayjs.extend(relativeTime)\ndayjs.extend(weekOfYearPlugin)\ndayjs.extend(customParseFormat)\ndayjs.extend(isSameOrAfter)\ndayjs.extend(isSameOrBefore)\ndayjs.extend(weekday)\ndayjs.extend(localeData)\ndayjs.extend(localizedFormat)\n\n// Set default locale to Spanish\ndayjs.locale('es')\n\n/**\n * Formats current date with specified format\n */\nexport const formatNow = (formatStr = 'DD/MM/YYYY'): string => dayjs().format(formatStr)\n\n/**\n * Formats date with specified format string (Spanish locale by default)\n *\n * Flexible date formatter with special support for week-of-year formats.\n * Uses dayjs Spanish locale for month/day names.\n *\n * @param value - Date value to format (Date, string, timestamp, dayjs)\n * @param formatStr - Format string (default: 'DD/MM/YYYY' for Spanish dates)\n * @returns Formatted date string, empty string if value is null/undefined\n *\n * @example\n * ```typescript\n * const date = new Date('2024-03-15')\n *\n * format(date) // '15/03/2024' (Spanish default)\n * format(date, 'DD-MM-YYYY') // '15-03-2024'\n * format(date, 'YYYY/MM/DD') // '2024/03/15'\n * format(date, 'DD MMM YYYY') // '15 mar 2024' (Spanish month)\n * format(date, 'dddd, DD MMMM') // 'viernes, 15 marzo' (Spanish)\n * format(date, 'gg') // '11' (week of year)\n * format(date, 'gggg') // '2411' (year + week)\n * ```\n *\n * @see {@link longString} for localized long format\n * @see {@link formatNow} for current date formatting\n */\nexport const format = (value: any, formatStr = 'DD/MM/YYYY'): string => {\n if (!value) return ''\n if (formatStr.toLowerCase() === 'gg') return weekOfYear(value)\n else if (formatStr.toLowerCase() === 'gggg') return dayjs(value).format('YY') + weekOfYear(value)\n return dayjs(value).format(formatStr)\n}\n\n/**\n * Converts date to localized long string format (Spanish)\n *\n * Formats date as human-readable string with full month name in Spanish locale.\n * Uses dayjs 'LL' format: \"15 de marzo de 2024\"\n *\n * @param value - Date value to format (null returns empty string)\n * @returns Localized long format date string (e.g., \"15 de marzo de 2024\")\n *\n * @example\n * ```typescript\n * longString(new Date('2024-03-15')) // \"15 de marzo de 2024\"\n * longString('2024-12-25') // \"25 de diciembre de 2024\"\n * longString(null) // \"\"\n *\n * // Real-world: Document headers\n * const reportDate = longString(new Date())\n * console.log(`Informe generado el ${reportDate}`)\n * // \"Informe generado el 15 de marzo de 2024\"\n * ```\n *\n * @see {@link format} for custom format strings\n */\nexport const longString = (value: any = null) => {\n if (!value) return ''\n return dayjs(value).format('LL')\n}\n\n/**\n * Converts value to native JavaScript Date object\n */\nexport const toDate = (value: any, isUtc?: boolean) => {\n if (isUtc === undefined) return dayjs(value).toDate()\n return isUtc ? dayjs.utc(value).toDate() : dayjs(value).toDate()\n}\n\ntype DateStringFormat =\n | 'DD/MM/YYYY'\n | 'YYYY-MM-DD'\n | 'MM/DD/YYYY'\n | 'YYYY/MM/DD'\n | 'DD-MM-YYYY'\n | 'MM-DD-YYYY'\n | 'YYYYMMDD'\n | 'DDMMYYYY'\n | 'MMDDYYYY'\n | 'YYYY.MM.DD'\n | 'DD.MM.YYYY'\n | 'MM.DD.YYYY'\n\n/**\n * Parses date string with specific format to native Date object\n *\n * Strict parser that validates format and creates Date from structured date strings.\n * Supports 12 common date formats with validation.\n *\n * @param dateString - Date string to parse\n * @param format - Expected format (DD/MM/YYYY, YYYY-MM-DD, etc.)\n * @returns Date object or null if invalid\n *\n * @example\n * ```typescript\n * toDateFromString('15/03/2024', 'DD/MM/YYYY') // Date object\n * toDateFromString('2024-03-15', 'YYYY-MM-DD') // Date object\n * toDateFromString('invalid', 'DD/MM/YYYY') // null\n * ```\n *\n * @see {@link format} for formatting dates\n */\nexport const toDateFromString = (dateString: string, format: DateStringFormat): Date | null => {\n const formatRegex: Record<string, RegExp> = {\n 'DD/MM/YYYY': /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/,\n 'YYYY-MM-DD': /^(\\d{4})-(\\d{2})-(\\d{2})$/,\n 'MM/DD/YYYY': /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/,\n 'YYYY/MM/DD': /^(\\d{4})\\/(\\d{2})\\/(\\d{2})$/,\n 'DD-MM-YYYY': /^(\\d{2})-(\\d{2})-(\\d{4})$/,\n 'MM-DD-YYYY': /^(\\d{2})-(\\d{2})-(\\d{4})$/,\n YYYYMMDD: /^(\\d{4})(\\d{2})(\\d{2})$/,\n DDMMYYYY: /^(\\d{2})(\\d{2})(\\d{4})$/,\n MMDDYYYY: /^(\\d{2})(\\d{2})(\\d{4})$/,\n 'YYYY.MM.DD': /^(\\d{4})\\.(\\d{2})\\.(\\d{2})$/,\n 'DD.MM.YYYY': /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/,\n 'MM.DD.YYYY': /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/,\n }\n\n const regex = formatRegex[format]\n if (!regex) return null\n\n const match = dateString.match(regex)\n if (match) {\n let year: number, month: number, day: number\n\n if (format.startsWith('YYYY')) {\n year = parseInt(match[1], 10)\n month = parseInt(match[2], 10) - 1\n day = parseInt(match[3], 10)\n } else if (format.startsWith('DD')) {\n day = parseInt(match[1], 10)\n month = parseInt(match[2], 10) - 1\n year = parseInt(match[3], 10)\n } else if (format.startsWith('MM')) {\n month = parseInt(match[1], 10) - 1\n day = parseInt(match[2], 10)\n year = parseInt(match[3], 10)\n } else {\n return null\n }\n\n return new Date(year, month, day)\n }\n\n return null\n}\n\n/**\n * Returns current date\n */\nexport const now = () => dayjs().toDate()\n\n/**\n * Checks if date is considered \"new\" based on days threshold\n */\nexport const isNew = (value: any, daysnew = 1) =>\n dayjs().isSameOrBefore(dayjs(value).add(daysnew, 'days'))\n\n/**\n * Converts date to ISO 8601 string (YYYY-MM-DDTHH:mm:ss.sssZ)\n *\n * Standard ISO format for API communication and storage.\n *\n * @param value - Date to convert (null = now)\n * @param isUtc - Force UTC timezone (default: false, uses local)\n * @returns ISO 8601 formatted string\n *\n * @example\n * ```typescript\n * toISO() // \"2024-03-15T10:30:00.000+01:00\" (now, local time)\n * toISO(new Date('2024-03-15')) // \"2024-03-15T00:00:00.000+01:00\"\n * toISO(new Date('2024-03-15'), true) // \"2024-03-14T23:00:00.000Z\" (UTC)\n * ```\n */\nexport const toISO = (value: any = null, isUtc = false) => {\n if (!value) return dayjs().toISOString()\n return isUtc ? dayjs.utc(value).toISOString() : dayjs(value).toISOString()\n}\n\n/**\n * Returns relative time from now in Spanish (e.g., \"hace 2 horas\")\n *\n * @param value - Date to compare with now\n * @returns Relative time string in Spanish\n *\n * @example\n * ```typescript\n * const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000)\n * fromNow(twoHoursAgo) // \"hace 2 horas\"\n * ```\n */\nexport const fromNow = (value: any) => dayjs(value).fromNow()\n\n/**\n * Returns day of week (0-6, Sunday is 0)\n */\nexport const dayOfWeek = (value: any = null) => {\n if (!value) return dayjs().format('d')\n return dayjs(value).format('d')\n}\n\n/**\n * Returns week of year with zero padding\n */\nexport const weekOfYear = (value: any = null) => {\n if (!value) return dayjs().locale('es').week().toString().padStart(2, '0')\n return dayjs(value).locale('es').week().toString().padStart(2, '0')\n}\n\n/**\n * Calculates difference in days between two dates\n */\nexport const diffDays = (start: any, end: any = null, precise = false) => {\n const v2 = !end ? dayjs() : dayjs(end)\n return dayjs(start).diff(v2, 'days', precise)\n}\n\n/**\n * Calculates difference in business days (weekdays only, excludes weekends)\n *\n * Counts Mon-Fri between two dates, excluding Saturdays and Sundays.\n * Does NOT account for holidays.\n *\n * @param start - Start date\n * @param end - End date (null = now)\n * @param precise - Include fractional days (default: false)\n * @returns Number of business days (Mon-Fri)\n *\n * @example\n * ```typescript\n * // Monday to Friday (same week)\n * diffBusinessDays('2024-03-11', '2024-03-15') // 4 business days\n *\n * // Including weekend (skip Sat/Sun)\n * diffBusinessDays('2024-03-15', '2024-03-18') // 1 (Fri to Mon)\n *\n * // Real-world: SLA calculation\n * const ticketCreated = new Date('2024-03-11')\n * const businessDays = diffBusinessDays(ticketCreated)\n * if (businessDays > 5) {\n * console.log('⚠️ SLA violation: > 5 business days')\n * }\n * ```\n */\nexport const diffBusinessDays = (start: any, end: any = null, precise = false) => {\n let startDate = dayjs(start).startOf('day')\n let endDate = end ? dayjs(end).startOf('day') : dayjs().startOf('day')\n\n if (startDate.isAfter(endDate)) {\n ;[startDate, endDate] = [endDate, startDate]\n }\n\n let businessDays = 0\n let currentDate = startDate\n\n while (currentDate.isBefore(endDate)) {\n if (isWeekday(currentDate)) {\n businessDays++\n }\n currentDate = currentDate.add(1, 'day')\n }\n\n if (precise) {\n const fractionalDay = endDate.diff(currentDate, 'hours') / 24\n businessDays += fractionalDay\n }\n\n return businessDays\n}\n\n/**\n * Calculates difference in months between two dates\n */\nexport const diffMonths = (value: any, valueRefOrNow: any = null, precise = false) => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n return dayjs(value).diff(v2, 'months', precise)\n}\n\n/**\n * Calculates difference in years between two dates\n */\nexport const diffYears = (value: any, valueRefOrNow: any = null, precise = false) => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n return dayjs(value).diff(v2, 'years', precise)\n}\n\n/**\n * Calculates difference in milliseconds between two dates\n */\nexport const diffMilliSeconds = (value: any, valueRefOrNow: any = null) => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n return dayjs(value).diff(v2, 'milliseconds', true)\n}\n\n/**\n * Adds days to a date\n */\nexport const addDays = (value: any, nDays: number = 1) => dayjs(value).add(nDays, 'days').toDate()\n\n/**\n * Adds seconds to a date\n */\nexport const addSeconds = (value: any, nSeconds: number = 1) =>\n dayjs(value).add(nSeconds, 'seconds').toDate()\n\n/**\n * Compares two dates with ± 2 seconds tolerance\n */\nexport const areDatesEqualWithTolerance = (date1: Date, date2: Date): boolean => {\n const tolerance = 2 * 1000 // 2 seconds in milliseconds\n return Math.abs(dayjs(date1).diff(dayjs(date2))) <= tolerance\n}\n\n/**\n * Adds days to current date\n */\nexport const addNowDays = (nDays: number = 1) => dayjs().add(nDays, 'days').toDate()\n\n/**\n * Adds seconds to current date\n */\nexport const addNowSeconds = (nSeconds: number = 60) => dayjs().add(nSeconds, 'seconds').toDate()\n\n/**\n * Adds months to a date\n */\nexport const addMonths = (value: any, nMonths: number = 1) =>\n dayjs(value).add(nMonths, 'months').toDate()\n\n/**\n * Adds months to current date\n */\nexport const addNowMonths = (nMonths: number = 1) => dayjs().add(nMonths, 'months').toDate()\n\n/**\n * Adds years to a date\n */\nexport const addYears = (value: any, nYears: number = 1) =>\n dayjs(value).add(nYears, 'years').toDate()\n\n/**\n * Adds years to current date\n */\nexport const addNowYears = (nYears: number = 1) => dayjs().add(nYears, 'years').toDate()\n\n/**\n * Converts Excel serial number to Date\n * JavaScript dates can be constructed by passing milliseconds since Unix epoch\n */\nexport const excelToDate = (value: any) => {\n try {\n const d: number = Number(value)\n if (d >= 18000 && d <= 300000) return new Date(Math.round((d - 25569) * 86400 * 1000))\n return null\n } catch (_err) {\n return null\n }\n}\n\n/**\n * Detects if a variable contains a valid date\n */\nexport const isDateTime = (value: any): boolean => {\n try {\n if (!value) return false\n if (typeof value === 'number') return false\n else if (typeof value === 'boolean') return false\n else if (\n typeof value === 'string' &&\n !isValidISODateString(value) &&\n !isValidDate(value) &&\n !isValidDate(value, '')\n )\n return false\n else if (typeof value === 'object' && !(value instanceof Date) && !dayjs.isDayjs(value))\n return false\n return dayjs(value).isValid()\n } catch (_err) {\n return false\n }\n}\n\n/**\n * Compares dates by day\n */\nexport const isEqualsDateTimeByDay = (value1: any, value2: any): boolean => {\n if (!isDateTime(value1)) return false\n if (!isDateTime(value2)) return false\n return dayjs(value1).isSame(dayjs(value2), 'day')\n}\n\n/**\n * Checks if a date has expired relative to current time\n */\nexport const isExpired = (value: any, valueRefOrNow: any = null): boolean => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n if (isDateTime(value)) {\n return v2.isAfter(value)\n }\n return true\n}\n\n/**\n * Formats date for MySQL database\n */\nexport const formatForMysql = (fecha: Date | null) => {\n if (!fecha) return null\n fecha.setMinutes(fecha.getMinutes() - fecha.getTimezoneOffset())\n return fecha.toISOString().slice(0, 19).replace('T', ' ')\n}\n\n/**\n * Gets first workday of month\n */\nexport const getFirstWorkdayOfMonth = (month?: number) => {\n const monthToUse = month === undefined ? dayjs().month() : month\n let firstDay = dayjs().month(monthToUse).startOf('month')\n while (firstDay.day() === 0 || firstDay.day() === 6) {\n firstDay = firstDay.add(1, 'day')\n }\n return firstDay.toDate()\n}\n\n/**\n * Gets last workday of month\n */\nexport const getLastWorkdayOfMonth = (month?: number) => {\n const monthToUse = month === undefined ? dayjs().month() : month\n let lastDay = dayjs().month(monthToUse).endOf('month')\n while (lastDay.day() === 0 || lastDay.day() === 6) {\n lastDay = lastDay.subtract(1, 'day')\n }\n return lastDay.toDate()\n}\n\n/**\n * Gets first workday after adding specified months\n */\nexport const getFirstWorkdayAfterMonths = (initialDate: Date, n: number) => {\n const startDate = dayjs(initialDate)\n const monthsToAdd = n\n const targetDate = startDate.add(monthsToAdd, 'months')\n\n let firstWorkday = targetDate.startOf('month')\n while (firstWorkday.day() === 0 || firstWorkday.day() === 6) {\n firstWorkday = firstWorkday.add(1, 'day')\n }\n return firstWorkday.toDate()\n}\n\n/**\n * Gets first day of current year\n */\nexport const getFirstDayOfYear = () => dayjs().startOf('year').toDate()\n\n/**\n * Gets last day of current year\n */\nexport const getLastDayOfYear = () => dayjs().endOf('year').toDate()\n\n/**\n * Checks if date is a weekday (not Saturday or Sunday)\n */\nexport const isWeekday = (date: any) => {\n const d = dayjs(date)\n const dayOfWeek = d.day() // 0 = Sunday, 1 = Monday, ..., 6 = Saturday\n return dayOfWeek !== 0 && dayOfWeek !== 6 // Exclude Saturdays and Sundays\n}\n"],"mappings":"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","names":["format","dayOfWeek"]}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-PZ5AY32C.js";
|
|
4
|
+
|
|
5
|
+
// src/environment.ts
|
|
6
|
+
var environment_exports = {};
|
|
7
|
+
__export(environment_exports, {
|
|
8
|
+
detectHostname: () => detectHostname,
|
|
9
|
+
detectProtocol: () => detectProtocol,
|
|
10
|
+
getEnvironmentInfo: () => getEnvironmentInfo,
|
|
11
|
+
isBrowser: () => isBrowser,
|
|
12
|
+
isBrowserEnvironment: () => isBrowserEnvironment,
|
|
13
|
+
isDevelopment: () => isDevelopment,
|
|
14
|
+
isLocalhost: () => isLocalhost,
|
|
15
|
+
isNode: () => isNode,
|
|
16
|
+
isNodeEnvironment: () => isNodeEnvironment,
|
|
17
|
+
isNonProduction: () => isNonProduction,
|
|
18
|
+
isPrivateIP: () => isPrivateIP,
|
|
19
|
+
isProduction: () => isProduction,
|
|
20
|
+
isTest: () => isTest,
|
|
21
|
+
parseEnvValue: () => parseEnvValue
|
|
22
|
+
});
|
|
23
|
+
function isNodeEnvironment() {
|
|
24
|
+
return typeof window === "undefined" && typeof process !== "undefined" && !!process.versions?.node;
|
|
25
|
+
}
|
|
26
|
+
function isBrowserEnvironment() {
|
|
27
|
+
const win = typeof window !== "undefined" ? window : global.window;
|
|
28
|
+
const doc = typeof document !== "undefined" ? document : global.document;
|
|
29
|
+
return typeof win !== "undefined" && win !== null && typeof doc !== "undefined" && doc !== null;
|
|
30
|
+
}
|
|
31
|
+
function isDevelopment(req) {
|
|
32
|
+
if (isNodeEnvironment()) {
|
|
33
|
+
if (process.env.NODE_ENV === "production") {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (process.env.NODE_ENV === "development") {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
if (req) {
|
|
40
|
+
const protocol = detectProtocol(req);
|
|
41
|
+
const hostname = detectHostname(req);
|
|
42
|
+
return protocol === "http" || isLocalhost(hostname) || isPrivateIP(hostname);
|
|
43
|
+
}
|
|
44
|
+
return !process.env.NODE_ENV || process.env.NODE_ENV === "development";
|
|
45
|
+
}
|
|
46
|
+
if (isBrowserEnvironment()) {
|
|
47
|
+
if (typeof globalThis.__DEV__ !== "undefined" && globalThis.__DEV__ === true) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (typeof window !== "undefined" && window.__VUE_DEVTOOLS_GLOBAL_HOOK__ && typeof location !== "undefined" && isLocalhost(location.hostname)) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (typeof location === "undefined") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const hostname = location.hostname || "";
|
|
57
|
+
const port = parseInt(location.port || "80");
|
|
58
|
+
const isDevelopmentPort = port >= 3e3 && port <= 9999;
|
|
59
|
+
const isHttpDevelopment = location.protocol === "http:" && (isLocalhost(hostname) || isPrivateIP(hostname));
|
|
60
|
+
return isLocalhost(hostname) || isPrivateIP(hostname) || isDevelopmentPort || isHttpDevelopment;
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
function isProduction() {
|
|
65
|
+
if (isNodeEnvironment()) {
|
|
66
|
+
return process.env.NODE_ENV === "production";
|
|
67
|
+
}
|
|
68
|
+
return !isDevelopment();
|
|
69
|
+
}
|
|
70
|
+
function isTest() {
|
|
71
|
+
if (isNodeEnvironment()) {
|
|
72
|
+
return process.env.NODE_ENV === "test";
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
function isNonProduction() {
|
|
77
|
+
if (isNodeEnvironment()) {
|
|
78
|
+
return process.env.NODE_ENV !== "production";
|
|
79
|
+
}
|
|
80
|
+
return !isProduction();
|
|
81
|
+
}
|
|
82
|
+
function detectProtocol(req) {
|
|
83
|
+
if (isBrowserEnvironment()) {
|
|
84
|
+
if (typeof location !== "undefined") {
|
|
85
|
+
return location.protocol === "https:" ? "https" : "http";
|
|
86
|
+
}
|
|
87
|
+
return "https";
|
|
88
|
+
}
|
|
89
|
+
if (req) {
|
|
90
|
+
const forwardedProto = req.get?.("X-Forwarded-Proto") || req.headers?.["x-forwarded-proto"];
|
|
91
|
+
const forwardedProtocol = req.get?.("X-Forwarded-Protocol") || req.headers?.["x-forwarded-protocol"];
|
|
92
|
+
const urlScheme = req.get?.("X-Url-Scheme") || req.headers?.["x-url-scheme"];
|
|
93
|
+
const frontEndHttps = req.get?.("Front-End-Https") || req.headers?.["front-end-https"];
|
|
94
|
+
const cloudflareVisitor = req.get?.("CF-Visitor") || req.headers?.["cf-visitor"];
|
|
95
|
+
if (forwardedProto) {
|
|
96
|
+
return forwardedProto.split(",")[0].trim().toLowerCase();
|
|
97
|
+
}
|
|
98
|
+
if (forwardedProtocol) {
|
|
99
|
+
return forwardedProtocol.toLowerCase();
|
|
100
|
+
}
|
|
101
|
+
if (urlScheme) {
|
|
102
|
+
return urlScheme.toLowerCase();
|
|
103
|
+
}
|
|
104
|
+
if (frontEndHttps === "on") {
|
|
105
|
+
return "https";
|
|
106
|
+
}
|
|
107
|
+
if (cloudflareVisitor) {
|
|
108
|
+
try {
|
|
109
|
+
const visitor = JSON.parse(cloudflareVisitor);
|
|
110
|
+
if (visitor.scheme) {
|
|
111
|
+
return visitor.scheme.toLowerCase();
|
|
112
|
+
}
|
|
113
|
+
} catch (_e) {
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (req.protocol) return req.protocol;
|
|
117
|
+
if (req.secure) return "https";
|
|
118
|
+
}
|
|
119
|
+
return "http";
|
|
120
|
+
}
|
|
121
|
+
function detectHostname(req) {
|
|
122
|
+
if (isBrowserEnvironment()) {
|
|
123
|
+
if (typeof location !== "undefined") {
|
|
124
|
+
return location.hostname;
|
|
125
|
+
}
|
|
126
|
+
return "localhost";
|
|
127
|
+
}
|
|
128
|
+
if (req) {
|
|
129
|
+
const forwardedHost = req.get?.("X-Forwarded-Host") || req.headers?.["x-forwarded-host"];
|
|
130
|
+
const originalHost = req.get?.("X-Original-Host") || req.headers?.["x-original-host"];
|
|
131
|
+
const host = req.get?.("Host") || req.headers?.["host"];
|
|
132
|
+
if (forwardedHost) {
|
|
133
|
+
return forwardedHost.split(",")[0].trim().split(":")[0];
|
|
134
|
+
}
|
|
135
|
+
if (originalHost) {
|
|
136
|
+
return originalHost.split(":")[0];
|
|
137
|
+
}
|
|
138
|
+
if (host) {
|
|
139
|
+
return host.split(":")[0];
|
|
140
|
+
}
|
|
141
|
+
if (req.hostname) return req.hostname;
|
|
142
|
+
}
|
|
143
|
+
return "localhost";
|
|
144
|
+
}
|
|
145
|
+
function isLocalhost(hostname) {
|
|
146
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname.endsWith(".localhost") || hostname.endsWith(".local");
|
|
147
|
+
}
|
|
148
|
+
function isPrivateIP(hostname) {
|
|
149
|
+
const ipv4Patterns = [
|
|
150
|
+
/^10\./,
|
|
151
|
+
// 10.0.0.0/8
|
|
152
|
+
/^172\.(1[6-9]|2[0-9]|3[0-1])\./,
|
|
153
|
+
// 172.16.0.0/12
|
|
154
|
+
/^192\.168\./,
|
|
155
|
+
// 192.168.0.0/16
|
|
156
|
+
/^127\./
|
|
157
|
+
// 127.0.0.0/8 (loopback)
|
|
158
|
+
];
|
|
159
|
+
const ipv6Patterns = [
|
|
160
|
+
/^::1$/,
|
|
161
|
+
// IPv6 loopback
|
|
162
|
+
/^fc[0-9a-f]{2}:/i,
|
|
163
|
+
// Unique local addresses
|
|
164
|
+
/^fd[0-9a-f]{2}:/i,
|
|
165
|
+
// Unique local addresses
|
|
166
|
+
/^fe80:/i
|
|
167
|
+
// Link-local addresses
|
|
168
|
+
];
|
|
169
|
+
return ipv4Patterns.some((pattern) => pattern.test(hostname)) || ipv6Patterns.some((pattern) => pattern.test(hostname)) || isLocalhost(hostname);
|
|
170
|
+
}
|
|
171
|
+
function getEnvironmentInfo(req) {
|
|
172
|
+
const platform = isNodeEnvironment() ? "node" : isBrowserEnvironment() ? "browser" : "unknown";
|
|
173
|
+
let environment = "production";
|
|
174
|
+
if (isNodeEnvironment()) {
|
|
175
|
+
const nodeEnv = process.env.NODE_ENV;
|
|
176
|
+
if (nodeEnv === "development" || nodeEnv === "test") {
|
|
177
|
+
environment = nodeEnv;
|
|
178
|
+
}
|
|
179
|
+
} else if (isDevelopment()) {
|
|
180
|
+
environment = "development";
|
|
181
|
+
}
|
|
182
|
+
const protocol = detectProtocol(req);
|
|
183
|
+
const hostname = detectHostname(req);
|
|
184
|
+
const info = {
|
|
185
|
+
platform,
|
|
186
|
+
environment,
|
|
187
|
+
protocol,
|
|
188
|
+
hostname
|
|
189
|
+
};
|
|
190
|
+
if (isBrowserEnvironment() && typeof navigator !== "undefined") {
|
|
191
|
+
info.userAgent = navigator.userAgent;
|
|
192
|
+
}
|
|
193
|
+
const criteria = {
|
|
194
|
+
isLocalhost: isLocalhost(hostname),
|
|
195
|
+
isPrivateIP: isPrivateIP(hostname),
|
|
196
|
+
isDevelopmentPort: false,
|
|
197
|
+
hasDevtools: false
|
|
198
|
+
};
|
|
199
|
+
if (isBrowserEnvironment() && typeof location !== "undefined") {
|
|
200
|
+
const port = parseInt(location.port || "80");
|
|
201
|
+
criteria.isDevelopmentPort = port >= 3e3 && port <= 9999;
|
|
202
|
+
criteria.hasDevtools = !!(typeof window !== "undefined" && window.__VUE_DEVTOOLS_GLOBAL_HOOK__);
|
|
203
|
+
}
|
|
204
|
+
if (isNodeEnvironment()) {
|
|
205
|
+
criteria.nodeEnv = process.env.NODE_ENV || "undefined";
|
|
206
|
+
}
|
|
207
|
+
info.criteria = criteria;
|
|
208
|
+
return info;
|
|
209
|
+
}
|
|
210
|
+
var isNode = isNodeEnvironment;
|
|
211
|
+
var isBrowser = isBrowserEnvironment;
|
|
212
|
+
function parseEnvValue(value) {
|
|
213
|
+
if (value === void 0 || value === null || value === "") {
|
|
214
|
+
return void 0;
|
|
215
|
+
}
|
|
216
|
+
const trimmed = value.trim();
|
|
217
|
+
if (trimmed === "null") return null;
|
|
218
|
+
if (trimmed === "undefined") return void 0;
|
|
219
|
+
const lowerValue = trimmed.toLowerCase();
|
|
220
|
+
if (lowerValue === "true" || lowerValue === "yes") return true;
|
|
221
|
+
if (lowerValue === "false" || lowerValue === "no") return false;
|
|
222
|
+
if (trimmed === "1") return true;
|
|
223
|
+
if (trimmed === "0") return false;
|
|
224
|
+
if (/^-?\d+\.?\d*$/.test(trimmed)) {
|
|
225
|
+
if (trimmed.length > 1 && trimmed[0] === "0" && trimmed[1] !== ".") {
|
|
226
|
+
return trimmed;
|
|
227
|
+
}
|
|
228
|
+
const num = Number(trimmed);
|
|
229
|
+
if (!isNaN(num)) return num;
|
|
230
|
+
}
|
|
231
|
+
if (trimmed.startsWith("[") && trimmed.endsWith("]") || trimmed.startsWith("{") && trimmed.endsWith("}")) {
|
|
232
|
+
try {
|
|
233
|
+
return JSON.parse(trimmed);
|
|
234
|
+
} catch {
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (trimmed.includes(",")) {
|
|
238
|
+
const parts = trimmed.split(",").map((s) => s.trim());
|
|
239
|
+
if (parts.every((p) => p.length > 0)) {
|
|
240
|
+
return parts;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return trimmed;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export {
|
|
247
|
+
isNodeEnvironment,
|
|
248
|
+
isBrowserEnvironment,
|
|
249
|
+
isDevelopment,
|
|
250
|
+
isProduction,
|
|
251
|
+
isTest,
|
|
252
|
+
isNonProduction,
|
|
253
|
+
detectProtocol,
|
|
254
|
+
detectHostname,
|
|
255
|
+
isLocalhost,
|
|
256
|
+
isPrivateIP,
|
|
257
|
+
getEnvironmentInfo,
|
|
258
|
+
isNode,
|
|
259
|
+
isBrowser,
|
|
260
|
+
parseEnvValue,
|
|
261
|
+
environment_exports
|
|
262
|
+
};
|
|
263
|
+
//# sourceMappingURL=chunk-64TBXJQS.js.map
|