@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.
Files changed (240) hide show
  1. package/CHANGELOG.md +320 -0
  2. package/README.md +233 -0
  3. package/USAGE-GUIDE.md +800 -0
  4. package/dist/browser/async.js +15 -0
  5. package/dist/browser/async.js.map +1 -0
  6. package/dist/browser/chunk-4O7ZPIJN.js +383 -0
  7. package/dist/browser/chunk-4O7ZPIJN.js.map +1 -0
  8. package/dist/browser/chunk-75XNTC34.js +60 -0
  9. package/dist/browser/chunk-75XNTC34.js.map +1 -0
  10. package/dist/browser/chunk-C3D7YZVE.js +299 -0
  11. package/dist/browser/chunk-C3D7YZVE.js.map +1 -0
  12. package/dist/browser/chunk-CZL6C2EI.js +452 -0
  13. package/dist/browser/chunk-CZL6C2EI.js.map +1 -0
  14. package/dist/browser/chunk-D4FZFIVA.js +240 -0
  15. package/dist/browser/chunk-D4FZFIVA.js.map +1 -0
  16. package/dist/browser/chunk-IL7NG7IC.js +72 -0
  17. package/dist/browser/chunk-IL7NG7IC.js.map +1 -0
  18. package/dist/browser/chunk-NSBPE2FW.js +17 -0
  19. package/dist/browser/chunk-NSBPE2FW.js.map +1 -0
  20. package/dist/browser/chunk-SLQVNPTH.js +27 -0
  21. package/dist/browser/chunk-SLQVNPTH.js.map +1 -0
  22. package/dist/browser/chunk-WG7ILCUB.js +195 -0
  23. package/dist/browser/chunk-WG7ILCUB.js.map +1 -0
  24. package/dist/browser/chunk-WJA4JDMZ.js +278 -0
  25. package/dist/browser/chunk-WJA4JDMZ.js.map +1 -0
  26. package/dist/browser/chunk-ZFVYLUTT.js +65 -0
  27. package/dist/browser/chunk-ZFVYLUTT.js.map +1 -0
  28. package/dist/browser/chunk-ZYTSVMTI.js +263 -0
  29. package/dist/browser/chunk-ZYTSVMTI.js.map +1 -0
  30. package/dist/browser/dates.js +78 -0
  31. package/dist/browser/dates.js.map +1 -0
  32. package/dist/browser/environment-detection.js +21 -0
  33. package/dist/browser/environment-detection.js.map +1 -0
  34. package/dist/browser/environment.js +34 -0
  35. package/dist/browser/environment.js.map +1 -0
  36. package/dist/browser/errors.js +18 -0
  37. package/dist/browser/errors.js.map +1 -0
  38. package/dist/browser/index.js +412 -0
  39. package/dist/browser/index.js.map +1 -0
  40. package/dist/browser/math.js +51 -0
  41. package/dist/browser/math.js.map +1 -0
  42. package/dist/browser/number.js +10 -0
  43. package/dist/browser/number.js.map +1 -0
  44. package/dist/browser/objects.js +31 -0
  45. package/dist/browser/objects.js.map +1 -0
  46. package/dist/browser/strings.js +80 -0
  47. package/dist/browser/strings.js.map +1 -0
  48. package/dist/browser/validation-core.js +54 -0
  49. package/dist/browser/validation-core.js.map +1 -0
  50. package/dist/browser/validation-crypto.js +28 -0
  51. package/dist/browser/validation-crypto.js.map +1 -0
  52. package/dist/browser/validators.js +98 -0
  53. package/dist/browser/validators.js.map +1 -0
  54. package/dist/cjs/async.js +86 -0
  55. package/dist/cjs/async.js.map +1 -0
  56. package/dist/cjs/dates.js +285 -0
  57. package/dist/cjs/dates.js.map +1 -0
  58. package/dist/cjs/environment-detection.js +84 -0
  59. package/dist/cjs/environment-detection.js.map +1 -0
  60. package/dist/cjs/environment.js +261 -0
  61. package/dist/cjs/environment.js.map +1 -0
  62. package/dist/cjs/errors.js +80 -0
  63. package/dist/cjs/errors.js.map +1 -0
  64. package/dist/cjs/index.js +2035 -0
  65. package/dist/cjs/index.js.map +1 -0
  66. package/dist/cjs/math.js +388 -0
  67. package/dist/cjs/math.js.map +1 -0
  68. package/dist/cjs/number.js +37 -0
  69. package/dist/cjs/number.js.map +1 -0
  70. package/dist/cjs/objects.js +249 -0
  71. package/dist/cjs/objects.js.map +1 -0
  72. package/dist/cjs/strings.js +253 -0
  73. package/dist/cjs/strings.js.map +1 -0
  74. package/dist/cjs/validation.js +450 -0
  75. package/dist/cjs/validation.js.map +1 -0
  76. package/dist/esm/async.js +15 -0
  77. package/dist/esm/async.js.map +1 -0
  78. package/dist/esm/chunk-4O7ZPIJN.js +383 -0
  79. package/dist/esm/chunk-4O7ZPIJN.js.map +1 -0
  80. package/dist/esm/chunk-75XNTC34.js +60 -0
  81. package/dist/esm/chunk-75XNTC34.js.map +1 -0
  82. package/dist/esm/chunk-BDOBKBKA.js +72 -0
  83. package/dist/esm/chunk-BDOBKBKA.js.map +1 -0
  84. package/dist/esm/chunk-C3D7YZVE.js +299 -0
  85. package/dist/esm/chunk-C3D7YZVE.js.map +1 -0
  86. package/dist/esm/chunk-CZL6C2EI.js +452 -0
  87. package/dist/esm/chunk-CZL6C2EI.js.map +1 -0
  88. package/dist/esm/chunk-EBLSTOEC.js +263 -0
  89. package/dist/esm/chunk-EBLSTOEC.js.map +1 -0
  90. package/dist/esm/chunk-NSBPE2FW.js +17 -0
  91. package/dist/esm/chunk-NSBPE2FW.js.map +1 -0
  92. package/dist/esm/chunk-SLQVNPTH.js +27 -0
  93. package/dist/esm/chunk-SLQVNPTH.js.map +1 -0
  94. package/dist/esm/chunk-WG7ILCUB.js +195 -0
  95. package/dist/esm/chunk-WG7ILCUB.js.map +1 -0
  96. package/dist/esm/chunk-WJA4JDMZ.js +278 -0
  97. package/dist/esm/chunk-WJA4JDMZ.js.map +1 -0
  98. package/dist/esm/chunk-ZFVYLUTT.js +65 -0
  99. package/dist/esm/chunk-ZFVYLUTT.js.map +1 -0
  100. package/dist/esm/dates.js +78 -0
  101. package/dist/esm/dates.js.map +1 -0
  102. package/dist/esm/environment-detection.js +21 -0
  103. package/dist/esm/environment-detection.js.map +1 -0
  104. package/dist/esm/environment.js +34 -0
  105. package/dist/esm/environment.js.map +1 -0
  106. package/dist/esm/errors.js +18 -0
  107. package/dist/esm/errors.js.map +1 -0
  108. package/dist/esm/index.js +380 -0
  109. package/dist/esm/index.js.map +1 -0
  110. package/dist/esm/math.js +51 -0
  111. package/dist/esm/math.js.map +1 -0
  112. package/dist/esm/number.js +10 -0
  113. package/dist/esm/number.js.map +1 -0
  114. package/dist/esm/objects.js +31 -0
  115. package/dist/esm/objects.js.map +1 -0
  116. package/dist/esm/strings.js +80 -0
  117. package/dist/esm/strings.js.map +1 -0
  118. package/dist/esm/validation.js +54 -0
  119. package/dist/esm/validation.js.map +1 -0
  120. package/dist/node/async.js +93 -0
  121. package/dist/node/async.js.map +1 -0
  122. package/dist/node/csv.js +102 -0
  123. package/dist/node/csv.js.map +1 -0
  124. package/dist/node/data.js +880 -0
  125. package/dist/node/data.js.map +1 -0
  126. package/dist/node/dates.js +324 -0
  127. package/dist/node/dates.js.map +1 -0
  128. package/dist/node/environment.js +278 -0
  129. package/dist/node/environment.js.map +1 -0
  130. package/dist/node/errors.js +89 -0
  131. package/dist/node/errors.js.map +1 -0
  132. package/dist/node/index.js +3151 -0
  133. package/dist/node/index.js.map +1 -0
  134. package/dist/node/json.js +107 -0
  135. package/dist/node/json.js.map +1 -0
  136. package/dist/node/math.js +413 -0
  137. package/dist/node/math.js.map +1 -0
  138. package/dist/node/number.js +42 -0
  139. package/dist/node/number.js.map +1 -0
  140. package/dist/node/objects.js +264 -0
  141. package/dist/node/objects.js.map +1 -0
  142. package/dist/node/strings.js +293 -0
  143. package/dist/node/strings.js.map +1 -0
  144. package/dist/node/tree.js +89 -0
  145. package/dist/node/tree.js.map +1 -0
  146. package/dist/node/validation-core.js +477 -0
  147. package/dist/node/validation-core.js.map +1 -0
  148. package/dist/node/validation-crypto.js +179 -0
  149. package/dist/node/validation-crypto.js.map +1 -0
  150. package/dist/node/validation.js +677 -0
  151. package/dist/node/validation.js.map +1 -0
  152. package/dist/node/validators.js +123 -0
  153. package/dist/node/validators.js.map +1 -0
  154. package/dist/node-esm/async.js +15 -0
  155. package/dist/node-esm/async.js.map +1 -0
  156. package/dist/node-esm/chunk-3YOF7NPT.js +299 -0
  157. package/dist/node-esm/chunk-3YOF7NPT.js.map +1 -0
  158. package/dist/node-esm/chunk-64TBXJQS.js +263 -0
  159. package/dist/node-esm/chunk-64TBXJQS.js.map +1 -0
  160. package/dist/node-esm/chunk-75XNTC34.js +60 -0
  161. package/dist/node-esm/chunk-75XNTC34.js.map +1 -0
  162. package/dist/node-esm/chunk-C4PKXIPB.js +278 -0
  163. package/dist/node-esm/chunk-C4PKXIPB.js.map +1 -0
  164. package/dist/node-esm/chunk-CMDFZME3.js +452 -0
  165. package/dist/node-esm/chunk-CMDFZME3.js.map +1 -0
  166. package/dist/node-esm/chunk-DZZPUYMP.js +74 -0
  167. package/dist/node-esm/chunk-DZZPUYMP.js.map +1 -0
  168. package/dist/node-esm/chunk-HTSEHRHI.js +195 -0
  169. package/dist/node-esm/chunk-HTSEHRHI.js.map +1 -0
  170. package/dist/node-esm/chunk-JCAUVOPH.js +27 -0
  171. package/dist/node-esm/chunk-JCAUVOPH.js.map +1 -0
  172. package/dist/node-esm/chunk-KBHE3K2F.js +505 -0
  173. package/dist/node-esm/chunk-KBHE3K2F.js.map +1 -0
  174. package/dist/node-esm/chunk-LYTET5NX.js +65 -0
  175. package/dist/node-esm/chunk-LYTET5NX.js.map +1 -0
  176. package/dist/node-esm/chunk-PZ5AY32C.js +10 -0
  177. package/dist/node-esm/chunk-PZ5AY32C.js.map +1 -0
  178. package/dist/node-esm/chunk-UKGXL2QO.js +383 -0
  179. package/dist/node-esm/chunk-UKGXL2QO.js.map +1 -0
  180. package/dist/node-esm/chunk-XAEYT23H.js +164 -0
  181. package/dist/node-esm/chunk-XAEYT23H.js.map +1 -0
  182. package/dist/node-esm/csv.js +63 -0
  183. package/dist/node-esm/csv.js.map +1 -0
  184. package/dist/node-esm/data.js +32 -0
  185. package/dist/node-esm/data.js.map +1 -0
  186. package/dist/node-esm/dates.js +78 -0
  187. package/dist/node-esm/dates.js.map +1 -0
  188. package/dist/node-esm/environment.js +34 -0
  189. package/dist/node-esm/environment.js.map +1 -0
  190. package/dist/node-esm/errors.js +18 -0
  191. package/dist/node-esm/errors.js.map +1 -0
  192. package/dist/node-esm/index.js +426 -0
  193. package/dist/node-esm/index.js.map +1 -0
  194. package/dist/node-esm/json.js +68 -0
  195. package/dist/node-esm/json.js.map +1 -0
  196. package/dist/node-esm/math.js +51 -0
  197. package/dist/node-esm/math.js.map +1 -0
  198. package/dist/node-esm/number.js +10 -0
  199. package/dist/node-esm/number.js.map +1 -0
  200. package/dist/node-esm/objects.js +31 -0
  201. package/dist/node-esm/objects.js.map +1 -0
  202. package/dist/node-esm/strings.js +80 -0
  203. package/dist/node-esm/strings.js.map +1 -0
  204. package/dist/node-esm/tree.js +8 -0
  205. package/dist/node-esm/tree.js.map +1 -0
  206. package/dist/node-esm/validation-core.js +54 -0
  207. package/dist/node-esm/validation-core.js.map +1 -0
  208. package/dist/node-esm/validation-crypto.js +26 -0
  209. package/dist/node-esm/validation-crypto.js.map +1 -0
  210. package/dist/node-esm/validation.js +606 -0
  211. package/dist/node-esm/validation.js.map +1 -0
  212. package/dist/node-esm/validators.js +98 -0
  213. package/dist/node-esm/validators.js.map +1 -0
  214. package/dist/types/async-C8gvbSG-.d.ts +453 -0
  215. package/dist/types/async.d.ts +1 -0
  216. package/dist/types/csv.d.ts +226 -0
  217. package/dist/types/data.d.ts +1561 -0
  218. package/dist/types/dates-hTiE0Z11.d.ts +298 -0
  219. package/dist/types/dates.d.ts +1 -0
  220. package/dist/types/environment-B8eLS7KT.d.ts +420 -0
  221. package/dist/types/environment-detection.d.ts +102 -0
  222. package/dist/types/environment.d.ts +1 -0
  223. package/dist/types/errors.d.ts +147 -0
  224. package/dist/types/index.d.ts +211 -0
  225. package/dist/types/json.d.ts +284 -0
  226. package/dist/types/math-BQ9Lwdp7.d.ts +2060 -0
  227. package/dist/types/math.d.ts +1 -0
  228. package/dist/types/number-CYnQfLWj.d.ts +44 -0
  229. package/dist/types/number.d.ts +1 -0
  230. package/dist/types/objects-BohS8GCS.d.ts +1185 -0
  231. package/dist/types/objects.d.ts +1 -0
  232. package/dist/types/strings-CiqRPYLL.d.ts +1349 -0
  233. package/dist/types/strings.d.ts +1 -0
  234. package/dist/types/tree.d.ts +284 -0
  235. package/dist/types/validation-core-DfHF8rCG.d.ts +238 -0
  236. package/dist/types/validation-crypto-browser.d.ts +56 -0
  237. package/dist/types/validation-crypto-node.d.ts +31 -0
  238. package/dist/types/validation.d.ts +1 -0
  239. package/dist/types/validators.d.ts +216 -0
  240. package/package.json +253 -0
@@ -0,0 +1,450 @@
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/validation-core.ts
31
+ var validation_core_exports = {};
32
+ __export(validation_core_exports, {
33
+ generateAlphaNumericString: () => generateAlphaNumericString,
34
+ generateAlphaString: () => generateAlphaString,
35
+ generateComplexString: () => generateComplexString,
36
+ generateEmail: () => generateEmail,
37
+ generateHexColor: () => generateHexColor,
38
+ generatePassword: () => generatePassword,
39
+ generateRandomInteger: () => generateRandomInteger,
40
+ generateSpanishCIF: () => generateSpanishCIF,
41
+ generateSpanishIBAN: () => generateSpanishIBAN,
42
+ generateSpanishNIE: () => generateSpanishNIE,
43
+ generateSpanishNIF: () => generateSpanishNIF,
44
+ generateSpanishPostalCode: () => generateSpanishPostalCode,
45
+ generateUsername: () => generateUsername,
46
+ generateUsernameFromEmail: () => generateUsernameFromEmail,
47
+ isValidCIF: () => isValidCIF,
48
+ isValidEmail: () => isValidEmail,
49
+ isValidJSON: () => isValidJSON,
50
+ isValidNIE: () => isValidNIE,
51
+ isValidNIF: () => isValidNIF,
52
+ isValidSpanishIBAN: () => isValidSpanishIBAN,
53
+ isValidSpanishPhone: () => isValidSpanishPhone,
54
+ isValidSpanishPostalCode: () => isValidSpanishPostalCode,
55
+ isValidURL: () => isValidURL,
56
+ validateNIF: () => validateNIF
57
+ });
58
+ module.exports = __toCommonJS(validation_core_exports);
59
+ var import_validator = __toESM(require("validator"));
60
+ var randomInteger = (min, max) => {
61
+ return Math.floor(Math.random() * (max - min + 1)) + min;
62
+ };
63
+ var randomString = (length, pool) => {
64
+ const chars = pool || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
65
+ let result = "";
66
+ for (let i = 0; i < length; i++) {
67
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
68
+ }
69
+ return result;
70
+ };
71
+ var randomAlphaString = (length, casing) => {
72
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
73
+ let result = randomString(length, chars);
74
+ if (casing === "upper") result = result.toUpperCase();
75
+ if (casing === "lower") result = result.toLowerCase();
76
+ return result;
77
+ };
78
+ var randomAlphaNumericString = (length, casing) => {
79
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
80
+ let result = randomString(length, chars);
81
+ if (casing === "upper") result = result.toUpperCase();
82
+ if (casing === "lower") result = result.toLowerCase();
83
+ return result;
84
+ };
85
+ var pickone = (array) => {
86
+ return array[Math.floor(Math.random() * array.length)];
87
+ };
88
+ var randomBool = (likelihood = 50) => {
89
+ return Math.random() * 100 < likelihood;
90
+ };
91
+ var generateRandomInteger = (min = 0, max = 100) => {
92
+ return randomInteger(min, max);
93
+ };
94
+ var generateAlphaString = (options = {}) => {
95
+ const { length = 10, casing = void 0 } = options;
96
+ return randomAlphaString(length, casing);
97
+ };
98
+ var generateAlphaNumericString = (options = {}) => {
99
+ const { length = 10, casing = void 0 } = options;
100
+ return randomAlphaNumericString(length, casing);
101
+ };
102
+ var generateComplexString = (options = {}) => {
103
+ const { length = 10, casing: _casing = void 0 } = options;
104
+ return randomString(length);
105
+ };
106
+ var generateUsernameFromEmail = (email, randomDigits = 1) => {
107
+ if (!email || !email.includes("@"))
108
+ return `user${Math.floor(Math.random() * Math.pow(10, randomDigits))}`;
109
+ const localPart = email.split("@")[0];
110
+ const username = localPart.toLowerCase().replace(/[^a-z0-9]/g, "").substring(0, 12);
111
+ const randomSuffix = Math.floor(Math.random() * Math.pow(10, randomDigits));
112
+ return username + randomSuffix;
113
+ };
114
+ var generateUsername = (separator = "", randomDigits = 1, length = 8) => {
115
+ const adjectives = [
116
+ "cool",
117
+ "happy",
118
+ "smart",
119
+ "fast",
120
+ "nice",
121
+ "wild",
122
+ "free",
123
+ "bold",
124
+ "calm",
125
+ "brave"
126
+ ];
127
+ const nouns = ["cat", "dog", "bird", "fish", "lion", "bear", "wolf", "tiger", "eagle", "shark"];
128
+ const adjective = adjectives[Math.floor(Math.random() * adjectives.length)];
129
+ const noun = nouns[Math.floor(Math.random() * nouns.length)];
130
+ const randomSuffix = Math.floor(Math.random() * Math.pow(10, randomDigits));
131
+ const username = adjective + separator + noun + randomSuffix;
132
+ return username.length > length ? username.substring(0, length) : username;
133
+ };
134
+ var generateSpanishNIF = () => {
135
+ const number = randomInteger(1e7, 99999999);
136
+ const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
137
+ const letter = letters[number % 23];
138
+ return `${number}${letter}`;
139
+ };
140
+ var generateSpanishNIE = () => {
141
+ const prefixes = ["X", "Y", "Z"];
142
+ const selectedPrefix = pickone(prefixes);
143
+ const prefixValue = selectedPrefix === "X" ? 0 : selectedPrefix === "Y" ? 1 : 2;
144
+ const number = randomInteger(1e6, 9999999);
145
+ const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
146
+ const calculationNumber = prefixValue * 1e7 + number;
147
+ const letter = letters[calculationNumber % 23];
148
+ return `${selectedPrefix}${number}${letter}`;
149
+ };
150
+ var generateSpanishCIF = () => {
151
+ const organizationTypes = [
152
+ "A",
153
+ "B",
154
+ "C",
155
+ "D",
156
+ "E",
157
+ "F",
158
+ "G",
159
+ "H",
160
+ "J",
161
+ "N",
162
+ "P",
163
+ "Q",
164
+ "R",
165
+ "S",
166
+ "U",
167
+ "V",
168
+ "W"
169
+ ];
170
+ const organizationType = pickone(organizationTypes);
171
+ const number = randomInteger(1e6, 9999999).toString().padStart(7, "0");
172
+ let sum = 0;
173
+ for (let i = 0; i < 7; i++) {
174
+ let digit = parseInt(number[i]);
175
+ if (i % 2 === 0) {
176
+ digit *= 2;
177
+ if (digit > 9) digit = Math.floor(digit / 10) + digit % 10;
178
+ }
179
+ sum += digit;
180
+ }
181
+ const controlDigit = (10 - sum % 10) % 10;
182
+ const controlLetter = "JABCDEFGHI"[controlDigit];
183
+ const control = ["N", "P", "Q", "R", "S", "W"].includes(organizationType) ? controlLetter : randomBool() ? controlDigit.toString() : controlLetter;
184
+ return `${organizationType}${number}${control}`;
185
+ };
186
+ var generateSpanishPostalCode = () => {
187
+ const validPrefixes = [
188
+ "01",
189
+ "02",
190
+ "03",
191
+ "04",
192
+ "05",
193
+ "06",
194
+ "07",
195
+ "08",
196
+ "09",
197
+ "10",
198
+ "11",
199
+ "12",
200
+ "13",
201
+ "14",
202
+ "15",
203
+ "16",
204
+ "17",
205
+ "18",
206
+ "19",
207
+ "20",
208
+ "21",
209
+ "22",
210
+ "23",
211
+ "24",
212
+ "25",
213
+ "26",
214
+ "27",
215
+ "28",
216
+ "29",
217
+ "30",
218
+ "31",
219
+ "32",
220
+ "33",
221
+ "34",
222
+ "35",
223
+ "36",
224
+ "37",
225
+ "38",
226
+ "39",
227
+ "40",
228
+ "41",
229
+ "42",
230
+ "43",
231
+ "44",
232
+ "45",
233
+ "46",
234
+ "47",
235
+ "48",
236
+ "49",
237
+ "50",
238
+ "51",
239
+ "52"
240
+ ];
241
+ const firstDigit = pickone(validPrefixes);
242
+ const remainingDigits = randomString(3, "0123456789");
243
+ return `${firstDigit}${remainingDigits}`;
244
+ };
245
+ var generateSpanishIBAN = () => {
246
+ const bankCode = randomString(4, "0123456789");
247
+ const branchCode = randomString(4, "0123456789");
248
+ const controlDigits = randomString(2, "0123456789");
249
+ const accountNumber = randomString(10, "0123456789");
250
+ const accountPart = `${bankCode}${branchCode}${controlDigits}${accountNumber}`;
251
+ const rearranged = `${accountPart}142800`;
252
+ const checkDigits = String(98n - BigInt(rearranged) % 97n).padStart(2, "0");
253
+ return `ES${checkDigits}${bankCode}${branchCode}${controlDigits}${accountNumber}`;
254
+ };
255
+ var generateEmail = (domain) => {
256
+ const firstNames = [
257
+ "Ana",
258
+ "Carlos",
259
+ "Mar\xEDa",
260
+ "Jos\xE9",
261
+ "Laura",
262
+ "David",
263
+ "Carmen",
264
+ "Antonio",
265
+ "Isabel",
266
+ "Manuel"
267
+ ];
268
+ const lastNames = [
269
+ "Garc\xEDa",
270
+ "Gonz\xE1lez",
271
+ "L\xF3pez",
272
+ "Mart\xEDnez",
273
+ "S\xE1nchez",
274
+ "P\xE9rez",
275
+ "G\xF3mez",
276
+ "Mart\xEDn",
277
+ "Jim\xE9nez",
278
+ "Ruiz"
279
+ ];
280
+ const domains = ["gmail.com", "hotmail.com", "yahoo.es", "outlook.com", "test.com"];
281
+ const firstName = pickone(firstNames);
282
+ const lastName = pickone(lastNames);
283
+ const emailDomain = domain || pickone(domains);
284
+ const formats = [
285
+ `${firstName.toLowerCase()}.${lastName.toLowerCase()}@${emailDomain}`,
286
+ `${firstName.toLowerCase()}${randomInteger(1, 99)}@${emailDomain}`,
287
+ `${firstName.toLowerCase()}.${lastName.toLowerCase()}${randomInteger(1, 9)}@${emailDomain}`,
288
+ `${firstName.toLowerCase()}${lastName.toLowerCase()}@${emailDomain}`
289
+ ];
290
+ const username = pickone(formats);
291
+ return username.toLowerCase();
292
+ };
293
+ var generatePassword = (options = {}) => {
294
+ const {
295
+ length = 12,
296
+ includeUppercase = true,
297
+ includeLowercase = true,
298
+ includeNumbers = true,
299
+ includeSymbols = true
300
+ } = options;
301
+ const minLength = 4;
302
+ const maxLength = 30;
303
+ const targetLength = length || randomInteger(minLength, maxLength);
304
+ const upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
305
+ const lowerChars = "abcdefghijklmnopqrstuvwxyz";
306
+ const numberChars = "0123456789";
307
+ const symbolChars = "!@#$%^&*()_+-=[]{}|;:,.<>?";
308
+ let charset = "";
309
+ let requiredChars = "";
310
+ if (includeUppercase) {
311
+ charset += upperChars;
312
+ requiredChars += upperChars.charAt(Math.floor(Math.random() * upperChars.length));
313
+ }
314
+ if (includeLowercase) {
315
+ charset += lowerChars;
316
+ requiredChars += lowerChars.charAt(Math.floor(Math.random() * lowerChars.length));
317
+ }
318
+ if (includeNumbers) {
319
+ charset += numberChars;
320
+ requiredChars += numberChars.charAt(Math.floor(Math.random() * numberChars.length));
321
+ }
322
+ if (includeSymbols) {
323
+ charset += symbolChars;
324
+ requiredChars += symbolChars.charAt(Math.floor(Math.random() * symbolChars.length));
325
+ }
326
+ if (!charset) charset = "abcdefghijklmnopqrstuvwxyz";
327
+ let password = requiredChars;
328
+ const remainingLength = targetLength - requiredChars.length;
329
+ for (let i = 0; i < remainingLength; i++) {
330
+ password += charset.charAt(Math.floor(Math.random() * charset.length));
331
+ }
332
+ return password.split("").sort(() => Math.random() - 0.5).join("");
333
+ };
334
+ var generateHexColor = (shortFormat) => {
335
+ const hexChars = "0123456789ABCDEF";
336
+ const useShortFormat = shortFormat !== void 0 ? shortFormat : randomBool();
337
+ if (useShortFormat) {
338
+ const r = pickone(hexChars.split(""));
339
+ const g = pickone(hexChars.split(""));
340
+ const b = pickone(hexChars.split(""));
341
+ return `#${r}${g}${b}`;
342
+ } else {
343
+ const color = randomString(6, hexChars);
344
+ return `#${color}`;
345
+ }
346
+ };
347
+ var isValidNIF = (nif) => {
348
+ if (!nif || typeof nif !== "string") return false;
349
+ const cleanNif = nif.trim().toUpperCase();
350
+ const nifRegex = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
351
+ if (!nifRegex.test(cleanNif)) return false;
352
+ const number = parseInt(cleanNif.substring(0, 8));
353
+ const letter = cleanNif.charAt(8);
354
+ const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
355
+ const expectedLetter = letters[number % 23];
356
+ return letter === expectedLetter;
357
+ };
358
+ var validateNIF = isValidNIF;
359
+ var isValidNIE = (nie) => {
360
+ if (!nie || typeof nie !== "string") return false;
361
+ const cleanNie = nie.trim().toUpperCase();
362
+ const nieRegex = /^[XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
363
+ if (!nieRegex.test(cleanNie)) return false;
364
+ const prefix = cleanNie.charAt(0);
365
+ const number = parseInt(cleanNie.substring(1, 8));
366
+ const letter = cleanNie.charAt(8);
367
+ const prefixValue = prefix === "X" ? 0 : prefix === "Y" ? 1 : 2;
368
+ const calculationNumber = prefixValue * 1e7 + number;
369
+ const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
370
+ const expectedLetter = letters[calculationNumber % 23];
371
+ return letter === expectedLetter;
372
+ };
373
+ var isValidCIF = (cif) => {
374
+ if (!cif || typeof cif !== "string") return false;
375
+ const cleanCif = cif.trim().toUpperCase();
376
+ const cifRegex = /^[ABCDEFGHJNPQRSUVW][0-9]{7}[0-9A-J]$/;
377
+ if (!cifRegex.test(cleanCif)) return false;
378
+ const organizationType = cleanCif.charAt(0);
379
+ const number = cleanCif.substring(1, 8);
380
+ const control = cleanCif.charAt(8);
381
+ let sum = 0;
382
+ for (let i = 0; i < 7; i++) {
383
+ let digit = parseInt(number[i]);
384
+ if (i % 2 === 0) {
385
+ digit *= 2;
386
+ if (digit > 9) digit = Math.floor(digit / 10) + digit % 10;
387
+ }
388
+ sum += digit;
389
+ }
390
+ const controlDigit = (10 - sum % 10) % 10;
391
+ const controlLetter = "JABCDEFGHI"[controlDigit];
392
+ if (["N", "P", "Q", "R", "S", "W"].includes(organizationType)) {
393
+ return control === controlLetter;
394
+ } else {
395
+ return control === controlDigit.toString() || control === controlLetter;
396
+ }
397
+ };
398
+ var isValidSpanishPostalCode = (postalCode) => {
399
+ if (!postalCode || typeof postalCode !== "string") return false;
400
+ const cleanCode = postalCode.trim();
401
+ const postalCodeRegex = /^(0[1-9]|[1-4][0-9]|5[0-2])[0-9]{3}$/;
402
+ return postalCodeRegex.test(cleanCode);
403
+ };
404
+ var isValidSpanishPhone = (phone) => {
405
+ if (!phone || typeof phone !== "string") return false;
406
+ const cleanPhone = phone.replace(/[\s\-()]/g, "");
407
+ const phoneRegex = /^(?:\+34|0034|34)?([679][0-9]{8})$/;
408
+ return phoneRegex.test(cleanPhone);
409
+ };
410
+ var isValidEmail = (email) => {
411
+ if (!email || typeof email !== "string") return false;
412
+ return import_validator.default.isEmail(email);
413
+ };
414
+ var isValidURL = (url) => {
415
+ if (!url || typeof url !== "string") return false;
416
+ if (import_validator.default.isURL(url, { require_protocol: true })) {
417
+ return true;
418
+ }
419
+ try {
420
+ const urlObj = new URL(url);
421
+ return urlObj.hostname === "localhost" || urlObj.hostname === "127.0.0.1";
422
+ } catch {
423
+ return false;
424
+ }
425
+ };
426
+ var isValidJSON = (str) => {
427
+ if (!str || typeof str !== "string") return false;
428
+ try {
429
+ JSON.parse(str);
430
+ return true;
431
+ } catch {
432
+ return false;
433
+ }
434
+ };
435
+ var isValidSpanishIBAN = (iban) => {
436
+ if (!iban || typeof iban !== "string") return false;
437
+ const cleanIban = iban.replace(/\s/g, "").toUpperCase();
438
+ const ibanRegex = /^ES[0-9]{22}$/;
439
+ if (!ibanRegex.test(cleanIban)) return false;
440
+ const rearranged = cleanIban.substring(4) + cleanIban.substring(0, 4);
441
+ const numericString = rearranged.replace(/[A-Z]/g, (letter) => {
442
+ return (letter.charCodeAt(0) - 55).toString();
443
+ });
444
+ let remainder = 0;
445
+ for (let i = 0; i < numericString.length; i++) {
446
+ remainder = (remainder * 10 + parseInt(numericString[i])) % 97;
447
+ }
448
+ return remainder === 1;
449
+ };
450
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/universal/validation-core.ts"],"sourcesContent":["/**\n * Core validation utilities - Universal (Browser + Node.js compatible)\n * NO crypto dependencies - safe for all environments\n */\n\nimport validator from 'validator'\n\n// =============================================================================\n// RANDOM GENERATORS (crypto-free)\n// =============================================================================\n\nconst randomInteger = (min: number, max: number): number => {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nconst randomString = (length: number, pool?: string): string => {\n const chars = pool || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n let result = ''\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length))\n }\n return result\n}\n\nconst randomAlphaString = (length: number, casing?: 'upper' | 'lower'): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'\n let result = randomString(length, chars)\n if (casing === 'upper') result = result.toUpperCase()\n if (casing === 'lower') result = result.toLowerCase()\n return result\n}\n\nconst randomAlphaNumericString = (length: number, casing?: 'upper' | 'lower'): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n let result = randomString(length, chars)\n if (casing === 'upper') result = result.toUpperCase()\n if (casing === 'lower') result = result.toLowerCase()\n return result\n}\n\nconst pickone = <T>(array: T[]): T => {\n return array[Math.floor(Math.random() * array.length)]\n}\n\nconst randomBool = (likelihood = 50): boolean => {\n return Math.random() * 100 < likelihood\n}\n\n// =============================================================================\n// GENERATORS - Random data generators (crypto-free)\n// =============================================================================\n\n/**\n * Generates a random integer between min and max (inclusive)\n * @param min - Minimum value (default: 0)\n * @param max - Maximum value (default: 100)\n * @returns Random integer between min and max\n * @example\n * ```ts\n * const dice = generateRandomInteger(1, 6) // 1, 2, 3, 4, 5, or 6\n * const percent = generateRandomInteger(0, 100) // 0 to 100\n * const id = generateRandomInteger(1000, 9999) // 4-digit ID\n * ```\n */\nexport const generateRandomInteger = (min = 0, max = 100): number => {\n return randomInteger(min, max)\n}\n\n/**\n * Generates a random alphabetic string (letters only)\n * @param options - Configuration object\n * @param options.length - Length of the string (default: 10)\n * @param options.casing - Case transformation: 'upper', 'lower', or undefined\n * @returns Random alphabetic string\n * @example\n * ```ts\n * const name = generateAlphaString({ length: 8 }) // \"AbCdEfGh\"\n * const upper = generateAlphaString({ length: 5, casing: 'upper' }) // \"ABCDE\"\n * const lower = generateAlphaString({ length: 3, casing: 'lower' }) // \"abc\"\n * ```\n */\nexport const generateAlphaString = (\n options: { length?: number; casing?: 'upper' | 'lower' | undefined } = {}\n): string => {\n const { length = 10, casing = undefined } = options\n return randomAlphaString(length, casing)\n}\n\n/**\n * Generates a random alphanumeric string (letters and numbers)\n * @param options - Configuration object\n * @param options.length - Length of the string (default: 10)\n * @param options.casing - Case transformation: 'upper', 'lower', or undefined\n * @returns Random alphanumeric string\n * @example\n * ```ts\n * const token = generateAlphaNumericString({ length: 12 }) // \"aB3cD4eF5gH6\"\n * const code = generateAlphaNumericString({ length: 6, casing: 'upper' }) // \"A1B2C3\"\n * const key = generateAlphaNumericString({ length: 8, casing: 'lower' }) // \"a1b2c3d4\"\n * ```\n */\nexport const generateAlphaNumericString = (\n options: { length?: number; casing?: 'upper' | 'lower' | undefined } = {}\n): string => {\n const { length = 10, casing = undefined } = options\n return randomAlphaNumericString(length, casing)\n}\n\n/**\n * Generates a random complex string with all characters (letters, numbers, symbols)\n * @param options - Configuration object\n * @param options.length - Length of the string (default: 10)\n * @param options.casing - Case transformation (currently not applied to symbols)\n * @returns Random complex string\n * @example\n * ```ts\n * const password = generateComplexString({ length: 16 }) // \"aB3#cD4$eF5%gH6\"\n * const secret = generateComplexString({ length: 32 }) // Complex 32-char string\n * const temp = generateComplexString() // 10 characters by default\n * ```\n */\nexport const generateComplexString = (\n options: { length?: number; casing?: 'upper' | 'lower' | undefined } = {}\n): string => {\n const { length = 10, casing: _casing = undefined } = options\n return randomString(length)\n}\n\n/**\n * Generates a username from an email address\n * @param email - Email address to extract username from\n * @param randomDigits - Number of random digits to append (default: 1)\n * @returns Username derived from email with random suffix\n * @example\n * ```ts\n * const user1 = generateUsernameFromEmail('john.doe@example.com', 2) // \"johndoe47\"\n * const user2 = generateUsernameFromEmail('maria-garcia@test.org', 3) // \"mariagarcia823\"\n * const fallback = generateUsernameFromEmail('invalid-email', 2) // \"user42\"\n * ```\n */\nexport const generateUsernameFromEmail = (email: string, randomDigits = 1): string => {\n if (!email || !email.includes('@'))\n return `user${Math.floor(Math.random() * Math.pow(10, randomDigits))}`\n\n const localPart = email.split('@')[0]\n const username = localPart\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .substring(0, 12)\n\n const randomSuffix = Math.floor(Math.random() * Math.pow(10, randomDigits))\n return username + randomSuffix\n}\n\n/**\n * Generates a random username with adjective + noun pattern\n * @param separator - Character to separate adjective and noun (default: '')\n * @param randomDigits - Number of random digits to append (default: 1)\n * @param length - Maximum length of username (default: 8)\n * @returns Random username like \"coolcat5\" or \"brave_wolf3\"\n * @example\n * ```ts\n * const user1 = generateUsername() // \"coolcat5\"\n * const user2 = generateUsername('_', 2) // \"brave_wolf83\"\n * const user3 = generateUsername('-', 3, 15) // \"smart-eagle247\"\n * ```\n */\nexport const generateUsername = (separator = '', randomDigits = 1, length = 8): string => {\n const adjectives = [\n 'cool',\n 'happy',\n 'smart',\n 'fast',\n 'nice',\n 'wild',\n 'free',\n 'bold',\n 'calm',\n 'brave',\n ]\n const nouns = ['cat', 'dog', 'bird', 'fish', 'lion', 'bear', 'wolf', 'tiger', 'eagle', 'shark']\n\n const adjective = adjectives[Math.floor(Math.random() * adjectives.length)]\n const noun = nouns[Math.floor(Math.random() * nouns.length)]\n const randomSuffix = Math.floor(Math.random() * Math.pow(10, randomDigits))\n\n const username = adjective + separator + noun + randomSuffix\n\n return username.length > length ? username.substring(0, length) : username\n}\n\n// =============================================================================\n// SPANISH GENERATORS\n// =============================================================================\n\n/**\n * Generates a valid Spanish NIF (Número de Identificación Fiscal)\n * @returns A valid NIF string in format '12345678Z'\n * @example\n * ```ts\n * const nif1 = generateSpanishNIF() // \"87654321T\"\n * const nif2 = generateSpanishNIF() // \"12345678Z\"\n *\n * // Verify it's valid\n * const nif = generateSpanishNIF()\n * console.log(validateNIF(nif)) // true\n * ```\n */\nexport const generateSpanishNIF = (): string => {\n const number = randomInteger(10000000, 99999999)\n const letters = 'TRWAGMYFPDXBNJZSQVHLCKE'\n const letter = letters[number % 23]\n return `${number}${letter}`\n}\n\n/**\n * Generates a valid Spanish NIE (Número de Identidad de Extranjero)\n * @returns A valid NIE string in format 'X1234567L'\n * @example\n * ```ts\n * const nie1 = generateSpanishNIE() // \"X1234567L\"\n * const nie2 = generateSpanishNIE() // \"Y9876543R\"\n * const nie3 = generateSpanishNIE() // \"Z2468135T\"\n *\n * // Verify it's valid\n * const nie = generateSpanishNIE()\n * console.log(isValidNIE(nie)) // true\n * ```\n */\nexport const generateSpanishNIE = (): string => {\n const prefixes = ['X', 'Y', 'Z']\n const selectedPrefix = pickone(prefixes)\n const prefixValue = selectedPrefix === 'X' ? 0 : selectedPrefix === 'Y' ? 1 : 2\n const number = randomInteger(1000000, 9999999)\n const letters = 'TRWAGMYFPDXBNJZSQVHLCKE'\n const calculationNumber = prefixValue * 10000000 + number\n const letter = letters[calculationNumber % 23]\n return `${selectedPrefix}${number}${letter}`\n}\n\n/**\n * Generates a valid Spanish CIF (Código de Identificación Fiscal)\n * @returns A valid CIF string in format 'A12345674' or 'B87654321'\n * @example\n * ```ts\n * const cif1 = generateSpanishCIF() // \"A12345674\"\n * const cif2 = generateSpanishCIF() // \"B87654321\"\n * const cif3 = generateSpanishCIF() // \"G28456789\"\n *\n * // Verify it's valid\n * const cif = generateSpanishCIF()\n * console.log(isValidCIF(cif)) // true\n *\n * // Different organization types\n * // A,B,E,H = Sociedades Anónimas/Limitadas\n * // G,U = Fundaciones, asociaciones\n * // N,P,Q,R,S,W = Organismos públicos\n * ```\n */\nexport const generateSpanishCIF = (): string => {\n const organizationTypes = [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'J',\n 'N',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'U',\n 'V',\n 'W',\n ]\n const organizationType = pickone(organizationTypes)\n const number = randomInteger(1000000, 9999999).toString().padStart(7, '0')\n\n // Calculate control digit\n let sum = 0\n for (let i = 0; i < 7; i++) {\n let digit = parseInt(number[i])\n if (i % 2 === 0) {\n digit *= 2\n if (digit > 9) digit = Math.floor(digit / 10) + (digit % 10)\n }\n sum += digit\n }\n\n const controlDigit = (10 - (sum % 10)) % 10\n const controlLetter = 'JABCDEFGHI'[controlDigit]\n const control = ['N', 'P', 'Q', 'R', 'S', 'W'].includes(organizationType)\n ? controlLetter\n : randomBool()\n ? controlDigit.toString()\n : controlLetter\n\n return `${organizationType}${number}${control}`\n}\n\nexport const generateSpanishPostalCode = (): string => {\n const validPrefixes = [\n '01',\n '02',\n '03',\n '04',\n '05',\n '06',\n '07',\n '08',\n '09',\n '10',\n '11',\n '12',\n '13',\n '14',\n '15',\n '16',\n '17',\n '18',\n '19',\n '20',\n '21',\n '22',\n '23',\n '24',\n '25',\n '26',\n '27',\n '28',\n '29',\n '30',\n '31',\n '32',\n '33',\n '34',\n '35',\n '36',\n '37',\n '38',\n '39',\n '40',\n '41',\n '42',\n '43',\n '44',\n '45',\n '46',\n '47',\n '48',\n '49',\n '50',\n '51',\n '52',\n ]\n\n const firstDigit = pickone(validPrefixes)\n const remainingDigits = randomString(3, '0123456789')\n return `${firstDigit}${remainingDigits}`\n}\n\nexport const generateSpanishIBAN = (): string => {\n const bankCode = randomString(4, '0123456789')\n const branchCode = randomString(4, '0123456789')\n const controlDigits = randomString(2, '0123456789')\n const accountNumber = randomString(10, '0123456789')\n\n // Calculate IBAN check digits\n const accountPart = `${bankCode}${branchCode}${controlDigits}${accountNumber}`\n const rearranged = `${accountPart}142800`\n\n // Calculate mod 97\n const checkDigits = String(98n - (BigInt(rearranged) % 97n)).padStart(2, '0')\n\n return `ES${checkDigits}${bankCode}${branchCode}${controlDigits}${accountNumber}`\n}\n\n// =============================================================================\n// GENERAL GENERATORS\n// =============================================================================\n\nexport const generateEmail = (domain?: string): string => {\n const firstNames = [\n 'Ana',\n 'Carlos',\n 'María',\n 'José',\n 'Laura',\n 'David',\n 'Carmen',\n 'Antonio',\n 'Isabel',\n 'Manuel',\n ]\n const lastNames = [\n 'García',\n 'González',\n 'López',\n 'Martínez',\n 'Sánchez',\n 'Pérez',\n 'Gómez',\n 'Martín',\n 'Jiménez',\n 'Ruiz',\n ]\n const domains = ['gmail.com', 'hotmail.com', 'yahoo.es', 'outlook.com', 'test.com']\n\n const firstName = pickone(firstNames)\n const lastName = pickone(lastNames)\n const emailDomain = domain || pickone(domains)\n\n const formats = [\n `${firstName.toLowerCase()}.${lastName.toLowerCase()}@${emailDomain}`,\n `${firstName.toLowerCase()}${randomInteger(1, 99)}@${emailDomain}`,\n `${firstName.toLowerCase()}.${lastName.toLowerCase()}${randomInteger(1, 9)}@${emailDomain}`,\n `${firstName.toLowerCase()}${lastName.toLowerCase()}@${emailDomain}`,\n ]\n\n const username = pickone(formats)\n return username.toLowerCase()\n}\n\nexport const generatePassword = (\n options: {\n length?: number\n includeUppercase?: boolean\n includeLowercase?: boolean\n includeNumbers?: boolean\n includeSymbols?: boolean\n } = {}\n): string => {\n const {\n length = 12,\n includeUppercase = true,\n includeLowercase = true,\n includeNumbers = true,\n includeSymbols = true,\n } = options\n\n const minLength = 4\n const maxLength = 30\n const targetLength = length || randomInteger(minLength, maxLength)\n\n const upperChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const lowerChars = 'abcdefghijklmnopqrstuvwxyz'\n const numberChars = '0123456789'\n const symbolChars = '!@#$%^&*()_+-=[]{}|;:,.<>?'\n\n let charset = ''\n let requiredChars = ''\n\n if (includeUppercase) {\n charset += upperChars\n requiredChars += upperChars.charAt(Math.floor(Math.random() * upperChars.length))\n }\n if (includeLowercase) {\n charset += lowerChars\n requiredChars += lowerChars.charAt(Math.floor(Math.random() * lowerChars.length))\n }\n if (includeNumbers) {\n charset += numberChars\n requiredChars += numberChars.charAt(Math.floor(Math.random() * numberChars.length))\n }\n if (includeSymbols) {\n charset += symbolChars\n requiredChars += symbolChars.charAt(Math.floor(Math.random() * symbolChars.length))\n }\n\n if (!charset) charset = 'abcdefghijklmnopqrstuvwxyz'\n\n let password = requiredChars\n const remainingLength = targetLength - requiredChars.length\n\n for (let i = 0; i < remainingLength; i++) {\n password += charset.charAt(Math.floor(Math.random() * charset.length))\n }\n\n return password\n .split('')\n .sort(() => Math.random() - 0.5)\n .join('')\n}\n\nexport const generateHexColor = (shortFormat?: boolean): string => {\n const hexChars = '0123456789ABCDEF'\n const useShortFormat = shortFormat !== undefined ? shortFormat : randomBool()\n\n if (useShortFormat) {\n const r = pickone(hexChars.split(''))\n const g = pickone(hexChars.split(''))\n const b = pickone(hexChars.split(''))\n return `#${r}${g}${b}`\n } else {\n const color = randomString(6, hexChars)\n return `#${color}`\n }\n}\n\n// =============================================================================\n// VALIDATORS\n// =============================================================================\n\n/**\n * Validates a Spanish NIF (Número de Identificación Fiscal)\n * @param nif - The NIF string to validate\n * @returns true if the NIF is valid, false otherwise\n * @example\n * ```ts\n * console.log(isValidNIF('12345678Z')) // true\n * console.log(isValidNIF('87654321T')) // true\n * console.log(isValidNIF('12345678A')) // false (wrong letter)\n * console.log(isValidNIF('1234567Z')) // false (wrong length)\n * console.log(isValidNIF('')) // false (empty)\n *\n * // Case insensitive and handles whitespace\n * console.log(isValidNIF(' 12345678z ')) // true\n * ```\n */\nexport const isValidNIF = (nif: string): boolean => {\n if (!nif || typeof nif !== 'string') return false\n\n const cleanNif = nif.trim().toUpperCase()\n const nifRegex = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]$/\n\n if (!nifRegex.test(cleanNif)) return false\n\n const number = parseInt(cleanNif.substring(0, 8))\n const letter = cleanNif.charAt(8)\n const letters = 'TRWAGMYFPDXBNJZSQVHLCKE'\n const expectedLetter = letters[number % 23]\n\n return letter === expectedLetter\n}\n\n/**\n * Alias for isValidNIF - validates a Spanish NIF\n * @param nif - The NIF string to validate\n * @returns true if the NIF is valid, false otherwise\n * @example\n * ```ts\n * console.log(validateNIF('12345678Z')) // true\n * // Same functionality as isValidNIF\n * ```\n */\nexport const validateNIF = isValidNIF\n\n/**\n * Validates a Spanish NIE (Número de Identidad de Extranjero)\n * @param nie - The NIE string to validate\n * @returns true if the NIE is valid, false otherwise\n * @example\n * ```ts\n * console.log(isValidNIE('X1234567L')) // true\n * console.log(isValidNIE('Y9876543R')) // true\n * console.log(isValidNIE('Z2468135T')) // true\n * console.log(isValidNIE('X1234567A')) // false (wrong letter)\n * console.log(isValidNIE('W1234567L')) // false (invalid prefix)\n * console.log(isValidNIE('X123456L')) // false (wrong length)\n *\n * // Case insensitive and handles whitespace\n * console.log(isValidNIE(' x1234567l ')) // true\n * ```\n */\nexport const isValidNIE = (nie: string): boolean => {\n if (!nie || typeof nie !== 'string') return false\n\n const cleanNie = nie.trim().toUpperCase()\n const nieRegex = /^[XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/\n\n if (!nieRegex.test(cleanNie)) return false\n\n const prefix = cleanNie.charAt(0)\n const number = parseInt(cleanNie.substring(1, 8))\n const letter = cleanNie.charAt(8)\n\n const prefixValue = prefix === 'X' ? 0 : prefix === 'Y' ? 1 : 2\n const calculationNumber = prefixValue * 10000000 + number\n const letters = 'TRWAGMYFPDXBNJZSQVHLCKE'\n const expectedLetter = letters[calculationNumber % 23]\n\n return letter === expectedLetter\n}\n\nexport const isValidCIF = (cif: string): boolean => {\n if (!cif || typeof cif !== 'string') return false\n\n const cleanCif = cif.trim().toUpperCase()\n const cifRegex = /^[ABCDEFGHJNPQRSUVW][0-9]{7}[0-9A-J]$/\n\n if (!cifRegex.test(cleanCif)) return false\n\n const organizationType = cleanCif.charAt(0)\n const number = cleanCif.substring(1, 8)\n const control = cleanCif.charAt(8)\n\n let sum = 0\n for (let i = 0; i < 7; i++) {\n let digit = parseInt(number[i])\n if (i % 2 === 0) {\n digit *= 2\n if (digit > 9) digit = Math.floor(digit / 10) + (digit % 10)\n }\n sum += digit\n }\n\n const controlDigit = (10 - (sum % 10)) % 10\n const controlLetter = 'JABCDEFGHI'[controlDigit]\n\n if (['N', 'P', 'Q', 'R', 'S', 'W'].includes(organizationType)) {\n return control === controlLetter\n } else {\n return control === controlDigit.toString() || control === controlLetter\n }\n}\n\nexport const isValidSpanishPostalCode = (postalCode: string): boolean => {\n if (!postalCode || typeof postalCode !== 'string') return false\n\n const cleanCode = postalCode.trim()\n const postalCodeRegex = /^(0[1-9]|[1-4][0-9]|5[0-2])[0-9]{3}$/\n\n return postalCodeRegex.test(cleanCode)\n}\n\nexport const isValidSpanishPhone = (phone: string): boolean => {\n if (!phone || typeof phone !== 'string') return false\n\n const cleanPhone = phone.replace(/[\\s\\-()]/g, '')\n const phoneRegex = /^(?:\\+34|0034|34)?([679][0-9]{8})$/\n\n return phoneRegex.test(cleanPhone)\n}\n\nexport const isValidEmail = (email: string): boolean => {\n if (!email || typeof email !== 'string') return false\n return validator.isEmail(email)\n}\n\nexport const isValidURL = (url: string): boolean => {\n if (!url || typeof url !== 'string') return false\n\n if (validator.isURL(url, { require_protocol: true })) {\n return true\n }\n\n try {\n const urlObj = new URL(url)\n return urlObj.hostname === 'localhost' || urlObj.hostname === '127.0.0.1'\n } catch {\n return false\n }\n}\n\nexport const isValidJSON = (str: string): boolean => {\n if (!str || typeof str !== 'string') return false\n try {\n JSON.parse(str)\n return true\n } catch {\n return false\n }\n}\n\nexport const isValidSpanishIBAN = (iban: string): boolean => {\n if (!iban || typeof iban !== 'string') return false\n\n const cleanIban = iban.replace(/\\s/g, '').toUpperCase()\n const ibanRegex = /^ES[0-9]{22}$/\n\n if (!ibanRegex.test(cleanIban)) return false\n\n const rearranged = cleanIban.substring(4) + cleanIban.substring(0, 4)\n const numericString = rearranged.replace(/[A-Z]/g, letter => {\n return (letter.charCodeAt(0) - 55).toString()\n })\n\n let remainder = 0\n for (let i = 0; i < numericString.length; i++) {\n remainder = (remainder * 10 + parseInt(numericString[i])) % 97\n }\n\n return remainder === 1\n}\n"],"mappings":"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","names":["validator"]}
@@ -0,0 +1,15 @@
1
+ import {
2
+ handleOperation,
3
+ runBatch,
4
+ sleep,
5
+ wait
6
+ } from "./chunk-ZFVYLUTT.js";
7
+ import "./chunk-75XNTC34.js";
8
+ import "./chunk-NSBPE2FW.js";
9
+ export {
10
+ handleOperation,
11
+ runBatch,
12
+ sleep,
13
+ wait
14
+ };
15
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}