@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,2035 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/universal/index.ts
|
|
31
|
+
var universal_exports = {};
|
|
32
|
+
__export(universal_exports, {
|
|
33
|
+
addDays: () => addDays,
|
|
34
|
+
addMonths: () => addMonths,
|
|
35
|
+
addNowDays: () => addNowDays,
|
|
36
|
+
addNowMonths: () => addNowMonths,
|
|
37
|
+
addNowSeconds: () => addNowSeconds,
|
|
38
|
+
addNowYears: () => addNowYears,
|
|
39
|
+
addSeconds: () => addSeconds,
|
|
40
|
+
addYears: () => addYears,
|
|
41
|
+
areDatesEqualWithTolerance: () => areDatesEqualWithTolerance,
|
|
42
|
+
async: () => async_exports,
|
|
43
|
+
calculateAggregations: () => calculateAggregations,
|
|
44
|
+
calculateAnnuityPayment: () => calculateAnnuityPayment,
|
|
45
|
+
calculateCorrelation: () => calculateCorrelation,
|
|
46
|
+
calculateDifferences: () => calculateDifferences,
|
|
47
|
+
calculateEuclideanDistance: () => calculateEuclideanDistance,
|
|
48
|
+
calculateFutureValue: () => calculateFutureValue,
|
|
49
|
+
calculateHistogram: () => calculateHistogram,
|
|
50
|
+
calculateIQR: () => calculateIQR,
|
|
51
|
+
calculateIRR: () => calculateIRR,
|
|
52
|
+
calculateManhattanDistance: () => calculateManhattanDistance,
|
|
53
|
+
calculateMedian: () => calculateMedian,
|
|
54
|
+
calculateMode: () => calculateMode,
|
|
55
|
+
calculateNPV: () => calculateNPV,
|
|
56
|
+
calculatePercentile: () => calculatePercentile,
|
|
57
|
+
calculatePresentValue: () => calculatePresentValue,
|
|
58
|
+
calculateQuartiles: () => calculateQuartiles,
|
|
59
|
+
calculateStandardDeviation: () => calculateStandardDeviation,
|
|
60
|
+
calculateTrendSlope: () => calculateTrendSlope,
|
|
61
|
+
calculateVariance: () => calculateVariance,
|
|
62
|
+
capitalizeEachWord: () => capitalizeEachWord,
|
|
63
|
+
capitalizeFirst: () => capitalizeFirst,
|
|
64
|
+
cleanJsonChars: () => cleanJsonChars,
|
|
65
|
+
comparator: () => comparator,
|
|
66
|
+
contains: () => contains,
|
|
67
|
+
countOccurrences: () => countOccurrences,
|
|
68
|
+
dates: () => dates_exports,
|
|
69
|
+
dayOfWeek: () => dayOfWeek,
|
|
70
|
+
deepEqual: () => deepEqual,
|
|
71
|
+
default: () => universal_default,
|
|
72
|
+
deleteArrayElementsBy: () => deleteArrayElementsBy,
|
|
73
|
+
detectHostname: () => detectHostname,
|
|
74
|
+
detectOutliers: () => detectOutliers,
|
|
75
|
+
detectProtocol: () => detectProtocol,
|
|
76
|
+
diffBusinessDays: () => diffBusinessDays,
|
|
77
|
+
diffDays: () => diffDays,
|
|
78
|
+
diffMilliSeconds: () => diffMilliSeconds,
|
|
79
|
+
diffMonths: () => diffMonths,
|
|
80
|
+
diffYears: () => diffYears,
|
|
81
|
+
endsWith: () => endsWith,
|
|
82
|
+
ensureEndsWith: () => ensureEndsWith,
|
|
83
|
+
ensureStartsWith: () => ensureStartsWith,
|
|
84
|
+
envKeyToPath: () => envKeyToPath,
|
|
85
|
+
environment: () => environment_exports,
|
|
86
|
+
escapeHtmlChars: () => escapeHtmlChars,
|
|
87
|
+
excelToDate: () => excelToDate,
|
|
88
|
+
format: () => format,
|
|
89
|
+
formatForMysql: () => formatForMysql,
|
|
90
|
+
formatNow: () => formatNow,
|
|
91
|
+
formatToReadableString: () => formatToReadableString,
|
|
92
|
+
fromNow: () => fromNow,
|
|
93
|
+
generateAlphaNumericString: () => generateAlphaNumericString,
|
|
94
|
+
generateAlphaString: () => generateAlphaString,
|
|
95
|
+
generateComplexString: () => generateComplexString,
|
|
96
|
+
generateCrcHash: () => generateCrcHash,
|
|
97
|
+
generateEmail: () => generateEmail,
|
|
98
|
+
generateHexColor: () => generateHexColor,
|
|
99
|
+
generatePassword: () => generatePassword,
|
|
100
|
+
generateRandomInteger: () => generateRandomInteger,
|
|
101
|
+
generateSpanishCIF: () => generateSpanishCIF,
|
|
102
|
+
generateSpanishIBAN: () => generateSpanishIBAN,
|
|
103
|
+
generateSpanishNIE: () => generateSpanishNIE,
|
|
104
|
+
generateSpanishNIF: () => generateSpanishNIF,
|
|
105
|
+
generateSpanishPostalCode: () => generateSpanishPostalCode,
|
|
106
|
+
generateUsername: () => generateUsername,
|
|
107
|
+
generateUsernameFromEmail: () => generateUsernameFromEmail,
|
|
108
|
+
getCryptoCapabilities: () => getCryptoCapabilities,
|
|
109
|
+
getDeepValue: () => getDeepValue,
|
|
110
|
+
getEnvironmentInfo: () => getEnvironmentInfo,
|
|
111
|
+
getEnvironmentType: () => getEnvironmentType,
|
|
112
|
+
getFirstDayOfYear: () => getFirstDayOfYear,
|
|
113
|
+
getFirstWorkdayAfterMonths: () => getFirstWorkdayAfterMonths,
|
|
114
|
+
getFirstWorkdayOfMonth: () => getFirstWorkdayOfMonth,
|
|
115
|
+
getLastDayOfYear: () => getLastDayOfYear,
|
|
116
|
+
getLastWorkdayOfMonth: () => getLastWorkdayOfMonth,
|
|
117
|
+
getShallowProperties: () => getShallowProperties,
|
|
118
|
+
handleOperation: () => handleOperation,
|
|
119
|
+
hasSameType: () => hasSameType,
|
|
120
|
+
isBrowser: () => isBrowser,
|
|
121
|
+
isBrowserEnv: () => isBrowserEnv,
|
|
122
|
+
isBrowserEnvironment: () => isBrowserEnvironment,
|
|
123
|
+
isDateTime: () => isDateTime,
|
|
124
|
+
isDevelopment: () => isDevelopment,
|
|
125
|
+
isEmail: () => isEmail,
|
|
126
|
+
isEmpty: () => isEmpty,
|
|
127
|
+
isEqualsDateTimeByDay: () => isEqualsDateTimeByDay,
|
|
128
|
+
isExpired: () => isExpired,
|
|
129
|
+
isLocalhost: () => isLocalhost,
|
|
130
|
+
isNew: () => isNew,
|
|
131
|
+
isNode: () => isNode,
|
|
132
|
+
isNodeCryptoAvailable: () => isNodeCryptoAvailable,
|
|
133
|
+
isNodeEnv: () => isNodeEnv,
|
|
134
|
+
isNodeEnvironment: () => isNodeEnvironment,
|
|
135
|
+
isNonProduction: () => isNonProduction,
|
|
136
|
+
isNumericValue: () => isNumericValue,
|
|
137
|
+
isPrivateIP: () => isPrivateIP,
|
|
138
|
+
isProduction: () => isProduction,
|
|
139
|
+
isTest: () => isTest,
|
|
140
|
+
isValidCIF: () => isValidCIF,
|
|
141
|
+
isValidEmail: () => isValidEmail,
|
|
142
|
+
isValidJSON: () => isValidJSON,
|
|
143
|
+
isValidNIE: () => isValidNIE,
|
|
144
|
+
isValidNIF: () => isValidNIF,
|
|
145
|
+
isValidSpanishIBAN: () => isValidSpanishIBAN,
|
|
146
|
+
isValidSpanishPhone: () => isValidSpanishPhone,
|
|
147
|
+
isValidSpanishPostalCode: () => isValidSpanishPostalCode,
|
|
148
|
+
isValidURL: () => isValidURL,
|
|
149
|
+
isWebCryptoAvailable: () => isWebCryptoAvailable,
|
|
150
|
+
isWeekday: () => isWeekday,
|
|
151
|
+
isWorkerEnvironment: () => isWorkerEnvironment,
|
|
152
|
+
longString: () => longString,
|
|
153
|
+
matchPathPattern: () => matchPathPattern,
|
|
154
|
+
math: () => math_exports,
|
|
155
|
+
normalizeToRange: () => normalizeToRange,
|
|
156
|
+
now: () => now,
|
|
157
|
+
number: () => number_exports,
|
|
158
|
+
objects: () => objects_exports,
|
|
159
|
+
padEnd: () => padEnd,
|
|
160
|
+
padStart: () => padStart,
|
|
161
|
+
parseEnvValue: () => parseEnvValue,
|
|
162
|
+
pathToEnvKey: () => pathToEnvKey,
|
|
163
|
+
removeAccents: () => removeAccents,
|
|
164
|
+
repeatString: () => repeatString,
|
|
165
|
+
replaceAllOccurrences: () => replaceAllOccurrences,
|
|
166
|
+
reverseString: () => reverseString,
|
|
167
|
+
roundToDecimals: () => roundToDecimals,
|
|
168
|
+
runBatch: () => runBatch,
|
|
169
|
+
sanitizeString: () => sanitizeString,
|
|
170
|
+
scaleToRange: () => scaleToRange,
|
|
171
|
+
setDeepValue: () => setDeepValue,
|
|
172
|
+
simpleKMeans: () => simpleKMeans,
|
|
173
|
+
sleep: () => sleep,
|
|
174
|
+
startsWith: () => startsWith,
|
|
175
|
+
strings: () => strings_exports,
|
|
176
|
+
stripFromEnd: () => stripFromEnd,
|
|
177
|
+
stripFromStart: () => stripFromStart,
|
|
178
|
+
toCamelCase: () => toCamelCase,
|
|
179
|
+
toDate: () => toDate,
|
|
180
|
+
toDateFromString: () => toDateFromString,
|
|
181
|
+
toISO: () => toISO,
|
|
182
|
+
toKebabCase: () => toKebabCase,
|
|
183
|
+
toLowerCase: () => toLowerCase,
|
|
184
|
+
toPascalCase: () => toPascalCase,
|
|
185
|
+
toSnakeCase: () => toSnakeCase,
|
|
186
|
+
toUpperCase: () => toUpperCase,
|
|
187
|
+
toUrlSlug: () => toUrlSlug,
|
|
188
|
+
trim: () => trim,
|
|
189
|
+
trimEnd: () => trimEnd,
|
|
190
|
+
trimStart: () => trimStart,
|
|
191
|
+
truncateString: () => truncateString,
|
|
192
|
+
unescapeHtmlChars: () => unescapeHtmlChars,
|
|
193
|
+
unescapeUnicode: () => unescapeUnicode,
|
|
194
|
+
updateArrayElementById: () => updateArrayElementById,
|
|
195
|
+
updateArrayElementsBy: () => updateArrayElementsBy,
|
|
196
|
+
validateNIF: () => validateNIF,
|
|
197
|
+
validation: () => validation_core_exports,
|
|
198
|
+
wait: () => wait,
|
|
199
|
+
weekOfYear: () => weekOfYear
|
|
200
|
+
});
|
|
201
|
+
module.exports = __toCommonJS(universal_exports);
|
|
202
|
+
|
|
203
|
+
// src/universal/validation-core.ts
|
|
204
|
+
var validation_core_exports = {};
|
|
205
|
+
__export(validation_core_exports, {
|
|
206
|
+
generateAlphaNumericString: () => generateAlphaNumericString,
|
|
207
|
+
generateAlphaString: () => generateAlphaString,
|
|
208
|
+
generateComplexString: () => generateComplexString,
|
|
209
|
+
generateEmail: () => generateEmail,
|
|
210
|
+
generateHexColor: () => generateHexColor,
|
|
211
|
+
generatePassword: () => generatePassword,
|
|
212
|
+
generateRandomInteger: () => generateRandomInteger,
|
|
213
|
+
generateSpanishCIF: () => generateSpanishCIF,
|
|
214
|
+
generateSpanishIBAN: () => generateSpanishIBAN,
|
|
215
|
+
generateSpanishNIE: () => generateSpanishNIE,
|
|
216
|
+
generateSpanishNIF: () => generateSpanishNIF,
|
|
217
|
+
generateSpanishPostalCode: () => generateSpanishPostalCode,
|
|
218
|
+
generateUsername: () => generateUsername,
|
|
219
|
+
generateUsernameFromEmail: () => generateUsernameFromEmail,
|
|
220
|
+
isValidCIF: () => isValidCIF,
|
|
221
|
+
isValidEmail: () => isValidEmail,
|
|
222
|
+
isValidJSON: () => isValidJSON,
|
|
223
|
+
isValidNIE: () => isValidNIE,
|
|
224
|
+
isValidNIF: () => isValidNIF,
|
|
225
|
+
isValidSpanishIBAN: () => isValidSpanishIBAN,
|
|
226
|
+
isValidSpanishPhone: () => isValidSpanishPhone,
|
|
227
|
+
isValidSpanishPostalCode: () => isValidSpanishPostalCode,
|
|
228
|
+
isValidURL: () => isValidURL,
|
|
229
|
+
validateNIF: () => validateNIF
|
|
230
|
+
});
|
|
231
|
+
var import_validator = __toESM(require("validator"));
|
|
232
|
+
var randomInteger = (min, max) => {
|
|
233
|
+
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
234
|
+
};
|
|
235
|
+
var randomString = (length, pool) => {
|
|
236
|
+
const chars = pool || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
237
|
+
let result = "";
|
|
238
|
+
for (let i = 0; i < length; i++) {
|
|
239
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
242
|
+
};
|
|
243
|
+
var randomAlphaString = (length, casing) => {
|
|
244
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
245
|
+
let result = randomString(length, chars);
|
|
246
|
+
if (casing === "upper") result = result.toUpperCase();
|
|
247
|
+
if (casing === "lower") result = result.toLowerCase();
|
|
248
|
+
return result;
|
|
249
|
+
};
|
|
250
|
+
var randomAlphaNumericString = (length, casing) => {
|
|
251
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
252
|
+
let result = randomString(length, chars);
|
|
253
|
+
if (casing === "upper") result = result.toUpperCase();
|
|
254
|
+
if (casing === "lower") result = result.toLowerCase();
|
|
255
|
+
return result;
|
|
256
|
+
};
|
|
257
|
+
var pickone = (array) => {
|
|
258
|
+
return array[Math.floor(Math.random() * array.length)];
|
|
259
|
+
};
|
|
260
|
+
var randomBool = (likelihood = 50) => {
|
|
261
|
+
return Math.random() * 100 < likelihood;
|
|
262
|
+
};
|
|
263
|
+
var generateRandomInteger = (min = 0, max = 100) => {
|
|
264
|
+
return randomInteger(min, max);
|
|
265
|
+
};
|
|
266
|
+
var generateAlphaString = (options = {}) => {
|
|
267
|
+
const { length = 10, casing = void 0 } = options;
|
|
268
|
+
return randomAlphaString(length, casing);
|
|
269
|
+
};
|
|
270
|
+
var generateAlphaNumericString = (options = {}) => {
|
|
271
|
+
const { length = 10, casing = void 0 } = options;
|
|
272
|
+
return randomAlphaNumericString(length, casing);
|
|
273
|
+
};
|
|
274
|
+
var generateComplexString = (options = {}) => {
|
|
275
|
+
const { length = 10, casing: _casing = void 0 } = options;
|
|
276
|
+
return randomString(length);
|
|
277
|
+
};
|
|
278
|
+
var generateUsernameFromEmail = (email, randomDigits = 1) => {
|
|
279
|
+
if (!email || !email.includes("@"))
|
|
280
|
+
return `user${Math.floor(Math.random() * Math.pow(10, randomDigits))}`;
|
|
281
|
+
const localPart = email.split("@")[0];
|
|
282
|
+
const username = localPart.toLowerCase().replace(/[^a-z0-9]/g, "").substring(0, 12);
|
|
283
|
+
const randomSuffix = Math.floor(Math.random() * Math.pow(10, randomDigits));
|
|
284
|
+
return username + randomSuffix;
|
|
285
|
+
};
|
|
286
|
+
var generateUsername = (separator = "", randomDigits = 1, length = 8) => {
|
|
287
|
+
const adjectives = [
|
|
288
|
+
"cool",
|
|
289
|
+
"happy",
|
|
290
|
+
"smart",
|
|
291
|
+
"fast",
|
|
292
|
+
"nice",
|
|
293
|
+
"wild",
|
|
294
|
+
"free",
|
|
295
|
+
"bold",
|
|
296
|
+
"calm",
|
|
297
|
+
"brave"
|
|
298
|
+
];
|
|
299
|
+
const nouns = ["cat", "dog", "bird", "fish", "lion", "bear", "wolf", "tiger", "eagle", "shark"];
|
|
300
|
+
const adjective = adjectives[Math.floor(Math.random() * adjectives.length)];
|
|
301
|
+
const noun = nouns[Math.floor(Math.random() * nouns.length)];
|
|
302
|
+
const randomSuffix = Math.floor(Math.random() * Math.pow(10, randomDigits));
|
|
303
|
+
const username = adjective + separator + noun + randomSuffix;
|
|
304
|
+
return username.length > length ? username.substring(0, length) : username;
|
|
305
|
+
};
|
|
306
|
+
var generateSpanishNIF = () => {
|
|
307
|
+
const number = randomInteger(1e7, 99999999);
|
|
308
|
+
const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
309
|
+
const letter = letters[number % 23];
|
|
310
|
+
return `${number}${letter}`;
|
|
311
|
+
};
|
|
312
|
+
var generateSpanishNIE = () => {
|
|
313
|
+
const prefixes = ["X", "Y", "Z"];
|
|
314
|
+
const selectedPrefix = pickone(prefixes);
|
|
315
|
+
const prefixValue = selectedPrefix === "X" ? 0 : selectedPrefix === "Y" ? 1 : 2;
|
|
316
|
+
const number = randomInteger(1e6, 9999999);
|
|
317
|
+
const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
318
|
+
const calculationNumber = prefixValue * 1e7 + number;
|
|
319
|
+
const letter = letters[calculationNumber % 23];
|
|
320
|
+
return `${selectedPrefix}${number}${letter}`;
|
|
321
|
+
};
|
|
322
|
+
var generateSpanishCIF = () => {
|
|
323
|
+
const organizationTypes = [
|
|
324
|
+
"A",
|
|
325
|
+
"B",
|
|
326
|
+
"C",
|
|
327
|
+
"D",
|
|
328
|
+
"E",
|
|
329
|
+
"F",
|
|
330
|
+
"G",
|
|
331
|
+
"H",
|
|
332
|
+
"J",
|
|
333
|
+
"N",
|
|
334
|
+
"P",
|
|
335
|
+
"Q",
|
|
336
|
+
"R",
|
|
337
|
+
"S",
|
|
338
|
+
"U",
|
|
339
|
+
"V",
|
|
340
|
+
"W"
|
|
341
|
+
];
|
|
342
|
+
const organizationType = pickone(organizationTypes);
|
|
343
|
+
const number = randomInteger(1e6, 9999999).toString().padStart(7, "0");
|
|
344
|
+
let sum2 = 0;
|
|
345
|
+
for (let i = 0; i < 7; i++) {
|
|
346
|
+
let digit = parseInt(number[i]);
|
|
347
|
+
if (i % 2 === 0) {
|
|
348
|
+
digit *= 2;
|
|
349
|
+
if (digit > 9) digit = Math.floor(digit / 10) + digit % 10;
|
|
350
|
+
}
|
|
351
|
+
sum2 += digit;
|
|
352
|
+
}
|
|
353
|
+
const controlDigit = (10 - sum2 % 10) % 10;
|
|
354
|
+
const controlLetter = "JABCDEFGHI"[controlDigit];
|
|
355
|
+
const control = ["N", "P", "Q", "R", "S", "W"].includes(organizationType) ? controlLetter : randomBool() ? controlDigit.toString() : controlLetter;
|
|
356
|
+
return `${organizationType}${number}${control}`;
|
|
357
|
+
};
|
|
358
|
+
var generateSpanishPostalCode = () => {
|
|
359
|
+
const validPrefixes = [
|
|
360
|
+
"01",
|
|
361
|
+
"02",
|
|
362
|
+
"03",
|
|
363
|
+
"04",
|
|
364
|
+
"05",
|
|
365
|
+
"06",
|
|
366
|
+
"07",
|
|
367
|
+
"08",
|
|
368
|
+
"09",
|
|
369
|
+
"10",
|
|
370
|
+
"11",
|
|
371
|
+
"12",
|
|
372
|
+
"13",
|
|
373
|
+
"14",
|
|
374
|
+
"15",
|
|
375
|
+
"16",
|
|
376
|
+
"17",
|
|
377
|
+
"18",
|
|
378
|
+
"19",
|
|
379
|
+
"20",
|
|
380
|
+
"21",
|
|
381
|
+
"22",
|
|
382
|
+
"23",
|
|
383
|
+
"24",
|
|
384
|
+
"25",
|
|
385
|
+
"26",
|
|
386
|
+
"27",
|
|
387
|
+
"28",
|
|
388
|
+
"29",
|
|
389
|
+
"30",
|
|
390
|
+
"31",
|
|
391
|
+
"32",
|
|
392
|
+
"33",
|
|
393
|
+
"34",
|
|
394
|
+
"35",
|
|
395
|
+
"36",
|
|
396
|
+
"37",
|
|
397
|
+
"38",
|
|
398
|
+
"39",
|
|
399
|
+
"40",
|
|
400
|
+
"41",
|
|
401
|
+
"42",
|
|
402
|
+
"43",
|
|
403
|
+
"44",
|
|
404
|
+
"45",
|
|
405
|
+
"46",
|
|
406
|
+
"47",
|
|
407
|
+
"48",
|
|
408
|
+
"49",
|
|
409
|
+
"50",
|
|
410
|
+
"51",
|
|
411
|
+
"52"
|
|
412
|
+
];
|
|
413
|
+
const firstDigit = pickone(validPrefixes);
|
|
414
|
+
const remainingDigits = randomString(3, "0123456789");
|
|
415
|
+
return `${firstDigit}${remainingDigits}`;
|
|
416
|
+
};
|
|
417
|
+
var generateSpanishIBAN = () => {
|
|
418
|
+
const bankCode = randomString(4, "0123456789");
|
|
419
|
+
const branchCode = randomString(4, "0123456789");
|
|
420
|
+
const controlDigits = randomString(2, "0123456789");
|
|
421
|
+
const accountNumber = randomString(10, "0123456789");
|
|
422
|
+
const accountPart = `${bankCode}${branchCode}${controlDigits}${accountNumber}`;
|
|
423
|
+
const rearranged = `${accountPart}142800`;
|
|
424
|
+
const checkDigits = String(98n - BigInt(rearranged) % 97n).padStart(2, "0");
|
|
425
|
+
return `ES${checkDigits}${bankCode}${branchCode}${controlDigits}${accountNumber}`;
|
|
426
|
+
};
|
|
427
|
+
var generateEmail = (domain) => {
|
|
428
|
+
const firstNames = [
|
|
429
|
+
"Ana",
|
|
430
|
+
"Carlos",
|
|
431
|
+
"Mar\xEDa",
|
|
432
|
+
"Jos\xE9",
|
|
433
|
+
"Laura",
|
|
434
|
+
"David",
|
|
435
|
+
"Carmen",
|
|
436
|
+
"Antonio",
|
|
437
|
+
"Isabel",
|
|
438
|
+
"Manuel"
|
|
439
|
+
];
|
|
440
|
+
const lastNames = [
|
|
441
|
+
"Garc\xEDa",
|
|
442
|
+
"Gonz\xE1lez",
|
|
443
|
+
"L\xF3pez",
|
|
444
|
+
"Mart\xEDnez",
|
|
445
|
+
"S\xE1nchez",
|
|
446
|
+
"P\xE9rez",
|
|
447
|
+
"G\xF3mez",
|
|
448
|
+
"Mart\xEDn",
|
|
449
|
+
"Jim\xE9nez",
|
|
450
|
+
"Ruiz"
|
|
451
|
+
];
|
|
452
|
+
const domains = ["gmail.com", "hotmail.com", "yahoo.es", "outlook.com", "test.com"];
|
|
453
|
+
const firstName = pickone(firstNames);
|
|
454
|
+
const lastName = pickone(lastNames);
|
|
455
|
+
const emailDomain = domain || pickone(domains);
|
|
456
|
+
const formats = [
|
|
457
|
+
`${firstName.toLowerCase()}.${lastName.toLowerCase()}@${emailDomain}`,
|
|
458
|
+
`${firstName.toLowerCase()}${randomInteger(1, 99)}@${emailDomain}`,
|
|
459
|
+
`${firstName.toLowerCase()}.${lastName.toLowerCase()}${randomInteger(1, 9)}@${emailDomain}`,
|
|
460
|
+
`${firstName.toLowerCase()}${lastName.toLowerCase()}@${emailDomain}`
|
|
461
|
+
];
|
|
462
|
+
const username = pickone(formats);
|
|
463
|
+
return username.toLowerCase();
|
|
464
|
+
};
|
|
465
|
+
var generatePassword = (options = {}) => {
|
|
466
|
+
const {
|
|
467
|
+
length = 12,
|
|
468
|
+
includeUppercase = true,
|
|
469
|
+
includeLowercase = true,
|
|
470
|
+
includeNumbers = true,
|
|
471
|
+
includeSymbols = true
|
|
472
|
+
} = options;
|
|
473
|
+
const minLength = 4;
|
|
474
|
+
const maxLength = 30;
|
|
475
|
+
const targetLength = length || randomInteger(minLength, maxLength);
|
|
476
|
+
const upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
477
|
+
const lowerChars = "abcdefghijklmnopqrstuvwxyz";
|
|
478
|
+
const numberChars = "0123456789";
|
|
479
|
+
const symbolChars = "!@#$%^&*()_+-=[]{}|;:,.<>?";
|
|
480
|
+
let charset = "";
|
|
481
|
+
let requiredChars = "";
|
|
482
|
+
if (includeUppercase) {
|
|
483
|
+
charset += upperChars;
|
|
484
|
+
requiredChars += upperChars.charAt(Math.floor(Math.random() * upperChars.length));
|
|
485
|
+
}
|
|
486
|
+
if (includeLowercase) {
|
|
487
|
+
charset += lowerChars;
|
|
488
|
+
requiredChars += lowerChars.charAt(Math.floor(Math.random() * lowerChars.length));
|
|
489
|
+
}
|
|
490
|
+
if (includeNumbers) {
|
|
491
|
+
charset += numberChars;
|
|
492
|
+
requiredChars += numberChars.charAt(Math.floor(Math.random() * numberChars.length));
|
|
493
|
+
}
|
|
494
|
+
if (includeSymbols) {
|
|
495
|
+
charset += symbolChars;
|
|
496
|
+
requiredChars += symbolChars.charAt(Math.floor(Math.random() * symbolChars.length));
|
|
497
|
+
}
|
|
498
|
+
if (!charset) charset = "abcdefghijklmnopqrstuvwxyz";
|
|
499
|
+
let password = requiredChars;
|
|
500
|
+
const remainingLength = targetLength - requiredChars.length;
|
|
501
|
+
for (let i = 0; i < remainingLength; i++) {
|
|
502
|
+
password += charset.charAt(Math.floor(Math.random() * charset.length));
|
|
503
|
+
}
|
|
504
|
+
return password.split("").sort(() => Math.random() - 0.5).join("");
|
|
505
|
+
};
|
|
506
|
+
var generateHexColor = (shortFormat) => {
|
|
507
|
+
const hexChars = "0123456789ABCDEF";
|
|
508
|
+
const useShortFormat = shortFormat !== void 0 ? shortFormat : randomBool();
|
|
509
|
+
if (useShortFormat) {
|
|
510
|
+
const r = pickone(hexChars.split(""));
|
|
511
|
+
const g2 = pickone(hexChars.split(""));
|
|
512
|
+
const b = pickone(hexChars.split(""));
|
|
513
|
+
return `#${r}${g2}${b}`;
|
|
514
|
+
} else {
|
|
515
|
+
const color = randomString(6, hexChars);
|
|
516
|
+
return `#${color}`;
|
|
517
|
+
}
|
|
518
|
+
};
|
|
519
|
+
var isValidNIF = (nif) => {
|
|
520
|
+
if (!nif || typeof nif !== "string") return false;
|
|
521
|
+
const cleanNif = nif.trim().toUpperCase();
|
|
522
|
+
const nifRegex = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
|
|
523
|
+
if (!nifRegex.test(cleanNif)) return false;
|
|
524
|
+
const number = parseInt(cleanNif.substring(0, 8));
|
|
525
|
+
const letter = cleanNif.charAt(8);
|
|
526
|
+
const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
527
|
+
const expectedLetter = letters[number % 23];
|
|
528
|
+
return letter === expectedLetter;
|
|
529
|
+
};
|
|
530
|
+
var validateNIF = isValidNIF;
|
|
531
|
+
var isValidNIE = (nie) => {
|
|
532
|
+
if (!nie || typeof nie !== "string") return false;
|
|
533
|
+
const cleanNie = nie.trim().toUpperCase();
|
|
534
|
+
const nieRegex = /^[XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
|
|
535
|
+
if (!nieRegex.test(cleanNie)) return false;
|
|
536
|
+
const prefix = cleanNie.charAt(0);
|
|
537
|
+
const number = parseInt(cleanNie.substring(1, 8));
|
|
538
|
+
const letter = cleanNie.charAt(8);
|
|
539
|
+
const prefixValue = prefix === "X" ? 0 : prefix === "Y" ? 1 : 2;
|
|
540
|
+
const calculationNumber = prefixValue * 1e7 + number;
|
|
541
|
+
const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
542
|
+
const expectedLetter = letters[calculationNumber % 23];
|
|
543
|
+
return letter === expectedLetter;
|
|
544
|
+
};
|
|
545
|
+
var isValidCIF = (cif) => {
|
|
546
|
+
if (!cif || typeof cif !== "string") return false;
|
|
547
|
+
const cleanCif = cif.trim().toUpperCase();
|
|
548
|
+
const cifRegex = /^[ABCDEFGHJNPQRSUVW][0-9]{7}[0-9A-J]$/;
|
|
549
|
+
if (!cifRegex.test(cleanCif)) return false;
|
|
550
|
+
const organizationType = cleanCif.charAt(0);
|
|
551
|
+
const number = cleanCif.substring(1, 8);
|
|
552
|
+
const control = cleanCif.charAt(8);
|
|
553
|
+
let sum2 = 0;
|
|
554
|
+
for (let i = 0; i < 7; i++) {
|
|
555
|
+
let digit = parseInt(number[i]);
|
|
556
|
+
if (i % 2 === 0) {
|
|
557
|
+
digit *= 2;
|
|
558
|
+
if (digit > 9) digit = Math.floor(digit / 10) + digit % 10;
|
|
559
|
+
}
|
|
560
|
+
sum2 += digit;
|
|
561
|
+
}
|
|
562
|
+
const controlDigit = (10 - sum2 % 10) % 10;
|
|
563
|
+
const controlLetter = "JABCDEFGHI"[controlDigit];
|
|
564
|
+
if (["N", "P", "Q", "R", "S", "W"].includes(organizationType)) {
|
|
565
|
+
return control === controlLetter;
|
|
566
|
+
} else {
|
|
567
|
+
return control === controlDigit.toString() || control === controlLetter;
|
|
568
|
+
}
|
|
569
|
+
};
|
|
570
|
+
var isValidSpanishPostalCode = (postalCode) => {
|
|
571
|
+
if (!postalCode || typeof postalCode !== "string") return false;
|
|
572
|
+
const cleanCode = postalCode.trim();
|
|
573
|
+
const postalCodeRegex = /^(0[1-9]|[1-4][0-9]|5[0-2])[0-9]{3}$/;
|
|
574
|
+
return postalCodeRegex.test(cleanCode);
|
|
575
|
+
};
|
|
576
|
+
var isValidSpanishPhone = (phone) => {
|
|
577
|
+
if (!phone || typeof phone !== "string") return false;
|
|
578
|
+
const cleanPhone = phone.replace(/[\s\-()]/g, "");
|
|
579
|
+
const phoneRegex = /^(?:\+34|0034|34)?([679][0-9]{8})$/;
|
|
580
|
+
return phoneRegex.test(cleanPhone);
|
|
581
|
+
};
|
|
582
|
+
var isValidEmail = (email) => {
|
|
583
|
+
if (!email || typeof email !== "string") return false;
|
|
584
|
+
return import_validator.default.isEmail(email);
|
|
585
|
+
};
|
|
586
|
+
var isValidURL = (url) => {
|
|
587
|
+
if (!url || typeof url !== "string") return false;
|
|
588
|
+
if (import_validator.default.isURL(url, { require_protocol: true })) {
|
|
589
|
+
return true;
|
|
590
|
+
}
|
|
591
|
+
try {
|
|
592
|
+
const urlObj = new URL(url);
|
|
593
|
+
return urlObj.hostname === "localhost" || urlObj.hostname === "127.0.0.1";
|
|
594
|
+
} catch {
|
|
595
|
+
return false;
|
|
596
|
+
}
|
|
597
|
+
};
|
|
598
|
+
var isValidJSON = (str) => {
|
|
599
|
+
if (!str || typeof str !== "string") return false;
|
|
600
|
+
try {
|
|
601
|
+
JSON.parse(str);
|
|
602
|
+
return true;
|
|
603
|
+
} catch {
|
|
604
|
+
return false;
|
|
605
|
+
}
|
|
606
|
+
};
|
|
607
|
+
var isValidSpanishIBAN = (iban) => {
|
|
608
|
+
if (!iban || typeof iban !== "string") return false;
|
|
609
|
+
const cleanIban = iban.replace(/\s/g, "").toUpperCase();
|
|
610
|
+
const ibanRegex = /^ES[0-9]{22}$/;
|
|
611
|
+
if (!ibanRegex.test(cleanIban)) return false;
|
|
612
|
+
const rearranged = cleanIban.substring(4) + cleanIban.substring(0, 4);
|
|
613
|
+
const numericString = rearranged.replace(/[A-Z]/g, (letter) => {
|
|
614
|
+
return (letter.charCodeAt(0) - 55).toString();
|
|
615
|
+
});
|
|
616
|
+
let remainder = 0;
|
|
617
|
+
for (let i = 0; i < numericString.length; i++) {
|
|
618
|
+
remainder = (remainder * 10 + parseInt(numericString[i])) % 97;
|
|
619
|
+
}
|
|
620
|
+
return remainder === 1;
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
// src/universal/environment-detection.ts
|
|
624
|
+
var environment_detection_exports = {};
|
|
625
|
+
__export(environment_detection_exports, {
|
|
626
|
+
getCryptoCapabilities: () => getCryptoCapabilities,
|
|
627
|
+
getEnvironmentType: () => getEnvironmentType,
|
|
628
|
+
isBrowserEnv: () => isBrowserEnv,
|
|
629
|
+
isNodeCryptoAvailable: () => isNodeCryptoAvailable,
|
|
630
|
+
isNodeEnv: () => isNodeEnv,
|
|
631
|
+
isWebCryptoAvailable: () => isWebCryptoAvailable,
|
|
632
|
+
isWorkerEnvironment: () => isWorkerEnvironment
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
// src/environment.ts
|
|
636
|
+
var environment_exports = {};
|
|
637
|
+
__export(environment_exports, {
|
|
638
|
+
detectHostname: () => detectHostname,
|
|
639
|
+
detectProtocol: () => detectProtocol,
|
|
640
|
+
getEnvironmentInfo: () => getEnvironmentInfo,
|
|
641
|
+
isBrowser: () => isBrowser,
|
|
642
|
+
isBrowserEnvironment: () => isBrowserEnvironment,
|
|
643
|
+
isDevelopment: () => isDevelopment,
|
|
644
|
+
isLocalhost: () => isLocalhost,
|
|
645
|
+
isNode: () => isNode,
|
|
646
|
+
isNodeEnvironment: () => isNodeEnvironment,
|
|
647
|
+
isNonProduction: () => isNonProduction,
|
|
648
|
+
isPrivateIP: () => isPrivateIP,
|
|
649
|
+
isProduction: () => isProduction,
|
|
650
|
+
isTest: () => isTest,
|
|
651
|
+
parseEnvValue: () => parseEnvValue
|
|
652
|
+
});
|
|
653
|
+
function isNodeEnvironment() {
|
|
654
|
+
return typeof window === "undefined" && typeof process !== "undefined" && !!process.versions?.node;
|
|
655
|
+
}
|
|
656
|
+
function isBrowserEnvironment() {
|
|
657
|
+
const win = typeof window !== "undefined" ? window : global.window;
|
|
658
|
+
const doc = typeof document !== "undefined" ? document : global.document;
|
|
659
|
+
return typeof win !== "undefined" && win !== null && typeof doc !== "undefined" && doc !== null;
|
|
660
|
+
}
|
|
661
|
+
function isDevelopment(req) {
|
|
662
|
+
if (isNodeEnvironment()) {
|
|
663
|
+
if (process.env.NODE_ENV === "production") {
|
|
664
|
+
return false;
|
|
665
|
+
}
|
|
666
|
+
if (process.env.NODE_ENV === "development") {
|
|
667
|
+
return true;
|
|
668
|
+
}
|
|
669
|
+
if (req) {
|
|
670
|
+
const protocol = detectProtocol(req);
|
|
671
|
+
const hostname = detectHostname(req);
|
|
672
|
+
return protocol === "http" || isLocalhost(hostname) || isPrivateIP(hostname);
|
|
673
|
+
}
|
|
674
|
+
return !process.env.NODE_ENV || process.env.NODE_ENV === "development";
|
|
675
|
+
}
|
|
676
|
+
if (isBrowserEnvironment()) {
|
|
677
|
+
if (typeof globalThis.__DEV__ !== "undefined" && globalThis.__DEV__ === true) {
|
|
678
|
+
return true;
|
|
679
|
+
}
|
|
680
|
+
if (typeof window !== "undefined" && window.__VUE_DEVTOOLS_GLOBAL_HOOK__ && typeof location !== "undefined" && isLocalhost(location.hostname)) {
|
|
681
|
+
return true;
|
|
682
|
+
}
|
|
683
|
+
if (typeof location === "undefined") {
|
|
684
|
+
return false;
|
|
685
|
+
}
|
|
686
|
+
const hostname = location.hostname || "";
|
|
687
|
+
const port = parseInt(location.port || "80");
|
|
688
|
+
const isDevelopmentPort = port >= 3e3 && port <= 9999;
|
|
689
|
+
const isHttpDevelopment = location.protocol === "http:" && (isLocalhost(hostname) || isPrivateIP(hostname));
|
|
690
|
+
return isLocalhost(hostname) || isPrivateIP(hostname) || isDevelopmentPort || isHttpDevelopment;
|
|
691
|
+
}
|
|
692
|
+
return false;
|
|
693
|
+
}
|
|
694
|
+
function isProduction() {
|
|
695
|
+
if (isNodeEnvironment()) {
|
|
696
|
+
return process.env.NODE_ENV === "production";
|
|
697
|
+
}
|
|
698
|
+
return !isDevelopment();
|
|
699
|
+
}
|
|
700
|
+
function isTest() {
|
|
701
|
+
if (isNodeEnvironment()) {
|
|
702
|
+
return process.env.NODE_ENV === "test";
|
|
703
|
+
}
|
|
704
|
+
return false;
|
|
705
|
+
}
|
|
706
|
+
function isNonProduction() {
|
|
707
|
+
if (isNodeEnvironment()) {
|
|
708
|
+
return process.env.NODE_ENV !== "production";
|
|
709
|
+
}
|
|
710
|
+
return !isProduction();
|
|
711
|
+
}
|
|
712
|
+
function detectProtocol(req) {
|
|
713
|
+
if (isBrowserEnvironment()) {
|
|
714
|
+
if (typeof location !== "undefined") {
|
|
715
|
+
return location.protocol === "https:" ? "https" : "http";
|
|
716
|
+
}
|
|
717
|
+
return "https";
|
|
718
|
+
}
|
|
719
|
+
if (req) {
|
|
720
|
+
const forwardedProto = req.get?.("X-Forwarded-Proto") || req.headers?.["x-forwarded-proto"];
|
|
721
|
+
const forwardedProtocol = req.get?.("X-Forwarded-Protocol") || req.headers?.["x-forwarded-protocol"];
|
|
722
|
+
const urlScheme = req.get?.("X-Url-Scheme") || req.headers?.["x-url-scheme"];
|
|
723
|
+
const frontEndHttps = req.get?.("Front-End-Https") || req.headers?.["front-end-https"];
|
|
724
|
+
const cloudflareVisitor = req.get?.("CF-Visitor") || req.headers?.["cf-visitor"];
|
|
725
|
+
if (forwardedProto) {
|
|
726
|
+
return forwardedProto.split(",")[0].trim().toLowerCase();
|
|
727
|
+
}
|
|
728
|
+
if (forwardedProtocol) {
|
|
729
|
+
return forwardedProtocol.toLowerCase();
|
|
730
|
+
}
|
|
731
|
+
if (urlScheme) {
|
|
732
|
+
return urlScheme.toLowerCase();
|
|
733
|
+
}
|
|
734
|
+
if (frontEndHttps === "on") {
|
|
735
|
+
return "https";
|
|
736
|
+
}
|
|
737
|
+
if (cloudflareVisitor) {
|
|
738
|
+
try {
|
|
739
|
+
const visitor = JSON.parse(cloudflareVisitor);
|
|
740
|
+
if (visitor.scheme) {
|
|
741
|
+
return visitor.scheme.toLowerCase();
|
|
742
|
+
}
|
|
743
|
+
} catch (_e) {
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
if (req.protocol) return req.protocol;
|
|
747
|
+
if (req.secure) return "https";
|
|
748
|
+
}
|
|
749
|
+
return "http";
|
|
750
|
+
}
|
|
751
|
+
function detectHostname(req) {
|
|
752
|
+
if (isBrowserEnvironment()) {
|
|
753
|
+
if (typeof location !== "undefined") {
|
|
754
|
+
return location.hostname;
|
|
755
|
+
}
|
|
756
|
+
return "localhost";
|
|
757
|
+
}
|
|
758
|
+
if (req) {
|
|
759
|
+
const forwardedHost = req.get?.("X-Forwarded-Host") || req.headers?.["x-forwarded-host"];
|
|
760
|
+
const originalHost = req.get?.("X-Original-Host") || req.headers?.["x-original-host"];
|
|
761
|
+
const host = req.get?.("Host") || req.headers?.["host"];
|
|
762
|
+
if (forwardedHost) {
|
|
763
|
+
return forwardedHost.split(",")[0].trim().split(":")[0];
|
|
764
|
+
}
|
|
765
|
+
if (originalHost) {
|
|
766
|
+
return originalHost.split(":")[0];
|
|
767
|
+
}
|
|
768
|
+
if (host) {
|
|
769
|
+
return host.split(":")[0];
|
|
770
|
+
}
|
|
771
|
+
if (req.hostname) return req.hostname;
|
|
772
|
+
}
|
|
773
|
+
return "localhost";
|
|
774
|
+
}
|
|
775
|
+
function isLocalhost(hostname) {
|
|
776
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname.endsWith(".localhost") || hostname.endsWith(".local");
|
|
777
|
+
}
|
|
778
|
+
function isPrivateIP(hostname) {
|
|
779
|
+
const ipv4Patterns = [
|
|
780
|
+
/^10\./,
|
|
781
|
+
// 10.0.0.0/8
|
|
782
|
+
/^172\.(1[6-9]|2[0-9]|3[0-1])\./,
|
|
783
|
+
// 172.16.0.0/12
|
|
784
|
+
/^192\.168\./,
|
|
785
|
+
// 192.168.0.0/16
|
|
786
|
+
/^127\./
|
|
787
|
+
// 127.0.0.0/8 (loopback)
|
|
788
|
+
];
|
|
789
|
+
const ipv6Patterns = [
|
|
790
|
+
/^::1$/,
|
|
791
|
+
// IPv6 loopback
|
|
792
|
+
/^fc[0-9a-f]{2}:/i,
|
|
793
|
+
// Unique local addresses
|
|
794
|
+
/^fd[0-9a-f]{2}:/i,
|
|
795
|
+
// Unique local addresses
|
|
796
|
+
/^fe80:/i
|
|
797
|
+
// Link-local addresses
|
|
798
|
+
];
|
|
799
|
+
return ipv4Patterns.some((pattern) => pattern.test(hostname)) || ipv6Patterns.some((pattern) => pattern.test(hostname)) || isLocalhost(hostname);
|
|
800
|
+
}
|
|
801
|
+
function getEnvironmentInfo(req) {
|
|
802
|
+
const platform = isNodeEnvironment() ? "node" : isBrowserEnvironment() ? "browser" : "unknown";
|
|
803
|
+
let environment = "production";
|
|
804
|
+
if (isNodeEnvironment()) {
|
|
805
|
+
const nodeEnv = process.env.NODE_ENV;
|
|
806
|
+
if (nodeEnv === "development" || nodeEnv === "test") {
|
|
807
|
+
environment = nodeEnv;
|
|
808
|
+
}
|
|
809
|
+
} else if (isDevelopment()) {
|
|
810
|
+
environment = "development";
|
|
811
|
+
}
|
|
812
|
+
const protocol = detectProtocol(req);
|
|
813
|
+
const hostname = detectHostname(req);
|
|
814
|
+
const info = {
|
|
815
|
+
platform,
|
|
816
|
+
environment,
|
|
817
|
+
protocol,
|
|
818
|
+
hostname
|
|
819
|
+
};
|
|
820
|
+
if (isBrowserEnvironment() && typeof navigator !== "undefined") {
|
|
821
|
+
info.userAgent = navigator.userAgent;
|
|
822
|
+
}
|
|
823
|
+
const criteria = {
|
|
824
|
+
isLocalhost: isLocalhost(hostname),
|
|
825
|
+
isPrivateIP: isPrivateIP(hostname),
|
|
826
|
+
isDevelopmentPort: false,
|
|
827
|
+
hasDevtools: false
|
|
828
|
+
};
|
|
829
|
+
if (isBrowserEnvironment() && typeof location !== "undefined") {
|
|
830
|
+
const port = parseInt(location.port || "80");
|
|
831
|
+
criteria.isDevelopmentPort = port >= 3e3 && port <= 9999;
|
|
832
|
+
criteria.hasDevtools = !!(typeof window !== "undefined" && window.__VUE_DEVTOOLS_GLOBAL_HOOK__);
|
|
833
|
+
}
|
|
834
|
+
if (isNodeEnvironment()) {
|
|
835
|
+
criteria.nodeEnv = process.env.NODE_ENV || "undefined";
|
|
836
|
+
}
|
|
837
|
+
info.criteria = criteria;
|
|
838
|
+
return info;
|
|
839
|
+
}
|
|
840
|
+
var isNode = isNodeEnvironment;
|
|
841
|
+
var isBrowser = isBrowserEnvironment;
|
|
842
|
+
function parseEnvValue(value) {
|
|
843
|
+
if (value === void 0 || value === null || value === "") {
|
|
844
|
+
return void 0;
|
|
845
|
+
}
|
|
846
|
+
const trimmed = value.trim();
|
|
847
|
+
if (trimmed === "null") return null;
|
|
848
|
+
if (trimmed === "undefined") return void 0;
|
|
849
|
+
const lowerValue = trimmed.toLowerCase();
|
|
850
|
+
if (lowerValue === "true" || lowerValue === "yes") return true;
|
|
851
|
+
if (lowerValue === "false" || lowerValue === "no") return false;
|
|
852
|
+
if (trimmed === "1") return true;
|
|
853
|
+
if (trimmed === "0") return false;
|
|
854
|
+
if (/^-?\d+\.?\d*$/.test(trimmed)) {
|
|
855
|
+
if (trimmed.length > 1 && trimmed[0] === "0" && trimmed[1] !== ".") {
|
|
856
|
+
return trimmed;
|
|
857
|
+
}
|
|
858
|
+
const num = Number(trimmed);
|
|
859
|
+
if (!isNaN(num)) return num;
|
|
860
|
+
}
|
|
861
|
+
if (trimmed.startsWith("[") && trimmed.endsWith("]") || trimmed.startsWith("{") && trimmed.endsWith("}")) {
|
|
862
|
+
try {
|
|
863
|
+
return JSON.parse(trimmed);
|
|
864
|
+
} catch {
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
if (trimmed.includes(",")) {
|
|
868
|
+
const parts = trimmed.split(",").map((s) => s.trim());
|
|
869
|
+
if (parts.every((p) => p.length > 0)) {
|
|
870
|
+
return parts;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
return trimmed;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// src/universal/environment-detection.ts
|
|
877
|
+
var isBrowserEnv = isBrowserEnvironment;
|
|
878
|
+
var isNodeEnv = isNodeEnvironment;
|
|
879
|
+
var isWorkerEnvironment = () => {
|
|
880
|
+
try {
|
|
881
|
+
return typeof importScripts === "function" && typeof self !== "undefined" && // Check for Worker global scope without importing types
|
|
882
|
+
"importScripts" in self;
|
|
883
|
+
} catch {
|
|
884
|
+
return false;
|
|
885
|
+
}
|
|
886
|
+
};
|
|
887
|
+
var isWebCryptoAvailable = () => {
|
|
888
|
+
try {
|
|
889
|
+
return typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function" && typeof crypto.subtle === "object";
|
|
890
|
+
} catch {
|
|
891
|
+
return false;
|
|
892
|
+
}
|
|
893
|
+
};
|
|
894
|
+
var isNodeCryptoAvailable = () => {
|
|
895
|
+
try {
|
|
896
|
+
if (!isNodeEnv()) return false;
|
|
897
|
+
const crypto2 = require("crypto");
|
|
898
|
+
return typeof crypto2.createHash === "function" && typeof crypto2.randomBytes === "function";
|
|
899
|
+
} catch {
|
|
900
|
+
return false;
|
|
901
|
+
}
|
|
902
|
+
};
|
|
903
|
+
var getEnvironmentType = () => {
|
|
904
|
+
if (isNodeEnv()) return "node";
|
|
905
|
+
if (isWorkerEnvironment()) return "worker";
|
|
906
|
+
if (isBrowserEnv()) return "browser";
|
|
907
|
+
return "unknown";
|
|
908
|
+
};
|
|
909
|
+
var getCryptoCapabilities = () => {
|
|
910
|
+
return {
|
|
911
|
+
webCrypto: isWebCryptoAvailable(),
|
|
912
|
+
nodeCrypto: isNodeCryptoAvailable(),
|
|
913
|
+
fallbackOnly: !isWebCryptoAvailable() && !isNodeCryptoAvailable(),
|
|
914
|
+
environment: getEnvironmentType()
|
|
915
|
+
};
|
|
916
|
+
};
|
|
917
|
+
|
|
918
|
+
// src/strings.ts
|
|
919
|
+
var strings_exports = {};
|
|
920
|
+
__export(strings_exports, {
|
|
921
|
+
capitalizeEachWord: () => capitalizeEachWord,
|
|
922
|
+
capitalizeFirst: () => capitalizeFirst,
|
|
923
|
+
cleanJsonChars: () => cleanJsonChars,
|
|
924
|
+
contains: () => contains,
|
|
925
|
+
countOccurrences: () => countOccurrences,
|
|
926
|
+
endsWith: () => endsWith,
|
|
927
|
+
ensureEndsWith: () => ensureEndsWith,
|
|
928
|
+
ensureStartsWith: () => ensureStartsWith,
|
|
929
|
+
envKeyToPath: () => envKeyToPath,
|
|
930
|
+
escapeHtmlChars: () => escapeHtmlChars,
|
|
931
|
+
isEmail: () => isEmail,
|
|
932
|
+
isEmpty: () => isEmpty,
|
|
933
|
+
matchPathPattern: () => matchPathPattern,
|
|
934
|
+
padEnd: () => padEnd,
|
|
935
|
+
padStart: () => padStart,
|
|
936
|
+
pathToEnvKey: () => pathToEnvKey,
|
|
937
|
+
removeAccents: () => removeAccents,
|
|
938
|
+
repeatString: () => repeatString,
|
|
939
|
+
replaceAllOccurrences: () => replaceAllOccurrences,
|
|
940
|
+
reverseString: () => reverseString,
|
|
941
|
+
sanitizeString: () => sanitizeString,
|
|
942
|
+
startsWith: () => startsWith,
|
|
943
|
+
stripFromEnd: () => stripFromEnd,
|
|
944
|
+
stripFromStart: () => stripFromStart,
|
|
945
|
+
toCamelCase: () => toCamelCase,
|
|
946
|
+
toKebabCase: () => toKebabCase,
|
|
947
|
+
toLowerCase: () => toLowerCase,
|
|
948
|
+
toPascalCase: () => toPascalCase,
|
|
949
|
+
toSnakeCase: () => toSnakeCase,
|
|
950
|
+
toUpperCase: () => toUpperCase,
|
|
951
|
+
toUrlSlug: () => toUrlSlug,
|
|
952
|
+
trim: () => trim,
|
|
953
|
+
trimEnd: () => trimEnd,
|
|
954
|
+
trimStart: () => trimStart,
|
|
955
|
+
truncateString: () => truncateString,
|
|
956
|
+
unescapeHtmlChars: () => unescapeHtmlChars,
|
|
957
|
+
unescapeUnicode: () => unescapeUnicode
|
|
958
|
+
});
|
|
959
|
+
var sanitizeString = (instr) => {
|
|
960
|
+
if (!instr) return "";
|
|
961
|
+
return addDash(instr.replace(/[^a-zA-Z0-9 ]/g, "")).toLowerCase();
|
|
962
|
+
};
|
|
963
|
+
function addDash(str) {
|
|
964
|
+
const str2 = str.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>{}[\]\\/]/gi, "");
|
|
965
|
+
return str2.replace(/ /g, "-");
|
|
966
|
+
}
|
|
967
|
+
var cleanJsonChars = (texto) => {
|
|
968
|
+
if (!texto) return "";
|
|
969
|
+
return texto.replace(/({|}|&|amp;|gt;)/g, "");
|
|
970
|
+
};
|
|
971
|
+
var truncateString = (str, maxlength = 80, suffix = "...") => {
|
|
972
|
+
if (!str) return "";
|
|
973
|
+
return str.length > maxlength ? str.substring(0, maxlength) + suffix : str;
|
|
974
|
+
};
|
|
975
|
+
var unescapeUnicode = (input) => {
|
|
976
|
+
return JSON.stringify(JSON.parse(`"${input}"`)).replace(/^"(.*)"$/, "$1");
|
|
977
|
+
};
|
|
978
|
+
var ensureEndsWith = (str, trailing) => {
|
|
979
|
+
return str.endsWith(trailing) ? str : `${str}${trailing}`;
|
|
980
|
+
};
|
|
981
|
+
var stripFromEnd = (str, trailing) => {
|
|
982
|
+
return str.endsWith(trailing) ? str.slice(0, -1 * trailing.length) : str;
|
|
983
|
+
};
|
|
984
|
+
var ensureStartsWith = (str, leading) => {
|
|
985
|
+
return str.startsWith(leading) ? str : `${leading}${str}`;
|
|
986
|
+
};
|
|
987
|
+
var stripFromStart = (str, leading) => {
|
|
988
|
+
return str.startsWith(leading) ? str.slice(leading.length) : str;
|
|
989
|
+
};
|
|
990
|
+
var toLowerCase = (str) => {
|
|
991
|
+
return str.toLowerCase();
|
|
992
|
+
};
|
|
993
|
+
var toUpperCase = (str) => {
|
|
994
|
+
return str.toUpperCase();
|
|
995
|
+
};
|
|
996
|
+
var capitalizeFirst = (str) => {
|
|
997
|
+
if (!str) return "";
|
|
998
|
+
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
999
|
+
};
|
|
1000
|
+
var capitalizeEachWord = (str) => {
|
|
1001
|
+
if (!str) return "";
|
|
1002
|
+
return str.split(" ").map((word) => capitalizeFirst(word)).join(" ");
|
|
1003
|
+
};
|
|
1004
|
+
var toCamelCase = (str) => {
|
|
1005
|
+
if (!str) return "";
|
|
1006
|
+
const words = str.replace(/([a-z])([A-Z])/g, "$1 $2").split(/[-_\s]+/).filter((word) => word.length > 0).map((word) => word.toLowerCase());
|
|
1007
|
+
if (words.length === 0) return "";
|
|
1008
|
+
return words[0] + words.slice(1).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
|
|
1009
|
+
};
|
|
1010
|
+
var toSnakeCase = (str) => {
|
|
1011
|
+
if (!str) return "";
|
|
1012
|
+
return str.replace(/\W+/g, " ").split(/ |\B(?=[A-Z])/).map((word) => word.toLowerCase()).join("_");
|
|
1013
|
+
};
|
|
1014
|
+
var toKebabCase = (str) => {
|
|
1015
|
+
if (!str) return "";
|
|
1016
|
+
return str.replace(/[_\s]+/g, "-").replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
1017
|
+
};
|
|
1018
|
+
var toPascalCase = (str) => {
|
|
1019
|
+
if (!str) return "";
|
|
1020
|
+
return str.replace(/[-_\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : "").replace(/^./, (char) => char.toUpperCase());
|
|
1021
|
+
};
|
|
1022
|
+
var contains = (str, searchStr, caseSensitive = false) => {
|
|
1023
|
+
if (caseSensitive) {
|
|
1024
|
+
return str.includes(searchStr);
|
|
1025
|
+
}
|
|
1026
|
+
return str.toLowerCase().includes(searchStr.toLowerCase());
|
|
1027
|
+
};
|
|
1028
|
+
var startsWith = (str, searchStr, caseSensitive = false) => {
|
|
1029
|
+
if (caseSensitive) {
|
|
1030
|
+
return str.startsWith(searchStr);
|
|
1031
|
+
}
|
|
1032
|
+
return str.toLowerCase().startsWith(searchStr.toLowerCase());
|
|
1033
|
+
};
|
|
1034
|
+
var endsWith = (str, searchStr, caseSensitive = false) => {
|
|
1035
|
+
if (caseSensitive) {
|
|
1036
|
+
return str.endsWith(searchStr);
|
|
1037
|
+
}
|
|
1038
|
+
return str.toLowerCase().endsWith(searchStr.toLowerCase());
|
|
1039
|
+
};
|
|
1040
|
+
var padStart = (str, length, padChar = " ") => {
|
|
1041
|
+
return str.padStart(length, padChar);
|
|
1042
|
+
};
|
|
1043
|
+
var padEnd = (str, length, padChar = " ") => {
|
|
1044
|
+
if (str.length >= length) return str;
|
|
1045
|
+
return str + padChar.repeat(length - str.length);
|
|
1046
|
+
};
|
|
1047
|
+
var trim = (str) => {
|
|
1048
|
+
return str.trim();
|
|
1049
|
+
};
|
|
1050
|
+
var trimStart = (str) => {
|
|
1051
|
+
return str.trimStart();
|
|
1052
|
+
};
|
|
1053
|
+
var trimEnd = (str) => {
|
|
1054
|
+
return str.trimEnd();
|
|
1055
|
+
};
|
|
1056
|
+
var reverseString = (str) => {
|
|
1057
|
+
return str.split("").reverse().join("");
|
|
1058
|
+
};
|
|
1059
|
+
var repeatString = (str, times) => {
|
|
1060
|
+
return str.repeat(times);
|
|
1061
|
+
};
|
|
1062
|
+
var replaceAllOccurrences = (str, searchStr, replaceStr) => {
|
|
1063
|
+
return str.split(searchStr).join(replaceStr);
|
|
1064
|
+
};
|
|
1065
|
+
var countOccurrences = (str, searchStr) => {
|
|
1066
|
+
if (!searchStr) return 0;
|
|
1067
|
+
let count = 0;
|
|
1068
|
+
let position = 0;
|
|
1069
|
+
while ((position = str.indexOf(searchStr, position)) !== -1) {
|
|
1070
|
+
count++;
|
|
1071
|
+
position += 1;
|
|
1072
|
+
}
|
|
1073
|
+
return count;
|
|
1074
|
+
};
|
|
1075
|
+
var isEmpty = (str) => {
|
|
1076
|
+
return !str || str.trim().length === 0;
|
|
1077
|
+
};
|
|
1078
|
+
var isEmail = (str) => {
|
|
1079
|
+
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
1080
|
+
return re.test(str.toLowerCase());
|
|
1081
|
+
};
|
|
1082
|
+
var toUrlSlug = (str) => {
|
|
1083
|
+
return str.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
1084
|
+
};
|
|
1085
|
+
var removeAccents = (str) => {
|
|
1086
|
+
return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
1087
|
+
};
|
|
1088
|
+
var escapeHtmlChars = (str) => {
|
|
1089
|
+
const htmlEscapes = {
|
|
1090
|
+
"&": "&",
|
|
1091
|
+
"<": "<",
|
|
1092
|
+
">": ">",
|
|
1093
|
+
'"': """,
|
|
1094
|
+
"'": "'"
|
|
1095
|
+
};
|
|
1096
|
+
return str.replace(/[&<>"']/g, (match) => htmlEscapes[match]);
|
|
1097
|
+
};
|
|
1098
|
+
var unescapeHtmlChars = (str) => {
|
|
1099
|
+
const htmlUnescapes = {
|
|
1100
|
+
"&": "&",
|
|
1101
|
+
"<": "<",
|
|
1102
|
+
">": ">",
|
|
1103
|
+
""": '"',
|
|
1104
|
+
"'": "'"
|
|
1105
|
+
};
|
|
1106
|
+
return str.replace(/&|<|>|"|'/g, (match) => htmlUnescapes[match]);
|
|
1107
|
+
};
|
|
1108
|
+
function matchPathPattern(path, pattern) {
|
|
1109
|
+
if (!path || typeof path !== "string" || !pattern || typeof pattern !== "string") {
|
|
1110
|
+
return false;
|
|
1111
|
+
}
|
|
1112
|
+
if (path === pattern) {
|
|
1113
|
+
return true;
|
|
1114
|
+
}
|
|
1115
|
+
if (!pattern.includes("*")) {
|
|
1116
|
+
return path === pattern;
|
|
1117
|
+
}
|
|
1118
|
+
const regexPattern = pattern.split(".").map((segment) => {
|
|
1119
|
+
if (segment === "*") {
|
|
1120
|
+
return "[^.]+";
|
|
1121
|
+
}
|
|
1122
|
+
return segment.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1123
|
+
}).join("\\.");
|
|
1124
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
1125
|
+
return regex.test(path);
|
|
1126
|
+
}
|
|
1127
|
+
function envKeyToPath(envKey, prefix = "NX") {
|
|
1128
|
+
if (!envKey || typeof envKey !== "string") {
|
|
1129
|
+
return "";
|
|
1130
|
+
}
|
|
1131
|
+
let key = envKey.trim();
|
|
1132
|
+
if (prefix && key.startsWith(`${prefix}_`)) {
|
|
1133
|
+
key = key.substring(prefix.length + 1);
|
|
1134
|
+
}
|
|
1135
|
+
return key.toLowerCase().replace(/_/g, ".");
|
|
1136
|
+
}
|
|
1137
|
+
function pathToEnvKey(path, prefix = "NX") {
|
|
1138
|
+
if (!path || typeof path !== "string") {
|
|
1139
|
+
return "";
|
|
1140
|
+
}
|
|
1141
|
+
const key = path.trim().toUpperCase().replace(/\./g, "_");
|
|
1142
|
+
if (key.length === 0) {
|
|
1143
|
+
return "";
|
|
1144
|
+
}
|
|
1145
|
+
if (prefix && prefix.length > 0) {
|
|
1146
|
+
return `${prefix.toUpperCase()}_${key}`;
|
|
1147
|
+
}
|
|
1148
|
+
return key;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
// src/objects.ts
|
|
1152
|
+
var objects_exports = {};
|
|
1153
|
+
__export(objects_exports, {
|
|
1154
|
+
calculateDifferences: () => calculateDifferences,
|
|
1155
|
+
comparator: () => comparator,
|
|
1156
|
+
deepEqual: () => deepEqual,
|
|
1157
|
+
deleteArrayElementsBy: () => deleteArrayElementsBy,
|
|
1158
|
+
formatToReadableString: () => formatToReadableString,
|
|
1159
|
+
generateCrcHash: () => generateCrcHash,
|
|
1160
|
+
getDeepValue: () => getDeepValue,
|
|
1161
|
+
getShallowProperties: () => getShallowProperties,
|
|
1162
|
+
hasSameType: () => hasSameType,
|
|
1163
|
+
setDeepValue: () => setDeepValue,
|
|
1164
|
+
updateArrayElementById: () => updateArrayElementById,
|
|
1165
|
+
updateArrayElementsBy: () => updateArrayElementsBy
|
|
1166
|
+
});
|
|
1167
|
+
var import_crc32 = __toESM(require("crc/crc32"));
|
|
1168
|
+
var lodash = __toESM(require("lodash"));
|
|
1169
|
+
var import_fast_deep_equal = __toESM(require("fast-deep-equal"));
|
|
1170
|
+
|
|
1171
|
+
// src/dates.ts
|
|
1172
|
+
var dates_exports = {};
|
|
1173
|
+
__export(dates_exports, {
|
|
1174
|
+
addDays: () => addDays,
|
|
1175
|
+
addMonths: () => addMonths,
|
|
1176
|
+
addNowDays: () => addNowDays,
|
|
1177
|
+
addNowMonths: () => addNowMonths,
|
|
1178
|
+
addNowSeconds: () => addNowSeconds,
|
|
1179
|
+
addNowYears: () => addNowYears,
|
|
1180
|
+
addSeconds: () => addSeconds,
|
|
1181
|
+
addYears: () => addYears,
|
|
1182
|
+
areDatesEqualWithTolerance: () => areDatesEqualWithTolerance,
|
|
1183
|
+
dayOfWeek: () => dayOfWeek,
|
|
1184
|
+
diffBusinessDays: () => diffBusinessDays,
|
|
1185
|
+
diffDays: () => diffDays,
|
|
1186
|
+
diffMilliSeconds: () => diffMilliSeconds,
|
|
1187
|
+
diffMonths: () => diffMonths,
|
|
1188
|
+
diffYears: () => diffYears,
|
|
1189
|
+
excelToDate: () => excelToDate,
|
|
1190
|
+
format: () => format,
|
|
1191
|
+
formatForMysql: () => formatForMysql,
|
|
1192
|
+
formatNow: () => formatNow,
|
|
1193
|
+
fromNow: () => fromNow,
|
|
1194
|
+
getFirstDayOfYear: () => getFirstDayOfYear,
|
|
1195
|
+
getFirstWorkdayAfterMonths: () => getFirstWorkdayAfterMonths,
|
|
1196
|
+
getFirstWorkdayOfMonth: () => getFirstWorkdayOfMonth,
|
|
1197
|
+
getLastDayOfYear: () => getLastDayOfYear,
|
|
1198
|
+
getLastWorkdayOfMonth: () => getLastWorkdayOfMonth,
|
|
1199
|
+
isDateTime: () => isDateTime,
|
|
1200
|
+
isEqualsDateTimeByDay: () => isEqualsDateTimeByDay,
|
|
1201
|
+
isExpired: () => isExpired,
|
|
1202
|
+
isNew: () => isNew,
|
|
1203
|
+
isWeekday: () => isWeekday,
|
|
1204
|
+
longString: () => longString,
|
|
1205
|
+
now: () => now,
|
|
1206
|
+
toDate: () => toDate,
|
|
1207
|
+
toDateFromString: () => toDateFromString,
|
|
1208
|
+
toISO: () => toISO,
|
|
1209
|
+
weekOfYear: () => weekOfYear
|
|
1210
|
+
});
|
|
1211
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
1212
|
+
var import_utc = __toESM(require("dayjs/plugin/utc.js"));
|
|
1213
|
+
var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"));
|
|
1214
|
+
var import_weekOfYear = __toESM(require("dayjs/plugin/weekOfYear.js"));
|
|
1215
|
+
var import_customParseFormat = __toESM(require("dayjs/plugin/customParseFormat.js"));
|
|
1216
|
+
var import_isSameOrAfter = __toESM(require("dayjs/plugin/isSameOrAfter.js"));
|
|
1217
|
+
var import_isSameOrBefore = __toESM(require("dayjs/plugin/isSameOrBefore.js"));
|
|
1218
|
+
var import_weekday = __toESM(require("dayjs/plugin/weekday.js"));
|
|
1219
|
+
var import_localeData = __toESM(require("dayjs/plugin/localeData.js"));
|
|
1220
|
+
var import_localizedFormat = __toESM(require("dayjs/plugin/localizedFormat.js"));
|
|
1221
|
+
var import_es = require("dayjs/locale/es.js");
|
|
1222
|
+
var dateValidator = __toESM(require("iso-datestring-validator"));
|
|
1223
|
+
var { isValidDate, isValidISODateString } = dateValidator;
|
|
1224
|
+
import_dayjs.default.extend(import_utc.default);
|
|
1225
|
+
import_dayjs.default.extend(import_relativeTime.default);
|
|
1226
|
+
import_dayjs.default.extend(import_weekOfYear.default);
|
|
1227
|
+
import_dayjs.default.extend(import_customParseFormat.default);
|
|
1228
|
+
import_dayjs.default.extend(import_isSameOrAfter.default);
|
|
1229
|
+
import_dayjs.default.extend(import_isSameOrBefore.default);
|
|
1230
|
+
import_dayjs.default.extend(import_weekday.default);
|
|
1231
|
+
import_dayjs.default.extend(import_localeData.default);
|
|
1232
|
+
import_dayjs.default.extend(import_localizedFormat.default);
|
|
1233
|
+
import_dayjs.default.locale("es");
|
|
1234
|
+
var formatNow = (formatStr = "DD/MM/YYYY") => (0, import_dayjs.default)().format(formatStr);
|
|
1235
|
+
var format = (value, formatStr = "DD/MM/YYYY") => {
|
|
1236
|
+
if (!value) return "";
|
|
1237
|
+
if (formatStr.toLowerCase() === "gg") return weekOfYear(value);
|
|
1238
|
+
else if (formatStr.toLowerCase() === "gggg") return (0, import_dayjs.default)(value).format("YY") + weekOfYear(value);
|
|
1239
|
+
return (0, import_dayjs.default)(value).format(formatStr);
|
|
1240
|
+
};
|
|
1241
|
+
var longString = (value = null) => {
|
|
1242
|
+
if (!value) return "";
|
|
1243
|
+
return (0, import_dayjs.default)(value).format("LL");
|
|
1244
|
+
};
|
|
1245
|
+
var toDate = (value, isUtc) => {
|
|
1246
|
+
if (isUtc === void 0) return (0, import_dayjs.default)(value).toDate();
|
|
1247
|
+
return isUtc ? import_dayjs.default.utc(value).toDate() : (0, import_dayjs.default)(value).toDate();
|
|
1248
|
+
};
|
|
1249
|
+
var toDateFromString = (dateString, format2) => {
|
|
1250
|
+
const formatRegex = {
|
|
1251
|
+
"DD/MM/YYYY": /^(\d{2})\/(\d{2})\/(\d{4})$/,
|
|
1252
|
+
"YYYY-MM-DD": /^(\d{4})-(\d{2})-(\d{2})$/,
|
|
1253
|
+
"MM/DD/YYYY": /^(\d{2})\/(\d{2})\/(\d{4})$/,
|
|
1254
|
+
"YYYY/MM/DD": /^(\d{4})\/(\d{2})\/(\d{2})$/,
|
|
1255
|
+
"DD-MM-YYYY": /^(\d{2})-(\d{2})-(\d{4})$/,
|
|
1256
|
+
"MM-DD-YYYY": /^(\d{2})-(\d{2})-(\d{4})$/,
|
|
1257
|
+
YYYYMMDD: /^(\d{4})(\d{2})(\d{2})$/,
|
|
1258
|
+
DDMMYYYY: /^(\d{2})(\d{2})(\d{4})$/,
|
|
1259
|
+
MMDDYYYY: /^(\d{2})(\d{2})(\d{4})$/,
|
|
1260
|
+
"YYYY.MM.DD": /^(\d{4})\.(\d{2})\.(\d{2})$/,
|
|
1261
|
+
"DD.MM.YYYY": /^(\d{2})\.(\d{2})\.(\d{4})$/,
|
|
1262
|
+
"MM.DD.YYYY": /^(\d{2})\.(\d{2})\.(\d{4})$/
|
|
1263
|
+
};
|
|
1264
|
+
const regex = formatRegex[format2];
|
|
1265
|
+
if (!regex) return null;
|
|
1266
|
+
const match = dateString.match(regex);
|
|
1267
|
+
if (match) {
|
|
1268
|
+
let year, month, day;
|
|
1269
|
+
if (format2.startsWith("YYYY")) {
|
|
1270
|
+
year = parseInt(match[1], 10);
|
|
1271
|
+
month = parseInt(match[2], 10) - 1;
|
|
1272
|
+
day = parseInt(match[3], 10);
|
|
1273
|
+
} else if (format2.startsWith("DD")) {
|
|
1274
|
+
day = parseInt(match[1], 10);
|
|
1275
|
+
month = parseInt(match[2], 10) - 1;
|
|
1276
|
+
year = parseInt(match[3], 10);
|
|
1277
|
+
} else if (format2.startsWith("MM")) {
|
|
1278
|
+
month = parseInt(match[1], 10) - 1;
|
|
1279
|
+
day = parseInt(match[2], 10);
|
|
1280
|
+
year = parseInt(match[3], 10);
|
|
1281
|
+
} else {
|
|
1282
|
+
return null;
|
|
1283
|
+
}
|
|
1284
|
+
return new Date(year, month, day);
|
|
1285
|
+
}
|
|
1286
|
+
return null;
|
|
1287
|
+
};
|
|
1288
|
+
var now = () => (0, import_dayjs.default)().toDate();
|
|
1289
|
+
var isNew = (value, daysnew = 1) => (0, import_dayjs.default)().isSameOrBefore((0, import_dayjs.default)(value).add(daysnew, "days"));
|
|
1290
|
+
var toISO = (value = null, isUtc = false) => {
|
|
1291
|
+
if (!value) return (0, import_dayjs.default)().toISOString();
|
|
1292
|
+
return isUtc ? import_dayjs.default.utc(value).toISOString() : (0, import_dayjs.default)(value).toISOString();
|
|
1293
|
+
};
|
|
1294
|
+
var fromNow = (value) => (0, import_dayjs.default)(value).fromNow();
|
|
1295
|
+
var dayOfWeek = (value = null) => {
|
|
1296
|
+
if (!value) return (0, import_dayjs.default)().format("d");
|
|
1297
|
+
return (0, import_dayjs.default)(value).format("d");
|
|
1298
|
+
};
|
|
1299
|
+
var weekOfYear = (value = null) => {
|
|
1300
|
+
if (!value) return (0, import_dayjs.default)().locale("es").week().toString().padStart(2, "0");
|
|
1301
|
+
return (0, import_dayjs.default)(value).locale("es").week().toString().padStart(2, "0");
|
|
1302
|
+
};
|
|
1303
|
+
var diffDays = (start, end = null, precise = false) => {
|
|
1304
|
+
const v2 = !end ? (0, import_dayjs.default)() : (0, import_dayjs.default)(end);
|
|
1305
|
+
return (0, import_dayjs.default)(start).diff(v2, "days", precise);
|
|
1306
|
+
};
|
|
1307
|
+
var diffBusinessDays = (start, end = null, precise = false) => {
|
|
1308
|
+
let startDate = (0, import_dayjs.default)(start).startOf("day");
|
|
1309
|
+
let endDate = end ? (0, import_dayjs.default)(end).startOf("day") : (0, import_dayjs.default)().startOf("day");
|
|
1310
|
+
if (startDate.isAfter(endDate)) {
|
|
1311
|
+
;
|
|
1312
|
+
[startDate, endDate] = [endDate, startDate];
|
|
1313
|
+
}
|
|
1314
|
+
let businessDays = 0;
|
|
1315
|
+
let currentDate = startDate;
|
|
1316
|
+
while (currentDate.isBefore(endDate)) {
|
|
1317
|
+
if (isWeekday(currentDate)) {
|
|
1318
|
+
businessDays++;
|
|
1319
|
+
}
|
|
1320
|
+
currentDate = currentDate.add(1, "day");
|
|
1321
|
+
}
|
|
1322
|
+
if (precise) {
|
|
1323
|
+
const fractionalDay = endDate.diff(currentDate, "hours") / 24;
|
|
1324
|
+
businessDays += fractionalDay;
|
|
1325
|
+
}
|
|
1326
|
+
return businessDays;
|
|
1327
|
+
};
|
|
1328
|
+
var diffMonths = (value, valueRefOrNow = null, precise = false) => {
|
|
1329
|
+
const v2 = !valueRefOrNow ? (0, import_dayjs.default)() : (0, import_dayjs.default)(valueRefOrNow);
|
|
1330
|
+
return (0, import_dayjs.default)(value).diff(v2, "months", precise);
|
|
1331
|
+
};
|
|
1332
|
+
var diffYears = (value, valueRefOrNow = null, precise = false) => {
|
|
1333
|
+
const v2 = !valueRefOrNow ? (0, import_dayjs.default)() : (0, import_dayjs.default)(valueRefOrNow);
|
|
1334
|
+
return (0, import_dayjs.default)(value).diff(v2, "years", precise);
|
|
1335
|
+
};
|
|
1336
|
+
var diffMilliSeconds = (value, valueRefOrNow = null) => {
|
|
1337
|
+
const v2 = !valueRefOrNow ? (0, import_dayjs.default)() : (0, import_dayjs.default)(valueRefOrNow);
|
|
1338
|
+
return (0, import_dayjs.default)(value).diff(v2, "milliseconds", true);
|
|
1339
|
+
};
|
|
1340
|
+
var addDays = (value, nDays = 1) => (0, import_dayjs.default)(value).add(nDays, "days").toDate();
|
|
1341
|
+
var addSeconds = (value, nSeconds = 1) => (0, import_dayjs.default)(value).add(nSeconds, "seconds").toDate();
|
|
1342
|
+
var areDatesEqualWithTolerance = (date1, date2) => {
|
|
1343
|
+
const tolerance = 2 * 1e3;
|
|
1344
|
+
return Math.abs((0, import_dayjs.default)(date1).diff((0, import_dayjs.default)(date2))) <= tolerance;
|
|
1345
|
+
};
|
|
1346
|
+
var addNowDays = (nDays = 1) => (0, import_dayjs.default)().add(nDays, "days").toDate();
|
|
1347
|
+
var addNowSeconds = (nSeconds = 60) => (0, import_dayjs.default)().add(nSeconds, "seconds").toDate();
|
|
1348
|
+
var addMonths = (value, nMonths = 1) => (0, import_dayjs.default)(value).add(nMonths, "months").toDate();
|
|
1349
|
+
var addNowMonths = (nMonths = 1) => (0, import_dayjs.default)().add(nMonths, "months").toDate();
|
|
1350
|
+
var addYears = (value, nYears = 1) => (0, import_dayjs.default)(value).add(nYears, "years").toDate();
|
|
1351
|
+
var addNowYears = (nYears = 1) => (0, import_dayjs.default)().add(nYears, "years").toDate();
|
|
1352
|
+
var excelToDate = (value) => {
|
|
1353
|
+
try {
|
|
1354
|
+
const d = Number(value);
|
|
1355
|
+
if (d >= 18e3 && d <= 3e5) return new Date(Math.round((d - 25569) * 86400 * 1e3));
|
|
1356
|
+
return null;
|
|
1357
|
+
} catch (_err) {
|
|
1358
|
+
return null;
|
|
1359
|
+
}
|
|
1360
|
+
};
|
|
1361
|
+
var isDateTime = (value) => {
|
|
1362
|
+
try {
|
|
1363
|
+
if (!value) return false;
|
|
1364
|
+
if (typeof value === "number") return false;
|
|
1365
|
+
else if (typeof value === "boolean") return false;
|
|
1366
|
+
else if (typeof value === "string" && !isValidISODateString(value) && !isValidDate(value) && !isValidDate(value, ""))
|
|
1367
|
+
return false;
|
|
1368
|
+
else if (typeof value === "object" && !(value instanceof Date) && !import_dayjs.default.isDayjs(value))
|
|
1369
|
+
return false;
|
|
1370
|
+
return (0, import_dayjs.default)(value).isValid();
|
|
1371
|
+
} catch (_err) {
|
|
1372
|
+
return false;
|
|
1373
|
+
}
|
|
1374
|
+
};
|
|
1375
|
+
var isEqualsDateTimeByDay = (value1, value2) => {
|
|
1376
|
+
if (!isDateTime(value1)) return false;
|
|
1377
|
+
if (!isDateTime(value2)) return false;
|
|
1378
|
+
return (0, import_dayjs.default)(value1).isSame((0, import_dayjs.default)(value2), "day");
|
|
1379
|
+
};
|
|
1380
|
+
var isExpired = (value, valueRefOrNow = null) => {
|
|
1381
|
+
const v2 = !valueRefOrNow ? (0, import_dayjs.default)() : (0, import_dayjs.default)(valueRefOrNow);
|
|
1382
|
+
if (isDateTime(value)) {
|
|
1383
|
+
return v2.isAfter(value);
|
|
1384
|
+
}
|
|
1385
|
+
return true;
|
|
1386
|
+
};
|
|
1387
|
+
var formatForMysql = (fecha) => {
|
|
1388
|
+
if (!fecha) return null;
|
|
1389
|
+
fecha.setMinutes(fecha.getMinutes() - fecha.getTimezoneOffset());
|
|
1390
|
+
return fecha.toISOString().slice(0, 19).replace("T", " ");
|
|
1391
|
+
};
|
|
1392
|
+
var getFirstWorkdayOfMonth = (month) => {
|
|
1393
|
+
const monthToUse = month === void 0 ? (0, import_dayjs.default)().month() : month;
|
|
1394
|
+
let firstDay = (0, import_dayjs.default)().month(monthToUse).startOf("month");
|
|
1395
|
+
while (firstDay.day() === 0 || firstDay.day() === 6) {
|
|
1396
|
+
firstDay = firstDay.add(1, "day");
|
|
1397
|
+
}
|
|
1398
|
+
return firstDay.toDate();
|
|
1399
|
+
};
|
|
1400
|
+
var getLastWorkdayOfMonth = (month) => {
|
|
1401
|
+
const monthToUse = month === void 0 ? (0, import_dayjs.default)().month() : month;
|
|
1402
|
+
let lastDay = (0, import_dayjs.default)().month(monthToUse).endOf("month");
|
|
1403
|
+
while (lastDay.day() === 0 || lastDay.day() === 6) {
|
|
1404
|
+
lastDay = lastDay.subtract(1, "day");
|
|
1405
|
+
}
|
|
1406
|
+
return lastDay.toDate();
|
|
1407
|
+
};
|
|
1408
|
+
var getFirstWorkdayAfterMonths = (initialDate, n) => {
|
|
1409
|
+
const startDate = (0, import_dayjs.default)(initialDate);
|
|
1410
|
+
const monthsToAdd = n;
|
|
1411
|
+
const targetDate = startDate.add(monthsToAdd, "months");
|
|
1412
|
+
let firstWorkday = targetDate.startOf("month");
|
|
1413
|
+
while (firstWorkday.day() === 0 || firstWorkday.day() === 6) {
|
|
1414
|
+
firstWorkday = firstWorkday.add(1, "day");
|
|
1415
|
+
}
|
|
1416
|
+
return firstWorkday.toDate();
|
|
1417
|
+
};
|
|
1418
|
+
var getFirstDayOfYear = () => (0, import_dayjs.default)().startOf("year").toDate();
|
|
1419
|
+
var getLastDayOfYear = () => (0, import_dayjs.default)().endOf("year").toDate();
|
|
1420
|
+
var isWeekday = (date) => {
|
|
1421
|
+
const d = (0, import_dayjs.default)(date);
|
|
1422
|
+
const dayOfWeek2 = d.day();
|
|
1423
|
+
return dayOfWeek2 !== 0 && dayOfWeek2 !== 6;
|
|
1424
|
+
};
|
|
1425
|
+
|
|
1426
|
+
// src/objects.ts
|
|
1427
|
+
var {
|
|
1428
|
+
isArray,
|
|
1429
|
+
isArrayBuffer,
|
|
1430
|
+
isBoolean,
|
|
1431
|
+
isBuffer,
|
|
1432
|
+
isEqual,
|
|
1433
|
+
isNil,
|
|
1434
|
+
isNumber,
|
|
1435
|
+
isObject,
|
|
1436
|
+
isPlainObject,
|
|
1437
|
+
isString,
|
|
1438
|
+
isTypedArray,
|
|
1439
|
+
transform
|
|
1440
|
+
} = lodash;
|
|
1441
|
+
var nativeFilter = (array, predicate) => {
|
|
1442
|
+
return array.filter((item) => {
|
|
1443
|
+
return Object.keys(predicate).every((key) => item[key] === predicate[key]);
|
|
1444
|
+
});
|
|
1445
|
+
};
|
|
1446
|
+
var nativeAssign = (target, source) => {
|
|
1447
|
+
return Object.assign(target, source);
|
|
1448
|
+
};
|
|
1449
|
+
var nativePick = (object, keys) => {
|
|
1450
|
+
const result = {};
|
|
1451
|
+
keys.forEach((key) => {
|
|
1452
|
+
if (key in object) {
|
|
1453
|
+
result[key] = object[key];
|
|
1454
|
+
}
|
|
1455
|
+
});
|
|
1456
|
+
return result;
|
|
1457
|
+
};
|
|
1458
|
+
var nativeRemove = (array, predicate) => {
|
|
1459
|
+
const removed = [];
|
|
1460
|
+
for (let i = array.length - 1; i >= 0; i--) {
|
|
1461
|
+
if (predicate(array[i])) {
|
|
1462
|
+
removed.unshift(array.splice(i, 1)[0]);
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
return removed;
|
|
1466
|
+
};
|
|
1467
|
+
var comparator = (data1, data2) => isEqual(data1, data2);
|
|
1468
|
+
var deepEqual = (data1, data2) => (0, import_fast_deep_equal.default)(data1, data2);
|
|
1469
|
+
var formatToReadableString = (data) => JSON.stringify(data).replace(/[{}"]/g, "").replace(/,/g, ", ");
|
|
1470
|
+
var getShallowProperties = (obj) => {
|
|
1471
|
+
if (!obj) return {};
|
|
1472
|
+
const topLevelProps = {};
|
|
1473
|
+
for (const prop in obj) {
|
|
1474
|
+
if (Object.hasOwnProperty.call(obj, prop)) {
|
|
1475
|
+
const value = obj[prop];
|
|
1476
|
+
const type = typeof value;
|
|
1477
|
+
if (type !== "object" && type !== "function" || value === null) {
|
|
1478
|
+
topLevelProps[prop] = value;
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
return topLevelProps;
|
|
1483
|
+
};
|
|
1484
|
+
var calculateDifferences = (oldObj, newObj) => {
|
|
1485
|
+
return transform(
|
|
1486
|
+
newObj,
|
|
1487
|
+
(result, value, key) => {
|
|
1488
|
+
const oldValue = oldObj[key];
|
|
1489
|
+
if (isDateTime(value) && isDateTime(oldValue)) {
|
|
1490
|
+
if (!areDatesEqualWithTolerance(toDate(value), toDate(oldValue))) {
|
|
1491
|
+
result[key] = value;
|
|
1492
|
+
}
|
|
1493
|
+
} else if (!isEqual(value, oldValue)) {
|
|
1494
|
+
result[key] = value;
|
|
1495
|
+
}
|
|
1496
|
+
},
|
|
1497
|
+
{}
|
|
1498
|
+
);
|
|
1499
|
+
};
|
|
1500
|
+
var generateCrcHash = (str) => {
|
|
1501
|
+
if (isNil(str)) return (0, import_crc32.default)("-").toString(16);
|
|
1502
|
+
if (isString(str)) return (0, import_crc32.default)(str).toString(16);
|
|
1503
|
+
if (isBuffer(str)) return (0, import_crc32.default)(str).toString(16);
|
|
1504
|
+
if (isArrayBuffer(str)) return (0, import_crc32.default)(str).toString(16);
|
|
1505
|
+
if (isBoolean(str)) return (0, import_crc32.default)(str ? "true" : "false").toString(16);
|
|
1506
|
+
if (isNumber(str)) return (0, import_crc32.default)(str.toString()).toString(16);
|
|
1507
|
+
if (isArray(str) || isObject(str)) return generateCrcHash(JSON.stringify(str));
|
|
1508
|
+
return (0, import_crc32.default)(str || "").toString(16);
|
|
1509
|
+
};
|
|
1510
|
+
var hasSameType = (sourceTarget, destinationTarget) => {
|
|
1511
|
+
if (isArray(sourceTarget) && isArray(destinationTarget)) return true;
|
|
1512
|
+
if (isArray(sourceTarget) !== isArray(destinationTarget)) return false;
|
|
1513
|
+
if (isTypedArray(sourceTarget) && isTypedArray(destinationTarget)) {
|
|
1514
|
+
if (Object.prototype.toString.call(sourceTarget) === Object.prototype.toString.call(destinationTarget))
|
|
1515
|
+
return true;
|
|
1516
|
+
else return false;
|
|
1517
|
+
}
|
|
1518
|
+
if (isTypedArray(sourceTarget) !== isTypedArray(destinationTarget)) return false;
|
|
1519
|
+
if (isPlainObject(sourceTarget) && isPlainObject(destinationTarget)) return true;
|
|
1520
|
+
if (isPlainObject(sourceTarget) !== isPlainObject(destinationTarget)) return false;
|
|
1521
|
+
return typeof sourceTarget === typeof destinationTarget;
|
|
1522
|
+
};
|
|
1523
|
+
var updateArrayElementsBy = (data, objUpd, objSearch) => {
|
|
1524
|
+
nativeFilter(data, objSearch).forEach((element) => nativeAssign(element, objUpd));
|
|
1525
|
+
return data;
|
|
1526
|
+
};
|
|
1527
|
+
var updateArrayElementById = (data, objUpd, idField) => {
|
|
1528
|
+
const index = data.findIndex((x) => x[idField] === objUpd[idField]);
|
|
1529
|
+
if (index !== -1) data.splice(index, 1, objUpd);
|
|
1530
|
+
};
|
|
1531
|
+
var deleteArrayElementsBy = (data, objSearch) => {
|
|
1532
|
+
nativeRemove(data, (x) => deepEqual(nativePick(x, Object.keys(objSearch)), objSearch));
|
|
1533
|
+
return data;
|
|
1534
|
+
};
|
|
1535
|
+
function setDeepValue(obj, path, value) {
|
|
1536
|
+
if (!obj || typeof obj !== "object") {
|
|
1537
|
+
throw new TypeError("setDeepValue: target must be an object");
|
|
1538
|
+
}
|
|
1539
|
+
if (!path || typeof path !== "string") {
|
|
1540
|
+
throw new TypeError("setDeepValue: path must be a non-empty string");
|
|
1541
|
+
}
|
|
1542
|
+
const keys = path.split(".");
|
|
1543
|
+
let current = obj;
|
|
1544
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
1545
|
+
const key = keys[i];
|
|
1546
|
+
const nextKey = keys[i + 1];
|
|
1547
|
+
const isNextArray = /^\d+$/.test(nextKey);
|
|
1548
|
+
if (!(key in current) || typeof current[key] !== "object") {
|
|
1549
|
+
current[key] = isNextArray ? [] : {};
|
|
1550
|
+
}
|
|
1551
|
+
current = current[key];
|
|
1552
|
+
}
|
|
1553
|
+
const lastKey = keys[keys.length - 1];
|
|
1554
|
+
current[lastKey] = value;
|
|
1555
|
+
return obj;
|
|
1556
|
+
}
|
|
1557
|
+
function getDeepValue(obj, path, defaultValue) {
|
|
1558
|
+
if (!obj || typeof obj !== "object") {
|
|
1559
|
+
return defaultValue;
|
|
1560
|
+
}
|
|
1561
|
+
if (!path || typeof path !== "string") {
|
|
1562
|
+
return defaultValue;
|
|
1563
|
+
}
|
|
1564
|
+
const keys = path.split(".");
|
|
1565
|
+
let current = obj;
|
|
1566
|
+
for (const key of keys) {
|
|
1567
|
+
if (current === null || current === void 0 || typeof current !== "object") {
|
|
1568
|
+
return defaultValue;
|
|
1569
|
+
}
|
|
1570
|
+
if (!(key in current)) {
|
|
1571
|
+
return defaultValue;
|
|
1572
|
+
}
|
|
1573
|
+
current = current[key];
|
|
1574
|
+
}
|
|
1575
|
+
return current !== void 0 ? current : defaultValue;
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
// src/math.ts
|
|
1579
|
+
var math_exports = {};
|
|
1580
|
+
__export(math_exports, {
|
|
1581
|
+
calculateAggregations: () => calculateAggregations,
|
|
1582
|
+
calculateAnnuityPayment: () => calculateAnnuityPayment,
|
|
1583
|
+
calculateCorrelation: () => calculateCorrelation,
|
|
1584
|
+
calculateEuclideanDistance: () => calculateEuclideanDistance,
|
|
1585
|
+
calculateFutureValue: () => calculateFutureValue,
|
|
1586
|
+
calculateHistogram: () => calculateHistogram,
|
|
1587
|
+
calculateIQR: () => calculateIQR,
|
|
1588
|
+
calculateIRR: () => calculateIRR,
|
|
1589
|
+
calculateManhattanDistance: () => calculateManhattanDistance,
|
|
1590
|
+
calculateMedian: () => calculateMedian,
|
|
1591
|
+
calculateMode: () => calculateMode,
|
|
1592
|
+
calculateNPV: () => calculateNPV,
|
|
1593
|
+
calculatePercentile: () => calculatePercentile,
|
|
1594
|
+
calculatePresentValue: () => calculatePresentValue,
|
|
1595
|
+
calculateQuartiles: () => calculateQuartiles,
|
|
1596
|
+
calculateStandardDeviation: () => calculateStandardDeviation,
|
|
1597
|
+
calculateTrendSlope: () => calculateTrendSlope,
|
|
1598
|
+
calculateVariance: () => calculateVariance,
|
|
1599
|
+
detectOutliers: () => detectOutliers,
|
|
1600
|
+
normalizeToRange: () => normalizeToRange,
|
|
1601
|
+
scaleToRange: () => scaleToRange,
|
|
1602
|
+
simpleKMeans: () => simpleKMeans
|
|
1603
|
+
});
|
|
1604
|
+
var lodash2 = __toESM(require("lodash"));
|
|
1605
|
+
|
|
1606
|
+
// src/number.ts
|
|
1607
|
+
var number_exports = {};
|
|
1608
|
+
__export(number_exports, {
|
|
1609
|
+
isNumericValue: () => isNumericValue,
|
|
1610
|
+
roundToDecimals: () => roundToDecimals
|
|
1611
|
+
});
|
|
1612
|
+
function isNumericValue(value) {
|
|
1613
|
+
if (value === null || value === void 0) return false;
|
|
1614
|
+
if (typeof value === "number") return !isNaN(value) && isFinite(value);
|
|
1615
|
+
if (typeof value === "string") return value.trim() !== "" && !isNaN(Number(value));
|
|
1616
|
+
return false;
|
|
1617
|
+
}
|
|
1618
|
+
function roundToDecimals(num, decimals = 2) {
|
|
1619
|
+
const factor = Math.pow(10, decimals);
|
|
1620
|
+
return num >= 0 ? Math.round(num * factor) / factor : -Math.round(Math.abs(num) * factor) / factor;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
// src/math.ts
|
|
1624
|
+
var { map, round, sumBy, get, meanBy, maxBy, some, minBy, uniq, size, sum, zipObject, groupBy } = lodash2;
|
|
1625
|
+
var calculateAggregations = (operations, pgroupBy, inData, appendOperationToField = true) => {
|
|
1626
|
+
let data = [];
|
|
1627
|
+
if (pgroupBy?.length) {
|
|
1628
|
+
const groupedData = groupBy(
|
|
1629
|
+
inData,
|
|
1630
|
+
(item) => pgroupBy.map((field) => get(item, field)).join("$|marca|@")
|
|
1631
|
+
);
|
|
1632
|
+
data = map(groupedData, (items, groupKey) => {
|
|
1633
|
+
const obj = zipObject(pgroupBy, groupKey.split("$|marca|@"));
|
|
1634
|
+
for (const operation in operations) {
|
|
1635
|
+
const fields = operations[operation];
|
|
1636
|
+
fields.forEach((field) => {
|
|
1637
|
+
const resultField = appendOperationToField ? field + operation : field;
|
|
1638
|
+
switch (operation) {
|
|
1639
|
+
case "$count":
|
|
1640
|
+
obj[resultField] = items.length;
|
|
1641
|
+
break;
|
|
1642
|
+
case "$sum":
|
|
1643
|
+
obj[resultField] = sumBy(items, (item) => get(item, field));
|
|
1644
|
+
break;
|
|
1645
|
+
case "$avg":
|
|
1646
|
+
obj[resultField] = round(
|
|
1647
|
+
meanBy(items, (item) => get(item, field)),
|
|
1648
|
+
1
|
|
1649
|
+
);
|
|
1650
|
+
break;
|
|
1651
|
+
case "$max": {
|
|
1652
|
+
const maxItem = maxBy(items, (item) => get(item, field));
|
|
1653
|
+
obj[resultField] = maxItem ? get(maxItem, field) : void 0;
|
|
1654
|
+
break;
|
|
1655
|
+
}
|
|
1656
|
+
case "$min": {
|
|
1657
|
+
const minItem = minBy(items, (item) => get(item, field));
|
|
1658
|
+
obj[resultField] = minItem ? get(minItem, field) : void 0;
|
|
1659
|
+
break;
|
|
1660
|
+
}
|
|
1661
|
+
case "$exist":
|
|
1662
|
+
obj[resultField] = some(items, (item) => get(item, field)) ? 1 : 0;
|
|
1663
|
+
break;
|
|
1664
|
+
case "$trend":
|
|
1665
|
+
obj[resultField] = calculateTrendSlope(
|
|
1666
|
+
items.map((item) => get(item, field)),
|
|
1667
|
+
items.map((_item, index) => index + 1)
|
|
1668
|
+
);
|
|
1669
|
+
break;
|
|
1670
|
+
case "$countUniq":
|
|
1671
|
+
obj[resultField] = uniq(items.map((item) => get(item, field))).length;
|
|
1672
|
+
break;
|
|
1673
|
+
}
|
|
1674
|
+
});
|
|
1675
|
+
}
|
|
1676
|
+
return obj;
|
|
1677
|
+
});
|
|
1678
|
+
} else {
|
|
1679
|
+
const results = {};
|
|
1680
|
+
for (const operation in operations) {
|
|
1681
|
+
const fields = operations[operation];
|
|
1682
|
+
fields.forEach((field) => {
|
|
1683
|
+
const resultField = appendOperationToField ? field + operation : field;
|
|
1684
|
+
switch (operation) {
|
|
1685
|
+
case "$count":
|
|
1686
|
+
results[resultField] = inData.length;
|
|
1687
|
+
break;
|
|
1688
|
+
case "$sum":
|
|
1689
|
+
results[resultField] = sumBy(inData, field);
|
|
1690
|
+
break;
|
|
1691
|
+
case "$avg":
|
|
1692
|
+
results[resultField] = round(meanBy(inData, field), 1);
|
|
1693
|
+
break;
|
|
1694
|
+
case "$max":
|
|
1695
|
+
if (Array.isArray(inData)) {
|
|
1696
|
+
const maxItem = maxBy(inData, field);
|
|
1697
|
+
results[resultField] = maxItem ? maxItem[field] : void 0;
|
|
1698
|
+
}
|
|
1699
|
+
break;
|
|
1700
|
+
case "$min":
|
|
1701
|
+
if (Array.isArray(inData)) {
|
|
1702
|
+
const minItem = minBy(inData, field);
|
|
1703
|
+
results[resultField] = minItem ? minItem[field] : void 0;
|
|
1704
|
+
}
|
|
1705
|
+
break;
|
|
1706
|
+
case "$exist":
|
|
1707
|
+
results[resultField] = some(inData, { [field]: true }) ? 1 : 0;
|
|
1708
|
+
break;
|
|
1709
|
+
case "$trend":
|
|
1710
|
+
results[resultField] = calculateTrendSlope(
|
|
1711
|
+
inData.map((item) => get(item, field)),
|
|
1712
|
+
inData.map((_item, index) => index + 1)
|
|
1713
|
+
);
|
|
1714
|
+
break;
|
|
1715
|
+
case "$countUniq":
|
|
1716
|
+
results[resultField] = uniq(inData.map((item) => get(item, field))).length;
|
|
1717
|
+
break;
|
|
1718
|
+
}
|
|
1719
|
+
});
|
|
1720
|
+
}
|
|
1721
|
+
data = results;
|
|
1722
|
+
}
|
|
1723
|
+
return data;
|
|
1724
|
+
};
|
|
1725
|
+
function calculateTrendSlope(y, x) {
|
|
1726
|
+
const n = size(y);
|
|
1727
|
+
const sum_x = sum(x);
|
|
1728
|
+
const sum_y = sum(y);
|
|
1729
|
+
const sum_x2 = sum(map(x, (val) => val * val));
|
|
1730
|
+
const sum_xy = sum(map(x, (val, i) => val * y[i]));
|
|
1731
|
+
const denominator = n * sum_x2 - sum_x * sum_x;
|
|
1732
|
+
if (denominator === 0) {
|
|
1733
|
+
return 0;
|
|
1734
|
+
}
|
|
1735
|
+
const slope = (n * sum_xy - sum_x * sum_y) / denominator;
|
|
1736
|
+
return roundToDecimals(slope, 1);
|
|
1737
|
+
}
|
|
1738
|
+
var calculateMedian = (values) => {
|
|
1739
|
+
if (!values.length) return 0;
|
|
1740
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
1741
|
+
const middle = Math.floor(sorted.length / 2);
|
|
1742
|
+
if (sorted.length % 2 === 0) {
|
|
1743
|
+
return (sorted[middle - 1] + sorted[middle]) / 2;
|
|
1744
|
+
}
|
|
1745
|
+
return sorted[middle];
|
|
1746
|
+
};
|
|
1747
|
+
var calculateMode = (values) => {
|
|
1748
|
+
if (!values.length) return null;
|
|
1749
|
+
const frequency = {};
|
|
1750
|
+
let maxFreq = 0;
|
|
1751
|
+
let mode = null;
|
|
1752
|
+
let hasMultipleModes = false;
|
|
1753
|
+
for (const value of values) {
|
|
1754
|
+
frequency[value] = (frequency[value] || 0) + 1;
|
|
1755
|
+
if (frequency[value] > maxFreq) {
|
|
1756
|
+
maxFreq = frequency[value];
|
|
1757
|
+
mode = value;
|
|
1758
|
+
hasMultipleModes = false;
|
|
1759
|
+
} else if (frequency[value] === maxFreq && value !== mode) {
|
|
1760
|
+
hasMultipleModes = true;
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
return hasMultipleModes ? null : mode;
|
|
1764
|
+
};
|
|
1765
|
+
var calculateStandardDeviation = (values, sample = false) => {
|
|
1766
|
+
if (!values.length) return 0;
|
|
1767
|
+
const mean = values.reduce((sum2, val) => sum2 + val, 0) / values.length;
|
|
1768
|
+
const squaredDiffs = values.map((val) => Math.pow(val - mean, 2));
|
|
1769
|
+
const variance = squaredDiffs.reduce((sum2, val) => sum2 + val, 0) / (sample ? values.length - 1 : values.length);
|
|
1770
|
+
return Math.sqrt(variance);
|
|
1771
|
+
};
|
|
1772
|
+
var calculateVariance = (values, sample = false) => {
|
|
1773
|
+
if (!values.length) return 0;
|
|
1774
|
+
const mean = values.reduce((sum2, val) => sum2 + val, 0) / values.length;
|
|
1775
|
+
const squaredDiffs = values.map((val) => Math.pow(val - mean, 2));
|
|
1776
|
+
return squaredDiffs.reduce((sum2, val) => sum2 + val, 0) / (sample ? values.length - 1 : values.length);
|
|
1777
|
+
};
|
|
1778
|
+
var calculatePercentile = (values, percentile) => {
|
|
1779
|
+
if (!values.length) return 0;
|
|
1780
|
+
if (percentile < 0 || percentile > 100) throw new Error("Percentile must be between 0 and 100");
|
|
1781
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
1782
|
+
const index = percentile / 100 * (sorted.length - 1);
|
|
1783
|
+
if (Math.floor(index) === index) {
|
|
1784
|
+
return sorted[index];
|
|
1785
|
+
}
|
|
1786
|
+
const lower = sorted[Math.floor(index)];
|
|
1787
|
+
const upper = sorted[Math.ceil(index)];
|
|
1788
|
+
const weight = index - Math.floor(index);
|
|
1789
|
+
return lower * (1 - weight) + upper * weight;
|
|
1790
|
+
};
|
|
1791
|
+
var calculateQuartiles = (values) => {
|
|
1792
|
+
return {
|
|
1793
|
+
Q1: calculatePercentile(values, 25),
|
|
1794
|
+
Q2: calculatePercentile(values, 50),
|
|
1795
|
+
// median
|
|
1796
|
+
Q3: calculatePercentile(values, 75)
|
|
1797
|
+
};
|
|
1798
|
+
};
|
|
1799
|
+
var calculateIQR = (values) => {
|
|
1800
|
+
const quartiles = calculateQuartiles(values);
|
|
1801
|
+
return quartiles.Q3 - quartiles.Q1;
|
|
1802
|
+
};
|
|
1803
|
+
var detectOutliers = (values, multiplier = 1.5) => {
|
|
1804
|
+
const quartiles = calculateQuartiles(values);
|
|
1805
|
+
const iqr = quartiles.Q3 - quartiles.Q1;
|
|
1806
|
+
const lowerBound = quartiles.Q1 - multiplier * iqr;
|
|
1807
|
+
const upperBound = quartiles.Q3 + multiplier * iqr;
|
|
1808
|
+
return values.filter((value) => value < lowerBound || value > upperBound);
|
|
1809
|
+
};
|
|
1810
|
+
var calculateCorrelation = (x, y) => {
|
|
1811
|
+
if (x.length !== y.length || x.length === 0) return 0;
|
|
1812
|
+
const n = x.length;
|
|
1813
|
+
const sumX = sum(x);
|
|
1814
|
+
const sumY = sum(y);
|
|
1815
|
+
const sumXY = sum(map(x, (val, i) => val * y[i]));
|
|
1816
|
+
const sumX2 = sum(map(x, (val) => val * val));
|
|
1817
|
+
const sumY2 = sum(map(y, (val) => val * val));
|
|
1818
|
+
const numerator = n * sumXY - sumX * sumY;
|
|
1819
|
+
const denominator = Math.sqrt((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY));
|
|
1820
|
+
if (denominator === 0) return 0;
|
|
1821
|
+
return numerator / denominator;
|
|
1822
|
+
};
|
|
1823
|
+
var calculateNPV = (cashFlows, discountRate) => {
|
|
1824
|
+
return cashFlows.reduce((npv, cashFlow, index) => {
|
|
1825
|
+
const discountFactor = index === 0 ? 1 : Math.pow(1 + discountRate, index);
|
|
1826
|
+
return npv + cashFlow / discountFactor;
|
|
1827
|
+
}, 0);
|
|
1828
|
+
};
|
|
1829
|
+
var calculateIRR = (cashFlows, initialGuess = 0.1, maxIterations = 100, tolerance = 1e-6) => {
|
|
1830
|
+
let rate = initialGuess;
|
|
1831
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
1832
|
+
const npv = calculateNPV(cashFlows, rate);
|
|
1833
|
+
const npvDerivative = cashFlows.reduce((sum2, cashFlow, index) => {
|
|
1834
|
+
return sum2 - index * cashFlow / Math.pow(1 + rate, index + 1);
|
|
1835
|
+
}, 0);
|
|
1836
|
+
if (Math.abs(npv) < tolerance) return rate;
|
|
1837
|
+
if (Math.abs(npvDerivative) < tolerance) break;
|
|
1838
|
+
rate = rate - npv / npvDerivative;
|
|
1839
|
+
}
|
|
1840
|
+
return rate;
|
|
1841
|
+
};
|
|
1842
|
+
var calculateFutureValue = (presentValue, interestRate, periods) => {
|
|
1843
|
+
return presentValue * Math.pow(1 + interestRate, periods);
|
|
1844
|
+
};
|
|
1845
|
+
var calculatePresentValue = (futureValue, interestRate, periods) => {
|
|
1846
|
+
return futureValue / Math.pow(1 + interestRate, periods);
|
|
1847
|
+
};
|
|
1848
|
+
var calculateAnnuityPayment = (presentValue, interestRate, periods) => {
|
|
1849
|
+
if (interestRate === 0) return presentValue / periods;
|
|
1850
|
+
return presentValue * (interestRate * Math.pow(1 + interestRate, periods)) / (Math.pow(1 + interestRate, periods) - 1);
|
|
1851
|
+
};
|
|
1852
|
+
var normalizeToRange = (values) => {
|
|
1853
|
+
if (!values.length) return [];
|
|
1854
|
+
const min = Math.min(...values);
|
|
1855
|
+
const max = Math.max(...values);
|
|
1856
|
+
const range = max - min;
|
|
1857
|
+
if (range === 0) return values.map(() => 0);
|
|
1858
|
+
return values.map((value) => (value - min) / range);
|
|
1859
|
+
};
|
|
1860
|
+
var scaleToRange = (values, minRange, maxRange) => {
|
|
1861
|
+
const normalized = normalizeToRange(values);
|
|
1862
|
+
const scale = maxRange - minRange;
|
|
1863
|
+
return normalized.map((value) => minRange + value * scale);
|
|
1864
|
+
};
|
|
1865
|
+
var calculateHistogram = (values, bins) => {
|
|
1866
|
+
if (!values.length || bins <= 0) return [];
|
|
1867
|
+
const min = Math.min(...values);
|
|
1868
|
+
const max = Math.max(...values);
|
|
1869
|
+
const binWidth = (max - min) / bins;
|
|
1870
|
+
const histogram = [];
|
|
1871
|
+
for (let i = 0; i < bins; i++) {
|
|
1872
|
+
const rangeStart = min + i * binWidth;
|
|
1873
|
+
const rangeEnd = i === bins - 1 ? max : rangeStart + binWidth;
|
|
1874
|
+
const count = values.filter(
|
|
1875
|
+
(value) => value >= rangeStart && (i === bins - 1 ? value <= rangeEnd : value < rangeEnd)
|
|
1876
|
+
).length;
|
|
1877
|
+
histogram.push({
|
|
1878
|
+
range: [roundToDecimals(rangeStart, 2), roundToDecimals(rangeEnd, 2)],
|
|
1879
|
+
count
|
|
1880
|
+
});
|
|
1881
|
+
}
|
|
1882
|
+
return histogram;
|
|
1883
|
+
};
|
|
1884
|
+
var calculateEuclideanDistance = (point1, point2) => {
|
|
1885
|
+
if (point1.length !== point2.length) {
|
|
1886
|
+
throw new Error("Points must have the same number of dimensions");
|
|
1887
|
+
}
|
|
1888
|
+
const squaredDiffs = point1.map((val, index) => Math.pow(val - point2[index], 2));
|
|
1889
|
+
return Math.sqrt(sum(squaredDiffs));
|
|
1890
|
+
};
|
|
1891
|
+
var calculateManhattanDistance = (point1, point2) => {
|
|
1892
|
+
if (point1.length !== point2.length) {
|
|
1893
|
+
throw new Error("Points must have the same number of dimensions");
|
|
1894
|
+
}
|
|
1895
|
+
return sum(point1.map((val, index) => Math.abs(val - point2[index])));
|
|
1896
|
+
};
|
|
1897
|
+
var simpleKMeans = (points, k, maxIterations = 100) => {
|
|
1898
|
+
if (points.length === 0 || k <= 0) {
|
|
1899
|
+
return { centroids: [], clusters: [] };
|
|
1900
|
+
}
|
|
1901
|
+
const dimensions = points[0].length;
|
|
1902
|
+
let centroids = [];
|
|
1903
|
+
for (let i = 0; i < k; i++) {
|
|
1904
|
+
const randomPoint = points[Math.floor(Math.random() * points.length)];
|
|
1905
|
+
centroids.push([...randomPoint]);
|
|
1906
|
+
}
|
|
1907
|
+
const clusters = new Array(points.length);
|
|
1908
|
+
for (let iteration = 0; iteration < maxIterations; iteration++) {
|
|
1909
|
+
let hasChanged = false;
|
|
1910
|
+
for (let i = 0; i < points.length; i++) {
|
|
1911
|
+
let minDistance = Infinity;
|
|
1912
|
+
let closestCentroid = 0;
|
|
1913
|
+
for (let j = 0; j < centroids.length; j++) {
|
|
1914
|
+
const distance = calculateEuclideanDistance(points[i], centroids[j]);
|
|
1915
|
+
if (distance < minDistance) {
|
|
1916
|
+
minDistance = distance;
|
|
1917
|
+
closestCentroid = j;
|
|
1918
|
+
}
|
|
1919
|
+
}
|
|
1920
|
+
if (clusters[i] !== closestCentroid) {
|
|
1921
|
+
hasChanged = true;
|
|
1922
|
+
clusters[i] = closestCentroid;
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
const newCentroids = new Array(k).fill(0).map(() => new Array(dimensions).fill(0));
|
|
1926
|
+
const clusterCounts = new Array(k).fill(0);
|
|
1927
|
+
for (let i = 0; i < points.length; i++) {
|
|
1928
|
+
const cluster = clusters[i];
|
|
1929
|
+
clusterCounts[cluster]++;
|
|
1930
|
+
for (let dim = 0; dim < dimensions; dim++) {
|
|
1931
|
+
newCentroids[cluster][dim] += points[i][dim];
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
for (let i = 0; i < k; i++) {
|
|
1935
|
+
if (clusterCounts[i] > 0) {
|
|
1936
|
+
for (let dim = 0; dim < dimensions; dim++) {
|
|
1937
|
+
newCentroids[i][dim] /= clusterCounts[i];
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
centroids = newCentroids;
|
|
1942
|
+
if (!hasChanged) break;
|
|
1943
|
+
}
|
|
1944
|
+
return { centroids, clusters };
|
|
1945
|
+
};
|
|
1946
|
+
|
|
1947
|
+
// src/async.ts
|
|
1948
|
+
var async_exports = {};
|
|
1949
|
+
__export(async_exports, {
|
|
1950
|
+
handleOperation: () => handleOperation,
|
|
1951
|
+
runBatch: () => runBatch,
|
|
1952
|
+
sleep: () => sleep,
|
|
1953
|
+
wait: () => wait
|
|
1954
|
+
});
|
|
1955
|
+
|
|
1956
|
+
// src/errors.ts
|
|
1957
|
+
var TsHelpersError = class _TsHelpersError extends Error {
|
|
1958
|
+
constructor(message, options = {}) {
|
|
1959
|
+
super(message);
|
|
1960
|
+
this.name = "TsHelpersError";
|
|
1961
|
+
this.code = options.code;
|
|
1962
|
+
this.data = options.data;
|
|
1963
|
+
this.cause = options.cause;
|
|
1964
|
+
if (Error.captureStackTrace) {
|
|
1965
|
+
Error.captureStackTrace(this, _TsHelpersError);
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1968
|
+
};
|
|
1969
|
+
|
|
1970
|
+
// src/async.ts
|
|
1971
|
+
var sleep = (ms) => {
|
|
1972
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
1973
|
+
};
|
|
1974
|
+
var wait = (ms) => sleep(ms);
|
|
1975
|
+
async function runBatch(jobs, batchSize = 50) {
|
|
1976
|
+
if (batchSize <= 0) {
|
|
1977
|
+
throw new TsHelpersError("Batch size must be greater than 0", {
|
|
1978
|
+
code: "INVALID_OPERATION" /* INVALID_OPERATION */,
|
|
1979
|
+
data: { batchSize }
|
|
1980
|
+
});
|
|
1981
|
+
}
|
|
1982
|
+
const results = [];
|
|
1983
|
+
const batches = Math.ceil(jobs.length / batchSize);
|
|
1984
|
+
for (let i = 0; i < batches; i++) {
|
|
1985
|
+
const batchStart = i * batchSize;
|
|
1986
|
+
const batchEnd = batchStart + batchSize;
|
|
1987
|
+
const batch = jobs.slice(batchStart, batchEnd);
|
|
1988
|
+
const batchResults = await Promise.all(batch.map((job) => job));
|
|
1989
|
+
results.push(...batchResults);
|
|
1990
|
+
}
|
|
1991
|
+
return results;
|
|
1992
|
+
}
|
|
1993
|
+
function handleOperation(target, operation, ...args) {
|
|
1994
|
+
if (operation.includes("/")) {
|
|
1995
|
+
const [parentOp, childOp] = operation.split("/");
|
|
1996
|
+
if (!target[parentOp] || !target[parentOp][childOp]) {
|
|
1997
|
+
throw new TsHelpersError(`Operation [${operation}] does not exist`, {
|
|
1998
|
+
code: "INVALID_OPERATION" /* INVALID_OPERATION */,
|
|
1999
|
+
data: { operation, parentOp, childOp }
|
|
2000
|
+
});
|
|
2001
|
+
}
|
|
2002
|
+
return target[parentOp][childOp](...args);
|
|
2003
|
+
}
|
|
2004
|
+
if (!target[operation]) {
|
|
2005
|
+
throw new TsHelpersError(`Operation [${operation}] does not exist`, {
|
|
2006
|
+
code: "INVALID_OPERATION" /* INVALID_OPERATION */,
|
|
2007
|
+
data: { operation }
|
|
2008
|
+
});
|
|
2009
|
+
}
|
|
2010
|
+
return target[operation](...args);
|
|
2011
|
+
}
|
|
2012
|
+
|
|
2013
|
+
// src/universal/index.ts
|
|
2014
|
+
var g = {
|
|
2015
|
+
// Core validation functions (no crypto)
|
|
2016
|
+
...validation_core_exports,
|
|
2017
|
+
// String functions
|
|
2018
|
+
...strings_exports,
|
|
2019
|
+
// Object/Array functions
|
|
2020
|
+
...objects_exports,
|
|
2021
|
+
// Date functions
|
|
2022
|
+
...dates_exports,
|
|
2023
|
+
// Math functions
|
|
2024
|
+
...math_exports,
|
|
2025
|
+
// Async functions
|
|
2026
|
+
...async_exports,
|
|
2027
|
+
// Number utilities
|
|
2028
|
+
...number_exports,
|
|
2029
|
+
// Environment utilities (original)
|
|
2030
|
+
...environment_exports,
|
|
2031
|
+
// Enhanced environment detection
|
|
2032
|
+
...environment_detection_exports
|
|
2033
|
+
};
|
|
2034
|
+
var universal_default = g;
|
|
2035
|
+
//# sourceMappingURL=index.js.map
|