@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,60 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
var TsHelpersErrorCode = /* @__PURE__ */ ((TsHelpersErrorCode2) => {
|
|
3
|
+
TsHelpersErrorCode2["VALIDATION_FAILED"] = "VALIDATION_FAILED";
|
|
4
|
+
TsHelpersErrorCode2["DATA_PROCESSING_FAILED"] = "DATA_PROCESSING_FAILED";
|
|
5
|
+
TsHelpersErrorCode2["ENVIRONMENT_NOT_SUPPORTED"] = "ENVIRONMENT_NOT_SUPPORTED";
|
|
6
|
+
TsHelpersErrorCode2["UNSUPPORTED_FORMAT"] = "UNSUPPORTED_FORMAT";
|
|
7
|
+
TsHelpersErrorCode2["FILE_ERROR"] = "FILE_ERROR";
|
|
8
|
+
TsHelpersErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
9
|
+
TsHelpersErrorCode2["INVALID_OPERATION"] = "INVALID_OPERATION";
|
|
10
|
+
TsHelpersErrorCode2["CRYPTO_ERROR"] = "CRYPTO_ERROR";
|
|
11
|
+
TsHelpersErrorCode2["MATH_ERROR"] = "MATH_ERROR";
|
|
12
|
+
TsHelpersErrorCode2["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
13
|
+
return TsHelpersErrorCode2;
|
|
14
|
+
})(TsHelpersErrorCode || {});
|
|
15
|
+
var TsHelpersError = class _TsHelpersError extends Error {
|
|
16
|
+
constructor(message, options = {}) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = "TsHelpersError";
|
|
19
|
+
this.code = options.code;
|
|
20
|
+
this.data = options.data;
|
|
21
|
+
this.cause = options.cause;
|
|
22
|
+
if (Error.captureStackTrace) {
|
|
23
|
+
Error.captureStackTrace(this, _TsHelpersError);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var DataError = class extends TsHelpersError {
|
|
28
|
+
constructor(message, code, data) {
|
|
29
|
+
super(message, { code, data });
|
|
30
|
+
this.name = "DataError";
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
function createValidationError(message, field, value) {
|
|
34
|
+
return new TsHelpersError(`Validation failed: ${message}`, {
|
|
35
|
+
code: "VALIDATION_FAILED" /* VALIDATION_FAILED */,
|
|
36
|
+
data: { field, value }
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function createCryptoError(message, operation, details) {
|
|
40
|
+
return new TsHelpersError(`Crypto error: ${message}`, {
|
|
41
|
+
code: "CRYPTO_ERROR" /* CRYPTO_ERROR */,
|
|
42
|
+
data: { operation, details }
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function createMathError(message, operation, input) {
|
|
46
|
+
return new TsHelpersError(`Math error: ${message}`, {
|
|
47
|
+
code: "MATH_ERROR" /* MATH_ERROR */,
|
|
48
|
+
data: { operation, input }
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
TsHelpersErrorCode,
|
|
54
|
+
TsHelpersError,
|
|
55
|
+
DataError,
|
|
56
|
+
createValidationError,
|
|
57
|
+
createCryptoError,
|
|
58
|
+
createMathError
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=chunk-75XNTC34.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/errors.ts"],"sourcesContent":["/**\n * Error handling utilities with specific error types and codes\n * Provides structured error handling for validation, data processing, and environment issues\n */\n\n/**\n * Enumeration of specific error codes for different failure scenarios\n * @example\n * ```ts\n * // Using error codes for type-safe error handling\n * try {\n * validateNIF('invalid')\n * } catch (error) {\n * if (error.code === TsHelpersErrorCode.VALIDATION_FAILED) {\n * console.log('Validation error:', error.data)\n * }\n * }\n * ```\n */\nexport enum TsHelpersErrorCode {\n /** Validation of input data failed (NIF, email, etc.) */\n VALIDATION_FAILED = 'VALIDATION_FAILED',\n /** Error processing data (CSV, JSON, aggregations, etc.) */\n DATA_PROCESSING_FAILED = 'DATA_PROCESSING_FAILED',\n /** Current environment doesn't support the operation */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** File format not supported for import/export */\n UNSUPPORTED_FORMAT = 'UNSUPPORTED_FORMAT',\n /** File system operation failed */\n FILE_ERROR = 'FILE_ERROR',\n /** Network or fetch operation failed */\n NETWORK_ERROR = 'NETWORK_ERROR',\n /** Invalid operation or function call */\n INVALID_OPERATION = 'INVALID_OPERATION',\n /** Crypto operation failed (hash, token generation) */\n CRYPTO_ERROR = 'CRYPTO_ERROR',\n /** Math calculation failed (invalid input, division by zero) */\n MATH_ERROR = 'MATH_ERROR',\n /** Generic unknown error */\n UNKNOWN_ERROR = 'UNKNOWN_ERROR',\n}\n\n/**\n * Options for creating TsHelpersError instances\n */\nexport interface TsHelpersErrorOptions {\n /** Specific error code for categorization */\n code?: TsHelpersErrorCode\n /** Additional data about the error context */\n data?: any\n /** Original error that caused this error */\n cause?: Error\n}\n\n/**\n * Main error class for @g10/ts-helpers with structured error information\n * @example\n * ```ts\n * // Creating structured errors\n * throw new TsHelpersError('Invalid NIF format', {\n * code: TsHelpersErrorCode.VALIDATION_FAILED,\n * data: { input: '12345', expected: '8 digits + letter' }\n * })\n *\n * // Error handling with type checking\n * try {\n * someOperation()\n * } catch (error) {\n * if (error instanceof TsHelpersError) {\n * console.log('Error code:', error.code)\n * console.log('Error data:', error.data)\n * }\n * }\n * ```\n */\nexport class TsHelpersError extends Error {\n public readonly code?: TsHelpersErrorCode\n public readonly data?: any\n public readonly cause?: Error\n\n constructor(message: string, options: TsHelpersErrorOptions = {}) {\n super(message)\n this.name = 'TsHelpersError'\n this.code = options.code\n this.data = options.data\n this.cause = options.cause\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, TsHelpersError)\n }\n }\n}\n\n/**\n * Specialized error class for data processing operations\n * @example\n * ```ts\n * // Data processing errors\n * throw new DataError(\n * 'Failed to parse CSV',\n * TsHelpersErrorCode.DATA_PROCESSING_FAILED,\n * { line: 5, column: 'amount' }\n * )\n * ```\n */\nexport class DataError extends TsHelpersError {\n constructor(message: string, code?: TsHelpersErrorCode, data?: any) {\n super(message, { code, data })\n this.name = 'DataError'\n }\n}\n\n/**\n * Creates a validation error with structured information\n * @param message - Descriptive error message\n * @param field - Field name that failed validation\n * @param value - Value that failed validation\n * @returns TsHelpersError with validation context\n * @example\n * ```ts\n * // Using in validation functions\n * if (!isValidEmail(email)) {\n * throw createValidationError('Invalid email format', 'email', email)\n * }\n *\n * // Error contains structured data\n * // error.code === TsHelpersErrorCode.VALIDATION_FAILED\n * // error.data === { field: 'email', value: 'invalid-email' }\n * ```\n */\nexport function createValidationError(message: string, field: string, value: any): TsHelpersError {\n return new TsHelpersError(`Validation failed: ${message}`, {\n code: TsHelpersErrorCode.VALIDATION_FAILED,\n data: { field, value },\n })\n}\n\n/**\n * Creates a crypto operation error\n * @param message - Descriptive error message\n * @param operation - Crypto operation that failed\n * @param details - Additional error details\n * @returns TsHelpersError with crypto context\n * @example\n * ```ts\n * // Using in crypto functions\n * if (!crypto.getRandomValues) {\n * throw createCryptoError('Web Crypto API not available', 'generateSecureToken', {\n * environment: 'browser',\n * fallback: 'Math.random'\n * })\n * }\n * ```\n */\nexport function createCryptoError(\n message: string,\n operation: string,\n details?: any\n): TsHelpersError {\n return new TsHelpersError(`Crypto error: ${message}`, {\n code: TsHelpersErrorCode.CRYPTO_ERROR,\n data: { operation, details },\n })\n}\n\n/**\n * Creates a math calculation error\n * @param message - Descriptive error message\n * @param operation - Math operation that failed\n * @param input - Input data that caused the error\n * @returns TsHelpersError with math context\n * @example\n * ```ts\n * // Using in math functions\n * if (values.length === 0) {\n * throw createMathError('Cannot calculate median of empty array', 'calculateMedian', values)\n * }\n * ```\n */\nexport function createMathError(message: string, operation: string, input?: any): TsHelpersError {\n return new TsHelpersError(`Math error: ${message}`, {\n code: TsHelpersErrorCode.MATH_ERROR,\n data: { operation, input },\n })\n}\n"],"mappings":";AAmBO,IAAK,qBAAL,kBAAKA,wBAAL;AAEL,EAAAA,oBAAA,uBAAoB;AAEpB,EAAAA,oBAAA,4BAAyB;AAEzB,EAAAA,oBAAA,+BAA4B;AAE5B,EAAAA,oBAAA,wBAAqB;AAErB,EAAAA,oBAAA,gBAAa;AAEb,EAAAA,oBAAA,mBAAgB;AAEhB,EAAAA,oBAAA,uBAAoB;AAEpB,EAAAA,oBAAA,kBAAe;AAEf,EAAAA,oBAAA,gBAAa;AAEb,EAAAA,oBAAA,mBAAgB;AApBN,SAAAA;AAAA,GAAA;AAwDL,IAAM,iBAAN,MAAM,wBAAuB,MAAM;AAAA,EAKxC,YAAY,SAAiB,UAAiC,CAAC,GAAG;AAChE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO,QAAQ;AACpB,SAAK,OAAO,QAAQ;AACpB,SAAK,QAAQ,QAAQ;AAErB,QAAI,MAAM,mBAAmB;AAC3B,YAAM,kBAAkB,MAAM,eAAc;AAAA,IAC9C;AAAA,EACF;AACF;AAcO,IAAM,YAAN,cAAwB,eAAe;AAAA,EAC5C,YAAY,SAAiB,MAA2B,MAAY;AAClE,UAAM,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7B,SAAK,OAAO;AAAA,EACd;AACF;AAoBO,SAAS,sBAAsB,SAAiB,OAAe,OAA4B;AAChG,SAAO,IAAI,eAAe,sBAAsB,OAAO,IAAI;AAAA,IACzD,MAAM;AAAA,IACN,MAAM,EAAE,OAAO,MAAM;AAAA,EACvB,CAAC;AACH;AAmBO,SAAS,kBACd,SACA,WACA,SACgB;AAChB,SAAO,IAAI,eAAe,iBAAiB,OAAO,IAAI;AAAA,IACpD,MAAM;AAAA,IACN,MAAM,EAAE,WAAW,QAAQ;AAAA,EAC7B,CAAC;AACH;AAgBO,SAAS,gBAAgB,SAAiB,WAAmB,OAA6B;AAC/F,SAAO,IAAI,eAAe,eAAe,OAAO,IAAI;AAAA,IAClD,MAAM;AAAA,IACN,MAAM,EAAE,WAAW,MAAM;AAAA,EAC3B,CAAC;AACH;","names":["TsHelpersErrorCode"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isBrowserEnvironment,
|
|
3
|
+
isNodeEnvironment
|
|
4
|
+
} from "./chunk-EBLSTOEC.js";
|
|
5
|
+
import {
|
|
6
|
+
__export,
|
|
7
|
+
__require
|
|
8
|
+
} from "./chunk-NSBPE2FW.js";
|
|
9
|
+
|
|
10
|
+
// src/universal/environment-detection.ts
|
|
11
|
+
var environment_detection_exports = {};
|
|
12
|
+
__export(environment_detection_exports, {
|
|
13
|
+
getCryptoCapabilities: () => getCryptoCapabilities,
|
|
14
|
+
getEnvironmentType: () => getEnvironmentType,
|
|
15
|
+
isBrowserEnv: () => isBrowserEnv,
|
|
16
|
+
isNodeCryptoAvailable: () => isNodeCryptoAvailable,
|
|
17
|
+
isNodeEnv: () => isNodeEnv,
|
|
18
|
+
isWebCryptoAvailable: () => isWebCryptoAvailable,
|
|
19
|
+
isWorkerEnvironment: () => isWorkerEnvironment
|
|
20
|
+
});
|
|
21
|
+
var isBrowserEnv = isBrowserEnvironment;
|
|
22
|
+
var isNodeEnv = isNodeEnvironment;
|
|
23
|
+
var isWorkerEnvironment = () => {
|
|
24
|
+
try {
|
|
25
|
+
return typeof importScripts === "function" && typeof self !== "undefined" && // Check for Worker global scope without importing types
|
|
26
|
+
"importScripts" in self;
|
|
27
|
+
} catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var isWebCryptoAvailable = () => {
|
|
32
|
+
try {
|
|
33
|
+
return typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function" && typeof crypto.subtle === "object";
|
|
34
|
+
} catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var isNodeCryptoAvailable = () => {
|
|
39
|
+
try {
|
|
40
|
+
if (!isNodeEnv()) return false;
|
|
41
|
+
const crypto2 = __require("crypto");
|
|
42
|
+
return typeof crypto2.createHash === "function" && typeof crypto2.randomBytes === "function";
|
|
43
|
+
} catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var getEnvironmentType = () => {
|
|
48
|
+
if (isNodeEnv()) return "node";
|
|
49
|
+
if (isWorkerEnvironment()) return "worker";
|
|
50
|
+
if (isBrowserEnv()) return "browser";
|
|
51
|
+
return "unknown";
|
|
52
|
+
};
|
|
53
|
+
var getCryptoCapabilities = () => {
|
|
54
|
+
return {
|
|
55
|
+
webCrypto: isWebCryptoAvailable(),
|
|
56
|
+
nodeCrypto: isNodeCryptoAvailable(),
|
|
57
|
+
fallbackOnly: !isWebCryptoAvailable() && !isNodeCryptoAvailable(),
|
|
58
|
+
environment: getEnvironmentType()
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export {
|
|
63
|
+
isBrowserEnv,
|
|
64
|
+
isNodeEnv,
|
|
65
|
+
isWorkerEnvironment,
|
|
66
|
+
isWebCryptoAvailable,
|
|
67
|
+
isNodeCryptoAvailable,
|
|
68
|
+
getEnvironmentType,
|
|
69
|
+
getCryptoCapabilities,
|
|
70
|
+
environment_detection_exports
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=chunk-BDOBKBKA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/universal/environment-detection.ts"],"sourcesContent":["/**\n * Universal crypto capabilities detection utilities\n * Safe for all environments with comprehensive fallbacks\n */\n\nimport { isBrowserEnvironment, isNodeEnvironment } from '../environment'\n\n// Global type declarations for Worker environment (avoid importing lib.webworker)\ndeclare const importScripts: any\ndeclare const self: any\n\n/**\n * Enhanced browser environment detection with additional checks\n * @returns true if running in a browser environment\n * @example\n * ```ts\n * if (isBrowserEnv()) {\n * console.log('Running in browser')\n * }\n * ```\n */\nexport const isBrowserEnv = isBrowserEnvironment\n\n/**\n * Enhanced Node.js environment detection with additional checks\n * @returns true if running in Node.js environment\n * @example\n * ```ts\n * if (isNodeEnv()) {\n * console.log('Running in Node.js')\n * }\n * ```\n */\nexport const isNodeEnv = isNodeEnvironment\n\n/**\n * Detects if running in Worker environment (Web Workers, Service Workers)\n * @returns true if running in a Worker context\n * @example\n * ```ts\n * if (isWorkerEnvironment()) {\n * console.log('Running in Web Worker')\n * }\n * ```\n */\nexport const isWorkerEnvironment = (): boolean => {\n try {\n return (\n typeof importScripts === 'function' &&\n typeof self !== 'undefined' &&\n // Check for Worker global scope without importing types\n 'importScripts' in self\n )\n } catch {\n return false\n }\n}\n\n/**\n * Detects if Web Crypto API is available in the current environment\n * @returns true if crypto.getRandomValues and crypto.subtle are available\n * @example\n * ```ts\n * if (isWebCryptoAvailable()) {\n * const array = new Uint8Array(16)\n * crypto.getRandomValues(array)\n * }\n * ```\n */\nexport const isWebCryptoAvailable = (): boolean => {\n try {\n return (\n typeof crypto !== 'undefined' &&\n typeof crypto.getRandomValues === 'function' &&\n typeof crypto.subtle === 'object'\n )\n } catch {\n return false\n }\n}\n\n/**\n * Detects if Node.js crypto module is available\n * @returns true if Node.js crypto module with hash and random functions is available\n * @example\n * ```ts\n * if (isNodeCryptoAvailable()) {\n * const crypto = require('crypto')\n * const hash = crypto.createHash('sha256')\n * }\n * ```\n */\nexport const isNodeCryptoAvailable = (): boolean => {\n try {\n if (!isNodeEnv()) return false\n const crypto = require('crypto')\n return typeof crypto.createHash === 'function' && typeof crypto.randomBytes === 'function'\n } catch {\n return false\n }\n}\n\n/**\n * Gets the current environment type with automatic detection\n * @returns The detected environment type\n * @example\n * ```ts\n * const env = getEnvironmentType()\n * switch (env) {\n * case 'node': console.log('Server-side'); break\n * case 'browser': console.log('Client-side'); break\n * case 'worker': console.log('Worker thread'); break\n * case 'unknown': console.log('Unknown environment'); break\n * }\n * ```\n */\nexport const getEnvironmentType = (): 'node' | 'browser' | 'worker' | 'unknown' => {\n if (isNodeEnv()) return 'node'\n if (isWorkerEnvironment()) return 'worker'\n if (isBrowserEnv()) return 'browser'\n return 'unknown'\n}\n\n/**\n * Gets available crypto capabilities for the current environment\n * @returns Object containing crypto capability information\n * @example\n * ```ts\n * const caps = getCryptoCapabilities()\n * console.log(caps)\n * // {\n * // webCrypto: true,\n * // nodeCrypto: false,\n * // fallbackOnly: false,\n * // environment: 'browser'\n * // }\n * ```\n */\nexport const getCryptoCapabilities = () => {\n return {\n webCrypto: isWebCryptoAvailable(),\n nodeCrypto: isNodeCryptoAvailable(),\n fallbackOnly: !isWebCryptoAvailable() && !isNodeCryptoAvailable(),\n environment: getEnvironmentType(),\n }\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBO,IAAM,eAAe;AAYrB,IAAM,YAAY;AAYlB,IAAM,sBAAsB,MAAe;AAChD,MAAI;AACF,WACE,OAAO,kBAAkB,cACzB,OAAO,SAAS;AAAA,IAEhB,mBAAmB;AAAA,EAEvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAaO,IAAM,uBAAuB,MAAe;AACjD,MAAI;AACF,WACE,OAAO,WAAW,eAClB,OAAO,OAAO,oBAAoB,cAClC,OAAO,OAAO,WAAW;AAAA,EAE7B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAaO,IAAM,wBAAwB,MAAe;AAClD,MAAI;AACF,QAAI,CAAC,UAAU,EAAG,QAAO;AACzB,UAAMA,UAAS,UAAQ,QAAQ;AAC/B,WAAO,OAAOA,QAAO,eAAe,cAAc,OAAOA,QAAO,gBAAgB;AAAA,EAClF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAgBO,IAAM,qBAAqB,MAAiD;AACjF,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,oBAAoB,EAAG,QAAO;AAClC,MAAI,aAAa,EAAG,QAAO;AAC3B,SAAO;AACT;AAiBO,IAAM,wBAAwB,MAAM;AACzC,SAAO;AAAA,IACL,WAAW,qBAAqB;AAAA,IAChC,YAAY,sBAAsB;AAAA,IAClC,cAAc,CAAC,qBAAqB,KAAK,CAAC,sBAAsB;AAAA,IAChE,aAAa,mBAAmB;AAAA,EAClC;AACF;","names":["crypto"]}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-NSBPE2FW.js";
|
|
4
|
+
|
|
5
|
+
// src/dates.ts
|
|
6
|
+
var dates_exports = {};
|
|
7
|
+
__export(dates_exports, {
|
|
8
|
+
addDays: () => addDays,
|
|
9
|
+
addMonths: () => addMonths,
|
|
10
|
+
addNowDays: () => addNowDays,
|
|
11
|
+
addNowMonths: () => addNowMonths,
|
|
12
|
+
addNowSeconds: () => addNowSeconds,
|
|
13
|
+
addNowYears: () => addNowYears,
|
|
14
|
+
addSeconds: () => addSeconds,
|
|
15
|
+
addYears: () => addYears,
|
|
16
|
+
areDatesEqualWithTolerance: () => areDatesEqualWithTolerance,
|
|
17
|
+
dayOfWeek: () => dayOfWeek,
|
|
18
|
+
diffBusinessDays: () => diffBusinessDays,
|
|
19
|
+
diffDays: () => diffDays,
|
|
20
|
+
diffMilliSeconds: () => diffMilliSeconds,
|
|
21
|
+
diffMonths: () => diffMonths,
|
|
22
|
+
diffYears: () => diffYears,
|
|
23
|
+
excelToDate: () => excelToDate,
|
|
24
|
+
format: () => format,
|
|
25
|
+
formatForMysql: () => formatForMysql,
|
|
26
|
+
formatNow: () => formatNow,
|
|
27
|
+
fromNow: () => fromNow,
|
|
28
|
+
getFirstDayOfYear: () => getFirstDayOfYear,
|
|
29
|
+
getFirstWorkdayAfterMonths: () => getFirstWorkdayAfterMonths,
|
|
30
|
+
getFirstWorkdayOfMonth: () => getFirstWorkdayOfMonth,
|
|
31
|
+
getLastDayOfYear: () => getLastDayOfYear,
|
|
32
|
+
getLastWorkdayOfMonth: () => getLastWorkdayOfMonth,
|
|
33
|
+
isDateTime: () => isDateTime,
|
|
34
|
+
isEqualsDateTimeByDay: () => isEqualsDateTimeByDay,
|
|
35
|
+
isExpired: () => isExpired,
|
|
36
|
+
isNew: () => isNew,
|
|
37
|
+
isWeekday: () => isWeekday,
|
|
38
|
+
longString: () => longString,
|
|
39
|
+
now: () => now,
|
|
40
|
+
toDate: () => toDate,
|
|
41
|
+
toDateFromString: () => toDateFromString,
|
|
42
|
+
toISO: () => toISO,
|
|
43
|
+
weekOfYear: () => weekOfYear
|
|
44
|
+
});
|
|
45
|
+
import dayjs from "dayjs";
|
|
46
|
+
import utc from "dayjs/plugin/utc.js";
|
|
47
|
+
import relativeTime from "dayjs/plugin/relativeTime.js";
|
|
48
|
+
import weekOfYearPlugin from "dayjs/plugin/weekOfYear.js";
|
|
49
|
+
import customParseFormat from "dayjs/plugin/customParseFormat.js";
|
|
50
|
+
import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
|
|
51
|
+
import isSameOrBefore from "dayjs/plugin/isSameOrBefore.js";
|
|
52
|
+
import weekday from "dayjs/plugin/weekday.js";
|
|
53
|
+
import localeData from "dayjs/plugin/localeData.js";
|
|
54
|
+
import localizedFormat from "dayjs/plugin/localizedFormat.js";
|
|
55
|
+
import "dayjs/locale/es.js";
|
|
56
|
+
import * as dateValidator from "iso-datestring-validator";
|
|
57
|
+
var { isValidDate, isValidISODateString } = dateValidator;
|
|
58
|
+
dayjs.extend(utc);
|
|
59
|
+
dayjs.extend(relativeTime);
|
|
60
|
+
dayjs.extend(weekOfYearPlugin);
|
|
61
|
+
dayjs.extend(customParseFormat);
|
|
62
|
+
dayjs.extend(isSameOrAfter);
|
|
63
|
+
dayjs.extend(isSameOrBefore);
|
|
64
|
+
dayjs.extend(weekday);
|
|
65
|
+
dayjs.extend(localeData);
|
|
66
|
+
dayjs.extend(localizedFormat);
|
|
67
|
+
dayjs.locale("es");
|
|
68
|
+
var formatNow = (formatStr = "DD/MM/YYYY") => dayjs().format(formatStr);
|
|
69
|
+
var format = (value, formatStr = "DD/MM/YYYY") => {
|
|
70
|
+
if (!value) return "";
|
|
71
|
+
if (formatStr.toLowerCase() === "gg") return weekOfYear(value);
|
|
72
|
+
else if (formatStr.toLowerCase() === "gggg") return dayjs(value).format("YY") + weekOfYear(value);
|
|
73
|
+
return dayjs(value).format(formatStr);
|
|
74
|
+
};
|
|
75
|
+
var longString = (value = null) => {
|
|
76
|
+
if (!value) return "";
|
|
77
|
+
return dayjs(value).format("LL");
|
|
78
|
+
};
|
|
79
|
+
var toDate = (value, isUtc) => {
|
|
80
|
+
if (isUtc === void 0) return dayjs(value).toDate();
|
|
81
|
+
return isUtc ? dayjs.utc(value).toDate() : dayjs(value).toDate();
|
|
82
|
+
};
|
|
83
|
+
var toDateFromString = (dateString, format2) => {
|
|
84
|
+
const formatRegex = {
|
|
85
|
+
"DD/MM/YYYY": /^(\d{2})\/(\d{2})\/(\d{4})$/,
|
|
86
|
+
"YYYY-MM-DD": /^(\d{4})-(\d{2})-(\d{2})$/,
|
|
87
|
+
"MM/DD/YYYY": /^(\d{2})\/(\d{2})\/(\d{4})$/,
|
|
88
|
+
"YYYY/MM/DD": /^(\d{4})\/(\d{2})\/(\d{2})$/,
|
|
89
|
+
"DD-MM-YYYY": /^(\d{2})-(\d{2})-(\d{4})$/,
|
|
90
|
+
"MM-DD-YYYY": /^(\d{2})-(\d{2})-(\d{4})$/,
|
|
91
|
+
YYYYMMDD: /^(\d{4})(\d{2})(\d{2})$/,
|
|
92
|
+
DDMMYYYY: /^(\d{2})(\d{2})(\d{4})$/,
|
|
93
|
+
MMDDYYYY: /^(\d{2})(\d{2})(\d{4})$/,
|
|
94
|
+
"YYYY.MM.DD": /^(\d{4})\.(\d{2})\.(\d{2})$/,
|
|
95
|
+
"DD.MM.YYYY": /^(\d{2})\.(\d{2})\.(\d{4})$/,
|
|
96
|
+
"MM.DD.YYYY": /^(\d{2})\.(\d{2})\.(\d{4})$/
|
|
97
|
+
};
|
|
98
|
+
const regex = formatRegex[format2];
|
|
99
|
+
if (!regex) return null;
|
|
100
|
+
const match = dateString.match(regex);
|
|
101
|
+
if (match) {
|
|
102
|
+
let year, month, day;
|
|
103
|
+
if (format2.startsWith("YYYY")) {
|
|
104
|
+
year = parseInt(match[1], 10);
|
|
105
|
+
month = parseInt(match[2], 10) - 1;
|
|
106
|
+
day = parseInt(match[3], 10);
|
|
107
|
+
} else if (format2.startsWith("DD")) {
|
|
108
|
+
day = parseInt(match[1], 10);
|
|
109
|
+
month = parseInt(match[2], 10) - 1;
|
|
110
|
+
year = parseInt(match[3], 10);
|
|
111
|
+
} else if (format2.startsWith("MM")) {
|
|
112
|
+
month = parseInt(match[1], 10) - 1;
|
|
113
|
+
day = parseInt(match[2], 10);
|
|
114
|
+
year = parseInt(match[3], 10);
|
|
115
|
+
} else {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return new Date(year, month, day);
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
};
|
|
122
|
+
var now = () => dayjs().toDate();
|
|
123
|
+
var isNew = (value, daysnew = 1) => dayjs().isSameOrBefore(dayjs(value).add(daysnew, "days"));
|
|
124
|
+
var toISO = (value = null, isUtc = false) => {
|
|
125
|
+
if (!value) return dayjs().toISOString();
|
|
126
|
+
return isUtc ? dayjs.utc(value).toISOString() : dayjs(value).toISOString();
|
|
127
|
+
};
|
|
128
|
+
var fromNow = (value) => dayjs(value).fromNow();
|
|
129
|
+
var dayOfWeek = (value = null) => {
|
|
130
|
+
if (!value) return dayjs().format("d");
|
|
131
|
+
return dayjs(value).format("d");
|
|
132
|
+
};
|
|
133
|
+
var weekOfYear = (value = null) => {
|
|
134
|
+
if (!value) return dayjs().locale("es").week().toString().padStart(2, "0");
|
|
135
|
+
return dayjs(value).locale("es").week().toString().padStart(2, "0");
|
|
136
|
+
};
|
|
137
|
+
var diffDays = (start, end = null, precise = false) => {
|
|
138
|
+
const v2 = !end ? dayjs() : dayjs(end);
|
|
139
|
+
return dayjs(start).diff(v2, "days", precise);
|
|
140
|
+
};
|
|
141
|
+
var diffBusinessDays = (start, end = null, precise = false) => {
|
|
142
|
+
let startDate = dayjs(start).startOf("day");
|
|
143
|
+
let endDate = end ? dayjs(end).startOf("day") : dayjs().startOf("day");
|
|
144
|
+
if (startDate.isAfter(endDate)) {
|
|
145
|
+
;
|
|
146
|
+
[startDate, endDate] = [endDate, startDate];
|
|
147
|
+
}
|
|
148
|
+
let businessDays = 0;
|
|
149
|
+
let currentDate = startDate;
|
|
150
|
+
while (currentDate.isBefore(endDate)) {
|
|
151
|
+
if (isWeekday(currentDate)) {
|
|
152
|
+
businessDays++;
|
|
153
|
+
}
|
|
154
|
+
currentDate = currentDate.add(1, "day");
|
|
155
|
+
}
|
|
156
|
+
if (precise) {
|
|
157
|
+
const fractionalDay = endDate.diff(currentDate, "hours") / 24;
|
|
158
|
+
businessDays += fractionalDay;
|
|
159
|
+
}
|
|
160
|
+
return businessDays;
|
|
161
|
+
};
|
|
162
|
+
var diffMonths = (value, valueRefOrNow = null, precise = false) => {
|
|
163
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
164
|
+
return dayjs(value).diff(v2, "months", precise);
|
|
165
|
+
};
|
|
166
|
+
var diffYears = (value, valueRefOrNow = null, precise = false) => {
|
|
167
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
168
|
+
return dayjs(value).diff(v2, "years", precise);
|
|
169
|
+
};
|
|
170
|
+
var diffMilliSeconds = (value, valueRefOrNow = null) => {
|
|
171
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
172
|
+
return dayjs(value).diff(v2, "milliseconds", true);
|
|
173
|
+
};
|
|
174
|
+
var addDays = (value, nDays = 1) => dayjs(value).add(nDays, "days").toDate();
|
|
175
|
+
var addSeconds = (value, nSeconds = 1) => dayjs(value).add(nSeconds, "seconds").toDate();
|
|
176
|
+
var areDatesEqualWithTolerance = (date1, date2) => {
|
|
177
|
+
const tolerance = 2 * 1e3;
|
|
178
|
+
return Math.abs(dayjs(date1).diff(dayjs(date2))) <= tolerance;
|
|
179
|
+
};
|
|
180
|
+
var addNowDays = (nDays = 1) => dayjs().add(nDays, "days").toDate();
|
|
181
|
+
var addNowSeconds = (nSeconds = 60) => dayjs().add(nSeconds, "seconds").toDate();
|
|
182
|
+
var addMonths = (value, nMonths = 1) => dayjs(value).add(nMonths, "months").toDate();
|
|
183
|
+
var addNowMonths = (nMonths = 1) => dayjs().add(nMonths, "months").toDate();
|
|
184
|
+
var addYears = (value, nYears = 1) => dayjs(value).add(nYears, "years").toDate();
|
|
185
|
+
var addNowYears = (nYears = 1) => dayjs().add(nYears, "years").toDate();
|
|
186
|
+
var excelToDate = (value) => {
|
|
187
|
+
try {
|
|
188
|
+
const d = Number(value);
|
|
189
|
+
if (d >= 18e3 && d <= 3e5) return new Date(Math.round((d - 25569) * 86400 * 1e3));
|
|
190
|
+
return null;
|
|
191
|
+
} catch (_err) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
var isDateTime = (value) => {
|
|
196
|
+
try {
|
|
197
|
+
if (!value) return false;
|
|
198
|
+
if (typeof value === "number") return false;
|
|
199
|
+
else if (typeof value === "boolean") return false;
|
|
200
|
+
else if (typeof value === "string" && !isValidISODateString(value) && !isValidDate(value) && !isValidDate(value, ""))
|
|
201
|
+
return false;
|
|
202
|
+
else if (typeof value === "object" && !(value instanceof Date) && !dayjs.isDayjs(value))
|
|
203
|
+
return false;
|
|
204
|
+
return dayjs(value).isValid();
|
|
205
|
+
} catch (_err) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
var isEqualsDateTimeByDay = (value1, value2) => {
|
|
210
|
+
if (!isDateTime(value1)) return false;
|
|
211
|
+
if (!isDateTime(value2)) return false;
|
|
212
|
+
return dayjs(value1).isSame(dayjs(value2), "day");
|
|
213
|
+
};
|
|
214
|
+
var isExpired = (value, valueRefOrNow = null) => {
|
|
215
|
+
const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow);
|
|
216
|
+
if (isDateTime(value)) {
|
|
217
|
+
return v2.isAfter(value);
|
|
218
|
+
}
|
|
219
|
+
return true;
|
|
220
|
+
};
|
|
221
|
+
var formatForMysql = (fecha) => {
|
|
222
|
+
if (!fecha) return null;
|
|
223
|
+
fecha.setMinutes(fecha.getMinutes() - fecha.getTimezoneOffset());
|
|
224
|
+
return fecha.toISOString().slice(0, 19).replace("T", " ");
|
|
225
|
+
};
|
|
226
|
+
var getFirstWorkdayOfMonth = (month) => {
|
|
227
|
+
const monthToUse = month === void 0 ? dayjs().month() : month;
|
|
228
|
+
let firstDay = dayjs().month(monthToUse).startOf("month");
|
|
229
|
+
while (firstDay.day() === 0 || firstDay.day() === 6) {
|
|
230
|
+
firstDay = firstDay.add(1, "day");
|
|
231
|
+
}
|
|
232
|
+
return firstDay.toDate();
|
|
233
|
+
};
|
|
234
|
+
var getLastWorkdayOfMonth = (month) => {
|
|
235
|
+
const monthToUse = month === void 0 ? dayjs().month() : month;
|
|
236
|
+
let lastDay = dayjs().month(monthToUse).endOf("month");
|
|
237
|
+
while (lastDay.day() === 0 || lastDay.day() === 6) {
|
|
238
|
+
lastDay = lastDay.subtract(1, "day");
|
|
239
|
+
}
|
|
240
|
+
return lastDay.toDate();
|
|
241
|
+
};
|
|
242
|
+
var getFirstWorkdayAfterMonths = (initialDate, n) => {
|
|
243
|
+
const startDate = dayjs(initialDate);
|
|
244
|
+
const monthsToAdd = n;
|
|
245
|
+
const targetDate = startDate.add(monthsToAdd, "months");
|
|
246
|
+
let firstWorkday = targetDate.startOf("month");
|
|
247
|
+
while (firstWorkday.day() === 0 || firstWorkday.day() === 6) {
|
|
248
|
+
firstWorkday = firstWorkday.add(1, "day");
|
|
249
|
+
}
|
|
250
|
+
return firstWorkday.toDate();
|
|
251
|
+
};
|
|
252
|
+
var getFirstDayOfYear = () => dayjs().startOf("year").toDate();
|
|
253
|
+
var getLastDayOfYear = () => dayjs().endOf("year").toDate();
|
|
254
|
+
var isWeekday = (date) => {
|
|
255
|
+
const d = dayjs(date);
|
|
256
|
+
const dayOfWeek2 = d.day();
|
|
257
|
+
return dayOfWeek2 !== 0 && dayOfWeek2 !== 6;
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
export {
|
|
261
|
+
formatNow,
|
|
262
|
+
format,
|
|
263
|
+
longString,
|
|
264
|
+
toDate,
|
|
265
|
+
toDateFromString,
|
|
266
|
+
now,
|
|
267
|
+
isNew,
|
|
268
|
+
toISO,
|
|
269
|
+
fromNow,
|
|
270
|
+
dayOfWeek,
|
|
271
|
+
weekOfYear,
|
|
272
|
+
diffDays,
|
|
273
|
+
diffBusinessDays,
|
|
274
|
+
diffMonths,
|
|
275
|
+
diffYears,
|
|
276
|
+
diffMilliSeconds,
|
|
277
|
+
addDays,
|
|
278
|
+
addSeconds,
|
|
279
|
+
areDatesEqualWithTolerance,
|
|
280
|
+
addNowDays,
|
|
281
|
+
addNowSeconds,
|
|
282
|
+
addMonths,
|
|
283
|
+
addNowMonths,
|
|
284
|
+
addYears,
|
|
285
|
+
addNowYears,
|
|
286
|
+
excelToDate,
|
|
287
|
+
isDateTime,
|
|
288
|
+
isEqualsDateTimeByDay,
|
|
289
|
+
isExpired,
|
|
290
|
+
formatForMysql,
|
|
291
|
+
getFirstWorkdayOfMonth,
|
|
292
|
+
getLastWorkdayOfMonth,
|
|
293
|
+
getFirstWorkdayAfterMonths,
|
|
294
|
+
getFirstDayOfYear,
|
|
295
|
+
getLastDayOfYear,
|
|
296
|
+
isWeekday,
|
|
297
|
+
dates_exports
|
|
298
|
+
};
|
|
299
|
+
//# sourceMappingURL=chunk-C3D7YZVE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dates.ts"],"sourcesContent":["/**\n * Date manipulation and formatting utilities\n * Consolidated from specialized/date module\n */\n\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc.js'\nimport relativeTime from 'dayjs/plugin/relativeTime.js'\nimport weekOfYearPlugin from 'dayjs/plugin/weekOfYear.js'\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js'\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter.js'\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore.js'\nimport weekday from 'dayjs/plugin/weekday.js'\nimport localeData from 'dayjs/plugin/localeData.js'\nimport localizedFormat from 'dayjs/plugin/localizedFormat.js'\nimport 'dayjs/locale/es.js'\nimport * as dateValidator from 'iso-datestring-validator'\nconst { isValidDate, isValidISODateString } = dateValidator\n\n// Configure dayjs plugins\ndayjs.extend(utc)\ndayjs.extend(relativeTime)\ndayjs.extend(weekOfYearPlugin)\ndayjs.extend(customParseFormat)\ndayjs.extend(isSameOrAfter)\ndayjs.extend(isSameOrBefore)\ndayjs.extend(weekday)\ndayjs.extend(localeData)\ndayjs.extend(localizedFormat)\n\n// Set default locale to Spanish\ndayjs.locale('es')\n\n/**\n * Formats current date with specified format\n */\nexport const formatNow = (formatStr = 'DD/MM/YYYY'): string => dayjs().format(formatStr)\n\n/**\n * Formats date with specified format string (Spanish locale by default)\n *\n * Flexible date formatter with special support for week-of-year formats.\n * Uses dayjs Spanish locale for month/day names.\n *\n * @param value - Date value to format (Date, string, timestamp, dayjs)\n * @param formatStr - Format string (default: 'DD/MM/YYYY' for Spanish dates)\n * @returns Formatted date string, empty string if value is null/undefined\n *\n * @example\n * ```typescript\n * const date = new Date('2024-03-15')\n *\n * format(date) // '15/03/2024' (Spanish default)\n * format(date, 'DD-MM-YYYY') // '15-03-2024'\n * format(date, 'YYYY/MM/DD') // '2024/03/15'\n * format(date, 'DD MMM YYYY') // '15 mar 2024' (Spanish month)\n * format(date, 'dddd, DD MMMM') // 'viernes, 15 marzo' (Spanish)\n * format(date, 'gg') // '11' (week of year)\n * format(date, 'gggg') // '2411' (year + week)\n * ```\n *\n * @see {@link longString} for localized long format\n * @see {@link formatNow} for current date formatting\n */\nexport const format = (value: any, formatStr = 'DD/MM/YYYY'): string => {\n if (!value) return ''\n if (formatStr.toLowerCase() === 'gg') return weekOfYear(value)\n else if (formatStr.toLowerCase() === 'gggg') return dayjs(value).format('YY') + weekOfYear(value)\n return dayjs(value).format(formatStr)\n}\n\n/**\n * Converts date to localized long string format (Spanish)\n *\n * Formats date as human-readable string with full month name in Spanish locale.\n * Uses dayjs 'LL' format: \"15 de marzo de 2024\"\n *\n * @param value - Date value to format (null returns empty string)\n * @returns Localized long format date string (e.g., \"15 de marzo de 2024\")\n *\n * @example\n * ```typescript\n * longString(new Date('2024-03-15')) // \"15 de marzo de 2024\"\n * longString('2024-12-25') // \"25 de diciembre de 2024\"\n * longString(null) // \"\"\n *\n * // Real-world: Document headers\n * const reportDate = longString(new Date())\n * console.log(`Informe generado el ${reportDate}`)\n * // \"Informe generado el 15 de marzo de 2024\"\n * ```\n *\n * @see {@link format} for custom format strings\n */\nexport const longString = (value: any = null) => {\n if (!value) return ''\n return dayjs(value).format('LL')\n}\n\n/**\n * Converts value to native JavaScript Date object\n */\nexport const toDate = (value: any, isUtc?: boolean) => {\n if (isUtc === undefined) return dayjs(value).toDate()\n return isUtc ? dayjs.utc(value).toDate() : dayjs(value).toDate()\n}\n\ntype DateStringFormat =\n | 'DD/MM/YYYY'\n | 'YYYY-MM-DD'\n | 'MM/DD/YYYY'\n | 'YYYY/MM/DD'\n | 'DD-MM-YYYY'\n | 'MM-DD-YYYY'\n | 'YYYYMMDD'\n | 'DDMMYYYY'\n | 'MMDDYYYY'\n | 'YYYY.MM.DD'\n | 'DD.MM.YYYY'\n | 'MM.DD.YYYY'\n\n/**\n * Parses date string with specific format to native Date object\n *\n * Strict parser that validates format and creates Date from structured date strings.\n * Supports 12 common date formats with validation.\n *\n * @param dateString - Date string to parse\n * @param format - Expected format (DD/MM/YYYY, YYYY-MM-DD, etc.)\n * @returns Date object or null if invalid\n *\n * @example\n * ```typescript\n * toDateFromString('15/03/2024', 'DD/MM/YYYY') // Date object\n * toDateFromString('2024-03-15', 'YYYY-MM-DD') // Date object\n * toDateFromString('invalid', 'DD/MM/YYYY') // null\n * ```\n *\n * @see {@link format} for formatting dates\n */\nexport const toDateFromString = (dateString: string, format: DateStringFormat): Date | null => {\n const formatRegex: Record<string, RegExp> = {\n 'DD/MM/YYYY': /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/,\n 'YYYY-MM-DD': /^(\\d{4})-(\\d{2})-(\\d{2})$/,\n 'MM/DD/YYYY': /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/,\n 'YYYY/MM/DD': /^(\\d{4})\\/(\\d{2})\\/(\\d{2})$/,\n 'DD-MM-YYYY': /^(\\d{2})-(\\d{2})-(\\d{4})$/,\n 'MM-DD-YYYY': /^(\\d{2})-(\\d{2})-(\\d{4})$/,\n YYYYMMDD: /^(\\d{4})(\\d{2})(\\d{2})$/,\n DDMMYYYY: /^(\\d{2})(\\d{2})(\\d{4})$/,\n MMDDYYYY: /^(\\d{2})(\\d{2})(\\d{4})$/,\n 'YYYY.MM.DD': /^(\\d{4})\\.(\\d{2})\\.(\\d{2})$/,\n 'DD.MM.YYYY': /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/,\n 'MM.DD.YYYY': /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/,\n }\n\n const regex = formatRegex[format]\n if (!regex) return null\n\n const match = dateString.match(regex)\n if (match) {\n let year: number, month: number, day: number\n\n if (format.startsWith('YYYY')) {\n year = parseInt(match[1], 10)\n month = parseInt(match[2], 10) - 1\n day = parseInt(match[3], 10)\n } else if (format.startsWith('DD')) {\n day = parseInt(match[1], 10)\n month = parseInt(match[2], 10) - 1\n year = parseInt(match[3], 10)\n } else if (format.startsWith('MM')) {\n month = parseInt(match[1], 10) - 1\n day = parseInt(match[2], 10)\n year = parseInt(match[3], 10)\n } else {\n return null\n }\n\n return new Date(year, month, day)\n }\n\n return null\n}\n\n/**\n * Returns current date\n */\nexport const now = () => dayjs().toDate()\n\n/**\n * Checks if date is considered \"new\" based on days threshold\n */\nexport const isNew = (value: any, daysnew = 1) =>\n dayjs().isSameOrBefore(dayjs(value).add(daysnew, 'days'))\n\n/**\n * Converts date to ISO 8601 string (YYYY-MM-DDTHH:mm:ss.sssZ)\n *\n * Standard ISO format for API communication and storage.\n *\n * @param value - Date to convert (null = now)\n * @param isUtc - Force UTC timezone (default: false, uses local)\n * @returns ISO 8601 formatted string\n *\n * @example\n * ```typescript\n * toISO() // \"2024-03-15T10:30:00.000+01:00\" (now, local time)\n * toISO(new Date('2024-03-15')) // \"2024-03-15T00:00:00.000+01:00\"\n * toISO(new Date('2024-03-15'), true) // \"2024-03-14T23:00:00.000Z\" (UTC)\n * ```\n */\nexport const toISO = (value: any = null, isUtc = false) => {\n if (!value) return dayjs().toISOString()\n return isUtc ? dayjs.utc(value).toISOString() : dayjs(value).toISOString()\n}\n\n/**\n * Returns relative time from now in Spanish (e.g., \"hace 2 horas\")\n *\n * @param value - Date to compare with now\n * @returns Relative time string in Spanish\n *\n * @example\n * ```typescript\n * const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000)\n * fromNow(twoHoursAgo) // \"hace 2 horas\"\n * ```\n */\nexport const fromNow = (value: any) => dayjs(value).fromNow()\n\n/**\n * Returns day of week (0-6, Sunday is 0)\n */\nexport const dayOfWeek = (value: any = null) => {\n if (!value) return dayjs().format('d')\n return dayjs(value).format('d')\n}\n\n/**\n * Returns week of year with zero padding\n */\nexport const weekOfYear = (value: any = null) => {\n if (!value) return dayjs().locale('es').week().toString().padStart(2, '0')\n return dayjs(value).locale('es').week().toString().padStart(2, '0')\n}\n\n/**\n * Calculates difference in days between two dates\n */\nexport const diffDays = (start: any, end: any = null, precise = false) => {\n const v2 = !end ? dayjs() : dayjs(end)\n return dayjs(start).diff(v2, 'days', precise)\n}\n\n/**\n * Calculates difference in business days (weekdays only, excludes weekends)\n *\n * Counts Mon-Fri between two dates, excluding Saturdays and Sundays.\n * Does NOT account for holidays.\n *\n * @param start - Start date\n * @param end - End date (null = now)\n * @param precise - Include fractional days (default: false)\n * @returns Number of business days (Mon-Fri)\n *\n * @example\n * ```typescript\n * // Monday to Friday (same week)\n * diffBusinessDays('2024-03-11', '2024-03-15') // 4 business days\n *\n * // Including weekend (skip Sat/Sun)\n * diffBusinessDays('2024-03-15', '2024-03-18') // 1 (Fri to Mon)\n *\n * // Real-world: SLA calculation\n * const ticketCreated = new Date('2024-03-11')\n * const businessDays = diffBusinessDays(ticketCreated)\n * if (businessDays > 5) {\n * console.log('⚠️ SLA violation: > 5 business days')\n * }\n * ```\n */\nexport const diffBusinessDays = (start: any, end: any = null, precise = false) => {\n let startDate = dayjs(start).startOf('day')\n let endDate = end ? dayjs(end).startOf('day') : dayjs().startOf('day')\n\n if (startDate.isAfter(endDate)) {\n ;[startDate, endDate] = [endDate, startDate]\n }\n\n let businessDays = 0\n let currentDate = startDate\n\n while (currentDate.isBefore(endDate)) {\n if (isWeekday(currentDate)) {\n businessDays++\n }\n currentDate = currentDate.add(1, 'day')\n }\n\n if (precise) {\n const fractionalDay = endDate.diff(currentDate, 'hours') / 24\n businessDays += fractionalDay\n }\n\n return businessDays\n}\n\n/**\n * Calculates difference in months between two dates\n */\nexport const diffMonths = (value: any, valueRefOrNow: any = null, precise = false) => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n return dayjs(value).diff(v2, 'months', precise)\n}\n\n/**\n * Calculates difference in years between two dates\n */\nexport const diffYears = (value: any, valueRefOrNow: any = null, precise = false) => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n return dayjs(value).diff(v2, 'years', precise)\n}\n\n/**\n * Calculates difference in milliseconds between two dates\n */\nexport const diffMilliSeconds = (value: any, valueRefOrNow: any = null) => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n return dayjs(value).diff(v2, 'milliseconds', true)\n}\n\n/**\n * Adds days to a date\n */\nexport const addDays = (value: any, nDays: number = 1) => dayjs(value).add(nDays, 'days').toDate()\n\n/**\n * Adds seconds to a date\n */\nexport const addSeconds = (value: any, nSeconds: number = 1) =>\n dayjs(value).add(nSeconds, 'seconds').toDate()\n\n/**\n * Compares two dates with ± 2 seconds tolerance\n */\nexport const areDatesEqualWithTolerance = (date1: Date, date2: Date): boolean => {\n const tolerance = 2 * 1000 // 2 seconds in milliseconds\n return Math.abs(dayjs(date1).diff(dayjs(date2))) <= tolerance\n}\n\n/**\n * Adds days to current date\n */\nexport const addNowDays = (nDays: number = 1) => dayjs().add(nDays, 'days').toDate()\n\n/**\n * Adds seconds to current date\n */\nexport const addNowSeconds = (nSeconds: number = 60) => dayjs().add(nSeconds, 'seconds').toDate()\n\n/**\n * Adds months to a date\n */\nexport const addMonths = (value: any, nMonths: number = 1) =>\n dayjs(value).add(nMonths, 'months').toDate()\n\n/**\n * Adds months to current date\n */\nexport const addNowMonths = (nMonths: number = 1) => dayjs().add(nMonths, 'months').toDate()\n\n/**\n * Adds years to a date\n */\nexport const addYears = (value: any, nYears: number = 1) =>\n dayjs(value).add(nYears, 'years').toDate()\n\n/**\n * Adds years to current date\n */\nexport const addNowYears = (nYears: number = 1) => dayjs().add(nYears, 'years').toDate()\n\n/**\n * Converts Excel serial number to Date\n * JavaScript dates can be constructed by passing milliseconds since Unix epoch\n */\nexport const excelToDate = (value: any) => {\n try {\n const d: number = Number(value)\n if (d >= 18000 && d <= 300000) return new Date(Math.round((d - 25569) * 86400 * 1000))\n return null\n } catch (_err) {\n return null\n }\n}\n\n/**\n * Detects if a variable contains a valid date\n */\nexport const isDateTime = (value: any): boolean => {\n try {\n if (!value) return false\n if (typeof value === 'number') return false\n else if (typeof value === 'boolean') return false\n else if (\n typeof value === 'string' &&\n !isValidISODateString(value) &&\n !isValidDate(value) &&\n !isValidDate(value, '')\n )\n return false\n else if (typeof value === 'object' && !(value instanceof Date) && !dayjs.isDayjs(value))\n return false\n return dayjs(value).isValid()\n } catch (_err) {\n return false\n }\n}\n\n/**\n * Compares dates by day\n */\nexport const isEqualsDateTimeByDay = (value1: any, value2: any): boolean => {\n if (!isDateTime(value1)) return false\n if (!isDateTime(value2)) return false\n return dayjs(value1).isSame(dayjs(value2), 'day')\n}\n\n/**\n * Checks if a date has expired relative to current time\n */\nexport const isExpired = (value: any, valueRefOrNow: any = null): boolean => {\n const v2 = !valueRefOrNow ? dayjs() : dayjs(valueRefOrNow)\n if (isDateTime(value)) {\n return v2.isAfter(value)\n }\n return true\n}\n\n/**\n * Formats date for MySQL database\n */\nexport const formatForMysql = (fecha: Date | null) => {\n if (!fecha) return null\n fecha.setMinutes(fecha.getMinutes() - fecha.getTimezoneOffset())\n return fecha.toISOString().slice(0, 19).replace('T', ' ')\n}\n\n/**\n * Gets first workday of month\n */\nexport const getFirstWorkdayOfMonth = (month?: number) => {\n const monthToUse = month === undefined ? dayjs().month() : month\n let firstDay = dayjs().month(monthToUse).startOf('month')\n while (firstDay.day() === 0 || firstDay.day() === 6) {\n firstDay = firstDay.add(1, 'day')\n }\n return firstDay.toDate()\n}\n\n/**\n * Gets last workday of month\n */\nexport const getLastWorkdayOfMonth = (month?: number) => {\n const monthToUse = month === undefined ? dayjs().month() : month\n let lastDay = dayjs().month(monthToUse).endOf('month')\n while (lastDay.day() === 0 || lastDay.day() === 6) {\n lastDay = lastDay.subtract(1, 'day')\n }\n return lastDay.toDate()\n}\n\n/**\n * Gets first workday after adding specified months\n */\nexport const getFirstWorkdayAfterMonths = (initialDate: Date, n: number) => {\n const startDate = dayjs(initialDate)\n const monthsToAdd = n\n const targetDate = startDate.add(monthsToAdd, 'months')\n\n let firstWorkday = targetDate.startOf('month')\n while (firstWorkday.day() === 0 || firstWorkday.day() === 6) {\n firstWorkday = firstWorkday.add(1, 'day')\n }\n return firstWorkday.toDate()\n}\n\n/**\n * Gets first day of current year\n */\nexport const getFirstDayOfYear = () => dayjs().startOf('year').toDate()\n\n/**\n * Gets last day of current year\n */\nexport const getLastDayOfYear = () => dayjs().endOf('year').toDate()\n\n/**\n * Checks if date is a weekday (not Saturday or Sunday)\n */\nexport const isWeekday = (date: any) => {\n const d = dayjs(date)\n const dayOfWeek = d.day() // 0 = Sunday, 1 = Monday, ..., 6 = Saturday\n return dayOfWeek !== 0 && dayOfWeek !== 6 // Exclude Saturdays and Sundays\n}\n"],"mappings":"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","names":["format","dayOfWeek"]}
|